Merge "Add a gap in the ordering for phone numbers." into qt-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5149b9c..603900c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -183,6 +183,7 @@
             <intent-filter android:priority="1">
                 <action android:name="android.settings.WIRELESS_SETTINGS" />
                 <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
+                <action android:name="com.android.settings.sim.SIM_SUB_INFO_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter>
@@ -2624,27 +2625,6 @@
                 android:resource="@xml/file_paths" />
         </provider>
 
-        <activity
-            android:name="Settings$SimSettingsActivity"
-            android:label="@string/sim_settings_title"
-            android:icon="@drawable/ic_settings_sim"
-            android:parentActivityName="Settings">
-            <intent-filter android:priority="1">
-                <action android:name="com.android.settings.sim.SIM_SUB_INFO_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.order" android:value="-2"/>
-            <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.ia.wireless" />
-            <meta-data android:name="com.android.settings.summary"
-                android:resource="@string/summary_empty"/>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.sim.SimSettings" />
-        </activity>
-
         <activity android:name=".sim.SimPreferenceDialog"
             android:theme="@style/Theme.AlertDialog"
             android:excludeFromRecents="true" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 57d56ad..00feb17 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7331,6 +7331,8 @@
     <string name="keywords_notification_vibration">haptics, vibrate, sensitivity</string>
     <!-- Battery Saver: Search terms for sticky battery saver preference [CHAR_LIMIT=NONE] -->
     <string name="keywords_battery_saver_sticky">battery saver, sticky, persist, power saver, battery</string>
+    <!-- Battery Saver: Search terms for battery saver schedule preference. Feel free to add additional terms when translating if appropriate [CHAR_LIMIT=NONE] -->
+    <string name="keywords_battery_saver_schedule">routine, schedule, battery saver, power saver, battery, automatic, percent</string>
 
     <!-- Option title for the default sound, context based on screen -->
     <string name="default_sound">Default sound</string>
diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index 528e648..fa02bff 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -24,6 +24,7 @@
         android:key="battery_saver_schedule"
         android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings"
         android:title="@string/battery_saver_schedule_settings_title"
+        settings:keywords="@string/keywords_battery_saver_schedule"
         settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverSchedulePreferenceController"/>
 
     <SwitchPreference
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 8077ee3..4ac4be4 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -613,11 +613,6 @@
                 isAdmin) || somethingChanged;
 
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
-                        Settings.SimSettingsActivity.class.getName()),
-                Utils.showSimCardTile(this), isAdmin)
-                || somethingChanged;
-
-        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                         Settings.PowerUsageSummaryActivity.class.getName()),
                 mBatteryPresent, isAdmin) || somethingChanged;
 
@@ -639,9 +634,8 @@
                 showDev, isAdmin)
                 || somethingChanged;
 
-        boolean enableBackupTile = new BackupSettingsHelper(this).showBackupSettingsForUser();
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
-                UserBackupSettingsActivity.class.getName()), enableBackupTile, isAdmin)
+                UserBackupSettingsActivity.class.getName()), true, isAdmin)
                 || somethingChanged;
 
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
diff --git a/src/com/android/settings/backup/BackupInactivePreferenceController.java b/src/com/android/settings/backup/BackupInactivePreferenceController.java
index 92a9487..86e1220 100644
--- a/src/com/android/settings/backup/BackupInactivePreferenceController.java
+++ b/src/com/android/settings/backup/BackupInactivePreferenceController.java
@@ -28,7 +28,7 @@
 
     @Override
     public int getAvailabilityStatus() {
-        if (!new BackupSettingsHelper(mContext).showBackupSettingsForUser()) {
+        if (!new BackupSettingsHelper(mContext).isBackupServiceActive()) {
             return AVAILABLE_UNSEARCHABLE;
         }
         if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_INACTIVE)) {
diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java
index ff4b0b5..1d3455b 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -50,14 +50,6 @@
         mContext = context;
     }
 
