Merge "Record all contextual card log to MetricsFeatureProvider" into qt-dev
diff --git a/res/values/config.xml b/res/values/config.xml
index cdf2810..496b5d2 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -47,6 +47,8 @@
     <!-- Package name and fully-qualified class name for the wallpaper picker activity. -->
     <string name="config_wallpaper_picker_package" translatable="false">com.android.settings</string>
     <string name="config_wallpaper_picker_class" translatable="false">com.android.settings.Settings$WallpaperSettingsActivity</string>
+    <!-- Fully-qualified class name for the styles & wallpaper picker activity. -->
+    <string name="config_styles_and_wallpaper_picker_class" translatable="false"></string>
 
     <!-- Manufacturer backup settings to launch -->
     <string name="config_backup_settings_intent" translatable="false"></string>
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 940e6de..a612a47 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -53,9 +53,6 @@
         settings:keywords="@string/keywords_display_wallpaper"
         settings:useAdminDisabledSummary="true"
         settings:controller="com.android.settings.display.WallpaperPreferenceController">
-        <intent
-            android:targetPackage="@string/config_wallpaper_picker_package"
-            android:targetClass="@string/config_wallpaper_picker_class" />
     </com.android.settingslib.RestrictedPreference>
 
 
diff --git a/src/com/android/settings/applications/AppStateInstallAppsBridge.java b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
index f852bca..8a3e5a2 100644
--- a/src/com/android/settings/applications/AppStateInstallAppsBridge.java
+++ b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
@@ -93,8 +93,6 @@
         final InstallAppsState appState = new InstallAppsState();
         appState.permissionRequested = hasRequestedAppOpPermission(
                 Manifest.permission.REQUEST_INSTALL_PACKAGES, packageName);
-        appState.permissionGranted = hasPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES,
-                uid);
         appState.appOpMode = getAppOpMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES, uid,
                 packageName);
         return appState;
