diff --git a/res/drawable/ic_apps.xml b/res/drawable/ic_apps.xml
index 841c25a..8e9ba82 100644
--- a/res/drawable/ic_apps.xml
+++ b/res/drawable/ic_apps.xml
@@ -25,5 +25,5 @@
 2zm4-8c0 1.1 .9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-4 2c1.1 0 2-.9
 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2
 2zm0 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"
-        android:fillColor="#FFFFFFFF"/>
+        android:fillColor="?android:attr/colorPrimary"/>
 </vector>
diff --git a/res/drawable/ic_devices_other.xml b/res/drawable/ic_devices_other.xml
index c7b6cf2..5ef9f16 100644
--- a/res/drawable/ic_devices_other.xml
+++ b/res/drawable/ic_devices_other.xml
@@ -20,7 +20,7 @@
         android:viewportHeight="24"
         android:viewportWidth="24">
     <path
-        android:fillColor="@android:color/white"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M3,6h18V4H3C1.9,4 1,4.9 1,6v12c0,1.1 0.9,2 2,2h4v-2H3V6zM13,12H9v1.78C8.39,14.33 8,15.11 8,16c0,0.89 0.39,1.67 1,2.22V20h4v-1.78c0.61,-0.55 1,-1.34 1,-2.22s-0.39,-1.67 -1,-2.22V12zM11,17.5c-0.83,0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5S11.83,17.5 11,17.5zM22,8h-6c-0.5,0 -1,0.5 -1,1v10c0,0.5 0.5,1 1,1h6c0.5,0 1,-0.5 1,-1V9C23,8.5 22.5,8 22,8zM21,18h-4v-8h4V18z"/>
 </vector>
 
diff --git a/res/drawable/ic_help.xml b/res/drawable/ic_help.xml
index f8bac71..c0afa14 100644
--- a/res/drawable/ic_help.xml
+++ b/res/drawable/ic_help.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M11,18h2v-2h-2V18zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8S16.41,20 12,20zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5C16,7.79 14.21,6 12,6z"/>
 </vector>
diff --git a/res/drawable/ic_phone_info.xml b/res/drawable/ic_phone_info.xml
index 7aee3e8..e0b64ee 100644
--- a/res/drawable/ic_phone_info.xml
+++ b/res/drawable/ic_phone_info.xml
@@ -4,6 +4,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3C19,1.9 18.1,1.01 17,1.01zM17,21H7v-1h10V21zM17,18H7V6h10V18zM7,4V3h10v1H7zM11,7h2v2h-2V7zM11,11h2v6h-2V11z"/>
 </vector>
diff --git a/res/drawable/ic_settings_accessibility.xml b/res/drawable/ic_settings_accessibility.xml
index d5c89b9..0055a65 100644
--- a/res/drawable/ic_settings_accessibility.xml
+++ b/res/drawable/ic_settings_accessibility.xml
@@ -19,9 +19,9 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M20.5,4c-2.61,0.7 -5.67,1 -8.5,1S6.11,4.7 3.5,4L3,6c1.86,0.5 4,0.83 6,1v13h2v-6h2v6h2V7c2,-0.17 4.14,-0.5 6,-1L20.5,4zM12,4c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2s-2,0.9 -2,2S10.9,4 12,4z"/>
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M7,24h2v-2H7V24zM11,24h2v-2h-2V24zM15,24h2v-2h-2V24z"/>
 </vector>
diff --git a/res/drawable/ic_settings_accounts.xml b/res/drawable/ic_settings_accounts.xml
index 7f18286..50dcf76 100644
--- a/res/drawable/ic_settings_accounts.xml
+++ b/res/drawable/ic_settings_accounts.xml
@@ -19,9 +19,9 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M19,3H5C3.89,3 3,3.9 3,5v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.1,3 19,3zM19,5v10.79C16.52,14.37 13.23,14 12,14s-4.52,0.37 -7,1.79V5H19zM5,19v-0.77C6.74,16.66 10.32,16 12,16s5.26,0.66 7,2.23V19H5z"/>
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M12,13c1.94,0 3.5,-1.56 3.5,-3.5C15.5,7.56 13.94,6 12,6c-1.94,0 -3.5,1.56 -3.5,3.5C8.5,11.44 10.06,13 12,13zM12,8c0.83,0 1.5,0.67 1.5,1.5c0,0.83 -0.67,1.5 -1.5,1.5c-0.83,0 -1.5,-0.67 -1.5,-1.5C10.5,8.67 11.17,8 12,8z"/>
 </vector>
diff --git a/res/drawable/ic_settings_battery_white.xml b/res/drawable/ic_settings_battery_white.xml
index 255b75e..d1f91c5 100644
--- a/res/drawable/ic_settings_battery_white.xml
+++ b/res/drawable/ic_settings_battery_white.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33v15.33C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V5.33C17,4.6 16.4,4 15.67,4z"/>
 </vector>
diff --git a/res/drawable/ic_settings_display_white.xml b/res/drawable/ic_settings_display_white.xml
index 62dc21f..96be116 100644
--- a/res/drawable/ic_settings_display_white.xml
+++ b/res/drawable/ic_settings_display_white.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M20,8.69V4h-4.69L12,0.69L8.69,4H4v4.69L0.69,12L4,15.31V20h4.69L12,23.31L15.31,20H20v-4.69L23.31,12L20,8.69zM18,14.48V18h-3.52L12,20.48L9.52,18H6v-3.52L3.52,12L6,9.52V6h3.52L12,3.52L14.48,6H18v3.52L20.48,12L18,14.48zM12,17c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5V17z"/>
 </vector>
