Add mock modem service operations in Telephony
Bug: 205101043
Bug: 203241555
Test: manual
Change-Id: Idd34e908ca625a6bf1ba9bd9a115b15315560936
Merged-In: Idd34e908ca625a6bf1ba9bd9a115b15315560936
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 4cd0a4d..2aedd59 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -11088,4 +11088,37 @@
Binder.restoreCallingIdentity(identity);
}
}
+
+ /**
+ * Sets the modem service class Name that Telephony will bind to.
+ *
+ * @param serviceName The class name of the modem service.
+ * @return true if the operation is succeed, otherwise false.
+ */
+ public boolean setModemService(String serviceName) {
+ Log.d(LOG_TAG, "setModemService - " + serviceName);
+ TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(), "setModemService");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setModemService");
+ return mPhoneConfigurationManager.setModemService(serviceName);
+ }
+
+ /**
+ * Return the class name of the currently bounded modem service.
+ *
+ * @return the class name of the modem service.
+ */
+ public String getModemService() {
+ String result;
+ Log.d(LOG_TAG, "getModemService");
+ TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(), "getModemService");
+ TelephonyPermissions
+ .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
+ mApp, SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "getModemService");
+ result = mPhoneConfigurationManager.getModemService();
+ Log.d(LOG_TAG, "result = " + result);
+ return result;
+ }
}
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index dbeb7ce..7eb3bd9 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -151,6 +151,10 @@
private static final String UCE_SET_CAPABILITY_REQUEST_TIMEOUT =
"set-capabilities-request-timeout";
+ private static final String RADIO_SUBCOMMAND = "radio";
+ private static final String RADIO_SET_MODEM_SERVICE = "set-modem-service";
+ private static final String RADIO_GET_MODEM_SERVICE = "get-modem-service";
+
// Check if a package has carrier privileges on any SIM, regardless of subId/phoneId.
private static final String HAS_CARRIER_PRIVILEGES_COMMAND = "has-carrier-privileges";
@@ -357,6 +361,8 @@
pw.println(" Get the Allowed Network Types.");
pw.println(" set-allowed-network-types-for-users");
pw.println(" Set the Allowed Network Types.");
+ pw.println(" radio");
+ pw.println(" Radio Commands.");
onHelpIms();
onHelpUce();
onHelpEmergencyNumber();
@@ -368,6 +374,7 @@
onHelpD2D();
onHelpDisableOrEnablePhysicalSubscription();
onHelpAllowedNetworkTypes();
+ onHelpRadio();
}
private void onHelpD2D() {
@@ -656,6 +663,21 @@
pw.println(" LTE only : 01000001000000000000");
}
+ private void onHelpRadio() {
+ PrintWriter pw = getOutPrintWriter();
+ pw.println("Radio Commands:");
+ pw.println(" radio set-modem-service [-s SERVICE_NAME]");
+ pw.println(" Sets the class name of modem service defined in SERVICE_NAME");
+ pw.println(" to be the bound. Options are:");
+ pw.println(" -s: the service name that the modem service should be bound for.");
+ pw.println(" If no option is specified, it will bind to the default.");
+ pw.println(" radio get-modem-service");
+ pw.println(" Gets the service name of the currently defined modem service.");
+ pw.println(" If it is binding to default, 'default' returns.");
+ pw.println(" If it doesn't bind to any modem service for some reasons,");
+ pw.println(" the result would be 'unknown'.");
+ }
+
private int handleImsCommand() {
String arg = getNextArg();
if (arg == null) {
@@ -2725,4 +2747,69 @@
return -1;
}
}
+
+ private int handleRadioSetModemServiceCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String serviceName = null;
+
+ String opt;
+ while ((opt = getNextOption()) != null) {
+ switch (opt) {
+ case "-s": {
+ serviceName = getNextArgRequired();
+ break;
+ }
+ }
+ }
+
+ try {
+ boolean result = mInterface.setModemService(serviceName);
+ if (VDBG) {
+ Log.v(LOG_TAG,
+ "RadioSetModemService " + serviceName + ", result = " + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG,
+ "RadioSetModemService: " + serviceName + ", error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
+ private int handleRadioGetModemServiceCommand() {
+ PrintWriter errPw = getErrPrintWriter();
+ String result;
+
+ try {
+ result = mInterface.getModemService();
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ if (VDBG) {
+ Log.v(LOG_TAG, "RadioGetModemService, result = " + result);
+ }
+ return 0;
+ }
+
+ private int handleRadioCommand() {
+ String arg = getNextArg();
+ if (arg == null) {
+ onHelpRadio();
+ return 0;
+ }
+
+ switch (arg) {
+ case RADIO_SET_MODEM_SERVICE:
+ return handleRadioSetModemServiceCommand();
+
+ case RADIO_GET_MODEM_SERVICE:
+ return handleRadioGetModemServiceCommand();
+ }
+
+ return -1;
+ }
}