@@ -105,7 +103,6 @@
      */
     public static class InstallAppsState {
         boolean permissionRequested;
-        boolean permissionGranted;
         int appOpMode;
 
         public InstallAppsState() {
@@ -113,11 +110,7 @@
         }
 
         public boolean canInstallApps() {
-            if (appOpMode == AppOpsManager.MODE_DEFAULT) {
-                return permissionGranted;
-            } else {
-                return appOpMode == AppOpsManager.MODE_ALLOWED;
-            }
+            return appOpMode == AppOpsManager.MODE_ALLOWED;
         }
 
         public boolean isPotentialAppSource() {
@@ -126,8 +119,8 @@
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder("[permissionGranted: " + permissionGranted);
-            sb.append(", permissionRequested: " + permissionRequested);
+            StringBuilder sb = new StringBuilder();
+            sb.append("[permissionRequested: " + permissionRequested);
             sb.append(", appOpMode: " + appOpMode);
             sb.append("]");
             return sb.toString();
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 766fa50..8274634 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -112,7 +112,8 @@
     private UserManager mUserManager;
     private PackageManager mPm;
 
-    private boolean mFinishing;
+    @VisibleForTesting
+    boolean mFinishing;
     private boolean mListeningToPackageRemove;
 
 
@@ -544,7 +545,7 @@
     @VisibleForTesting
     void retrieveAppEntry() {
         final Activity activity = getActivity();
-        if (activity == null) {
+        if (activity == null || mFinishing) {
             return;
         }
         if (mState == null) {
@@ -650,7 +651,7 @@
                     || TextUtils.equals(mAppEntry.info.packageName, packageName)) {
                 onPackageRemoved();
             } else if (mAppEntry.info.isResourceOverlay()
-                       && TextUtils.equals(mPackageInfo.overlayTarget, packageName)) {
+                    && TextUtils.equals(mPackageInfo.overlayTarget, packageName)) {
                 refreshUi();
             }
         }
diff --git a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
index 1d2d793..9a651d2 100644
--- a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
@@ -41,6 +41,7 @@
 import com.android.settings.fuelgauge.BatteryMeterView;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnDestroy;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 import com.android.settingslib.utils.ThreadUtils;
@@ -54,7 +55,7 @@
  * This class adds a header with device name and status (connected/disconnected, etc.).
  */
 public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceController implements
-        LifecycleObserver, OnStart, OnStop, CachedBluetoothDevice.Callback {
+        LifecycleObserver, OnStart, OnStop, OnDestroy, CachedBluetoothDevice.Callback {
     private static final String TAG = "AdvancedBtHeaderCtrl";
 
     @VisibleForTesting
@@ -118,7 +119,13 @@
         }
         mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged);
         mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice());
+    }
 
+    @Override
+    public void onDestroy() {
+        if (!isAvailable()) {
+            return;
+        }
         // Destroy icon bitmap associated with this header
         for (Bitmap bitmap : mIconCache.values()) {
             if (bitmap != null) {
diff --git a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
index ed85a4a..fbaea93 100644
--- a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
+++ b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
@@ -36,11 +36,15 @@
 
     @Override
     public CharSequence getSummary() {
-        if (new WallpaperPreferenceController(mContext, "dummy_key").isAvailable()) {
-            return mContext.getText(R.string.display_dashboard_summary);
+        final WallpaperPreferenceController controller =
+                new WallpaperPreferenceController(mContext, "dummy_key");
+        if (controller.isAvailable()) {
+            return mContext.getText(
+                    controller.areStylesAvailable()
+                    ? R.string.display_dashboard_summary_with_style
+                    : R.string.display_dashboard_summary);
         } else {
             return mContext.getText(R.string.display_dashboard_nowallpaper_summary);
         }
     }
-
 }
diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java
index 0b09124..126be11 100644
--- a/src/com/android/settings/display/WallpaperPreferenceController.java
+++ b/src/com/android/settings/display/WallpaperPreferenceController.java
@@ -25,6 +25,7 @@
 import android.util.Log;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
@@ -34,16 +35,26 @@
 import java.util.List;
 
 public class WallpaperPreferenceController extends BasePreferenceController {
-
     private static final String TAG = "WallpaperPrefController";
 
     private final String mWallpaperPackage;
     private final String mWallpaperClass;
+    private final String mStylesAndWallpaperClass;
 
     public WallpaperPreferenceController(Context context, String key) {
         super(context, key);
         mWallpaperPackage = mContext.getString(R.string.config_wallpaper_picker_package);
         mWallpaperClass = mContext.getString(R.string.config_wallpaper_picker_class);
+        mStylesAndWallpaperClass =
+                mContext.getString(R.string.config_styles_and_wallpaper_picker_class);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        Preference preference = screen.findPreference(getPreferenceKey());
+        preference.setTitle(mContext.getString(areStylesAvailable()
+                ? R.string.style_and_wallpaper_settings_title : R.string.wallpaper_settings_title));
     }
 
     @Override
@@ -52,14 +63,7 @@
             Log.e(TAG, "No Wallpaper picker specified!");
             return UNSUPPORTED_ON_DEVICE;
         }
-        final ComponentName componentName =
-                new ComponentName(mWallpaperPackage, mWallpaperClass);
-        final PackageManager pm = mContext.getPackageManager();
-        final Intent intent = new Intent();
-        intent.setComponent(componentName);
-        final List<ResolveInfo> resolveInfos =
-                pm.queryIntentActivities(intent, 0 /* flags */);
-        return resolveInfos != null && !resolveInfos.isEmpty()
+        return canResolveWallpaperComponent(mWallpaperClass)
                 ? AVAILABLE_UNSEARCHABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
@@ -68,6 +72,31 @@
         disablePreferenceIfManaged((RestrictedPreference) preference);
     }
 
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (getPreferenceKey().equals(preference.getKey())) {
+            final ComponentName componentName = new ComponentName(mWallpaperPackage,
+                    areStylesAvailable() ? mStylesAndWallpaperClass : mWallpaperClass);
+            preference.getContext().startActivity(new Intent().setComponent(componentName));
+            return true;
+        }
+        return super.handlePreferenceTreeClick(preference);
+    }
+
+    /** Returns whether Styles & Wallpaper is enabled and available. */
+    public boolean areStylesAvailable() {
+        return !TextUtils.isEmpty(mStylesAndWallpaperClass)
+                && canResolveWallpaperComponent(mStylesAndWallpaperClass);
+    }
+
+    private boolean canResolveWallpaperComponent(String className) {
+        final ComponentName componentName = new ComponentName(mWallpaperPackage, className);
+        final PackageManager pm = mContext.getPackageManager();
+        final Intent intent = new Intent().setComponent(componentName);
+        final List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0 /* flags */);
+        return resolveInfos != null && !resolveInfos.isEmpty();
+    }
+
     private void disablePreferenceIfManaged(RestrictedPreference pref) {
         final String restriction = DISALLOW_SET_WALLPAPER;
         if (pref != null) {
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index 4de4026..542a869 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -1164,7 +1164,8 @@
                 // add APN type if it is not read-only and is not wild-cardable
                 if (!readOnlyApnTypes.contains(apnType)
                         && !apnType.equals(PhoneConstants.APN_TYPE_IA)
-                        && !apnType.equals(PhoneConstants.APN_TYPE_EMERGENCY)) {
+                        && !apnType.equals(PhoneConstants.APN_TYPE_EMERGENCY)
+                        && !apnType.equals(PhoneConstants.APN_TYPE_MCX)) {
                     if (first) {
                         first = false;
                     } else {
diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index 79715e3..a2e4116 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -24,12 +24,12 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
-import android.telephony.euicc.EuiccManager;
 import android.util.ArrayMap;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settings.network.telephony.MobileNetworkUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.List;
@@ -81,8 +81,8 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPreferenceScreen = screen;
-        final EuiccManager euiccManager = mContext.getSystemService(EuiccManager.class);
-        mPreferenceScreen.findPreference(KEY_ADD_MORE).setVisible(euiccManager.isEnabled());
+        mPreferenceScreen.findPreference(KEY_ADD_MORE).setVisible(
+                MobileNetworkUtils.showEuiccSettings(mContext));
         update();
     }
 
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index 56735ab..463d7ae 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -28,6 +28,7 @@
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settings.network.telephony.MobileNetworkUtils;
 import com.android.settings.widget.AddPreference;
 import com.android.settingslib.Utils;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -49,7 +50,6 @@
 
     private SubscriptionManager mSubscriptionManager;
     private SubscriptionsChangeListener mChangeListener;
-    private EuiccManager mEuiccManager;
     private AddPreference mPreference;
 
     /**
@@ -70,7 +70,6 @@
     public MobileNetworkSummaryController(Context context, Lifecycle lifecycle) {
         super(context);
         mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
-        mEuiccManager = mContext.getSystemService(EuiccManager.class);
         if (lifecycle != null) {
           mChangeListener = new SubscriptionsChangeListener(context, this);
           lifecycle.addObserver(this);
@@ -99,7 +98,7 @@
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
                 mSubscriptionManager);
         if (subs.isEmpty()) {
-            if (mEuiccManager.isEnabled()) {
+            if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 return mContext.getResources().getString(
                         R.string.mobile_network_summary_add_a_network);
             }
@@ -133,7 +132,7 @@
                 mSubscriptionManager);
 
         if (subs.isEmpty()) {
-            if (mEuiccManager.isEnabled()) {
+            if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 mPreference.setOnPreferenceClickListener((Preference pref) -> {
                     startAddSimFlow();
                     return true;
@@ -142,7 +141,7 @@
         } else {
             // We have one or more existing subscriptions, so we want the plus button if eSIM is
             // supported.
-            if (mEuiccManager.isEnabled()) {
+            if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 mPreference.setAddWidgetEnabled(!mChangeListener.isAirplaneModeOn());
                 mPreference.setOnAddClickListener(p -> startAddSimFlow());
             }
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 224fc41..5f1beca 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -27,16 +27,33 @@
 import java.util.List;
 
 public class SubscriptionUtil {
-    private static List<SubscriptionInfo> sResultsForTesting;
+    private static List<SubscriptionInfo> sAvailableResultsForTesting;
+    private static List<SubscriptionInfo> sActiveResultsForTesting;
 
     @VisibleForTesting
     public static void setAvailableSubscriptionsForTesting(List<SubscriptionInfo> results) {
-        sResultsForTesting = results;
+        sAvailableResultsForTesting = results;
+    }
+
+    @VisibleForTesting
+    public static void setActiveSubscriptionsForTesting(List<SubscriptionInfo> results) {
+        sActiveResultsForTesting = results;
+    }
+
+    public static List<SubscriptionInfo> getActiveSubscriptions(SubscriptionManager manager) {
+        if (sActiveResultsForTesting != null) {
+            return sActiveResultsForTesting;
+        }
+        List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true);
+        if (subscriptions == null) {
+            return new ArrayList<>();
+        }
+        return subscriptions;
     }
 
     public static List<SubscriptionInfo> getAvailableSubscriptions(SubscriptionManager manager) {
-        if (sResultsForTesting != null) {
-            return sResultsForTesting;
+        if (sAvailableResultsForTesting != null) {
+            return sAvailableResultsForTesting;
         }
         List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList();
         if (subscriptions == null) {
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index 1ff67f8..88ff5cf 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -129,7 +129,7 @@
         mSubscriptionPreferences = new ArrayMap<>();
 
         int order = mStartOrder;
-        for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mManager)) {
+        for (SubscriptionInfo info : SubscriptionUtil.getActiveSubscriptions(mManager)) {
             final int subId = info.getSubscriptionId();
             Preference pref = existingPrefs.remove(subId);
             if (pref == null) {
@@ -216,7 +216,7 @@
         if (mSubscriptionsListener.isAirplaneModeOn()) {
             return false;
         }
-        return SubscriptionUtil.getAvailableSubscriptions(mManager).size() >= 2;
+        return SubscriptionUtil.getActiveSubscriptions(mManager).size() >= 2;
     }
 
     @Override
diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
index e982a6b..02a2d58 100644
--- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
@@ -75,7 +75,7 @@
 
     @Override
     public int getAvailabilityStatus() {
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
         if (subs.size() > 1) {
             return AVAILABLE;
         } else {
@@ -121,7 +121,7 @@
         }
         mPreference.setVisible(true);
 
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mManager);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
 
         // We'll have one entry for each available subscription, plus one for a "ask me every
         // time" entry at the end.
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 42c1b93..939598b 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -177,7 +177,7 @@
      */
     public static boolean showEuiccSettings(Context context) {
         EuiccManager euiccManager =
-                (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
+                (EuiccManager) context.getSystemService(EuiccManager.class);
         if (!euiccManager.isEnabled()) {
             return false;
         }
@@ -185,7 +185,7 @@
         final ContentResolver cr = context.getContentResolver();
 
         TelephonyManager tm =
-                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+                (TelephonyManager) context.getSystemService(TelephonyManager.class);
         String currentCountry = tm.getNetworkCountryIso().toLowerCase();
         String supportedCountries =
                 Settings.Global.getString(cr, Settings.Global.EUICC_SUPPORTED_COUNTRIES);
diff --git a/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
index 304dfe9..277f63e 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
@@ -33,8 +33,10 @@
             new AppStateInstallAppsBridge.InstallAppsState();
         assertThat(appState.canInstallApps()).isFalse();
 
-        appState.permissionGranted = true;
         appState.permissionRequested = true;
+        assertThat(appState.canInstallApps()).isFalse();
+
+        appState.appOpMode = AppOpsManager.MODE_ALLOWED;
         assertThat(appState.canInstallApps()).isTrue();
 
         appState.appOpMode = AppOpsManager.MODE_ERRORED;
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
index 56e59f7..e46cd06 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
@@ -282,6 +282,13 @@
     }
 
     @Test
+    public void getPreferenceControllers_exiting_shouldReturnNull() {
+        mFragment.mFinishing = true;
+
+        assertThat(mFragment.createPreferenceControllers(mShadowContext)).isNull();
+    }
+
+    @Test
     public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo()
             throws PackageManager.NameNotFoundException {
         final String packageName = "Package1";
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
index b961669..3532bf8 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
@@ -209,6 +209,18 @@
         verify(mBluetoothAdapter, never()).unregisterMetadataListener(mBluetoothDevice);
     }
 
+    @Test
+    public void onDestroy_isAvailable_recycleBitmap() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
+                .thenReturn("true");
+        mController.mIconCache.put(ICON_URI, mBitmap);
+
+        mController.onDestroy();
+
+        assertThat(mController.mIconCache).isEmpty();
+        verify(mBitmap).recycle();
+    }
+
     private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) {
         final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary);
         assertThat(textView.getText().toString()).isEqualTo(
diff --git a/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
index 23d794c..d16a6d2 100644
--- a/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
@@ -39,14 +39,13 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.robolectric.annotation.Config;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
 @RunWith(RobolectricTestRunner.class)
 public class TopLevelDisplayPreferenceControllerTest {
     private Context mContext;
@@ -89,6 +88,19 @@
     }
 
     @Test
+    public void getSummary_hasWallpaperWithStyles_shouldReturnWallpaperSummary() {
+        when(mContext.getString(R.string.config_styles_and_wallpaper_picker_class))
+                .thenReturn("any.nonempty.class");
+        final List<ResolveInfo> resolveInfos = new ArrayList<>();
+        resolveInfos.add(mock(ResolveInfo.class));
+        when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
+                .thenReturn(resolveInfos);
+
+        assertThat(mController.getSummary())
+                .isEqualTo(mContext.getText(R.string.display_dashboard_summary_with_style));
+    }
+
+    @Test
     public void getSummary_hasWallpaper_shouldReturnNoWallpaperSummary() {
         final List<ResolveInfo> resolveInfos = new ArrayList<>();
         when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
diff --git a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
index a641b19..ca9dfcc 100644
--- a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
@@ -18,74 +18,132 @@
 
 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.mock;
-import static org.mockito.Mockito.when;
 
-import android.content.Context;
+import android.content.ComponentName;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.Preference;
+
 import com.android.settings.R;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+
+import com.google.common.collect.Lists;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowPackageManager;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {SettingsShadowResources.class})
 public class WallpaperPreferenceControllerTest {
-
-    private static final String WALLPAPER_PACKAGE = "TestPkg";
-    private static final String WALLPAPER_CLASS = "TestCls";
     private static final String TEST_KEY = "test_key";
 
-    @Mock
-    private Context mContext;
-    @Mock
-    private PackageManager mPackageManager;
+    private Intent mWallpaperIntent;
+    private Intent mStylesAndWallpaperIntent;
+    private FragmentActivity mContext;
+    private ShadowPackageManager mShadowPackageManager;
 
     private WallpaperPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        when(mContext.getString(R.string.config_wallpaper_picker_package))
-                .thenReturn(WALLPAPER_PACKAGE);
-        when(mContext.getString(R.string.config_wallpaper_picker_class))
-                .thenReturn(WALLPAPER_CLASS);
-        when(mContext.getPackageManager()).thenReturn(mPackageManager);
-
+        mContext = Robolectric.buildActivity(FragmentActivity.class).get();
+        SettingsShadowResources.overrideResource(
+                R.string.config_wallpaper_picker_package, "bogus.package.for.testing");
+        SettingsShadowResources.overrideResource(
+                R.string.config_styles_and_wallpaper_picker_class, "bogus.package.class");
+        mWallpaperIntent =  new Intent().setComponent(new ComponentName(
+                mContext.getString(R.string.config_wallpaper_picker_package),
+                mContext.getString(R.string.config_wallpaper_picker_class)));
+        mStylesAndWallpaperIntent = new Intent().setComponent(new ComponentName(
+                mContext.getString(R.string.config_wallpaper_picker_package),
+                mContext.getString(R.string.config_styles_and_wallpaper_picker_class)));
+        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
         mController = new WallpaperPreferenceController(mContext, TEST_KEY);
     }
 
     @Test
     public void isAvailable_wallpaperPickerEnabled_shouldReturnTrue() {
-        final List<ResolveInfo> resolveInfos = new ArrayList<>();
-        resolveInfos.add(mock(ResolveInfo.class));
-        when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
-                .thenReturn(resolveInfos);
+        mShadowPackageManager.setResolveInfosForIntent(
+                mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
 
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
     public void isAvailable_wallpaperPickerDisabled_shouldReturnFalse() {
-        when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt())).thenReturn(null);
+        mShadowPackageManager.setResolveInfosForIntent(
+                mWallpaperIntent, Lists.newArrayList());
 
         assertThat(mController.isAvailable()).isFalse();
+    }
 
-        final List<ResolveInfo> resolveInfos = new ArrayList<>();
-        when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
-                .thenReturn(resolveInfos);
+    @Test
+    public void areStylesAvailable_noComponentSpecified() {
+        SettingsShadowResources.overrideResource(
+                R.string.config_styles_and_wallpaper_picker_class, "");
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent, Lists.newArrayList());
 
-        assertThat(mController.isAvailable()).isFalse();
+        assertThat(mController.areStylesAvailable()).isFalse();
+    }
+
+    @Test
+    public void areStylesAvailable_componentUnresolveable() {
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent, Lists.newArrayList());
+
+        assertThat(mController.areStylesAvailable()).isFalse();
+    }
+
+    @Test
+    public void areStylesAvailable_componentResolved() {
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent,
+                Lists.newArrayList(mock(ResolveInfo.class)));
+
+        assertThat(mController.areStylesAvailable()).isTrue();
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_wallpaperOnly() {
+        mShadowPackageManager.setResolveInfosForIntent(
+                mWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent, Lists.newArrayList());
+        Preference preference = new Preference(mContext);
+        preference.setKey(TEST_KEY);
+
+        mController.handlePreferenceTreeClick(preference);
+
+        assertThat(Shadows.shadowOf(mContext)
+                .getNextStartedActivityForResult().intent.getComponent().getClassName())
+                .isEqualTo(mContext.getString(R.string.config_wallpaper_picker_class));
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_stylesAndWallpaper() {
+        mShadowPackageManager.setResolveInfosForIntent(
+                mWallpaperIntent, Lists.newArrayList());
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
+        Preference preference = new Preference(mContext);
+        preference.setKey(TEST_KEY);
+
+        mController.handlePreferenceTreeClick(preference);
+
+        assertThat(Shadows.shadowOf(mContext)
+                .getNextStartedActivityForResult().intent.getComponent().getClassName())
+                .isEqualTo(mContext.getString(R.string.config_styles_and_wallpaper_picker_class));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkListControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkListControllerTest.java
index 10264ab..342fed5 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkListControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkListControllerTest.java
@@ -21,7 +21,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -31,7 +30,9 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
+import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
 import android.telephony.euicc.EuiccManager;
 
 import org.junit.After;
@@ -53,6 +54,8 @@
 @RunWith(RobolectricTestRunner.class)
 public class MobileNetworkListControllerTest {
     @Mock
+    TelephonyManager mTelephonyManager;
+    @Mock
     EuiccManager mEuiccManager;
 
     @Mock
@@ -69,7 +72,9 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(Robolectric.setupActivity(Activity.class));
+        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
         when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
+        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.EUICC_PROVISIONED, 1);
         when(mPreferenceScreen.getContext()).thenReturn(mContext);
         mAddMorePreference = new Preference(mContext);
         when(mPreferenceScreen.findPreference(MobileNetworkListController.KEY_ADD_MORE)).thenReturn(
@@ -99,6 +104,7 @@
     @Test
     public void displayPreference_eSimSupported_addMoreLinkIsVisible() {
         when(mEuiccManager.isEnabled()).thenReturn(true);
+        when(mTelephonyManager.getNetworkCountryIso()).thenReturn("");
         mController.displayPreference(mPreferenceScreen);
         mController.onResume();
         assertThat(mAddMorePreference.isVisible()).isTrue();
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index 3404ca2..8bcf8b6 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -33,6 +33,7 @@
 import android.net.ConnectivityManager;
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
 import android.telephony.euicc.EuiccManager;
 import android.text.TextUtils;
 
@@ -59,6 +60,8 @@
     @Mock
     private Lifecycle mLifecycle;
     @Mock
+    private TelephonyManager mTelephonyManager;
+    @Mock
     private EuiccManager mEuiccManager;
     @Mock
     private PreferenceScreen mPreferenceScreen;
@@ -71,8 +74,11 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(Robolectric.setupActivity(Activity.class));
+        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
         when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
+        when(mTelephonyManager.getNetworkCountryIso()).thenReturn("");
         when(mEuiccManager.isEnabled()).thenReturn(true);
+        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.EUICC_PROVISIONED, 1);
 
         mController = new MobileNetworkSummaryController(mContext, mLifecycle);
         mPreference = spy(new AddPreference(mContext, null));
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
index dbc122a..c074466 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -108,4 +109,32 @@
         assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
         assertThat(subs.get(1).getSubscriptionId()).isEqualTo(4);
     }
+
+    @Test
+    public void getActiveSubscriptions_nullInfoFromSubscriptionManager_nonNullResult() {
+        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(null);
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        assertThat(subs).isNotNull();
+        assertThat(subs).isEmpty();
+    }
+
+    @Test
+    public void getActiveSubscriptions_oneSubscription_oneResult() {
+        final SubscriptionInfo info = mock(SubscriptionInfo.class);
+        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(Arrays.asList(info));
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        assertThat(subs).isNotNull();
+        assertThat(subs).hasSize(1);
+    }
+
+    @Test
+    public void getActiveSubscriptions_twoSubscriptions_twoResults() {
+        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+        when(mManager.getActiveSubscriptionInfoList(anyBoolean())).thenReturn(
+                Arrays.asList(info1, info2));
+        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
+        assertThat(subs).isNotNull();
+        assertThat(subs).hasSize(2);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 97966b3..26f26ff 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -103,19 +103,19 @@
 
     @After
     public void tearDown() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
+        SubscriptionUtil.setActiveSubscriptionsForTesting(null);
     }
 
     @Test
     public void isAvailable_oneSubscription_availableFalse() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(
                 Arrays.asList(mock(SubscriptionInfo.class)));
         assertThat(mController.isAvailable()).isFalse();
     }
 
     @Test
     public void isAvailable_twoSubscriptions_availableTrue() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(
                 Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class)));
         assertThat(mController.isAvailable()).isTrue();
     }