diff --git a/res/drawable/ic_settings_location.xml b/res/drawable/ic_settings_location.xml
index b7cfd6f..e1156a9 100644
--- a/res/drawable/ic_settings_location.xml
+++ b/res/drawable/ic_settings_location.xml
@@ -19,9 +19,9 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9z"/>
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M12,9m-2.5,0a2.5,2.5 0,1 1,5 0a2.5,2.5 0,1 1,-5 0"/>
 </vector>
diff --git a/res/drawable/ic_settings_privacy.xml b/res/drawable/ic_settings_privacy.xml
index fcad83a..cdb2ac6 100644
--- a/res/drawable/ic_settings_privacy.xml
+++ b/res/drawable/ic_settings_privacy.xml
@@ -20,12 +20,12 @@
     android:viewportWidth="24"
     android:viewportHeight="24">
   <path
-      android:fillColor="#FFFFFFFF"
+      android:fillColor="?android:attr/colorPrimary"
       android:pathData="M21.25,16.5v-0.66c0,-1.13 -1.03,-2.09 -2.25,-2.09s-2.25,0.96 -2.25,2.09v0.66H16V22h6v-5.5H21.25zM19.75,16.5h-1.5v-0.66c0,-0.29 0.38,-0.59 0.75,-0.59s0.75,0.3 0.75,0.59V16.5z"/>
   <path
-      android:fillColor="#FFFFFFFF"
+      android:fillColor="?android:attr/colorPrimary"
       android:pathData="M12,17c-3.79,0 -7.17,-2.13 -8.82,-5.5C4.83,8.13 8.21,6 12,6s7.17,2.13 8.82,5.5H23C21.27,7.11 17,4 12,4S2.73,7.11 1,11.5C2.73,15.89 7,19 12,19c0.68,0 1.35,-0.06 2,-0.17v-2.05C13.35,16.91 12.69,17 12,17z"/>
   <path
-      android:fillColor="#FFFFFFFF"
+      android:fillColor="?android:attr/colorPrimary"
       android:pathData="M16.43,12.23c0.04,-0.24 0.07,-0.48 0.07,-0.73C16.5,9.02 14.48,7 12,7s-4.5,2.02 -4.5,4.5S9.52,16 12,16c0.77,0 1.48,-0.21 2.12,-0.55C14.41,14.08 15.27,12.93 16.43,12.23zM12,14.2c-1.49,0 -2.7,-1.21 -2.7,-2.7s1.21,-2.7 2.7,-2.7s2.7,1.21 2.7,2.7S13.49,14.2 12,14.2z"/>
 </vector>
diff --git a/res/drawable/ic_settings_security_white.xml b/res/drawable/ic_settings_security_white.xml
index b9c81f1..a90bb8f 100644
--- a/res/drawable/ic_settings_security_white.xml
+++ b/res/drawable/ic_settings_security_white.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24"
         android:viewportHeight="24">
 <path
-    android:fillColor="#FFFFFFFF"
+    android:fillColor="?android:attr/colorPrimary"
     android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM9,6c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L9,8L9,6zM18,20L6,20L6,10h12v10zM12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/>
 </vector>
\ No newline at end of file
diff --git a/res/drawable/ic_settings_system_dashboard_white.xml b/res/drawable/ic_settings_system_dashboard_white.xml
index 5a697d4..cf3bb7b 100644
--- a/res/drawable/ic_settings_system_dashboard_white.xml
+++ b/res/drawable/ic_settings_system_dashboard_white.xml
@@ -19,12 +19,12 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M11,7h2v2h-2z"/>
     <path
-        android:fillColor="#FFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M11,11h2v6h-2z"/>
     <path
-        android:fillColor="#FFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M12,2C6.48,2 2,6.48 2,12c0,5.52 4.48,10 10,10s10,-4.48 10,-10C22,6.48 17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8c0,-4.41 3.59,-8 8,-8s8,3.59 8,8C20,16.41 16.41,20 12,20z"/>
 </vector>
diff --git a/res/drawable/ic_settings_wireless_white.xml b/res/drawable/ic_settings_wireless_white.xml
index 63be43b..c56aa7e 100644
--- a/res/drawable/ic_settings_wireless_white.xml
+++ b/res/drawable/ic_settings_wireless_white.xml
@@ -16,4 +16,4 @@
 <com.android.settings.widget.TintDrawable
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:drawable="@drawable/ic_settings_wireless"
-    android:tint="@android:color/white" />
\ No newline at end of file
+    android:tint="?android:attr/colorPrimary" />
\ No newline at end of file
diff --git a/res/drawable/ic_storage_white.xml b/res/drawable/ic_storage_white.xml
index eed9140..3b5d3c3 100644
--- a/res/drawable/ic_storage_white.xml
+++ b/res/drawable/ic_storage_white.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M3,20h18v-4H3V20zM5,17h2v2H5V17zM3,4v4h18V4H3zM7,7H5V5h2V7zM3,14h18v-4H3V14zM5,11h2v2H5V11z"/>
 </vector>
