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;