@@ -126,13 +126,13 @@
         for (int i = 0; i < 5; i++) {
             subs.add(mock(SubscriptionInfo.class));
         }
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(subs);
+        SubscriptionUtil.setActiveSubscriptionsForTesting(subs);
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
     public void isAvailable_airplaneModeOn_availableFalse() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(
                 Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class)));
         assertThat(mController.isAvailable()).isTrue();
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
@@ -141,7 +141,7 @@
 
     @Test
     public void onAirplaneModeChanged_airplaneModeTurnedOn_eventFired() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(
                 Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class)));
         mController.onResume();
         mController.displayPreference(mScreen);
@@ -157,7 +157,7 @@
     @Test
     public void onAirplaneModeChanged_airplaneModeTurnedOff_eventFired() {
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(
                 Arrays.asList(mock(SubscriptionInfo.class), mock(SubscriptionInfo.class)));
         mController.onResume();
         mController.displayPreference(mScreen);
@@ -174,13 +174,13 @@
     public void onSubscriptionsChanged_countBecameTwo_eventFired() {
         final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
         mController.onResume();
         mController.displayPreference(mScreen);
         assertThat(mController.isAvailable()).isFalse();
 
         final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         mController.onSubscriptionsChanged();
         assertThat(mController.isAvailable()).isTrue();
         assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
@@ -192,14 +192,14 @@
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
         when(sub1.getSubscriptionId()).thenReturn(1);
         when(sub2.getSubscriptionId()).thenReturn(2);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         mController.onResume();
         mController.displayPreference(mScreen);
         assertThat(mController.isAvailable()).isTrue();
         verify(mPreferenceCategory, times(2)).addPreference(any(Preference.class));
 
         final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
         mController.onSubscriptionsChanged();
         assertThat(mController.isAvailable()).isFalse();
         assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
@@ -221,7 +221,7 @@
         when(sub3.getSubscriptionId()).thenReturn(3);
 
         // Start out with only sub1 and sub2.
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         mController.onResume();
         mController.displayPreference(mScreen);
         final ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
@@ -233,7 +233,7 @@
         // Now replace sub2 with sub3, and make sure the old preference was removed and the new
         // preference was added.
         final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub3));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub3));
         mController.onSubscriptionsChanged();
         assertThat(mController.isAvailable()).isTrue();
         assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