diff --git a/res/drawable/ic_volume_up_24dp.xml b/res/drawable/ic_volume_up_24dp.xml
index 8c68c00..a1136d3 100644
--- a/res/drawable/ic_volume_up_24dp.xml
+++ b/res/drawable/ic_volume_up_24dp.xml
@@ -20,12 +20,12 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M3,9v6h4l5,5V4L7,9H3zM10,8.83v6.34L7.83,13H5v-2h2.83L10,8.83z"/>
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05C15.48,15.29 16.5,13.77 16.5,12z"/>
     <path
-        android:fillColor="#FFFFFFFF"
+        android:fillColor="?android:attr/colorPrimary"
         android:pathData="M14,3.23v2.06c2.89,0.86 5,3.54 5,6.71c0,3.17 -2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77C21,7.72 18.01,4.14 14,3.23z"/>
 </vector>
diff --git a/res/layout/face_enroll_accessibility_toggle.xml b/res/layout/face_enroll_accessibility_toggle.xml
index d37175b..bb3a7ff 100644
--- a/res/layout/face_enroll_accessibility_toggle.xml
+++ b/res/layout/face_enroll_accessibility_toggle.xml
@@ -36,7 +36,7 @@
         android:paddingTop="8dp"
         android:gravity="start"
         android:layout_alignParentStart="true"
-        android:layout_toLeftOf="@+id/toggle"
+        android:layout_toStartOf="@+id/toggle"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
 
@@ -46,7 +46,7 @@
         android:paddingHorizontal="8dp"
         android:paddingBottom="8dp"
         android:layout_alignParentStart="true"
-        android:layout_toLeftOf="@+id/toggle"
+        android:layout_toStartOf="@+id/toggle"
         android:layout_below="@+id/title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index e4041fb..8084038 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -320,6 +320,14 @@
         addPreferencesFromResource(resId);
         final PreferenceScreen screen = getPreferenceScreen();
         screen.setOnExpandButtonClickListener(this);
+        displayResourceTilesToScreen(screen);
+    }
+
+    /**
+     * Perform {@link AbstractPreferenceController#displayPreference(PreferenceScreen)}
+     * on all {@link AbstractPreferenceController}s.
+     */
+    protected void displayResourceTilesToScreen(PreferenceScreen screen) {
         mPreferenceControllers.values().stream().flatMap(Collection::stream).forEach(
                 controller -> controller.displayPreference(screen));
     }
diff --git a/src/com/android/settings/datausage/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java
index 4a49f33..6dc40e8 100644
--- a/src/com/android/settings/datausage/CellDataPreference.java
+++ b/src/com/android/settings/datausage/CellDataPreference.java
@@ -50,15 +50,12 @@
     public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     public boolean mChecked;
     public boolean mMultiSimDialog;
-    @VisibleForTesting
-    ProxySubscriptionManager mProxySubscriptionMgr;
     private MobileDataEnabledListener mDataStateListener;
 
     public CellDataPreference(Context context, AttributeSet attrs) {
         super(context, attrs, TypedArrayUtils.getAttr(context,
                 androidx.preference.R.attr.switchPreferenceStyle,
                 android.R.attr.switchPreferenceStyle));
-        mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(context);
         mDataStateListener = new MobileDataEnabledListener(context, this);
     }
 
@@ -88,13 +85,15 @@
     public void onAttached() {
         super.onAttached();
         mDataStateListener.start(mSubId);
-        mProxySubscriptionMgr.addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
     }
 
     @Override
     public void onDetached() {
         mDataStateListener.stop();
-        mProxySubscriptionMgr.removeActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .removeActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
         super.onDetached();
     }
 
@@ -104,8 +103,8 @@
             throw new IllegalArgumentException("CellDataPreference needs a SubscriptionInfo");
         }
 
-        mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(getContext());
-        mProxySubscriptionMgr.addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
 
         if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             mSubId = subId;
@@ -115,6 +114,16 @@
         updateChecked();
     }
 
+    @VisibleForTesting
+    ProxySubscriptionManager getProxySubscriptionManager() {
+        return ProxySubscriptionManager.getInstance(getContext());
+    }
+
+    @VisibleForTesting
+    SubscriptionInfo getActiveSubscriptionInfo(int subId) {
+        return getProxySubscriptionManager().getActiveSubscriptionInfo(subId);
+    }
+
     private void updateChecked() {
         setChecked(getContext().getSystemService(TelephonyManager.class).getDataEnabled(mSubId));
     }
@@ -122,7 +131,7 @@
     private void updateEnabled() {
         // If this subscription is not active, for example, SIM card is taken out, we disable
         // the button.
-        setEnabled(mProxySubscriptionMgr.getActiveSubscriptionInfo(mSubId) != null);
+        setEnabled(getActiveSubscriptionInfo(mSubId) != null);
     }
 
     @Override
@@ -130,9 +139,8 @@
         final Context context = getContext();
         FeatureFactory.getFactory(context).getMetricsFeatureProvider()
                 .action(context, SettingsEnums.ACTION_CELL_DATA_TOGGLE, !mChecked);
-        final SubscriptionInfo currentSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                mSubId);
-        final SubscriptionInfo nextSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
+        final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
+        final SubscriptionInfo nextSir = getActiveSubscriptionInfo(
                 SubscriptionManager.getDefaultDataSubscriptionId());
         if (mChecked) {
             setMobileDataEnabled(false);
@@ -186,9 +194,8 @@
 
     private void showMultiSimDialog(Builder builder,
             DialogInterface.OnClickListener listener) {
-        final SubscriptionInfo currentSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                mSubId);
-        final SubscriptionInfo nextSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
+        final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
+        final SubscriptionInfo nextSir = getActiveSubscriptionInfo(
                 SubscriptionManager.getDefaultDataSubscriptionId());
 
         final String previousName = (nextSir == null)
@@ -205,8 +212,7 @@
     }
 
     private void disableDataForOtherSubscriptions(int subId) {
-        final SubscriptionInfo subInfo = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                subId);
+        final SubscriptionInfo subInfo = getActiveSubscriptionInfo(subId);
         if (subInfo != null) {
             getContext().getSystemService(TelephonyManager.class).setDataEnabled(subId, false);
         }
