Merge "Revert "Move carrier privilege status checks to CarrierPrivilege...""
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 4182af1..bfc69a5 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -42,6 +42,7 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ComponentInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncResult;
@@ -227,7 +228,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -6832,28 +6832,39 @@
@Override
public int getCarrierPrivilegeStatus(int subId) {
- // No permission needed; this only lets the caller inspect their own status.
- return getCarrierPrivilegeStatusForUidWithPermission(subId, Binder.getCallingUid());
+ final Phone phone = getPhone(subId);
+ if (phone == null) {
+ loge("getCarrierPrivilegeStatus: Invalid subId");
+ return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
+ }
+ UiccPort port = UiccController.getInstance().getUiccPort(phone.getPhoneId());
+ if (port == null) {
+ loge("getCarrierPrivilegeStatus: No UICC");
+ return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
+ }
+
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ port.getCarrierPrivilegeStatusForCurrentTransaction(
+ phone.getContext().getPackageManager()), Binder.getCallingUid(), phone);
}
@Override
public int getCarrierPrivilegeStatusForUid(int subId, int uid) {
enforceReadPrivilegedPermission("getCarrierPrivilegeStatusForUid");
- return getCarrierPrivilegeStatusForUidWithPermission(subId, uid);
- }
-
- private int getCarrierPrivilegeStatusForUidWithPermission(int subId, int uid) {
- Phone phone = getPhone(subId);
+ final Phone phone = getPhone(subId);
if (phone == null) {
loge("getCarrierPrivilegeStatusForUid: Invalid subId");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
}
- CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker();
- if (cpt == null) {
- loge("getCarrierPrivilegeStatusForUid: No CarrierPrivilegesTracker");
+ UiccProfile profile =
+ UiccController.getInstance().getUiccProfileForPhone(phone.getPhoneId());
+ if (profile == null) {
+ loge("getCarrierPrivilegeStatusForUid: No UICC");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
- return cpt.getCarrierPrivilegeStatusForUid(uid);
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ profile.getCarrierPrivilegeStatusForUid(
+ phone.getContext().getPackageManager(), uid), uid, phone);
}
@Override
@@ -6862,40 +6873,39 @@
if (TextUtils.isEmpty(pkgName)) {
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
}
- Phone phone = getPhone(subId);
- if (phone == null) {
- loge("checkCarrierPrivilegesForPackage: Invalid subId");
- return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
- }
- CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker();
- if (cpt == null) {
- loge("checkCarrierPrivilegesForPackage: No CarrierPrivilegesTracker");
+
+ int phoneId = SubscriptionManager.getPhoneId(subId);
+ UiccPort port = UiccController.getInstance().getUiccPort(phoneId);
+ if (port == null) {
+ loge("checkCarrierPrivilegesForPackage: No UICC on subId " + subId);
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
- return cpt.getCarrierPrivilegeStatusForPackage(pkgName);
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ port.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ getPhone(phoneId), pkgName);
}
@Override
public int checkCarrierPrivilegesForPackageAnyPhone(String pkgName) {
- enforceReadPrivilegedPermission("checkCarrierPrivilegesForPackageAnyPhone");
- if (TextUtils.isEmpty(pkgName)) {
+ // TODO(b/186774706): Remove @RequiresPermission from TelephonyManager API
+ if (TextUtils.isEmpty(pkgName))
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
- }
int result = TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
- for (int phoneId = 0; phoneId < TelephonyManager.getDefault().getPhoneCount(); phoneId++) {
- Phone phone = PhoneFactory.getPhone(phoneId);
- if (phone == null) {
- continue;
+ for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+ UiccPort port = UiccController.getInstance().getUiccPort(i);
+ if (port == null) {
+ // No UICC in that slot.
+ continue;
}
- CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker();
- if (cpt == null) {
- continue;
- }
- result = cpt.getCarrierPrivilegeStatusForPackage(pkgName);
+
+ result = getCarrierPrivilegeStatusFromCarrierConfigRules(
+ port.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ getPhone(i), pkgName);
if (result == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
break;
}
}
+
return result;
}
@@ -6917,22 +6927,43 @@
@Override
public List<String> getPackagesWithCarrierPrivileges(int phoneId) {
enforceReadPrivilegedPermission("getPackagesWithCarrierPrivileges");
- Phone phone = PhoneFactory.getPhone(phoneId);
- if (phone == null) {
- return Collections.emptyList();
+ PackageManager pm = mApp.getPackageManager();
+ List<String> privilegedPackages = new ArrayList<>();
+ List<PackageInfo> packages = null;
+ UiccPort port = UiccController.getInstance().getUiccPort(phoneId);
+ // has UICC in that slot.
+ if (port != null) {
+ if (port.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_SIGNING_CERTIFICATES,
+ UserHandle.SYSTEM.getIdentifier());
+ }
+ for (int p = packages.size() - 1; p >= 0; p--) {
+ PackageInfo pkgInfo = packages.get(p);
+ if (pkgInfo != null && pkgInfo.packageName != null
+ && getCarrierPrivilegeStatusFromCarrierConfigRules(
+ port.getCarrierPrivilegeStatus(pkgInfo),
+ getPhone(phoneId), pkgInfo.packageName)
+ == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+ privilegedPackages.add(pkgInfo.packageName);
+ }
+ }
+ }
}
- CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker();
- if (cpt == null) {
- return Collections.emptyList();
- }
- return new ArrayList<>(cpt.getPackagesWithCarrierPrivileges());
+ return privilegedPackages;
}
@Override
public List<String> getPackagesWithCarrierPrivilegesForAllPhones() {
enforceReadPrivilegedPermission("getPackagesWithCarrierPrivilegesForAllPhones");
- Set<String> privilegedPackages = new ArraySet<>();
+
final long identity = Binder.clearCallingIdentity();
+
+ List<String> privilegedPackages = new ArrayList<>();
try {
for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
privilegedPackages.addAll(getPackagesWithCarrierPrivileges(i));
@@ -6940,7 +6971,7 @@
} finally {
Binder.restoreCallingIdentity(identity);
}
- return new ArrayList<>(privilegedPackages);
+ return privilegedPackages;
}
private String getIccId(int subId) {
@@ -8723,16 +8754,12 @@
private boolean haveCarrierPrivilegeAccess(UiccPort port, String callingPackage) {
UiccProfile profile = port.getUiccProfile();
- if (profile == null) {
+ if (profile == null ||
+ profile.getCarrierPrivilegeStatus(mApp.getPackageManager(), callingPackage)
+ != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
return false;
}
- Phone phone = PhoneFactory.getPhone(profile.getPhoneId());
- if (phone == null) {
- return false;
- }
- CarrierPrivilegesTracker cpt = phone.getCarrierPrivilegesTracker();
- return cpt != null && cpt.getCarrierPrivilegeStatusForPackage(callingPackage)
- == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
+ return true;
}
@Override