checkCarrierPrivilegesForPackage by subId rather than default
1. checkCarrierPrivilegesForPackages by subId
2. getPackagesWithCarrierPrivileges by subId
3. new hidden API getPackagesWithCarrierPrivilegesForAllPhones which
returns packages for all subs.
Bug: 132078279
Test: Manual
Change-Id: Ia50972f8424e6fd926b8877a126c6d02221b829e
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 7d25661..51bb8fe 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -4783,17 +4783,19 @@
}
@Override
- public int checkCarrierPrivilegesForPackage(String pkgName) {
- final Phone defaultPhone = getDefaultPhone();
- if (TextUtils.isEmpty(pkgName))
+ public int checkCarrierPrivilegesForPackage(int subId, String pkgName) {
+ if (TextUtils.isEmpty(pkgName)) {
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
- UiccCard card = UiccController.getInstance().getUiccCard(defaultPhone.getPhoneId());
+ }
+
+ int phoneId = SubscriptionManager.getPhoneId(subId);
+ UiccCard card = UiccController.getInstance().getUiccCard(phoneId);
if (card == null) {
- loge("checkCarrierPrivilegesForPackage: No UICC");
+ loge("checkCarrierPrivilegesForPackage: No UICC on subId " + subId);
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
- return card.getCarrierPrivilegeStatus(defaultPhone.getContext().getPackageManager(),
- pkgName);
+
+ return card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName);
}
@Override
@@ -4832,29 +4834,26 @@
}
@Override
- public List<String> getPackagesWithCarrierPrivileges() {
+ public List<String> getPackagesWithCarrierPrivileges(int phoneId) {
PackageManager pm = mApp.getPackageManager();
List<String> privilegedPackages = new ArrayList<>();
List<PackageInfo> packages = null;
- for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
- UiccCard card = UiccController.getInstance().getUiccCard(i);
- if (card == null) {
- // No UICC in that slot.
- continue;
- }
+ UiccCard card = UiccController.getInstance().getUiccCard(phoneId);
+ // has UICC in that slot.
+ if (card != null) {
if (card.hasCarrierPrivilegeRules()) {
if (packages == null) {
// Only check packages in user 0 for now
packages = pm.getInstalledPackagesAsUser(
PackageManager.MATCH_DISABLED_COMPONENTS
- | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
- | PackageManager.GET_SIGNATURES, UserHandle.USER_SYSTEM);
+ | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.GET_SIGNATURES, UserHandle.USER_SYSTEM);
}
for (int p = packages.size() - 1; p >= 0; p--) {
PackageInfo pkgInfo = packages.get(p);
if (pkgInfo != null && pkgInfo.packageName != null
&& card.getCarrierPrivilegeStatus(pkgInfo)
- == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+ == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
privilegedPackages.add(pkgInfo.packageName);
}
}
@@ -4863,6 +4862,15 @@
return privilegedPackages;
}
+ @Override
+ public List<String> getPackagesWithCarrierPrivilegesForAllPhones() {
+ List<String> privilegedPackages = new ArrayList<>();
+ for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+ privilegedPackages.addAll(getPackagesWithCarrierPrivileges(i));
+ }
+ return privilegedPackages;
+ }
+
private String getIccId(int subId) {
final Phone phone = getPhone(subId);
UiccCard card = phone == null ? null : phone.getUiccCard();