OSDN Git Service

Don't return hidden subscription in getActiveSubscriptionInfoList.
authorMalcolm Chen <refuhoo@google.com>
Wed, 13 Feb 2019 01:29:59 +0000 (17:29 -0800)
committerMalcolm Chen <refuhoo@google.com>
Tue, 12 Mar 2019 20:39:15 +0000 (13:39 -0700)
Bug: 121396526
Test: manual
Change-Id: I3a9f3a9a2628a8e2ad1c401f6fe5e4c5866a0047
Merged-In: I3a9f3a9a2628a8e2ad1c401f6fe5e4c5866a0047

telephony/java/android/telephony/SubscriptionManager.java

index e6bf5a3..85cd157 100644 (file)
@@ -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<SubscriptionInfo> 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);
     }
 
     /**