@@ -259,7 +259,7 @@
             doReturn(i + 1).when(sub).getSubscriptionId();
             subscriptions.add(sub);
         }
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(subscriptions);
+        SubscriptionUtil.setActiveSubscriptionsForTesting(subscriptions);
         mController.displayPreference(mScreen);
         final ArgumentCaptor<Preference> prefCaptor = ArgumentCaptor.forClass(Preference.class);
         verify(mPreferenceCategory, times(subscriptionCount)).addPreference(prefCaptor.capture());
@@ -303,7 +303,7 @@
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
         when(sub1.getSubscriptionId()).thenReturn(11);
         when(sub2.getSubscriptionId()).thenReturn(22);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
 
         ShadowSubscriptionManager.setDefaultDataSubscriptionId(11);
         ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11);
@@ -324,7 +324,7 @@
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
         when(sub1.getSubscriptionId()).thenReturn(11);
         when(sub2.getSubscriptionId()).thenReturn(22);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
 
         ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(11);
         ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11);
@@ -346,7 +346,7 @@
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
         when(sub1.getSubscriptionId()).thenReturn(11);
         when(sub2.getSubscriptionId()).thenReturn(22);
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
 
         ShadowSubscriptionManager.setDefaultDataSubscriptionId(11);
         ShadowSubscriptionManager.setDefaultSmsSubscriptionId(22);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