-    public boolean showBackupSettingsForUser() {
-        // For profiles, we want them to be included in the profile select dialog even if
-        // backup is not activated.
-        // For other users, enable/disable backup settings depending on whether backup is activated
-        // for the user.
-        return UserManager.get(mContext).isManagedProfile() || isBackupServiceActive();
-    }
-
     /**
      * If there is only one profile, show whether the backup is on or off.
      * Otherwise, show nothing.
diff --git a/src/com/android/settings/backup/UserBackupSettingsActivity.java b/src/com/android/settings/backup/UserBackupSettingsActivity.java
index dbbb135..c2bcd07 100644
--- a/src/com/android/settings/backup/UserBackupSettingsActivity.java
+++ b/src/com/android/settings/backup/UserBackupSettingsActivity.java
@@ -123,7 +123,7 @@
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     final List<String> keys = super.getNonIndexableKeys(context);
-                    if (!new BackupSettingsHelper(context).showBackupSettingsForUser()) {
+                    if (!new BackupSettingsHelper(context).isBackupServiceActive()) {
                         keys.add(BACKUP_SEARCH_INDEX_KEY);
                     }
                     return keys;
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
index 1ffcb4c..70c00e5 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
@@ -22,6 +22,8 @@
 import android.hardware.face.FaceManager;
 import android.provider.Settings;
 
+import com.android.settings.Utils;
+
 import androidx.preference.Preference;
 
 /**
@@ -40,7 +42,7 @@
 
     public FaceSettingsAppPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
-        mFaceManager = context.getSystemService(FaceManager.class);
+        mFaceManager = Utils.getFaceManagerOrNull(context);
     }
 
     public FaceSettingsAppPreferenceController(Context context) {
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
index 7dbe557..c65cd23 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
@@ -24,6 +24,7 @@
 
 import androidx.preference.Preference;
 
+import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -46,7 +47,7 @@
     public FaceSettingsConfirmPreferenceController(Context context,
             String preferenceKey) {
         super(context, preferenceKey);
-        mFaceManager = context.getSystemService(FaceManager.class);
+        mFaceManager = Utils.getFaceManagerOrNull(context);
     }
 
     @Override
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
index 92eab85..c64455a 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java
@@ -26,6 +26,7 @@
 
 import androidx.preference.Preference;
 
+import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -44,7 +45,7 @@
 
     public FaceSettingsKeyguardPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
-        mFaceManager = context.getSystemService(FaceManager.class);
+        mFaceManager = Utils.getFaceManagerOrNull(context);
     }
 
     public FaceSettingsKeyguardPreferenceController(Context context) {
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
index 68ca259..990e68d 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
@@ -117,6 +117,7 @@
         @Override
         public void onClick(DialogInterface dialog, int which) {
             if (which == DialogInterface.BUTTON_POSITIVE) {
+                mButton.setEnabled(false);
                 final List<Face> faces = mFaceManager.getEnrolledFaces(mUserId);
                 if (faces.isEmpty()) {
                     Log.e(TAG, "No faces");
@@ -177,7 +178,6 @@
     public void onClick(View v) {
         if (v == mButton) {
             mRemoving = true;
-            mButton.setEnabled(false);
             ConfirmRemoveDialog dialog = new ConfirmRemoveDialog();
             dialog.setOnClickListener(mOnClickListener);
             dialog.show(mActivity.getSupportFragmentManager(), ConfirmRemoveDialog.class.getName());
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 19843a6..24fccef 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -300,7 +300,6 @@
             // Home page > Network & Internet
             Settings.WifiSettingsActivity.class.getName(),
             Settings.DataUsageSummaryActivity.class.getName(),
-            Settings.SimSettingsActivity.class.getName(),
             // Home page > Connected devices
             Settings.BluetoothSettingsActivity.class.getName(),
             Settings.WifiDisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index ad4e1e2..c3ffdae 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -50,7 +50,6 @@
 /**
  * Settings preference fragment that displays data usage summary.
  */
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
 public class DataUsageSummary extends DataUsageBaseFragment implements DataUsageEditController {
 
     private static final String TAG = "DataUsageSummary";
@@ -334,55 +333,4 @@
 
     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
         = SummaryProvider::new;
-
-    /**
-     * For search
-     */
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-        new BaseSearchIndexProvider() {
-
-            @Override
-            public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                    boolean enabled) {
-                List<SearchIndexableResource> resources = new ArrayList<>();
-                SearchIndexableResource resource = new SearchIndexableResource(context);
-                resource.xmlResId = R.xml.data_usage;
-                resources.add(resource);
-
-                resource = new SearchIndexableResource(context);
-                resource.xmlResId = R.xml.data_usage_cellular;
-                resources.add(resource);
-
-                resource = new SearchIndexableResource(context);
-                resource.xmlResId = R.xml.data_usage_wifi;
-                resources.add(resource);
-
-                return resources;
-            }
-
-            @Override
-            public List<String> getNonIndexableKeys(Context context) {
-                List<String> keys = super.getNonIndexableKeys(context);
-
-                if (!DataUsageUtils.hasMobileData(context)) {
-                    keys.add(KEY_MOBILE_USAGE_TITLE);
-                    keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE);
-                    keys.add(KEY_MOBILE_DATA_USAGE);
-                }
-
-                if (!DataUsageUtils.hasWifiRadio(context)) {
-                    keys.add(KEY_WIFI_DATA_USAGE);
-                }
-
-                // This title is named Wifi, and will confuse users.
-                keys.add(KEY_WIFI_USAGE_TITLE);
-
-                // Duplicate entry for "Data saver"
-                keys.add(KEY_RESTRICT_BACKGROUND);
-                // Duplicate entry for "Data warning & limit"
-                keys.add(KEY_MOBILE_BILLING_CYCLE);
-
-                return keys;
-            }
-        };
 }
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index 33d7a8a..4b2f50d 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -26,6 +26,7 @@
 import android.text.Spanned;
 import android.text.TextUtils;
 import android.text.style.TtsSpan;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
@@ -33,10 +34,10 @@
 import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.R;
 
