Merge "[Settings] Access ProxySubscriptionManager within DataUsage"
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 92b8a9d..bfe78e5 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -40,6 +40,7 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.network.ProxySubscriptionManager;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.NetworkPolicyEditor;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -117,8 +118,8 @@
         NetworkPolicyManager policyManager = activity.getSystemService(NetworkPolicyManager.class);
         mPolicyEditor = new NetworkPolicyEditor(policyManager);
 
-        mHasMobileData = DataUsageUtils.hasMobileData(activity)
-                && mSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+        mHasMobileData = SubscriptionManager.isValidSubscriptionId(mSubscriptionId)
+                && DataUsageUtils.hasMobileData(activity);
 
         mDataUsageController = new DataUsageController(activity);
         mDataUsageController.setSubscriptionId(mSubscriptionId);
@@ -270,11 +271,10 @@
         mCycleEnd = info.cycleEnd;
         mSnapshotTime = -1L;
 
-        SubscriptionInfo subInfo = mSubscriptionManager.getActiveSubscriptionInfo(mSubscriptionId);
-        if (subInfo == null) {
-            subInfo = mSubscriptionManager.getAvailableSubscriptionInfoList().stream().filter(
-                    i -> i.getSubscriptionId() == mSubscriptionId).findFirst().orElse(null);
-        }
+        final ProxySubscriptionManager proxySubsciptionMgr =
+                ProxySubscriptionManager.getInstance(mContext);
+        final SubscriptionInfo subInfo = proxySubsciptionMgr
+                .getAccessibleSubscriptionInfo(mSubscriptionId);
         if (subInfo != null && mHasMobileData) {
             mCarrierName = subInfo.getCarrierName();
             List<SubscriptionPlan> plans = mSubscriptionManager.getSubscriptionPlans(
diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java
index 433d1ed..02bfda8 100644
--- a/src/com/android/settings/datausage/DataUsageUtils.java
+++ b/src/com/android/settings/datausage/DataUsageUtils.java
@@ -33,6 +33,8 @@
 import android.text.format.Formatter.BytesResult;
 import android.util.Log;
 
+import com.android.settings.network.ProxySubscriptionManager;
+
 import java.util.List;
 
 /**
@@ -107,8 +109,8 @@
             return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains("mobile");
         }
         final List<SubscriptionInfo> subInfoList =
-                context.getSystemService(SubscriptionManager.class)
-                .getActiveSubscriptionInfoList();
+                ProxySubscriptionManager.getInstance(context)
+                .getActiveSubscriptionsInfo();
         // No activated Subscriptions
         if (subInfoList == null) {
             if (LOGD) {
@@ -150,6 +152,14 @@
     }
 
     public static boolean hasSim(Context context) {
+        // Access cache within ProxySubscriptionManager to speed up
+        final List<SubscriptionInfo> subInfoList =
+                ProxySubscriptionManager.getInstance(context)
+                .getActiveSubscriptionsInfo();
+        if ((subInfoList != null) && (subInfoList.size() > 0)) {
+            return true;
+        }
+
         TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
         final int simState = telephonyManager.getSimState();
         // Note that pulling the SIM card returns UNKNOWN, not ABSENT.
@@ -162,20 +172,20 @@
      * SubscriptionManager#INVALID_SUBSCRIPTION_ID
      */
     public static int getDefaultSubscriptionId(Context context) {
-        final SubscriptionManager subscriptionMgr =
-                context.getSystemService(SubscriptionManager.class);
-
         // default data subscription is first choice
-        final int dataSubId = subscriptionMgr.getDefaultDataSubscriptionId();
+        final int dataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
         if (SubscriptionManager.isValidSubscriptionId(dataSubId)) {
             return dataSubId;
         }
 
+        final ProxySubscriptionManager proxySubscriptionMgr =
+                ProxySubscriptionManager.getInstance(context);
+
         // any active subscription is second choice
-        List<SubscriptionInfo> subList = subscriptionMgr.getActiveSubscriptionInfoList();
+        List<SubscriptionInfo> subList = proxySubscriptionMgr.getActiveSubscriptionsInfo();
         if ((subList == null) || (subList.size() <= 0)) {
             // any subscription is third choice
-            subList = subscriptionMgr.getAvailableSubscriptionInfoList();
+            subList = proxySubscriptionMgr.getAccessibleSubscriptionsInfo();
         }
         if ((subList == null) || (subList.size() <= 0)) {
             return SubscriptionManager.INVALID_SUBSCRIPTION_ID;