@@ -218,7 +224,7 @@
             return;
         }
         if (mMultiSimDialog) {
-            mProxySubscriptionMgr.get().setDefaultDataSubId(mSubId);
+            getProxySubscriptionManager().get().setDefaultDataSubId(mSubId);
             setMobileDataEnabled(true);
             disableDataForOtherSubscriptions(mSubId);
         } else {
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index c0ee0a5..135abfa 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -64,7 +64,7 @@
     private static final float RELATIVE_SIZE_LARGE = 1.25f * 1.25f;  // (1/0.8)^2
     private static final float RELATIVE_SIZE_SMALL = 1.0f / RELATIVE_SIZE_LARGE;  // 0.8^2
 
-    private final EntityHeaderController mEntityHeaderController;
+    private EntityHeaderController mEntityHeaderController;
     private final Lifecycle mLifecycle;
     private final PreferenceFragmentCompat mFragment;
     protected DataUsageController mDataUsageController;
@@ -103,8 +103,6 @@
             Lifecycle lifecycle, PreferenceFragmentCompat fragment, int subscriptionId) {
         super(activity, KEY);
 
-        mEntityHeaderController = EntityHeaderController.newInstance(activity,
-                fragment, null);
         mLifecycle = lifecycle;
         mFragment = fragment;
         init(subscriptionId);
@@ -165,6 +163,10 @@
 
     @Override
     public void onStart() {
+        if (mEntityHeaderController == null) {
+            mEntityHeaderController =
+                    EntityHeaderController.newInstance((Activity) mContext, mFragment, null);
+        }
         RecyclerView view = mFragment.getListView();
         mEntityHeaderController.setRecyclerView(view, mLifecycle);
         mEntityHeaderController.styleActionBar((Activity) mContext);
@@ -197,16 +199,20 @@
     public void updateState(Preference preference) {
         DataUsageSummaryPreference summaryPreference = (DataUsageSummaryPreference) preference;
 
-        final DataUsageController.DataUsageInfo info;
+        final boolean isSimCardAdded = hasSim();
+        if (!isSimCardAdded) {
+            mDefaultTemplate = NetworkTemplate.buildTemplateWifiWildcard();
+        }
+
+        final DataUsageController.DataUsageInfo info =
+                mDataUsageController.getDataUsageInfo(mDefaultTemplate);
+
         final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
-        if (hasSim()) {
-            info = mDataUsageController.getDataUsageInfo(mDefaultTemplate);
+        if (isSimCardAdded) {
             mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(mDefaultTemplate));
             summaryPreference.setWifiMode(/* isWifiMode */ false,
                     /* usagePeriod */ null, /* isSingleWifi */ false);
         } else {
-            info = mDataUsageController.getDataUsageInfo(
-                    NetworkTemplate.buildTemplateWifiWildcard());
             summaryPreference.setWifiMode(/* isWifiMode */ true, /* usagePeriod */
                     info.period, /* isSingleWifi */ false);
             summaryPreference.setLimitInfo(null);
diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java b/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
index b260657..035a8c1 100644
--- a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
@@ -22,23 +22,33 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionManager;
 import android.text.TextUtils;
+import android.util.Log;
 
 import androidx.preference.Preference;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.datausage.DataUsageUtils;
 import com.android.settingslib.net.DataUsageController;
+import com.android.settingslib.utils.ThreadUtils;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Preference controller for "Data usage"
  */
 public class DataUsagePreferenceController extends TelephonyBasePreferenceController {
 
-    private NetworkTemplate mTemplate;
-    private DataUsageController.DataUsageInfo mDataUsageInfo;
+    private static final String LOG_TAG = "DataUsagePreferCtrl";
+
+    private Future<NetworkTemplate> mTemplateFuture;
+    private AtomicReference<NetworkTemplate> mTemplate;
 
     public DataUsagePreferenceController(Context context, String key) {
         super(context, key);
+        mTemplate = new AtomicReference<NetworkTemplate>();
     }
 
     @Override
@@ -54,7 +64,7 @@
             return false;
         }
         final Intent intent = new Intent(Settings.ACTION_MOBILE_DATA_USAGE);
-        intent.putExtra(Settings.EXTRA_NETWORK_TEMPLATE, mTemplate);
+        intent.putExtra(Settings.EXTRA_NETWORK_TEMPLATE, getNetworkTemplate());
         intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
 
         mContext.startActivity(intent);
@@ -68,31 +78,65 @@
             preference.setEnabled(false);
             return;
         }
-        long usageLevel = mDataUsageInfo.usageLevel;
-        if (usageLevel <= 0L) {
-            final DataUsageController controller = new DataUsageController(mContext);
-            usageLevel = controller.getHistoricalUsageLevel(mTemplate);
-        }
-        final boolean enabled = usageLevel > 0L;
-        preference.setEnabled(enabled);
-
-        if (enabled) {
-            preference.setSummary(mContext.getString(R.string.data_usage_template,
-                    DataUsageUtils.formatDataUsage(mContext, mDataUsageInfo.usageLevel),
-                    mDataUsageInfo.period));
+        final CharSequence summary = getDataUsageSummary(mContext, mSubId);
+        if (summary == null) {
+            preference.setEnabled(false);
+        } else {
+            preference.setEnabled(true);
+            preference.setSummary(summary);
         }
     }
 
     public void init(int subId) {
         mSubId = subId;
+        mTemplate.set(null);
+        mTemplateFuture = ThreadUtils.postOnBackgroundThread(()
+                -> fetchMobileTemplate(mContext, mSubId));
+    }
 
+    private NetworkTemplate fetchMobileTemplate(Context context, int subId) {
         if (!SubscriptionManager.isValidSubscriptionId(subId)) {
-            return;
+            return null;
         }
-        mTemplate = DataUsageUtils.getDefaultTemplate(mContext, mSubId);
+        return DataUsageUtils.getMobileTemplate(context, subId);
+    }
 
-        final DataUsageController controller = new DataUsageController(mContext);
-        controller.setSubscriptionId(mSubId);
-        mDataUsageInfo = controller.getDataUsageInfo(mTemplate);
+    private NetworkTemplate getNetworkTemplate() {
+        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
+            return null;
+        }
+        NetworkTemplate template = mTemplate.get();
+        if (template != null) {
+            return template;
+        }
+        try {
+            template = mTemplateFuture.get();
+            mTemplate.set(template);
+        } catch (ExecutionException | InterruptedException | NullPointerException exception) {
+            Log.e(LOG_TAG, "Fail to get data usage template", exception);
+        }
+        return template;
+    }
+
+    @VisibleForTesting
+    DataUsageController.DataUsageInfo getDataUsageInfo(DataUsageController controller) {
+        return controller.getDataUsageInfo(getNetworkTemplate());
+    }
+
+    private CharSequence getDataUsageSummary(Context context, int subId) {
+        final DataUsageController controller = new DataUsageController(context);
+        controller.setSubscriptionId(subId);
+
+        final DataUsageController.DataUsageInfo usageInfo = getDataUsageInfo(controller);
+
+        long usageLevel = usageInfo.usageLevel;
+        if (usageLevel <= 0L) {
+            usageLevel = controller.getHistoricalUsageLevel(getNetworkTemplate());
+        }
+        if (usageLevel <= 0L) {
+            return null;
+        }
+        return context.getString(R.string.data_usage_template,
+                DataUsageUtils.formatDataUsage(context, usageLevel), usageInfo.period);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
index 5327792..24cb10d 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java
@@ -62,7 +62,6 @@
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -133,7 +132,6 @@
     }
 
     @Test
-    @Ignore
     public void testGetAggregatedUsageEvents_onlyNotificationEvents() throws Exception {
         List<Event> events = new ArrayList<>();
         Event good = new Event();
@@ -156,7 +154,6 @@
     }
 
     @Test
-    @Ignore
     public void testGetAggregatedUsageEvents_multipleEventsAgg() throws Exception {
         List<Event> events = new ArrayList<>();
         Event good = new Event();
@@ -180,7 +177,6 @@
     }
 
     @Test
-    @Ignore
     public void testGetAggregatedUsageEvents_multiplePkgs() throws Exception {
         List<Event> events = new ArrayList<>();
         Event good = new Event();
@@ -219,7 +215,6 @@
     }
 
     @Test
-    @Ignore
     public void testLoadAllExtraInfo_multipleEventsAgg() throws RemoteException {
         List<Event> events = new ArrayList<>();
         for (int i = 0; i < 7; i++) {
@@ -249,7 +244,6 @@
     }
 
     @Test
-    @Ignore
     public void testLoadAllExtraInfo_multiplePkgs() throws RemoteException {
         List<Event> events = new ArrayList<>();
         for (int i = 0; i < 8; i++) {
@@ -287,7 +281,6 @@
     }
 
     @Test
-    @Ignore
     public void testLoadAllExtraInfo_multipleUsers() throws RemoteException {
         // has work profile
         when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{1});
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesPreferenceControllerTest.java
index 37f4635..8479035 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesPreferenceControllerTest.java
@@ -30,7 +30,6 @@
 
 import com.google.common.collect.ImmutableList;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -50,7 +49,6 @@
             new InteractAcrossProfilesDetailsPreferenceController(mContext, "test_key");
 
     @Test
-    @Ignore
     public void getAvailabilityStatus_requestedCrossProfilePermission_returnsAvailable() {
         mController.setPackageName(CROSS_PROFILE_PACKAGE_NAME);
         shadowOf(mPackageManager).setInstalledPackagesForUserId(
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettingsTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettingsTest.java
index ee1ff63..dac3e22 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettingsTest.java
@@ -37,7 +37,6 @@
 
 import com.google.common.collect.ImmutableList;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -74,7 +73,6 @@
     private final AppOpsManager mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
 
     @Test
-    @Ignore
     public void collectConfigurableApps_fromPersonal_returnsCombinedPackages() {
         shadowOf(mUserManager).addUser(
                 PERSONAL_PROFILE_ID, "personal-profile"/* name */, 0/* flags */);
@@ -100,7 +98,6 @@
     }
 
     @Test
-    @Ignore
     public void collectConfigurableApps_fromWork_returnsCombinedPackages() {
         shadowOf(mUserManager).addUser(
                 PERSONAL_PROFILE_ID, "personal-profile"/* name */, 0/* flags */);
@@ -142,7 +139,6 @@
     }
 
     @Test
-    @Ignore
     public void getNumberOfEnabledApps_returnsNumberOfEnabledApps() {
         shadowOf(mUserManager).addUser(
                 PERSONAL_PROFILE_ID, "personal-profile"/* name */, 0/* flags */);
diff --git a/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
index 5f2a54c..c0b12dc 100644
--- a/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
@@ -17,11 +17,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 
 import android.content.Context;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -31,7 +34,6 @@
 import com.android.settings.network.ProxySubscriptionManager;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -40,12 +42,13 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class CellDataPreferenceTest {
 
     @Mock
     private ProxySubscriptionManager mProxySubscriptionMgr;
     @Mock
+    private SubscriptionManager mSubscriptionManager;
+    @Mock
     private SubscriptionInfo mSubInfo;
 
     private Context mContext;
@@ -57,8 +60,20 @@
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
-        mPreference = new CellDataPreference(mContext, null);
-        mPreference.mProxySubscriptionMgr = mProxySubscriptionMgr;
+        mPreference = new CellDataPreference(mContext, null) {
+            @Override
+            ProxySubscriptionManager getProxySubscriptionManager() {
+                return mProxySubscriptionMgr;
+            }
+            @Override
+            SubscriptionInfo getActiveSubscriptionInfo(int subId) {
+                return mSubInfo;
+            }
+        };
+        doNothing().when(mSubscriptionManager).setDefaultDataSubId(anyInt());
+        doReturn(mSubscriptionManager).when(mProxySubscriptionMgr).get();
+        doNothing().when(mProxySubscriptionMgr).addActiveSubscriptionsListener(any());
+        doNothing().when(mProxySubscriptionMgr).removeActiveSubscriptionsListener(any());
 
         final LayoutInflater inflater = LayoutInflater.from(mContext);
         final View view = inflater.inflate(mPreference.getLayoutResource(),
@@ -69,14 +84,13 @@
 
     @Test
     public void noActiveSub_shouldDisable() {
-        doReturn(null).when(mProxySubscriptionMgr).getActiveSubscriptionInfo(anyInt());
+        mSubInfo = null;
         mPreference.mOnSubscriptionsChangeListener.onChanged();
         assertThat(mPreference.isEnabled()).isFalse();
     }
 
     @Test
     public void hasActiveSub_shouldEnable() {
-        doReturn(mSubInfo).when(mProxySubscriptionMgr).getActiveSubscriptionInfo(anyInt());
         mPreference.mOnSubscriptionsChangeListener.onChanged();
         assertThat(mPreference.isEnabled()).isTrue();
     }
diff --git a/tests/robotests/src/com/android/settings/development/WifiEnhancedMacRandomizationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/WifiEnhancedMacRandomizationPreferenceControllerTest.java
index 862f78f..25e5a22 100644
--- a/tests/robotests/src/com/android/settings/development/WifiEnhancedMacRandomizationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/WifiEnhancedMacRandomizationPreferenceControllerTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -27,7 +28,6 @@
 import androidx.preference.SwitchPreference;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -75,13 +75,12 @@
     }
 
     @Test
-    @Ignore
     public void updateState_preferenceShouldBeChecked() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 ENHANCED_MAC_RANDOMIZATION_FEATURE_FLAG, 1);
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isChecked()).isTrue();
+        verify(mPreference).setChecked(true);
     }
 
     @Test
@@ -90,7 +89,7 @@
                 ENHANCED_MAC_RANDOMIZATION_FEATURE_FLAG, 0);
         mController.updateState(mPreference);
 
-        assertThat(mPreference.isChecked()).isFalse();
+        verify(mPreference).setChecked(false);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayAutoModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayAutoModePreferenceControllerTest.java
index d6500dbb..7c046f8 100644
--- a/tests/robotests/src/com/android/settings/display/NightDisplayAutoModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/NightDisplayAutoModePreferenceControllerTest.java
@@ -16,16 +16,20 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
 import android.hardware.display.ColorDisplayManager;
+import android.location.LocationManager;
 
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mockito;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
@@ -36,10 +40,14 @@
 
     private Context mContext;
     private NightDisplayAutoModePreferenceController mController;
+    private LocationManager mLocationManager;
 
     @Before
     public void setUp() {
-        mContext = RuntimeEnvironment.application;
+        mContext = Mockito.spy(RuntimeEnvironment.application);
+        mLocationManager = Mockito.mock(LocationManager.class);
+        when(mLocationManager.isLocationEnabled()).thenReturn(true);
+        when(mContext.getSystemService(eq(LocationManager.class))).thenReturn(mLocationManager);
         mController = new NightDisplayAutoModePreferenceController(mContext,
             "night_display_auto_mode");
     }
@@ -64,7 +72,6 @@
     }
 
     @Test
-    @Ignore
     public void onPreferenceChange_changesAutoMode() {
         mController.onPreferenceChange(null,
                 String.valueOf(ColorDisplayManager.AUTO_MODE_TWILIGHT));
diff --git a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java
index 92ecdc8..1bbbe7d 100644
--- a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java
@@ -37,7 +37,6 @@
 import com.android.settings.R;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -103,16 +102,6 @@
     }
 
     @Test
-    @Ignore
-    public void nightMode_selectNightMode_locationOff() {
-        when(mLocationManager.isLocationEnabled()).thenReturn(false);
-        mController.onPreferenceChange(mPreference,
-                mContext.getString(R.string.dark_ui_auto_mode_never));
-        assertFalse(mController.onPreferenceChange(mPreference,
-                mContext.getString(R.string.dark_ui_auto_mode_auto)));
-    }
-
-    @Test
     public void nightMode_updateStateNone_dropDownValueChangedToAuto() {
         when(mUiService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_AUTO);
         mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java
index 3d6f162..ad546f3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AppInfoTest.java
@@ -22,14 +22,13 @@
 import android.text.format.DateUtils;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import org.robolectric.RobolectricTestRunner;
 
 @RunWith(RobolectricTestRunner.class)
 public class AppInfoTest {
@@ -56,7 +55,6 @@
     }
 
     @Test
-    @Ignore
     public void testParcel() {
         Parcel parcel = Parcel.obtain();
         mAppInfo.writeToParcel(parcel, mAppInfo.describeContents());
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java
index c0f237b..ffe8b20 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/HighUsageTipTest.java
@@ -28,7 +28,6 @@
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -66,7 +65,6 @@
     }
 
     @Test
-    @Ignore
     public void testParcelable() {
 
         Parcel parcel = Parcel.obtain();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
index ed3a446..11dffcd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/LowBatteryTipTest.java
@@ -26,7 +26,6 @@
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -54,7 +53,6 @@
     }
 
     @Test
-    @Ignore
     public void testParcelable() {
         Parcel parcel = Parcel.obtain();
         mLowBatteryTip.writeToParcel(parcel, mLowBatteryTip.describeContents());
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
index 8e4398b..b95040a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTipTest.java
@@ -34,21 +34,21 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.fuelgauge.batterytip.AppInfo;
+import com.android.settings.testutils.BatteryTestUtils;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
-import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(RobolectricTestRunner.class)
 public class RestrictAppTipTest {
@@ -110,7 +110,6 @@
     }
 
     @Test
-    @Ignore
     public void parcelable() {
         Parcel parcel = Parcel.obtain();
         mNewBatteryTip.writeToParcel(parcel, mNewBatteryTip.describeContents());
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTipTest.java
index dea180c..5688045 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTipTest.java
@@ -22,14 +22,12 @@
 import com.android.settings.fuelgauge.batterytip.AppInfo;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class UnrestrictAppTipTest {
 
     private static final String PACKAGE_NAME = "com.android.app";
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
index b105ddf..335e99f 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSliceTest.java
@@ -54,7 +54,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -115,7 +114,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_hasSuggestedApp_shouldHaveNotificationChannelTitle() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
@@ -131,7 +129,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_hasSuggestedApp_shouldSortByNotificationSentCount() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
@@ -227,7 +224,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_exceedDefaultRowCount_shouldOnlyShowDefaultRows() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
@@ -245,7 +241,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_channelCountIsLessThanDefaultRows_subTitleShouldNotHaveTapToManagerAll() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
@@ -262,7 +257,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_channelCountIsEqualToDefaultRows_subTitleShouldNotHaveTapToManagerAll() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
@@ -278,7 +272,6 @@
 
     @Test
     @Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-    @Ignore
     public void getSlice_channelCountIsMoreThanDefaultRows_subTitleShouldHaveTapToManagerAll() {
         addMockPackageToPackageManager(true /* isRecentlyInstalled */,
                 ApplicationInfo.FLAG_INSTALLED);
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelWorkerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelWorkerTest.java
index a72f018..6ac8b70 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelWorkerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelWorkerTest.java
@@ -33,7 +33,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -81,7 +80,6 @@
     }
 
     @Test
-    @Ignore
     public void onSliceUnpinned_interactedPackageIsInstalled_shouldKeepPackage() {
         mockInteractedPackageAsInstalled();
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
index 7681f44..43bda4e3 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
@@ -17,12 +17,12 @@
 package com.android.settings.network.telephony;
 
 import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
 
-import android.app.Activity;
 import android.app.usage.NetworkStatsManager;
 import android.content.Context;
 import android.content.Intent;
@@ -30,21 +30,22 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+
 import androidx.preference.SwitchPreference;
+
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.net.DataUsageController;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
 import org.robolectric.shadows.ShadowTelephonyManager;
-import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(RobolectricTestRunner.class)
 public class DataUsagePreferenceControllerTest {
@@ -71,7 +72,7 @@
         doReturn(mNetworkStatsManager).when(mContext).getSystemService(NetworkStatsManager.class);
 
         mPreference = new SwitchPreference(mContext);
-        mController = new DataUsagePreferenceController(mContext, "data_usage");
+        mController = spy(new DataUsagePreferenceController(mContext, "data_usage"));
         mController.init(SUB_ID);
         mPreference.setKey(mController.getPreferenceKey());
     }
@@ -114,8 +115,9 @@
 
     @Test
     public void updateState_noUsageData_shouldDisablePreference() {
-        ReflectionHelpers.setField(
-                mController, "mDataUsageInfo", new DataUsageController.DataUsageInfo());
+        final DataUsageController.DataUsageInfo usageInfo =
+                new DataUsageController.DataUsageInfo();
+        doReturn(usageInfo).when(mController).getDataUsageInfo(any());
 
         mController.updateState(mPreference);
 
@@ -124,9 +126,10 @@
 
     @Test
     public void updateState_shouldUseIECUnit() {
-        final DataUsageController.DataUsageInfo usageInfo = new DataUsageController.DataUsageInfo();
+        final DataUsageController.DataUsageInfo usageInfo =
+                new DataUsageController.DataUsageInfo();
         usageInfo.usageLevel = TrafficStats.MB_IN_BYTES;
-        ReflectionHelpers.setField(mController, "mDataUsageInfo", usageInfo);
+        doReturn(usageInfo).when(mController).getDataUsageInfo(any());
 
         mController.updateState(mPreference);
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceControllerTest.java
index 2cd4d42..b4e8a25 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/NrDisabledInDsdsFooterPreferenceControllerTest.java
@@ -24,6 +24,7 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import org.junit.Before;
@@ -43,6 +44,8 @@
     private Context mContext;
     @Mock
     private TelephonyManager mTelephonyManager;
+    @Mock
+    private SubscriptionManager mSubscriptionManager;
     private NrDisabledInDsdsFooterPreferenceController mController;
 
     @Before
@@ -50,6 +53,8 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
+        doReturn(mSubscriptionManager).when(mContext).getSystemService(
+                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
         doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
         mController = new NrDisabledInDsdsFooterPreferenceController(mContext, PREF_KEY);
     }
@@ -64,7 +69,7 @@
     public void isAvailable_dataOnAndDsdsAnd5GSupported_Available() {
         when(mTelephonyManager.getSupportedRadioAccessFamily())
                 .thenReturn(TelephonyManager.NETWORK_TYPE_BITMASK_NR);
-        when(mTelephonyManager.getActiveModemCount()).thenReturn(2);
+        when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1, 2});
         when(mTelephonyManager.isDataEnabled()).thenReturn(true);
         mController.init(SUB_ID);
         assertThat(mController.isAvailable()).isTrue();
@@ -74,7 +79,7 @@
     public void isAvailable_5gNotSupported_notAvailable() {
         when(mTelephonyManager.getSupportedRadioAccessFamily())
                 .thenReturn(TelephonyManager.NETWORK_TYPE_BITMASK_LTE);
-        when(mTelephonyManager.getActiveModemCount()).thenReturn(2);
+        when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1, 2});
         when(mTelephonyManager.isDataEnabled()).thenReturn(true);
         mController.init(SUB_ID);
         assertThat(mController.isAvailable()).isFalse();
@@ -84,7 +89,7 @@
     public void isAvailable_mobileDataOff_notAvailable() {
         when(mTelephonyManager.getSupportedRadioAccessFamily())
                 .thenReturn(TelephonyManager.NETWORK_TYPE_BITMASK_NR);
-        when(mTelephonyManager.getActiveModemCount()).thenReturn(2);
+        when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1, 2});
         when(mTelephonyManager.isDataEnabled()).thenReturn(false);
         mController.init(SUB_ID);
         assertThat(mController.isAvailable()).isFalse();
@@ -94,7 +99,7 @@
     public void isAvailable_singleSimMode_notAvailable() {
         when(mTelephonyManager.getSupportedRadioAccessFamily())
                 .thenReturn(TelephonyManager.NETWORK_TYPE_BITMASK_NR);
-        when(mTelephonyManager.getActiveModemCount()).thenReturn(1);
+        when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1});
         when(mTelephonyManager.isDataEnabled()).thenReturn(true);
         mController.init(SUB_ID);
         assertThat(mController.isAvailable()).isFalse();
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
index 2bbf006..cb50609 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
@@ -33,7 +33,6 @@
 
 import com.android.settings.notification.NotificationBackend.AppRow;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -94,7 +93,6 @@
     }
 
     @Test
-    @Ignore
     public void testGetAggregatedUsageEvents_multipleEventsAgg() {
         List<UsageEvents.Event> events = new ArrayList<>();
         UsageEvents.Event good = new UsageEvents.Event();
diff --git a/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java
index a567966..6226b9a 100644
--- a/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/RecentNotifyingAppsPreferenceControllerTest.java
@@ -47,19 +47,12 @@
 import android.service.notification.NotifyingApp;
 import android.text.TextUtils;
 
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceScreen;
-
 import com.android.settings.R;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -74,6 +67,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
 @RunWith(RobolectricTestRunner.class)
 public class RecentNotifyingAppsPreferenceControllerTest {
 
@@ -153,7 +152,6 @@
     }
 
     @Test
-    @Ignore
     public void display_showRecents() throws Exception {
         List<Event> events = new ArrayList<>();
         Event app = new Event();
@@ -201,7 +199,6 @@
     }
 
     @Test
-    @Ignore
     public void display_showRecentsWithInstantApp() throws Exception {
         List<Event> events = new ArrayList<>();
         Event app = new Event();
@@ -257,7 +254,6 @@
     }
 
     @Test
-    @Ignore
     public void display_showRecents_formatSummary() throws Exception {
         List<Event> events = new ArrayList<>();
         Event app = new Event();
@@ -282,7 +278,6 @@
     }
 
     @Test
-    @Ignore
     public void reloadData() throws Exception {
         when(mUserManager.getProfileIdsWithDisabled(0)).thenReturn(new int[] {0, 10});
 
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index 4ce9fa8..8749514 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -47,7 +47,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -310,7 +309,6 @@
      * preference title.
      */
     @Test
-    @Ignore
     public void testWebViewVersionAddedAfterLabel() {
         final DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mContext,
                 mContext.getPackageManager(),