-import java.util.List;
-
 public class ImeiInfoDialogController {
 
+    private static final String TAG = "ImeiInfoDialog";
+
     @VisibleForTesting
     static final int ID_PRL_VERSION_VALUE = R.id.prl_version_value;
     private static final int ID_MIN_NUMBER_LABEL = R.id.min_number_label;
@@ -75,15 +76,24 @@
         mDialog = dialog;
         mSlotId = slotId;
         final Context context = dialog.getContext();
-        mTelephonyManager = (TelephonyManager) context.getSystemService(
-                Context.TELEPHONY_SERVICE);
-        mSubscriptionInfo = getSubscriptionInfo(context, slotId);
+        mSubscriptionInfo = context.getSystemService(SubscriptionManager.class)
+                .getActiveSubscriptionInfoForSimSlotIndex(slotId);
+        if (mSubscriptionInfo != null) {
+            mTelephonyManager = context.getSystemService(TelephonyManager.class)
+                    .createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
+        } else {
+            mTelephonyManager = null;
+        }
     }
 
     /**
      * Sets IMEI/MEID information based on whether the device is CDMA or GSM.
      */
     public void populateImeiInfo() {
+        if (mTelephonyManager == null) {
+            Log.w(TAG, "TelephonyManager for this slot is null. Invalid slot? id=" + mSlotId);
+            return;
+        }
         if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
             updateDialogForCdmaPhone();
         } else {
@@ -94,9 +104,9 @@
     private void updateDialogForCdmaPhone() {
         final Resources res = mDialog.getContext().getResources();
         mDialog.setText(ID_MEID_NUMBER_VALUE, getMeid());
-        mDialog.setText(ID_MIN_NUMBER_VALUE,
-                mSubscriptionInfo != null ? mTelephonyManager.getCdmaMin(
-                        mSubscriptionInfo.getSubscriptionId()) : "");
+        mDialog.setText(ID_MIN_NUMBER_VALUE, mSubscriptionInfo != null
+                ? mTelephonyManager.getCdmaMin(mSubscriptionInfo.getSubscriptionId())
+                : "");
 
         if (res.getBoolean(R.bool.config_msid_enable)) {
             mDialog.setText(ID_MIN_NUMBER_LABEL,
@@ -125,16 +135,6 @@
         mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
     }
 
-    private SubscriptionInfo getSubscriptionInfo(Context context, int slotId) {
-        final List<SubscriptionInfo> subscriptionInfoList = SubscriptionManager.from(context)
-                .getActiveSubscriptionInfoList(true);
-        if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
-            return null;
-        }
-
-        return subscriptionInfoList.get(slotId);
-    }
-
     @VisibleForTesting
     String getCdmaPrlVersion() {
         return mTelephonyManager.getCdmaPrlVersion();
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index 68c9588..3459b5c 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -20,6 +20,8 @@
 
 import android.content.Context;
 import android.os.UserManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import androidx.annotation.VisibleForTesting;
@@ -77,10 +79,26 @@
     }
 
     @Override
+    public void updateState(Preference preference) {
+        if (preference == null) {
+            return;
+        }
+        int size = mPreferenceList.size();
+        for (int i = 0; i < size; i++) {
+            Preference pref = mPreferenceList.get(i);
+            updatePreference(pref, i);
+        }
+    }
+
+    @Override
     public CharSequence getSummary() {
-        final int phoneType = mTelephonyManager.getPhoneType();
-        return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid()
-                : mTelephonyManager.getImei();
+        return getSummary(0);
+    }
+
+    private CharSequence getSummary(int simSlot) {
+        final int phoneType = getPhoneType(simSlot);
+        return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid(simSlot)
+                : mTelephonyManager.getImei(simSlot);
     }
 
     @Override
@@ -117,19 +135,12 @@
 
     @Override
     public void copy() {
-        Sliceable.setCopyContent(mContext, getSummary(), mContext.getText(R.string.status_imei));
+        Sliceable.setCopyContent(mContext, getSummary(0), getTitle(0));
     }
 
     private void updatePreference(Preference preference, int simSlot) {
-        final int phoneType = mTelephonyManager.getPhoneType();
-        if (phoneType == PHONE_TYPE_CDMA) {
-            preference.setTitle(getTitleForCdmaPhone(simSlot));
-            preference.setSummary(getMeid(simSlot));
-        } else {
-            // GSM phone
-            preference.setTitle(getTitleForGsmPhone(simSlot));
-            preference.setSummary(mTelephonyManager.getImei(simSlot));
-        }
+        preference.setTitle(getTitle(simSlot));
+        preference.setSummary(getSummary(simSlot));
     }
 
     private CharSequence getTitleForGsmPhone(int simSlot) {
@@ -142,9 +153,17 @@
                 : mContext.getString(R.string.status_meid_number);
     }
 
-    @VisibleForTesting
-    String getMeid(int simSlot) {
-        return mTelephonyManager.getMeid(simSlot);
+    private CharSequence getTitle(int simSlot) {
+        final int phoneType = getPhoneType(simSlot);
+        return phoneType == PHONE_TYPE_CDMA ? getTitleForCdmaPhone(simSlot)
+                : getTitleForGsmPhone(simSlot);
+    }
+
+    private int getPhoneType(int slotIndex) {
+        SubscriptionInfo subInfo = SubscriptionManager.from(mContext)
+            .getActiveSubscriptionInfoForSimSlotIndex(slotIndex);
+        return mTelephonyManager.getCurrentPhoneType(subInfo != null ? subInfo.getSubscriptionId()
+                : SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/display/DarkUIInfoDialogFragment.java b/src/com/android/settings/display/DarkUIInfoDialogFragment.java
index 8fca679..7e17480 100644
--- a/src/com/android/settings/display/DarkUIInfoDialogFragment.java
+++ b/src/com/android/settings/display/DarkUIInfoDialogFragment.java
@@ -16,9 +16,6 @@
 
 package com.android.settings.display;
 
-import static com.android.settings.display.DarkUIPreferenceController.DARK_MODE_PREFS;
-import static com.android.settings.display.DarkUIPreferenceController.PREF_DARK_MODE_DIALOG_SEEN;
-
 import android.app.Dialog;
 import android.app.UiModeManager;
 import android.content.Context;
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 33f2553..34a8b91 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -193,6 +193,7 @@
                 && provider.isEnhancedBatteryPredictionEnabled(context)) {
             Estimate estimate = provider.getEnhancedBatteryPrediction(context);
             if (estimate != null) {
+                Estimate.storeCachedEstimate(context, estimate);
                 BatteryUtils
                         .logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime);
                 return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java
index 27923ef..dc30c28 100644
--- a/src/com/android/settings/fuelgauge/BatteryMeterView.java
+++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java
@@ -18,7 +18,6 @@
 
 import android.annotation.Nullable;
 import android.content.Context;
-import android.graphics.Color;
 import android.graphics.ColorFilter;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
@@ -38,7 +37,8 @@
     ColorFilter mErrorColorFilter;
     @VisibleForTesting
     ColorFilter mAccentColorFilter;
-    private boolean mPowerSaveEnabled;
+    @VisibleForTesting
+    ColorFilter mForegroundColorFilter;
 
     public BatteryMeterView(Context context) {
         this(context, null, 0);
@@ -57,7 +57,9 @@
                 PorterDuff.Mode.SRC);
         mErrorColorFilter = new PorterDuffColorFilter(
                 context.getColor(R.color.battery_icon_color_error), PorterDuff.Mode.SRC_IN);
-
+        mForegroundColorFilter =new PorterDuffColorFilter(
+                Utils.getColorAttrDefaultColor(context, android.R.attr.colorForeground),
+                PorterDuff.Mode.SRC);
         mDrawable = new BatteryMeterDrawable(context, frameColor);
         mDrawable.setColorFilter(mAccentColorFilter);
         setImageDrawable(mDrawable);
@@ -65,20 +67,16 @@
 
     public void setBatteryLevel(int level) {
         mDrawable.setBatteryLevel(level);
-        if (level < mDrawable.getCriticalLevel()) {
-            mDrawable.setColorFilter(mErrorColorFilter);
-        } else {
-            mDrawable.setColorFilter(mAccentColorFilter);
-        }
+        updateColorFilter();
     }
 
     public void setPowerSave(boolean powerSave) {
         mDrawable.setPowerSaveEnabled(powerSave);
-        mPowerSaveEnabled = powerSave;
+        updateColorFilter();
     }
 
     public boolean getPowerSave() {
-        return mPowerSaveEnabled;
+        return mDrawable.getPowerSaveEnabled();
     }
 
     public int getBatteryLevel() {
@@ -94,6 +92,18 @@
         return mDrawable.getCharging();
     }
 
+    private void updateColorFilter() {
+        final boolean powerSaveEnabled = mDrawable.getPowerSaveEnabled();
+        final int level = mDrawable.getBatteryLevel();
+        if (powerSaveEnabled) {
+            mDrawable.setColorFilter(mForegroundColorFilter);
+        } else if (level < mDrawable.getCriticalLevel()) {
+            mDrawable.setColorFilter(mErrorColorFilter);
+        } else {
+            mDrawable.setColorFilter(mAccentColorFilter);
+        }
+    }
+
     public static class BatteryMeterDrawable extends ThemedBatteryDrawable {
         private final int mIntrinsicWidth;
         private final int mIntrinsicHeight;
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index cb22356..b293695 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -450,7 +450,6 @@
                 SystemClock.elapsedRealtime());
         final BatteryStats stats = statsHelper.getStats();
         BatteryInfo batteryInfo;
-
         Estimate estimate = null;
         // Get enhanced prediction if available
         if (mPowerUsageFeatureProvider != null &&
@@ -458,7 +457,9 @@
             estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext);
         }
 
-        if (estimate == null) {
+        if (estimate != null) {
+            Estimate.storeCachedEstimate(mContext, estimate);
+        } else {
             estimate = new Estimate(
                     PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
                     false /* isBasedOnUsage */,
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 82ff4c2..78391f2 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -20,9 +20,14 @@
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
 import android.os.BatteryStats;
 import android.os.Bundle;
+import android.os.Handler;
 import android.provider.SearchIndexableResource;
+import android.provider.Settings;
+import android.provider.Settings.Global;
 import android.text.format.Formatter;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -102,6 +107,13 @@
     BatteryTipPreferenceController mBatteryTipPreferenceController;
     private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
 
+    private final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            restartBatteryInfoLoader();
+        }
+    };
+
     @VisibleForTesting
     LoaderManager.LoaderCallbacks<BatteryInfo> mBatteryInfoLoaderCallbacks =
             new LoaderManager.LoaderCallbacks<BatteryInfo>() {
@@ -190,6 +202,21 @@
             };
 
     @Override
+    public void onStop() {
+        getContentResolver().unregisterContentObserver(mSettingsObserver);
+        super.onStop();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        getContentResolver().registerContentObserver(
+                Global.getUriFor(Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
+                false,
+                mSettingsObserver);
+    }
+
+    @Override
     public void onAttach(Context context) {
         super.onAttach(context);
         final SettingsActivity activity = (SettingsActivity) getActivity();
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
index 07fc899..a262191 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
@@ -66,7 +66,12 @@
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
 public class NotificationChannelSlice implements CustomSliceable {
@@ -98,6 +103,7 @@
     private static final String PACKAGE_NAME = "package_name";
     private static final String PACKAGE_UID = "package_uid";
     private static final String CHANNEL_ID = "channel_id";
+    private static final long TASK_TIMEOUT_MS = 100;
 
     /**
      * Sort notification channel with weekly average sent count by descending.
@@ -129,6 +135,7 @@
             };
 
     protected final Context mContext;
+    private final ExecutorService mExecutorService;
     @VisibleForTesting
     NotificationBackend mNotificationBackend;
     private NotificationBackend.AppRow mAppRow;
@@ -138,6 +145,7 @@
     public NotificationChannelSlice(Context context) {
         mContext = context;
         mNotificationBackend = new NotificationBackend();
+        mExecutorService = Executors.newCachedThreadPool();
     }
 
     @Override
@@ -151,10 +159,7 @@
          * 2. Multiple channels.
          * 3. Sent at least ~10 notifications.
          */
-        // TODO(b/123065955): Review latency of NotificationChannelSlice
-        final List<PackageInfo> multiChannelPackages = getMultiChannelPackages(
-                getRecentlyInstalledPackages());
-        mPackageName = getMaxSentNotificationsPackage(multiChannelPackages);
+        mPackageName = getEligibleNotificationsPackage(getRecentlyInstalledPackages());
         if (mPackageName == null) {
             // Return a header with IsError flag, if package is not found.
             return listBuilder.setHeader(getNoSuggestedAppHeader())
@@ -306,25 +311,6 @@
         return PendingIntent.getBroadcast(mContext, intent.hashCode(), intent, 0);
     }
 
-    private List<PackageInfo> getMultiChannelPackages(List<PackageInfo> packageInfoList) {
-        final List<PackageInfo> multiChannelPackages = new ArrayList<>();
-
-        if (packageInfoList.isEmpty()) {
-            return multiChannelPackages;
-        }
-
-        for (PackageInfo packageInfo : packageInfoList) {
-            final int channelCount = mNotificationBackend.getChannelCount(packageInfo.packageName,
-                    getApplicationUid(packageInfo.packageName));
-            if (channelCount > 1) {
-                multiChannelPackages.add(packageInfo);
-            }
-        }
-
-        // TODO(b/119831690): Filter the packages which doesn't have any configurable channel.
-        return multiChannelPackages;
-    }
-
     private List<PackageInfo> getRecentlyInstalledPackages() {
         final long startTime = System.currentTimeMillis() - DURATION_START_DAYS;
         final long endTime = System.currentTimeMillis() - DURATION_END_DAYS;
@@ -383,19 +369,33 @@
                 .collect(Collectors.toList());
     }
 
-    private String getMaxSentNotificationsPackage(List<PackageInfo> packageInfoList) {
+    private String getEligibleNotificationsPackage(List<PackageInfo> packageInfoList) {
         if (packageInfoList.isEmpty()) {
             return null;
         }
 
+        // Create tasks to get notification data for multi-channel packages.
+        final List<Future<NotificationBackend.AppRow>> appRowTasks = new ArrayList<>();
+        for (PackageInfo packageInfo : packageInfoList) {
+            final NotificationMultiChannelAppRow future = new NotificationMultiChannelAppRow(
+                    mContext, mNotificationBackend, packageInfo);
+            appRowTasks.add(mExecutorService.submit(future));
+        }
+
         // Get the package which has sent at least ~10 notifications and not turn off channels.
         int maxSentCount = 0;
         String maxSentCountPackage = null;
-        for (PackageInfo packageInfo : packageInfoList) {
-            final NotificationBackend.AppRow appRow = mNotificationBackend.loadAppRow(mContext,
-                    mContext.getPackageManager(), packageInfo);
+        for (Future<NotificationBackend.AppRow> appRowTask : appRowTasks) {
+            NotificationBackend.AppRow appRow = null;
+            try {
+                appRow = appRowTask.get(TASK_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            } catch (ExecutionException | InterruptedException | TimeoutException e) {
+                Log.w(TAG, "Failed to get notification data.", e);
+            }
+
             // Ignore packages which are banned notifications or block all displayable channels.
-            if (appRow.banned || isAllChannelsBlocked(getDisplayableChannels(appRow))) {
+            if (appRow == null || appRow.banned || isAllChannelsBlocked(
+                    getDisplayableChannels(appRow))) {
                 continue;
             }
 
@@ -403,7 +403,7 @@
             final int sentCount = appRow.sentByApp.sentCount;
             if (sentCount >= MIN_NOTIFICATION_SENT_COUNT && sentCount > maxSentCount) {
                 maxSentCount = sentCount;
-                maxSentCountPackage = packageInfo.packageName;
+                maxSentCountPackage = appRow.pkg;
                 mAppRow = appRow;
             }
         }
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java
new file mode 100644
index 0000000..4edce14
--- /dev/null
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRow.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.homepage.contextualcards.slices;
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+
+import com.android.settings.notification.NotificationBackend;
+
+import java.util.concurrent.Callable;
+
+/**
+ * This class is responsible for getting notification app row from package which has multiple
+ * notification channels.{@link NotificationChannelSlice} uses it to improve latency.
+ */
+class NotificationMultiChannelAppRow implements Callable<NotificationBackend.AppRow> {
+
+    private final Context mContext;
+    private final NotificationBackend mNotificationBackend;
+    private final PackageInfo mPackageInfo;
+
+    public NotificationMultiChannelAppRow(Context context, NotificationBackend notificationBackend,
+            PackageInfo packageInfo) {
+        mContext = context;
+        mNotificationBackend = notificationBackend;
+        mPackageInfo = packageInfo;
+    }
+
+    @Override
+    public NotificationBackend.AppRow call() throws Exception {
+        final int channelCount = mNotificationBackend.getChannelCount(
+                mPackageInfo.applicationInfo.packageName, mPackageInfo.applicationInfo.uid);
+        if (channelCount > 1) {
+            return mNotificationBackend.loadAppRow(mContext, mContext.getPackageManager(),
+                    mPackageInfo);
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
index f44e107..c835a51 100644
--- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
@@ -18,6 +18,7 @@
 import android.Manifest;
 import android.content.Context;
 import android.content.Intent;
+import android.icu.text.RelativeDateTimeFormatter;
 import android.provider.DeviceConfig;
 import android.view.View;
 
@@ -30,6 +31,7 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.location.RecentLocationAccesses;
+import com.android.settingslib.utils.StringUtil;
 import com.android.settingslib.widget.AppEntitiesHeaderController;
 import com.android.settingslib.widget.AppEntityInfo;
 import com.android.settingslib.widget.LayoutPreference;
@@ -101,7 +103,9 @@
                 final AppEntityInfo appEntityInfo = new AppEntityInfo.Builder()
                         .setIcon(access.icon)
                         .setTitle(access.label)
-                        .setSummary(access.contentDescription)
+                        .setSummary(StringUtil.formatRelativeTime(mContext,
+                                System.currentTimeMillis() - access.accessFinishTime, false,
+                                RelativeDateTimeFormatter.Style.SHORT))
                         .setOnClickListener((v) -> {
                             final Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSION);
                             intent.putExtra(Intent.EXTRA_PERMISSION_NAME,
diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java
index 30551a9..dee5d62 100644
--- a/src/com/android/settings/media/MediaOutputSlice.java
+++ b/src/com/android/settings/media/MediaOutputSlice.java
@@ -70,21 +70,27 @@
 
     @Override
     public Slice getSlice() {
+        // Reload theme for switching dark mode on/off
+        mContext.getTheme().applyStyle(R.style.Theme_Settings_Home, true /* force */);
+
+        final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
+                .setAccentColor(COLOR_NOT_TINTED);
+
         final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
         if (!adapter.isEnabled()) {
             Log.d(TAG, "getSlice() Bluetooth is off");
-            return null;
+            return listBuilder.build();
         }
 
         if (getWorker() == null) {
             Log.d(TAG, "getSlice() Can not get worker through uri!");
-            return null;
+            return listBuilder.build();
         }
 
         final List<MediaDevice> devices = getMediaDevices();
 
         final MediaDevice connectedDevice = getWorker().getCurrentConnectedMediaDevice();
-        final ListBuilder listBuilder = buildActiveDeviceHeader(connectedDevice);
+        listBuilder.addRow(getActiveDeviceHeaderRow(connectedDevice));
 
         for (MediaDevice device : devices) {
             if (!TextUtils.equals(connectedDevice.getId(), device.getId())) {
@@ -95,7 +101,7 @@
         return listBuilder.build();
     }
 
-    private ListBuilder buildActiveDeviceHeader(MediaDevice device) {
+    private ListBuilder.RowBuilder getActiveDeviceHeaderRow(MediaDevice device) {
         final String title = device.getName();
         final IconCompat icon = getDeviceIconCompat(device);
 
@@ -104,16 +110,13 @@
         final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
                 ListBuilder.ICON_IMAGE, title);
 
-        final ListBuilder listBuilder = new ListBuilder(mContext, MEDIA_OUTPUT_SLICE_URI,
-                ListBuilder.INFINITY)
-                .setAccentColor(COLOR_NOT_TINTED)
-                .addRow(new ListBuilder.RowBuilder()
-                        .setTitleItem(icon, ListBuilder.ICON_IMAGE)
-                        .setTitle(title)
-                        .setSubtitle(device.getSummary())
-                        .setPrimaryAction(primarySliceAction));
+        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
+                .setTitleItem(icon, ListBuilder.ICON_IMAGE)
+                .setTitle(title)
+                .setSubtitle(device.getSummary())
+                .setPrimaryAction(primarySliceAction);
 
-        return listBuilder;
+        return rowBuilder;
     }
 
     private IconCompat getDeviceIconCompat(MediaDevice device) {
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 86655d4..e700329 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -101,16 +101,6 @@
                 }
             }
         }
-
-        // With some carriers such as Google Fi which provide a sort of virtual service that spans
-        // across multiple underlying networks, we end up with subscription entries for the
-        // underlying networks that need to be hidden from the user in the UI.
-        for (Iterator<SubscriptionInfo> iter = subscriptions.iterator(); iter.hasNext(); ) {
-            SubscriptionInfo info = iter.next();
-            if (TextUtils.isEmpty(info.getMncString())) {
-                iter.remove();
-            }
-        }
         return subscriptions;
     }
 }
diff --git a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java
index 7a131d7..f7e7de5 100644
--- a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java
+++ b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java
@@ -109,7 +109,7 @@
 
     @VisibleForTesting
     protected void populateView(View view) {
-        mNameView = (EditText) view.findViewById(R.id.edittext);
+        mNameView = view.findViewById(R.id.edittext);
         final SubscriptionInfo info = mSubscriptionManager.getActiveSubscriptionInfo(mSubId);
         if (info == null) {
             Log.w(TAG, "got null SubscriptionInfo for mSubId:" + mSubId);
@@ -125,6 +125,9 @@
         final ServiceState serviceState = mTelephonyManager.getServiceStateForSubscriber(mSubId);
         operatorName.setText(serviceState.getOperatorAlphaLong());
 
+        final TextView phoneTitle = view.findViewById(R.id.number_label);
+        phoneTitle.setVisibility(info.isOpportunistic() ? View.GONE : View.VISIBLE);
+
         final TextView phoneNumber = view.findViewById(R.id.number_value);
         final String formattedNumber = DeviceInfoUtils.getFormattedPhoneNumber(getContext(), info);
         phoneNumber.setText(BidiFormatter.getInstance().unicodeWrap(formattedNumber,
diff --git a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
index 1ec3c4f..8122df7 100644
--- a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
@@ -214,7 +214,7 @@
                     .setSourceMetricsCategory(
                             SettingsEnums.MANAGE_APPLICATIONS_NOTIFICATIONS)
                     .toIntent());
-            pref.setEnabled(mNotificationBackend.isBlockable(mContext, appEntry.info));
+            pref.setSwitchEnabled(mNotificationBackend.isBlockable(mContext, appEntry.info));
             pref.setOnPreferenceChangeListener((preference, newValue) -> {
                 boolean blocked = !(Boolean) newValue;
                 mNotificationBackend.setNotificationsEnabledForPackage(
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index d721efd..05bb0b2 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -78,23 +78,24 @@
     }
 
     private SimDialogFragment createFragment(int dialogType) {
-        switch(dialogType) {
+        switch (dialogType) {
             case DATA_PICK:
                 return SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
                         false /* includeAskEveryTime */);
             case CALLS_PICK:
-                return CallsSimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_calls,
+                return CallsSimListDialogFragment.newInstance(dialogType,
+                        R.string.select_sim_for_calls,
                         true /* includeAskEveryTime */);
             case SMS_PICK:
                 return SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_sms,
-                        false /* includeAskEveryTime */);
+                        true /* includeAskEveryTime */);
             case PREFERRED_PICK:
                 if (!getIntent().hasExtra(PREFERRED_SIM)) {
                     throw new IllegalArgumentException("Missing required extra " + PREFERRED_SIM);
                 }
                 return PreferredSimDialogFragment.newInstance();
             default:
-                throw new IllegalArgumentException( "Invalid dialog type " + dialogType + " sent.");
+                throw new IllegalArgumentException("Invalid dialog type " + dialogType + " sent.");
         }
     }
 
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index d7e5585..b950f30 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -28,6 +28,7 @@
 com.android.settings.bluetooth.DevicePickerFragment
 com.android.settings.datausage.AppDataUsage
 com.android.settings.datausage.DataUsageList
+com.android.settings.datausage.DataUsageSummary
 com.android.settings.datetime.timezone.TimeZoneSettings
 com.android.settings.deviceinfo.PrivateVolumeSettings
 com.android.settings.deviceinfo.PublicVolumeSettings
diff --git a/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java
index 669aabb..e9c0469 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java
@@ -54,18 +54,18 @@
     }
 
     @Test
-    public void getAvailabilityStatus_isnotInvisibleKey_showBackup_shouldBeAvailable() {
+    public void getAvailabilityStatus_isnotInvisibleKey_backupActive_shouldBeAvailable() {
         ShadowPrivacySettingsUtils.setIsInvisibleKey(false);
-        ShadowBackupSettingsHelper.showBackupSettingsForUser = true;
+        ShadowBackupSettingsHelper.isBackupServiceActive = true;
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.AVAILABLE);
     }
 
     @Test
-    public void getAvailabilityStatus_isnotInvisibleKey_dontShowBackup_shouldBeUnsearchable() {
+    public void getAvailabilityStatus_isnotInvisibleKey_backupNotActive_shouldBeUnsearchable() {
         ShadowPrivacySettingsUtils.setIsInvisibleKey(false);
-        ShadowBackupSettingsHelper.showBackupSettingsForUser = false;
+        ShadowBackupSettingsHelper.isBackupServiceActive = false;
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
@@ -74,7 +74,7 @@
     @Test
     public void getAvailabilityStatus_isInvisibleKey_shouldBeDisabledUnsupported() {
         ShadowPrivacySettingsUtils.setIsInvisibleKey(true);
-        ShadowBackupSettingsHelper.showBackupSettingsForUser = true;
+        ShadowBackupSettingsHelper.isBackupServiceActive = true;
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
diff --git a/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java
index 9c5a11a..7e703a6 100644
--- a/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java
@@ -123,8 +123,8 @@
     }
 
     @Test
-    public void getNonIndexableKeys_whenShowBackupSettings() {
-        ShadowBackupSettingsHelper.showBackupSettingsForUser = true;
+    public void getNonIndexableKeys_whenBackupServiceActive() {
+        ShadowBackupSettingsHelper.isBackupServiceActive = true;
 
         assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(
                 mApplication, true)).isNotEmpty();
@@ -133,8 +133,8 @@
     }
 
     @Test
-    public void getNonIndexableKeys_whenDontShowBackupSettings() {
-        ShadowBackupSettingsHelper.showBackupSettingsForUser = false;
+    public void getNonIndexableKeys_whenBackupServiceNotActive() {
+        ShadowBackupSettingsHelper.isBackupServiceActive = false;
 
         assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(
             mApplication, true)).isNotEmpty();
@@ -144,11 +144,11 @@
 
     @Implements(BackupSettingsHelper.class)
     public static class ShadowBackupSettingsHelper {
-        static boolean showBackupSettingsForUser = true;
+        static boolean isBackupServiceActive = true;
 
         @Implementation
-        public boolean showBackupSettingsForUser() {
-            return showBackupSettingsForUser;
+        public boolean isBackupServiceActive() {
+            return isBackupServiceActive;
         }
 
         @Implementation
@@ -163,7 +163,7 @@
 
         @Resetter
         public static void reset() {
-            showBackupSettingsForUser = true;
+            isBackupServiceActive = true;
         }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
index a19f022..f38668c 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogControllerTest.java
@@ -28,12 +28,14 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import org.junit.Before;
@@ -43,6 +45,9 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowSubscriptionManager;
+import org.robolectric.shadows.ShadowTelephonyManager;
 import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(RobolectricTestRunner.class)
@@ -53,6 +58,8 @@
     private static final String IMEI_NUMBER = "2341982751254";
     private static final String MIN_NUMBER = "123417851315";
     private static final String IMEI_SV_NUMBER = "12";
+    private static final int SLOT_ID = 0;
+    private static final int SUB_ID = 0;
 
     @Mock
     private ImeiInfoDialogFragment mDialog;
@@ -68,10 +75,16 @@
     public void setup() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
-        doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
+        final ShadowSubscriptionManager ssm = Shadow.extract(mContext.getSystemService(
+                SubscriptionManager.class));
+        ssm.setActiveSubscriptionInfos(mSubscriptionInfo);
+        when(mSubscriptionInfo.getSubscriptionId()).thenReturn(SUB_ID);
+        final ShadowTelephonyManager stm = Shadow.extract(mContext.getSystemService(
+                TelephonyManager.class));
+        stm.setTelephonyManagerForSubscriptionId(SUB_ID, mTelephonyManager);
         when(mDialog.getContext()).thenReturn(mContext);
-        mController = spy(new ImeiInfoDialogController(mDialog, 0 /* phone id */));
-        ReflectionHelpers.setField(mController, "mSubscriptionInfo", mSubscriptionInfo);
+
+        mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID));
 
         doReturn(PRL_VERSION).when(mController).getCdmaPrlVersion();
         doReturn(MEID_NUMBER).when(mController).getMeid();
@@ -81,6 +94,14 @@
     }
 
     @Test
+    public void populateImeiInfo_invalidSlot_shouldSetNothing() {
+        mController = spy(new ImeiInfoDialogController(mDialog, SLOT_ID + 1));
+
+        mController.populateImeiInfo();
+        verify(mDialog, never()).setText(anyInt(), any());
+    }
+
+    @Test
     public void populateImeiInfo_cdmaLteEnabled_shouldSetMeidAndImeiAndMin() {
         doReturn(true).when(mController).isCdmaLteEnabled();
         when(mTelephonyManager.getPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA);
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
index 69bc494..997c35e 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
@@ -93,7 +93,7 @@
     public void displayPreference_multiSimGsm_shouldAddSecondPreference() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
 
         mController.displayPreference(mScreen);
 
@@ -104,8 +104,8 @@
     public void displayPreference_singleSimCdmaPhone_shouldSetSingleSimCdmaTitleAndMeid() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String meid = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        doReturn(meid).when(mController).getMeid(anyInt());
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.displayPreference(mScreen);
 
@@ -118,8 +118,8 @@
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         final String meid = "125132215123";
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        doReturn(meid).when(mController).getMeid(anyInt());
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.displayPreference(mScreen);
 
@@ -134,7 +134,7 @@
     public void displayPreference_singleSimGsmPhone_shouldSetSingleSimGsmTitleAndImei() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String imei = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
         when(mTelephonyManager.getImei(anyInt())).thenReturn(imei);
 
         mController.displayPreference(mScreen);
@@ -148,7 +148,7 @@
         ReflectionHelpers.setField(mController, "mIsMultiSim", true);
         final String imei = "125132215123";
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_GSM);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_GSM);
         when(mTelephonyManager.getImei(anyInt())).thenReturn(imei);
 
         mController.displayPreference(mScreen);
@@ -176,8 +176,8 @@
     public void copy_shouldCopyImeiToClipboard() {
         ReflectionHelpers.setField(mController, "mIsMultiSim", false);
         final String meid = "125132215123";
-        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
-        when(mTelephonyManager.getMeid()).thenReturn(meid);
+        when(mTelephonyManager.getCurrentPhoneType(anyInt())).thenReturn(PHONE_TYPE_CDMA);
+        when(mTelephonyManager.getMeid(anyInt())).thenReturn(meid);
 
         mController.copy();
 
diff --git a/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
index 87284ed..f90c590 100644
--- a/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
@@ -26,9 +26,9 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.SharedPreferences;
+import android.provider.Settings;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -50,7 +50,6 @@
     }
 
     @Test
-    @Ignore("b/130897882")
     public void dialogDismissedOnConfirmation() {
         doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
         SharedPreferences prefs = RuntimeEnvironment.application.getSharedPreferences(
@@ -60,8 +59,7 @@
                 .isFalse();
         mFragment.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
         verify(dialog, times(1)).dismiss();
-        assertThat(prefs.getBoolean(DarkUIPreferenceController.PREF_DARK_MODE_DIALOG_SEEN, false))
-                .isTrue();
-
+        assertThat(Settings.Secure.getInt(RuntimeEnvironment.application.getContentResolver(),
+                Settings.Secure.DARK_MODE_DIALOG_SEEN, -1)).isEqualTo(1);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java
index 3e99433..0aa702a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryMeterViewTest.java
@@ -43,6 +43,8 @@
     private ColorFilter mErrorColorFilter;
     @Mock
     private ColorFilter mAccentColorFilter;
+    @Mock
+    private ColorFilter mForegroundColorFilter;
     private Context mContext;
     private BatteryMeterView mBatteryMeterView;
     private BatteryMeterView.BatteryMeterDrawable mDrawable;
@@ -58,6 +60,7 @@
         mBatteryMeterView.mDrawable = mDrawable;
         mBatteryMeterView.mAccentColorFilter = mAccentColorFilter;
         mBatteryMeterView.mErrorColorFilter = mErrorColorFilter;
+        mBatteryMeterView.mForegroundColorFilter = mForegroundColorFilter;
 
         when(mDrawable.getCriticalLevel()).thenReturn(BATTERY_CRITICAL_LEVEL);
     }
@@ -88,5 +91,6 @@
         mBatteryMeterView.setPowerSave(true);
 
         assertThat(mBatteryMeterView.getPowerSave()).isEqualTo(true);
+        verify(mDrawable).setColorFilter(mForegroundColorFilter);
     }
 }
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 6c020f8..60a6b42 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
@@ -319,6 +319,7 @@
         applicationInfo.name = APP_LABEL;
         applicationInfo.uid = UID;
         applicationInfo.flags = flags;
+        applicationInfo.packageName = PACKAGE_NAME;
 
         final PackageInfo packageInfo = new PackageInfo();
         packageInfo.packageName = PACKAGE_NAME;
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java
new file mode 100644
index 0000000..d722af6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/NotificationMultiChannelAppRowTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.homepage.contextualcards.slices;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+
+import com.android.settings.notification.NotificationBackend;
+
+import org.junit.Before;
+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;
+
+@RunWith(RobolectricTestRunner.class)
+public class NotificationMultiChannelAppRowTest {
+
+    @Mock
+    private NotificationBackend mNotificationBackend;
+    private Context mContext;
+    private NotificationMultiChannelAppRow mNotificationMultiChannelAppRow;
+    private PackageInfo mPackageInfo;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+        mPackageInfo = new PackageInfo();
+        mPackageInfo.applicationInfo = new ApplicationInfo();
+        mPackageInfo.applicationInfo.packageName = "com.android.test";
+        mNotificationMultiChannelAppRow = new NotificationMultiChannelAppRow(mContext,
+                mNotificationBackend, mPackageInfo);
+    }
+
+    @Test
+    public void call_isMultiChannel_shouldLoadAppRow() throws Exception {
+        doReturn(3).when(mNotificationBackend).getChannelCount(any(String.class),
+                any(int.class));
+
+        mNotificationMultiChannelAppRow.call();
+
+        verify(mNotificationBackend).loadAppRow(any(Context.class), any(PackageManager.class),
+                any(PackageInfo.class));
+    }
+
+    @Test
+    public void call_isNotMultiChannel_shouldNotLoadAppRow() throws Exception {
+        doReturn(1).when(mNotificationBackend).getChannelCount(any(String.class),
+                any(int.class));
+
+        mNotificationMultiChannelAppRow.call();
+
+        verify(mNotificationBackend, never()).loadAppRow(any(Context.class),
+                any(PackageManager.class), any(PackageInfo.class));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
index d210c7b..71a80de 100644
--- a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
@@ -129,32 +129,26 @@
         final View app1View = mAppEntitiesHeaderView.findViewById(R.id.app1_view);
         final ImageView appIconView1 = app1View.findViewById(R.id.app_icon);
         final TextView appTitle1 = app1View.findViewById(R.id.app_title);
-        final TextView appSummary1 = app1View.findViewById(R.id.app_summary);
 
         assertThat(app1View.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(appIconView1.getDrawable()).isNotNull();
         assertThat(appTitle1.getText()).isEqualTo("appTitle0");
-        assertThat(appSummary1.getText()).isEqualTo("appSummary0");
 
         final View app2View = mAppEntitiesHeaderView.findViewById(R.id.app2_view);
         final ImageView appIconView2 = app2View.findViewById(R.id.app_icon);
         final TextView appTitle2 = app2View.findViewById(R.id.app_title);
-        final TextView appSummary2 = app2View.findViewById(R.id.app_summary);
 
         assertThat(app2View.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(appIconView2.getDrawable()).isNotNull();
         assertThat(appTitle2.getText()).isEqualTo("appTitle1");
-        assertThat(appSummary2.getText()).isEqualTo("appSummary1");
 
         final View app3View = mAppEntitiesHeaderView.findViewById(R.id.app3_view);
         final ImageView appIconView3 = app3View.findViewById(R.id.app_icon);
         final TextView appTitle3 = app3View.findViewById(R.id.app_title);
-        final TextView appSummary3 = app3View.findViewById(R.id.app_summary);
 
         assertThat(app3View.getVisibility()).isEqualTo(View.VISIBLE);
         assertThat(appIconView3.getDrawable()).isNotNull();
         assertThat(appTitle3.getText()).isEqualTo("appTitle2");
-        assertThat(appSummary3.getText()).isEqualTo("appSummary2");
     }
 
     private List<RecentLocationAccesses.Access> createMockAccesses(int count) {
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
index 205f295..4a34919 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
@@ -17,6 +17,9 @@
 
 package com.android.settings.media;
 
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+
 import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -36,6 +39,7 @@
 import androidx.slice.SliceMetadata;
 import androidx.slice.SliceProvider;
 import androidx.slice.core.SliceAction;
+import androidx.slice.core.SliceQuery;
 import androidx.slice.widget.SliceLiveData;
 
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
@@ -97,10 +101,27 @@
     }
 
     @Test
-    public void getSlice_workerIsNull_shouldNotCrash() {
+    public void getSlice_workerIsNull_shouldReturnZeroRow() {
         mMediaOutputSlice.init(TEST_PACKAGE_NAME, null);
 
-        mMediaOutputSlice.getSlice();
+        final Slice slice = mMediaOutputSlice.getSlice();
+
+        final int rows = SliceQuery.findAll(slice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null /* nonHints */).size();
+
+        assertThat(rows).isEqualTo(0);
+    }
+
+    @Test
+    public void getSlice_bluetoothIsDisable_shouldReturnZeroRow() {
+        mShadowBluetoothAdapter.setEnabled(false);
+
+        final Slice slice = mMediaOutputSlice.getSlice();
+
+        final int rows = SliceQuery.findAll(slice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null /* nonHints */).size();
+
+        assertThat(rows).isEqualTo(0);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
index 28a390d..c647914 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -72,7 +72,6 @@
     @Test
     public void getAvailableSubscriptions_oneSubscription_oneResult() {
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
-        when(info.getMncString()).thenReturn("fake1234");
         when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
@@ -83,8 +82,6 @@
     public void getAvailableSubscriptions_twoSubscriptions_twoResults() {
         final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
         final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
-        when(info1.getMncString()).thenReturn("fake1234");
-        when(info2.getMncString()).thenReturn("fake5678");
         when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(Arrays.asList(info1, info2));
         final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
         assertThat(subs).isNotNull();
@@ -92,51 +89,15 @@
     }
 
     @Test
-    public void getAvailableSubscriptions_oneSubWithHiddenNetworks_oneResult() {
-        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
-        when(info1.getSubscriptionId()).thenReturn(1);
-        when(info1.getMncString()).thenReturn("fake1234");
-        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(
-                new ArrayList<>(Arrays.asList(info1, info2, info3)));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
-        assertThat(subs).isNotNull();
-        assertThat(subs).hasSize(1);
-        assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
-    }
-
-    @Test
-    public void getAvailableSubscriptions_twoSubsWithHiddenNetworks_twoResults() {
-        final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo info4 = mock(SubscriptionInfo.class);
-        when(info1.getSubscriptionId()).thenReturn(1);
-        when(info1.getMncString()).thenReturn("fake1234");
-        when(info4.getSubscriptionId()).thenReturn(4);
-        when(info4.getMncString()).thenReturn("fake5678");
-        when(mSubMgr.getSelectableSubscriptionInfoList()).thenReturn(new ArrayList<>(
-                Arrays.asList(info1, info2, info3, info4)));
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(mContext);
-        assertThat(subs).isNotNull();
-        assertThat(subs).hasSize(2);
-        assertThat(subs.get(0).getSubscriptionId()).isEqualTo(1);
-        assertThat(subs.get(1).getSubscriptionId()).isEqualTo(4);
-    }
-
-    @Test
     public void getAvailableSubscriptions_oneSelectableOneDisabledPSim_twoResults() {
         final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
         final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
 
         when(info1.getSubscriptionId()).thenReturn(111);
-        when(info1.getMncString()).thenReturn("fake111");
         when(info1.getSimSlotIndex()).thenReturn(-1);
         when(info1.getCardString()).thenReturn("info1_cardid");
 
         when(info2.getSubscriptionId()).thenReturn(222);
-        when(info2.getMncString()).thenReturn("fake222");
         when(info2.getSimSlotIndex()).thenReturn(0);
         when(info2.getCardString()).thenReturn("info2_cardid");
 
@@ -165,17 +126,14 @@
         final SubscriptionInfo info3 = mock(SubscriptionInfo.class);
 
         when(info1.getSubscriptionId()).thenReturn(111);
-        when(info1.getMncString()).thenReturn("fake111");
         when(info1.getSimSlotIndex()).thenReturn(-1);
         when(info1.getCardString()).thenReturn("info1_cardid");
 
         when(info2.getSubscriptionId()).thenReturn(222);
-        when(info2.getMncString()).thenReturn("fake222");
         when(info2.getSimSlotIndex()).thenReturn(-1);
         when(info2.getCardString()).thenReturn("info2_cardid");
 
         when(info3.getSubscriptionId()).thenReturn(333);
-        when(info3.getMncString()).thenReturn("fake333");
         when(info3.getSimSlotIndex()).thenReturn(0);
         when(info3.getCardString()).thenReturn("info3_cardid");
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java b/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java
index 70816ea..5b008be 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragmentTest.java
@@ -34,9 +34,15 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.view.LayoutInflater;
+import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.R;
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 
 import org.junit.Before;
@@ -49,9 +55,6 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.FragmentActivity;
-
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = ShadowAlertDialogCompat.class)
 public class RenameMobileNetworkDialogFragmentTest {
@@ -123,6 +126,20 @@
         assertThat(captor.getValue()).isEqualTo("test2");
     }
 
+    @Test
+    public void populateView_infoIsOpportunistic_hideNumberLabel() {
+        final View view = LayoutInflater.from(mActivity).inflate(
+                R.layout.dialog_mobile_network_rename, null);
+        when(mSubscriptionMgr.getActiveSubscriptionInfo(mSubscriptionId)).thenReturn(
+                mSubscriptionInfo);
+        when(mSubscriptionInfo.isOpportunistic()).thenReturn(true);
+
+        startDialog();
+        mFragment.populateView(view);
+
+        assertThat(view.findViewById(R.id.number_label).getVisibility()).isEqualTo(View.GONE);
+    }
+
     /** Helper method to start the dialog */
     private AlertDialog startDialog() {
         mFragment.show(mActivity.getSupportFragmentManager(), null);