[automerger skipped] Merge "Use UiccSlot.getEid as cardId" am: ac4e112fb7 am: 65a606481b
am: c8f9efad87 -s ours
am skip reason: change_id I0897046386e155e32f2f98effa1654a7b81bd340 with SHA1 01bd00dc1c is in history
Change-Id: I303be93715277db4935861a1570178791abf481d
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 9e80f96..3443115 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -663,8 +663,16 @@
// Navigate to "Network Selection Settings" which list all subscriptions.
PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0,
new Intent(ACTION_MOBILE_NETWORK_LIST), 0);
- String line1Num = mTelephonyManager.getLine1Number(subId);
-
+ // Display phone number from the other sub
+ String line1Num = null;
+ SubscriptionManager subMgr = (SubscriptionManager) mContext.getSystemService(
+ Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ List<SubscriptionInfo> subList = subMgr.getActiveSubscriptionInfoList(false);
+ for (SubscriptionInfo sub : subList) {
+ if (sub.getSubscriptionId() != subId) {
+ line1Num = mTelephonyManager.getLine1Number(sub.getSubscriptionId());
+ }
+ }
final CharSequence contentText = TextUtils.isEmpty(line1Num) ?
String.format(mContext.getText(
R.string.limited_sim_function_notification_message).toString(), carrierName) :
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index acae923..c652bc3 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -4790,6 +4790,52 @@
}
}
+ private int getCarrierPrivilegeStatusFromCarrierConfigRules(int privilegeFromSim,
+ Phone phone) {
+ //load access rules from carrier configs, and check those as well: b/139133814
+ SubscriptionController subController = SubscriptionController.getInstance();
+ if (privilegeFromSim == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS
+ || subController == null) return privilegeFromSim;
+
+ int uid = Binder.getCallingUid();
+ PackageManager pkgMgr = phone.getContext().getPackageManager();
+ String[] packages = pkgMgr.getPackagesForUid(uid);
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ SubscriptionInfo subInfo = subController.getSubscriptionInfo(phone.getSubId());
+ SubscriptionManager subManager = (SubscriptionManager)
+ phone.getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ for (String pkg : packages) {
+ if (subManager.canManageSubscription(subInfo, pkg)) {
+ return TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
+ }
+ }
+ return privilegeFromSim;
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ private int getCarrierPrivilegeStatusFromCarrierConfigRules(int privilegeFromSim, Phone phone,
+ String pkgName) {
+ //load access rules from carrier configs, and check those as well: b/139133814
+ SubscriptionController subController = SubscriptionController.getInstance();
+ if (privilegeFromSim == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS
+ || subController == null) return privilegeFromSim;
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ SubscriptionInfo subInfo = subController.getSubscriptionInfo(phone.getSubId());
+ SubscriptionManager subManager = (SubscriptionManager)
+ phone.getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ return subManager.canManageSubscription(subInfo, pkgName)
+ ? TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS : privilegeFromSim;
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
@Override
public int getCarrierPrivilegeStatus(int subId) {
final Phone phone = getPhone(subId);
@@ -4802,8 +4848,10 @@
loge("getCarrierPrivilegeStatus: No UICC");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
- return card.getCarrierPrivilegeStatusForCurrentTransaction(
- phone.getContext().getPackageManager());
+
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ card.getCarrierPrivilegeStatusForCurrentTransaction(
+ phone.getContext().getPackageManager()), phone);
}
@Override
@@ -4819,7 +4867,9 @@
loge("getCarrierPrivilegeStatus: No UICC");
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
- return profile.getCarrierPrivilegeStatusForUid(phone.getContext().getPackageManager(), uid);
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ profile.getCarrierPrivilegeStatusForUid(
+ phone.getContext().getPackageManager(), uid), phone);
}
@Override
@@ -4834,8 +4884,9 @@
loge("checkCarrierPrivilegesForPackage: No UICC on subId " + subId);
return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
}
-
- return card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName);
+ return getCarrierPrivilegeStatusFromCarrierConfigRules(
+ card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ getPhone(phoneId), pkgName);
}
@Override
@@ -4850,7 +4901,9 @@
continue;
}
- result = card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName);
+ result = getCarrierPrivilegeStatusFromCarrierConfigRules(
+ card.getCarrierPrivilegeStatus(mApp.getPackageManager(), pkgName),
+ getPhone(i), pkgName);
if (result == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
break;
}
@@ -4885,9 +4938,10 @@
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_COMPONENTS
+ | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+ | PackageManager.GET_SIGNING_CERTIFICATES,
+ UserHandle.USER_SYSTEM);
}
for (int p = packages.size() - 1; p >= 0; p--) {
PackageInfo pkgInfo = packages.get(p);
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index 5a70fe2..b665f4b 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -206,20 +206,11 @@
}
private boolean shouldShowRttSetting() {
- CarrierConfigManager configManager =
- (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
// Go through all the subs -- if we want to display the RTT setting for any of them, do
// display it.
for (int subId : SubscriptionController.getInstance().getActiveSubIdList(true)) {
- // In order to display the setting, we want:
- // 1. The subscription supports RTT
- // 2. The subscription isn't configured by the carrier to have the setting always-on
- // (see the documentation for the carrier config key)
if (PhoneGlobals.getInstance().phoneMgr.isRttSupported(subId)) {
- if (!configManager.getConfigForSubId(subId).getBoolean(
- CarrierConfigManager.KEY_IGNORE_RTT_MODE_SETTING_BOOL, false)) {
- return true;
- }
+ return true;
}
}
return false;