Add a has-carrier-privileges shell command.
This can be used from host-side tests to query at runtime if a package
installed on the device holds carrier privileges or not.
Test: adb shell cmd phone has-carrier-privileges $PKG
Bug: 178419755
Change-Id: Id3eb88801848f00438114d8a1e00039935ede621
Merged-In: Id3eb88801848f00438114d8a1e00039935ede621
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 74d6b57..5bd810c 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -114,6 +114,9 @@
private static final String UCE_GET_DEVICE_ENABLED = "get-device-enabled";
private static final String UCE_SET_DEVICE_ENABLED = "set-device-enabled";
+ // 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";
+
// Take advantage of existing methods that already contain permissions checks when possible.
private final ITelephony mInterface;
@@ -206,6 +209,8 @@
return handleRestartModemCommand();
case UNATTENDED_REBOOT:
return handleUnattendedReboot();
+ case HAS_CARRIER_PRIVILEGES_COMMAND:
+ return handleHasCarrierPrivilegesCommand();
default: {
return handleDefaultCommands(cmd);
}
@@ -238,6 +243,8 @@
pw.println(" Restart modem command.");
pw.println(" unattended-reboot");
pw.println(" Prepare for unattended reboot.");
+ pw.println(" has-carrier-privileges [package]");
+ pw.println(" Query carrier privilege status for a package. Prints true or false.");
onHelpIms();
onHelpUce();
onHelpEmergencyNumber();
@@ -666,7 +673,7 @@
errPw.println("message value must be a valid integer");
return -1;
}
-
+
try {
mInterface.sendDeviceToDeviceMessage(messageType, messageValue);
} catch (RemoteException e) {
@@ -1866,4 +1873,22 @@
getOutPrintWriter().println(result);
return 0;
}
+
+ private int handleHasCarrierPrivilegesCommand() {
+ String packageName = getNextArgRequired();
+
+ boolean hasCarrierPrivileges;
+ try {
+ hasCarrierPrivileges =
+ mInterface.checkCarrierPrivilegesForPackageAnyPhone(packageName)
+ == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, HAS_CARRIER_PRIVILEGES_COMMAND + " exception", e);
+ getErrPrintWriter().println("Exception: " + e.getMessage());
+ return -1;
+ }
+
+ getOutPrintWriter().println(hasCarrierPrivileges);
+ return 0;
+ }
}