From 310718530cc18f321c0ce83d9c22aa5960852806 Mon Sep 17 00:00:00 2001 From: Malcolm Chen Date: Tue, 12 Feb 2019 17:29:59 -0800 Subject: [PATCH] Don't return hidden subscription in getActiveSubscriptionInfoList. Bug: 121396526 Test: manual Change-Id: I3a9f3a9a2628a8e2ad1c401f6fe5e4c5866a0047 Merged-In: I3a9f3a9a2628a8e2ad1c401f6fe5e4c5866a0047 --- .../android/telephony/SubscriptionManager.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index e6bf5a30c5c8f..85cd1579635fa 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -1243,7 +1243,7 @@ public class SubscriptionManager { @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public List getActiveSubscriptionInfoList() { - return getActiveSubscriptionInfoList(false); + return getActiveSubscriptionInfoList(/* userVisibleonly */true); } /** @@ -2866,15 +2866,24 @@ public class SubscriptionManager { /** * Whether system UI should hide a subscription. If it's a bundled opportunistic * subscription, it shouldn't show up in anywhere in Settings app, dialer app, - * or status bar. + * or status bar. Exception is if caller is carrier app, in which case they will + * want to see their own hidden subscriptions. * * @param info the subscriptionInfo to check against. * @return true if this subscription should be hidden. * * @hide */ - public static boolean shouldHideSubscription(SubscriptionInfo info) { - return (info != null && !TextUtils.isEmpty(info.getGroupUuid()) && info.isOpportunistic()); + private boolean shouldHideSubscription(SubscriptionInfo info) { + if (info == null) return false; + + // If hasCarrierPrivileges or canManageSubscription returns true, it means caller + // has carrier privilege. + boolean hasCarrierPrivilegePermission = (info.isEmbedded() && canManageSubscription(info)) + || TelephonyManager.from(mContext).hasCarrierPrivileges(info.getSubscriptionId()); + + return (!TextUtils.isEmpty(info.getGroupUuid()) && info.isOpportunistic() + && !hasCarrierPrivilegePermission); } /**