index e503d70..7dd636a 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
@@ -73,19 +73,19 @@
 
     @After
     public void tearDown() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
+        SubscriptionUtil.setActiveSubscriptionsForTesting(null);
     }
 
     @Test
     public void getAvailabilityStatus_onlyOneSubscription_notAvailable() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(
                 createMockSub(1, "sub1")));
         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
     }
 
     @Test
     public void getAvailabilityStatus_twoSubscriptions_isAvailable() {
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(
                 createMockSub(1, "sub1"),
                 createMockSub(2, "sub2")));
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
@@ -95,7 +95,7 @@
     public void displayPreference_twoSubscriptionsSub1Default_correctListPreferenceValues() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -123,7 +123,7 @@
     public void displayPreference_twoSubscriptionsSub2Default_correctListPreferenceValues() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub2.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -156,7 +156,7 @@
         // Mark sub2 as opportunistic; then it should not appear in the list of entries/entryValues.
         when(sub2.isOpportunistic()).thenReturn(true);
 
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -179,7 +179,7 @@
     public void onPreferenceChange_prefChangedToSub2_callbackCalledCorrectly() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -192,7 +192,7 @@
     public void onPreferenceChange_prefChangedToAlwaysAsk_callbackCalledCorrectly() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -207,7 +207,7 @@
     public void onSubscriptionsChanged_twoSubscriptionsDefaultChanges_selectedEntryGetsUpdated() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
