Add API to set satellite service package from CTS

Bug: 274777761
Test: Call/SMS/MMS with live network.
atest android.telephony.cts.SatelliteManagerTest
atest android.telephony.satellite.cts.SatelliteManagerTestOnMockService

Change-Id: I235f93e4420debcce6b702b1009c8f043886cf22
Merged-In: I235f93e4420debcce6b702b1009c8f043886cf22
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 14eba74..53c7f4e 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -179,6 +179,8 @@
     private static final String THERMAL_MITIGATION_COMMAND = "thermal-mitigation";
     private static final String ALLOW_THERMAL_MITIGATION_PACKAGE_SUBCOMMAND = "allow-package";
     private static final String DISALLOW_THERMAL_MITIGATION_PACKAGE_SUBCOMMAND = "disallow-package";
+    private static final String SET_SATELLITE_SERVICE_PACKAGE_NAME =
+            "set-satellite-service-package-name";
 
     private static final String INVALID_ENTRY_ERROR = "An emergency number (only allow '0'-'9', "
             + "'*', '#' or '+') needs to be specified after -a in the command ";
@@ -360,6 +362,8 @@
                 return setCarrierServicePackageOverride();
             case CLEAR_CARRIER_SERVICE_PACKAGE_OVERRIDE:
                 return clearCarrierServicePackageOverride();
+            case SET_SATELLITE_SERVICE_PACKAGE_NAME:
+                return handleSetSatelliteServicePackageNameCommand();
             default: {
                 return handleDefaultCommands(cmd);
             }
@@ -413,6 +417,7 @@
         onHelpAllowedNetworkTypes();
         onHelpRadio();
         onHelpImei();
+        onHelpSatellite();
     }
 
     private void onHelpD2D() {
@@ -733,6 +738,16 @@
         pw.println("    the result would be 'unknown'.");
     }
 
+    private void onHelpSatellite() {
+        PrintWriter pw = getOutPrintWriter();
+        pw.println("Satellite Commands:");
+        pw.println("  set-satellite-service-package-name [-s SERVICE_PACKAGE_NAME]");
+        pw.println("    Sets the package name of satellite service defined in");
+        pw.println("    SERVICE_PACKAGE_NAME to be the bound. Options are:");
+        pw.println("      -s: the satellite service package name that Telephony will bind to.");
+        pw.println("          If no option is specified, it will bind to the default.");
+    }
+
     private void onHelpImei() {
         PrintWriter pw = getOutPrintWriter();
         pw.println("IMEI Commands:");
@@ -3069,6 +3084,38 @@
         return -1;
     }
 
+    private int handleSetSatelliteServicePackageNameCommand() {
+        PrintWriter errPw = getErrPrintWriter();
+        String serviceName = null;
+
+        String opt;
+        while ((opt = getNextOption()) != null) {
+            switch (opt) {
+                case "-s": {
+                    serviceName = getNextArgRequired();
+                    break;
+                }
+            }
+        }
+        Log.d(LOG_TAG, "handleSetSatelliteServicePackageNameCommand: serviceName="
+                + serviceName);
+
+        try {
+            boolean result = mInterface.setSatelliteServicePackageName(serviceName);
+            if (VDBG) {
+                Log.v(LOG_TAG, "SetSatelliteServicePackageName " + serviceName
+                        + ", result = " + result);
+            }
+            getOutPrintWriter().println(result);
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "SetSatelliteServicePackageName: " + serviceName
+                    + ", error = " + e.getMessage());
+            errPw.println("Exception: " + e.getMessage());
+            return -1;
+        }
+        return 0;
+    }
+
     private int handleCarrierRestrictionStatusCommand() {
         try {
             String MOCK_MODEM_SERVICE_NAME = "android.telephony.mockmodem.MockModemService";