@@ -224,14 +224,14 @@
     public void onSubscriptionsChanged_goFromTwoSubscriptionsToOne_prefDisappears() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
         assertThat(mController.isAvailable()).isTrue();
         assertThat(mListPreference.isVisible()).isTrue();
 
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
         mController.onSubscriptionsChanged();
 
         assertThat(mController.isAvailable()).isFalse();
@@ -242,14 +242,14 @@
     public void onSubscriptionsChanged_goFromOneSubscriptionToTwo_prefAppears() {
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
         assertThat(mController.isAvailable()).isFalse();
         assertThat(mListPreference.isVisible()).isFalse();
 
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         mController.onSubscriptionsChanged();
 
         assertThat(mController.isAvailable()).isTrue();
@@ -261,13 +261,13 @@
         final SubscriptionInfo sub1 = createMockSub(111, "sub1");
         final SubscriptionInfo sub2 = createMockSub(222, "sub2");
         final SubscriptionInfo sub3 = createMockSub(333, "sub3");
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();
 
         mController.displayPreference(mScreen);
         assertThat(mListPreference.getEntries().length).isEqualTo(3);
 
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3));
+        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3));
         mController.onSubscriptionsChanged();
 
         assertThat(mController.isAvailable()).isTrue();
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
index b68a4ee..8ca577c 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
@@ -12,6 +12,7 @@
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
 import org.robolectric.annotation.RealObject;
+import org.robolectric.annotation.Resetter;
 import org.robolectric.shadows.ShadowResources;
 import org.robolectric.util.ReflectionHelpers.ClassParameter;
 
@@ -40,6 +41,7 @@
         overrideResource(resId, value);
     }
 
+    @Resetter
     public static void reset() {
         sResourceOverrides.clear();
     }