Merge "[DO NOT MERGE] Fix flicker for Data Usage page" into tm-dev
diff --git a/res/drawable/ic_error_outline.xml b/res/drawable/ic_error_outline.xml
deleted file mode 100644
index 2ddc6d4..0000000
--- a/res/drawable/ic_error_outline.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * Copyright (C) 2022 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.
- */
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:pathData="M11,15h2v2h-2v-2zM11,7h2v6h-2L11,7zM11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"
-        android:fillColor="?android:attr/colorError"
-        android:fillType="evenOdd"/>
-</vector>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 81303b0..9ab0cc2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -500,15 +500,6 @@
     <!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
     <string name="app_locale_picker_title">App Language</string>
 
-    <!-- Title for the warning message of the locale picker activity. [CHAR LIMIT=50]-->
-    <string name="warnings_title">Update the app</string>
-
-    <!-- Summary for the warning message of the locale picker activity. [CHAR LIMIT=70]-->
-    <string name="warnings_summary">You need to update the app for the latest available languages</string>
-
-    <!-- Button text on warning message [CHAR LIMIT=20]-->
-    <string name="warnings_button_update">Update now</string>
-
     <!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
     <string name="suggested_app_locales_title">Suggested languages</string>
 
@@ -1411,8 +1402,10 @@
     <!-- Message shown in screen lock picker while setting up the backup/fallback screen lock method for biometrics. Users can choose to use this method to unlock the screen instead of biometrics, or when biometrics are not accepted. [CHAR LIMIT=80] [BACKUP_MESSAGE_ID=2799884038398627882] -->
     <string name="lock_settings_picker_biometric_message">Choose your backup screen lock method</string>
 
-    <!-- Text shown on the screen lock menu. This text is letting the user know that their IT admin can't reset their screen lock if they forget it, and they can choose to set another lock that would be specifically for their work apps. The place-holders "LINK_BEGIN" and "LINK_END" must NOT be translated. They mark a link to bring the user to enroll a work profile screen lock instead. [CHAR LIMIT=100] -->
-    <string name="lock_settings_picker_admin_restricted_personal_message">If you forget your screen lock, your IT admin can\u2019t reset it. <annotation id="link">Set a separate work lock</annotation></string>
+    <!-- Text shown on the screen lock menu. This text is letting the user know that their IT admin can't reset their screen lock if they forget it. [CHAR LIMIT=100] -->
+    <string name="lock_settings_picker_admin_restricted_personal_message">If you forget your screen lock, your IT admin can\u2019t reset it.</string>
+    <!-- Text shown on the screen lock menu. This text is letting the user know that they can choose to set another lock that would be specifically for their work apps. [CHAR LIMIT=100] -->
+    <string name="lock_settings_picker_admin_restricted_personal_message_action">Set a separate work lock</string>
 
     <!-- Message shown in screen lock picker for setting up a work profile screen lock. [CHAR LIMIT=80] -->
     <string name="lock_settings_picker_profile_message">If you forget this lock, ask your IT admin to reset it</string>
@@ -7846,7 +7839,11 @@
     <string name="help_label">Help &amp; feedback</string>
 
     <!-- Summary text for support setting tile [CHAR LIMIT=None] -->
-    <string name="support_summary">Help articles, phone &amp; chat</string>
+    <string name="support_summary" product="default">Help articles, phone &amp; chat</string>
+    <!-- Summary text for support setting tile [CHAR LIMIT=None] -->
+    <string name="support_summary" product="tablet">Help articles, tablet &amp; chat</string>
+    <!-- Summary text for support setting tile [CHAR LIMIT=None] -->
+    <string name="support_summary" product="device">Help articles, device &amp; chat</string>
 
     <!-- Help URI, Default [DO NOT TRANSLATE] -->
     <string name="help_uri_default" translatable="false"></string>
diff --git a/res/xml/app_locale_details.xml b/res/xml/app_locale_details.xml
index e01db2f..f849441 100644
--- a/res/xml/app_locale_details.xml
+++ b/res/xml/app_locale_details.xml
@@ -24,13 +24,6 @@
         android:title="@string/desc_app_locale_disclaimer"
         android:order="1"/>
 
-    <com.android.settingslib.widget.BannerMessagePreference
-        android:key="key_warnings"
-        android:order="20"
-        android:icon="@drawable/ic_error_outline"
-        android:title="@string/warnings_title"
-        android:summary="@string/warnings_summary"/>
-
     <com.android.settingslib.widget.LayoutPreference
         android:key="app_locale_description"
         android:order="30"
diff --git a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
index 711eb0f..2078112 100644
--- a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
+++ b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
@@ -22,9 +22,7 @@
 import androidx.annotation.NonNull;
 import androidx.preference.PreferenceScreen;
 
-import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.core.instrumentation.SettingsStatsLog;
 import com.android.settings.widget.LabeledSeekBarPreference;
 
 /**
@@ -38,9 +36,6 @@
     private ProgressInteractionListener mInteractionListener;
     private LabeledSeekBarPreference mSeekBarPreference;
 
-    @EntryPoint
-    private int mEntryPoint;
-
     private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
             new SeekBar.OnSeekBarChangeListener() {
                 @Override
@@ -51,11 +46,6 @@
                         mInteractionListener.onProgressChanged();
                     }
 
-                    SettingsStatsLog.write(
-                            SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
-                            AccessibilityStatsLogUtils.convertToItemKeyName(getPreferenceKey()),
-                            progress,
-                            AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
                 }
 
                 @Override
@@ -107,14 +97,6 @@
         mSeekBarPreference.setProgress(defaultProgress);
     }
 
-    /**
-     * The entry point is used for logging.
-     *
-     * @param entryPoint from which settings page
-     */
-    void setEntryPoint(@EntryPoint int entryPoint) {
-        mEntryPoint = entryPoint;
-    }
 
     /**
      * Interface for callbacks when users interact with the seek bar.
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
index 104be26..4033404 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
@@ -129,18 +129,17 @@
 
         final TextReadingPreviewController previewController = new TextReadingPreviewController(
                 context, PREVIEW_KEY, fontSizeData, displaySizeData);
+        previewController.setEntryPoint(mEntryPoint);
         controllers.add(previewController);
 
         final PreviewSizeSeekBarController fontSizeController = new PreviewSizeSeekBarController(
                 context, FONT_SIZE_KEY, fontSizeData);
         fontSizeController.setInteractionListener(previewController);
-        fontSizeController.setEntryPoint(mEntryPoint);
         controllers.add(fontSizeController);
 
         final PreviewSizeSeekBarController displaySizeController = new PreviewSizeSeekBarController(
                 context, DISPLAY_SIZE_KEY, displaySizeData);
         displaySizeController.setInteractionListener(previewController);
-        displaySizeController.setEntryPoint(mEntryPoint);
         controllers.add(displaySizeController);
 
         mFontWeightAdjustmentController =
diff --git a/src/com/android/settings/accessibility/TextReadingPreviewController.java b/src/com/android/settings/accessibility/TextReadingPreviewController.java
index cef20aa..1be8c70 100644
--- a/src/com/android/settings/accessibility/TextReadingPreviewController.java
+++ b/src/com/android/settings/accessibility/TextReadingPreviewController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.SystemClock;
+import android.util.Log;
 import android.view.Choreographer;
 import android.view.View;
 
@@ -26,7 +27,9 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.instrumentation.SettingsStatsLog;
 import com.android.settings.display.PreviewPagerAdapter;
 import com.android.settings.widget.LabeledSeekBarPreference;
 
@@ -38,6 +41,7 @@
  */
 class TextReadingPreviewController extends BasePreferenceController implements
         PreviewSizeSeekBarController.ProgressInteractionListener {
+    private static final String TAG = "TextReadingPreviewCtrl";
     static final int[] PREVIEW_SAMPLE_RES_IDS = new int[]{
             R.layout.accessibility_text_reading_preview_app_grid,
             R.layout.screen_zoom_preview_1,
@@ -58,6 +62,9 @@
     private LabeledSeekBarPreference mFontSizePreference;
     private LabeledSeekBarPreference mDisplaySizePreference;
 
+    @EntryPoint
+    private int mEntryPoint;
+
     private final Choreographer.FrameCallback mCommit = f -> {
         tryCommitFontSizeConfig();
         tryCommitDisplaySizeConfig();
@@ -92,8 +99,8 @@
                 /* message= */ "Display size preference is null, the preview controller"
                         + " couldn't get the info");
 
-        mLastFontProgress = mFontSizePreference.getProgress();
-        mLastDisplayProgress = mDisplaySizePreference.getProgress();
+        mLastFontProgress = mFontSizeData.getInitialIndex();
+        mLastDisplayProgress = mDisplaySizeData.getInitialIndex();
 
         final Configuration origConfig = mContext.getResources().getConfiguration();
         final boolean isLayoutRtl =
@@ -132,6 +139,15 @@
     }
 
     /**
+     * The entry point is used for logging.
+     *
+     * @param entryPoint from which settings page
+     */
+    void setEntryPoint(@EntryPoint int entryPoint) {
+        mEntryPoint = entryPoint;
+    }
+
+    /**
      * Avoids the flicker when switching to the previous or next level.
      *
      * <p><br>[Flickering problem steps] commit()-> snapshot in framework(old screenshot) ->
@@ -162,6 +178,16 @@
         if (fontProgress != mLastFontProgress) {
             mFontSizeData.commit(fontProgress);
             mLastFontProgress = fontProgress;
+
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Font size: " + fontProgress);
+            }
+
+            SettingsStatsLog.write(
+                    SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
+                    AccessibilityStatsLogUtils.convertToItemKeyName(mFontSizePreference.getKey()),
+                    fontProgress,
+                    AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
         }
     }
 
@@ -170,6 +196,17 @@
         if (displayProgress != mLastDisplayProgress) {
             mDisplaySizeData.commit(displayProgress);
             mLastDisplayProgress = displayProgress;
+
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Display size: " + displayProgress);
+            }
+
+            SettingsStatsLog.write(
+                    SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED,
+                    AccessibilityStatsLogUtils.convertToItemKeyName(
+                            mDisplaySizePreference.getKey()),
+                    displayProgress,
+                    AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
         }
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index a6aeb89..9289db6 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -147,8 +147,7 @@
                 return AccessibilityGestureNavigationTutorial
                         .showAccessibilityGestureTutorialDialog(getPrefContext());
             case DialogEnums.MAGNIFICATION_EDIT_SHORTCUT:
-                final CharSequence dialogTitle = getPrefContext().getString(
-                        R.string.accessibility_shortcut_title, mPackageName);
+                final CharSequence dialogTitle = getShortcutTitle();
                 final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent())
                         ? DialogType.EDIT_SHORTCUT_MAGNIFICATION_SUW
                         : DialogType.EDIT_SHORTCUT_MAGNIFICATION;
diff --git a/src/com/android/settings/applications/AppLocaleUtil.java b/src/com/android/settings/applications/AppLocaleUtil.java
index 77fba89..3135796 100644
--- a/src/com/android/settings/applications/AppLocaleUtil.java
+++ b/src/com/android/settings/applications/AppLocaleUtil.java
@@ -99,7 +99,8 @@
      * Check the function of per app language is supported by current application.
      */
     public static boolean isAppLocaleSupported(Context context, String packageName) {
-        if (getPackageLocales(context, packageName) != null) {
+        LocaleList localeList = getPackageLocales(context, packageName);
+        if (localeList != null && localeList.size() > 0) {
             return true;
         }
 
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index 20cddec..88b9d51 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -21,12 +21,8 @@
 import android.app.LocaleManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.InstallSourceInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.Uri;
 import android.os.Bundle;
 import android.os.LocaleList;
 import android.os.UserHandle;
@@ -34,7 +30,6 @@
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.TextView;
 
@@ -48,8 +43,6 @@
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import com.android.settingslib.widget.BannerMessagePreference;
-import com.android.settingslib.widget.BannerMessagePreference.AttentionLevel;
 import com.android.settingslib.widget.LayoutPreference;
 
 import java.util.Locale;
@@ -62,7 +55,6 @@
     private static final String TAG = "AppLocaleDetails";
 
     private static final String KEY_APP_DESCRIPTION = "app_locale_description";
-    private static final String KEY_WARNINGS = "key_warnings";
     private static final String KEY_APP_DISCLAIMER = "app_locale_disclaimer";
 
     private boolean mCreated = false;
@@ -96,7 +88,6 @@
         mPrefOfDescription = getPreferenceScreen().findPreference(KEY_APP_DESCRIPTION);
         mPrefOfDisclaimer = getPreferenceScreen().findPreference(KEY_APP_DISCLAIMER);
         mApplicationInfo = getApplicationInfo(mPackageName, getContext().getUserId());
-        setWarningMessage();
         setDisclaimerPreference();
     }
 
@@ -119,7 +110,6 @@
     }
 
     private void refreshUi() {
-        setWarningMessage();
         setDescription();
     }
 
@@ -156,26 +146,6 @@
         getPreferenceScreen().addPreference(pref);
     }
 
-    private void setWarningMessage() {
-        BannerMessagePreference warningPreference =
-                (BannerMessagePreference) getPreferenceScreen().findPreference(KEY_WARNINGS);
-        try {
-            InstallSourceInfo installSourceInfo =
-                    getContext().getPackageManager().getInstallSourceInfo(mPackageName);
-            if (mApplicationInfo.isSystemApp()
-                    && installSourceInfo.getInstallingPackageName() == null) {
-                warningPreference.setAttentionLevel(AttentionLevel.MEDIUM);
-                warningPreference.setPositiveButtonOnClickListener(mBannerButtonClickListener);
-                warningPreference.setPositiveButtonText(R.string.warnings_button_update);
-                warningPreference.setVisible(true);
-            } else {
-                warningPreference.setVisible(false);
-            }
-        } catch (NameNotFoundException e) {
-            Log.e(TAG, "Exception while retrieving the package installer of " + mPackageName, e);
-        }
-    }
-
     private void setDisclaimerPreference() {
         if (FeatureFlagUtils.isEnabled(
                 getContext(), FeatureFlagUtils.SETTINGS_APP_LOCALE_OPT_IN_ENABLED)) {
@@ -192,19 +162,6 @@
         }
     }
 
-    private OnClickListener mBannerButtonClickListener = new OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            startActivity(getAppSearchIntent(mPackageName));
-        }
-    };
-
-    private static Intent getAppSearchIntent(String pkg) {
-        Intent intent = new Intent(Intent.ACTION_VIEW);
-        intent.setData(Uri.parse("market://details?id=" + pkg));
-        return intent;
-    }
-
     private ApplicationInfo getApplicationInfo(String packageName, int userId) {
         ApplicationInfo applicationInfo;
         try {
diff --git a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
index 80ce802..7b7e3e9 100644
--- a/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
+++ b/src/com/android/settings/applications/appinfo/ButtonActionDialogFragment.java
@@ -90,6 +90,12 @@
 
     @Override
     public void onClick(DialogInterface dialog, int which) {
+        // When it's in a multi-window mode, force stopping an app will lead to an activity
+        // recreate, and the dialog fragment will also be recreated. So dismiss the dialog before
+        // stopping the app.
+        if (mId == ButtonActionDialogFragment.DialogType.FORCE_STOP) {
+            dialog.dismiss();
+        }
         final AppButtonsDialogListener lsn =
                 (AppButtonsDialogListener) getTargetFragment();
         lsn.handleDialogClick(mId);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
index 66059e7..b5782cd 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -111,6 +111,11 @@
                     lottieAnimationView.setVisibility(View.GONE);
                     lottieAnimationViewPortrait.setVisibility(View.VISIBLE);
                     break;
+                case Surface.ROTATION_180:
+                    lottieAnimationView.setVisibility(View.VISIBLE);
+                    lottieAnimationView.setRotation(180);
+                    lottieAnimationViewPortrait.setVisibility(View.GONE);
+                    break;
                 case Surface.ROTATION_270:
                     lottieAnimationView.setVisibility(View.GONE);
                     lottieAnimationViewPortrait.setVisibility(View.VISIBLE);
@@ -342,10 +347,7 @@
             @Override
             public void onOrientationChanged(int orientation) {
                 final int currentRotation = getDisplay().getRotation();
-                if ((mPreviousRotation == Surface.ROTATION_90
-                        && currentRotation == Surface.ROTATION_270) || (
-                        mPreviousRotation == Surface.ROTATION_270
-                                && currentRotation == Surface.ROTATION_90)) {
+                if ((currentRotation + 2) % 4 == mPreviousRotation) {
                     mPreviousRotation = currentRotation;
                     recreate();
                 }
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index c8eb488..7e6eefe 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -39,6 +39,7 @@
     private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
     private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+    private static final String SLICE_ACTION = "com.android.settings.SEARCH_RESULT_TRAMPOLINE";
 
     @VisibleForTesting
     static final String KEY_CONNECTED_DEVICES = "connected_device_list";
@@ -72,8 +73,10 @@
                 SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
         String callingAppPackageName = PasswordUtils.getCallingAppPackageName(
                 getActivity().getActivityToken());
+        String action = getIntent() != null ? getIntent().getAction() : "";
         if (DEBUG) {
-            Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName);
+            Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName
+                    + ", action : " + action);
         }
         use(AvailableMediaDeviceGroupController.class).init(this);
         use(ConnectedDeviceGroupController.class).init(this);
@@ -81,9 +84,15 @@
         use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
                 ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
                 : null);
-        use(DiscoverableFooterPreferenceController.class).setAlwaysDiscoverable(
-                TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
-                        || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName));
+        use(DiscoverableFooterPreferenceController.class)
+                .setAlwaysDiscoverable(isAlwaysDiscoverable(callingAppPackageName, action));
+    }
+
+    @VisibleForTesting
+    boolean isAlwaysDiscoverable(String callingAppPackageName, String action) {
+        return TextUtils.equals(SLICE_ACTION, action) ? false
+                : TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName)
+                || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName);
     }
 
     /**
diff --git a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
index d4f93fa..42a3a16 100644
--- a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
+++ b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
@@ -132,7 +132,6 @@
         if (mStorageEntry.isPrivate()) {
             if (!mStorageEntry.isDefaultInternalStorage()) {
                 mRename.setVisible(true);
-                mUnmount.setVisible(true);
                 mFormatAsPortable.setVisible(true);
             }
 
diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
index 1ed6f5b..791a4e8 100644
--- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -38,7 +38,7 @@
 import com.android.settings.core.SettingsBaseActivity;
 
 public class AppLocalePickerActivity extends SettingsBaseActivity
-        implements LocalePickerWithRegion.LocaleSelectedListener {
+        implements LocalePickerWithRegion.LocaleSelectedListener, MenuItem.OnActionExpandListener {
     private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
 
     private String mPackageName;
@@ -75,9 +75,10 @@
 
         mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
                 mContextAsUser,
-                AppLocalePickerActivity.this,
+                this,
                 false /* translate only */,
-                mPackageName);
+                mPackageName,
+                this);
         mAppLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
         mAppLocaleDetailContainer = launchAppLocaleDetailsPage();
         // Launch Locale picker part.
@@ -103,6 +104,18 @@
         finish();
     }
 
+    @Override
+    public boolean onMenuItemActionCollapse(MenuItem item) {
+        mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+        return true;
+    }
+
+    @Override
+    public boolean onMenuItemActionExpand(MenuItem item) {
+        mAppBarLayout.setExpanded(false /*expanded*/, false /*animate*/);
+        return true;
+    }
+
     /** Sets the app's locale to the supplied language tag */
     private void setAppDefaultLocale(String languageTag) {
         LocaleManager localeManager = mContextAsUser.getSystemService(LocaleManager.class);
diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
index ec58a34..5effe6c 100644
--- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java
+++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
@@ -31,9 +31,9 @@
     private static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED =
             new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
     private final LocationManager mLocationManager;
-    /** Total number of apps that has location permission. */
-    private int mNumTotal = -1;
     private int mNumTotalLoading = 0;
+    /** Summary text. */
+    private static String sSummary = null;
     private BroadcastReceiver mReceiver;
     private Preference mPreference;
     private AtomicInteger loadingInProgress = new AtomicInteger(0);
@@ -51,12 +51,11 @@
     @Override
     public CharSequence getSummary() {
         if (mLocationManager.isLocationEnabled()) {
-            if (mNumTotal == -1) {
-                return mContext.getString(R.string.location_settings_loading_app_permission_stats);
+            if (sSummary == null) {
+                sSummary = mContext.getString(
+                        R.string.location_settings_loading_app_permission_stats);
             }
-            return mContext.getResources().getQuantityString(
-                    R.plurals.location_settings_summary_location_on,
-                    mNumTotal, mNumTotal);
+            return sSummary;
         } else {
             return mContext.getString(R.string.location_settings_summary_location_off);
         }
@@ -64,7 +63,8 @@
 
     @VisibleForTesting
     void setLocationAppCount(int numApps) {
-        mNumTotal = numApps;
+        sSummary = mContext.getResources().getQuantityString(
+                R.plurals.location_settings_summary_location_on, numApps, numApps);
         refreshSummary(mPreference);
     }
 
diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
index 288f1ac..c509bac 100644
--- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
@@ -16,8 +16,12 @@
 
 package com.android.settings.network.telephony;
 
+import static android.content.Context.MODE_PRIVATE;
+
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.telephony.SubscriptionManager;
+import android.util.Log;
 
 import androidx.fragment.app.FragmentActivity;
 
@@ -27,14 +31,27 @@
     private static final String TAG = "SubscriptionActionDialogActivity";
     // Arguments
     protected static final String ARG_SUB_ID = "sub_id";
-
     protected SubscriptionManager mSubscriptionManager;
 
+    public static final String SIM_ACTION_DIALOG_PREFS = "sim_action_dialog_prefs";
+    // Shared preference keys
+    public static final String KEY_PROGRESS_STATE = "progress_state";
+    public static final int PROGRESS_IS_NOT_SHOWING = 0;
+    public static final int PROGRESS_IS_SHOWING = 1;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         mSubscriptionManager = getSystemService(SubscriptionManager.class);
+        setProgressState(PROGRESS_IS_NOT_SHOWING);
+    }
+
+
+    @Override
+    public void finish() {
+        setProgressState(PROGRESS_IS_NOT_SHOWING);
+        super.finish();
     }
 
     /**
@@ -44,11 +61,13 @@
      */
     protected void showProgressDialog(String message) {
         ProgressDialogFragment.show(getFragmentManager(), message, null);
+        setProgressState(PROGRESS_IS_SHOWING);
     }
 
     /** Dismisses the loading dialog. */
     protected void dismissProgressDialog() {
         ProgressDialogFragment.dismiss(getFragmentManager());
+        setProgressState(PROGRESS_IS_NOT_SHOWING);
     }
 
     /**
@@ -60,4 +79,10 @@
     protected void showErrorDialog(String title, String message) {
         AlertDialogFragment.show(this, title, message);
     }
+
+    protected void setProgressState(int state) {
+        final SharedPreferences prefs = getSharedPreferences(SIM_ACTION_DIALOG_PREFS, MODE_PRIVATE);
+        prefs.edit().putInt(KEY_PROGRESS_STATE, state).apply();
+        Log.i(TAG, "setProgressState:" + state);
+    }
 }
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 5215a33..150dbe0 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -106,29 +106,20 @@
         return row;
     }
 
-    public AppRow loadAppRow(Context context, PackageManager pm,
-            RoleManager roleManager, PackageInfo app) {
+    public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) {
         final AppRow row = loadAppRow(context, pm, app.applicationInfo);
-        recordCanBeBlocked(context, pm, roleManager, app, row);
+        recordCanBeBlocked(app, row);
         return row;
     }
 
-    void recordCanBeBlocked(Context context, PackageManager pm, RoleManager rm, PackageInfo app,
-            AppRow row) {
-
+    void recordCanBeBlocked(PackageInfo app, AppRow row) {
         try {
             row.systemApp = row.lockedImportance =
-                    sINM.isPermissionFixed(app.packageName, row.userId);
+                    sINM.isImportanceLocked(app.packageName, app.applicationInfo.uid);
         } catch (RemoteException e) {
             Log.w(TAG, "Error calling NMS", e);
         }
-        // The permission system cannot make role permissions 'fixed', so check for these
-        // roles explicitly
-        List<String> roles = rm.getHeldRolesFromController(app.packageName);
-        if (roles.contains(RoleManager.ROLE_DIALER)
-                || roles.contains(RoleManager.ROLE_EMERGENCY)) {
-            row.systemApp = row.lockedImportance = true;
-        }
+
         // if the app targets T but has not requested the permission, we cannot change the
         // permission state
         if (app.applicationInfo.targetSdkVersion > Build.VERSION_CODES.S_V2) {
@@ -139,24 +130,6 @@
         }
     }
 
-    @VisibleForTesting static void markAppRowWithBlockables(String[] nonBlockablePkgs, AppRow row,
-            String packageName) {
-        if (nonBlockablePkgs != null) {
-            int N = nonBlockablePkgs.length;
-            for (int i = 0; i < N; i++) {
-                String pkg = nonBlockablePkgs[i];
-                if (pkg == null) {
-                    continue;
-                } else if (pkg.contains(":")) {
-                    // handled by NotificationChannel.isImportanceLockedByOEM()
-                    continue;
-                } else if (packageName.equals(nonBlockablePkgs[i])) {
-                    row.systemApp = row.lockedImportance = true;
-                }
-            }
-        }
-    }
-
     static public CharSequence getDeviceList(ICompanionDeviceManager cdm, LocalBluetoothManager lbm,
             String pkg, int userId) {
         boolean multiple = false;
@@ -191,10 +164,9 @@
     public boolean enableSwitch(Context context, ApplicationInfo app) {
         try {
             PackageInfo info = context.getPackageManager().getPackageInfo(
-                    app.packageName, PackageManager.GET_SIGNATURES);
-            RoleManager rm = context.getSystemService(RoleManager.class);
+                    app.packageName, PackageManager.GET_PERMISSIONS);
             final AppRow row = new AppRow();
-            recordCanBeBlocked(context, context.getPackageManager(), rm, info, row);
+            recordCanBeBlocked(info, row);
             boolean systemBlockable = !row.systemApp || (row.systemApp && row.banned);
             return systemBlockable && !row.lockedImportance;
         } catch (PackageManager.NameNotFoundException e) {
diff --git a/src/com/android/settings/notification/app/NotificationPreferenceController.java b/src/com/android/settings/notification/app/NotificationPreferenceController.java
index 9d339f0..fb19d9d 100644
--- a/src/com/android/settings/notification/app/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/app/NotificationPreferenceController.java
@@ -24,6 +24,7 @@
 import android.app.NotificationChannelGroup;
 import android.app.NotificationManager;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ShortcutInfo;
 import android.graphics.drawable.Drawable;
@@ -171,7 +172,8 @@
             return overrideCanConfigureValue;
         }
         if (mAppRow != null) {
-            return !mAppRow.systemApp && !mAppRow.lockedImportance;
+            boolean systemBlockable = !mAppRow.systemApp || (mAppRow.systemApp && mAppRow.banned);
+            return systemBlockable && !mAppRow.lockedImportance;
         }
         return true;
     }
diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java
index afc9a66..192a0ee 100644
--- a/src/com/android/settings/notification/app/NotificationSettings.java
+++ b/src/com/android/settings/notification/app/NotificationSettings.java
@@ -25,7 +25,6 @@
 import android.app.NotificationChannel;
 import android.app.NotificationChannelGroup;
 import android.app.NotificationManager;
-import android.app.role.RoleManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -69,7 +68,6 @@
     protected PackageManager mPm;
     protected NotificationBackend mBackend = new NotificationBackend();
     protected NotificationManager mNm;
-    protected RoleManager mRm;
     protected Context mContext;
 
     protected int mUid;
@@ -116,7 +114,6 @@
 
         mPm = getPackageManager();
         mNm = NotificationManager.from(mContext);
-        mRm = mContext.getSystemService(RoleManager.class);
 
         mPkg = mArgs != null && mArgs.containsKey(AppInfoBase.ARG_PACKAGE_NAME)
                 ? mArgs.getString(AppInfoBase.ARG_PACKAGE_NAME)
@@ -290,7 +287,7 @@
     }
 
     private void loadAppRow() {
-        mAppRow = mBackend.loadAppRow(mContext, mPm, mRm, mPkgInfo);
+        mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
     }
 
     private void loadChannelGroup() {
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index d3988fa..8a4e9bb 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -25,6 +25,7 @@
 import static android.app.admin.DevicePolicyResources.Strings.Settings.LOCK_SETTINGS_NEW_PROFILE_LOCK_TITLE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.LOCK_SETTINGS_UPDATE_PROFILE_LOCK_TITLE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK;
+import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK_ACTION;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE;
 
 import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
@@ -78,7 +79,6 @@
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.safetycenter.LockScreenSafetySource;
 import com.android.settings.search.SearchFeatureProvider;
-import com.android.settings.utils.AnnotationSpan;
 import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.widget.FooterPreference;
 
@@ -621,15 +621,20 @@
             } else if (!mForFace && !mForBiometrics && !mForFingerprint && !mIsManagedProfile
                     && mController.isScreenLockRestrictedByAdmin()
                     && profileUserId != UserHandle.USER_NULL) {
-                CharSequence description =
-                        mDpm.getResources().getString(WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK,
-                                () -> null);
-                if (description == null) {
-                    description = getText(
-                            R.string.lock_settings_picker_admin_restricted_personal_message);
-                }
-                final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
-                        AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, (view) -> {
+                final StringBuilder description = new StringBuilder(
+                        mDpm.getResources().getString(
+                                WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK,
+                                () -> getString(
+                                R.string.lock_settings_picker_admin_restricted_personal_message)));
+                footer.setVisible(true);
+                footer.setTitle(description);
+
+                final StringBuilder setLockText = new StringBuilder(
+                        mDpm.getResources().getString(
+                                WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK_ACTION,
+                                () -> getString(
+                          R.string.lock_settings_picker_admin_restricted_personal_message_action)));
+                View.OnClickListener setLockClickListener = (v) -> {
                     final Bundle extras = new Bundle();
                     extras.putInt(Intent.EXTRA_USER_ID, profileUserId);
                     if (mUserPassword != null) {
@@ -642,10 +647,9 @@
                             .setArguments(extras)
                             .launch();
                     finish();
-                });
-                CharSequence footerText = AnnotationSpan.linkify(description, linkInfo);
-                footer.setVisible(true);
-                footer.setTitle(footerText);
+                };
+                footer.setLearnMoreText(setLockText);
+                footer.setLearnMoreAction(setLockClickListener);
             } else {
                 footer.setVisible(false);
             }
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index 1125e1f..732277b 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -16,8 +16,11 @@
 
 package com.android.settings.sim;
 
+import static android.content.Context.MODE_PRIVATE;
+
 import android.app.Activity;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
@@ -32,6 +35,7 @@
 import androidx.fragment.app.FragmentManager;
 
 import com.android.settings.R;
+import com.android.settings.network.telephony.SubscriptionActionDialogActivity;
 
 import java.util.List;
 
@@ -60,6 +64,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
         getWindow().addSystemFlags(
                 WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
         showOrUpdateDialog();
@@ -72,6 +77,13 @@
         showOrUpdateDialog();
     }
 
+    private int getProgressState() {
+        final SharedPreferences prefs = getSharedPreferences(
+                SubscriptionActionDialogActivity.SIM_ACTION_DIALOG_PREFS, MODE_PRIVATE);
+        return prefs.getInt(SubscriptionActionDialogActivity.KEY_PROGRESS_STATE,
+                SubscriptionActionDialogActivity.PROGRESS_IS_NOT_SHOWING);
+    }
+
     private void showOrUpdateDialog() {
         final int dialogType = getIntent().getIntExtra(DIALOG_TYPE_KEY, INVALID_PICK);
 
@@ -80,6 +92,13 @@
             return;
         }
 
+        if (dialogType == PREFERRED_PICK
+                && getProgressState() == SubscriptionActionDialogActivity.PROGRESS_IS_SHOWING) {
+            Log.d(TAG, "Finish the sim dialog since the sim action dialog is showing the progress");
+            finish();
+            return;
+        }
+
         final String tag = Integer.toString(dialogType);
         final FragmentManager fragmentManager = getSupportFragmentManager();
         SimDialogFragment fragment = (SimDialogFragment) fragmentManager.findFragmentByTag(tag);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
index d9ed6b0..432104d 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/ButtonActionDialogFragmentTest.java
@@ -18,7 +18,9 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
@@ -73,6 +75,21 @@
     }
 
     @Test
+    public void testOnClick_forceStop_dismissDialog() {
+        ButtonActionDialogFragment fragment =
+                spy(ButtonActionDialogFragment.newInstance(FORCE_STOP_ID));
+        FragmentController.setupFragment(fragment, FragmentActivity.class, 0 /* containerViewId */,
+                null /* bundle */);
+        doReturn(mTargetFragment).when(fragment).getTargetFragment();
+        doNothing().when(mTargetFragment).handleDialogClick(anyInt());
+        final AlertDialog dialog = mock(AlertDialog.class);
+
+        fragment.onClick(dialog, 0);
+
+        verify(dialog).dismiss();
+    }
+
+    @Test
     public void testOnCreateDialog_forceStopDialog() {
         ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(FORCE_STOP_ID);
         FragmentController.setupFragment(fragment, FragmentActivity.class, 0 /* containerViewId */,
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
index 97d5485..5f0f2b9 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
@@ -54,16 +54,24 @@
     private static final String KEY_DISCOVERABLE_FOOTER = "discoverable_footer";
     private static final String KEY_SEE_ALL = "previously_connected_devices_see_all";
     private static final String KEY_ADD_BT_DEVICES = "add_bt_devices";
+    private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
+    private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";
+    private static final String SLICE_ACTION = "com.android.settings.SEARCH_RESULT_TRAMPOLINE";
+    private static final String TEST_APP_NAME = "com.testapp.settings";
+    private static final String TEST_ACTION = "com.testapp.settings.ACTION_START";
+
 
     @Mock
     private PackageManager mPackageManager;
     private Context mContext;
+    private ConnectedDeviceDashboardFragment mFragment;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = spy(RuntimeEnvironment.application);
+        mFragment = new ConnectedDeviceDashboardFragment();
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
     }
@@ -88,6 +96,26 @@
     }
 
     @Test
+    public void isAlwaysDiscoverable_callingAppIsNotFromSystemApp_returnsFalse() {
+        assertThat(mFragment.isAlwaysDiscoverable(TEST_APP_NAME, TEST_ACTION)).isFalse();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_callingAppIsFromSettings_returnsTrue() {
+        assertThat(mFragment.isAlwaysDiscoverable(SETTINGS_PACKAGE_NAME, TEST_ACTION)).isTrue();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_callingAppIsFromSystemUI_returnsTrue() {
+        assertThat(mFragment.isAlwaysDiscoverable(SYSTEMUI_PACKAGE_NAME, TEST_ACTION)).isTrue();
+    }
+
+    @Test
+    public void isAlwaysDiscoverable_actionIsFromSlice_returnsFalse() {
+        assertThat(mFragment.isAlwaysDiscoverable(SYSTEMUI_PACKAGE_NAME, SLICE_ACTION)).isFalse();
+    }
+
+    @Test
     public void getPreferenceControllers_containSlicePrefController() {
         final List<BasePreferenceController> controllers =
                 PreferenceControllerListHelper.getPreferenceControllersFromXml(mContext,
diff --git a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
index 68e7f88..f0bc705 100644
--- a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
@@ -56,31 +56,41 @@
     }
 
     @Test
-    public void getSummary_whenLocationIsOn_shouldShowLoadingString() {
+    public void getSummary_whenLocationIsOn_shouldPreservePreviousText() {
+        final int locationAppCount = 5;
+        // Retrieve summary text once.
+        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
+        mController.setLocationAppCount(locationAppCount);
+        mController.getSummary();
+        // Turn off location.
+        mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle());
+        // Turn on location again and check if the previous summary text is still cached.
         mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
         assertThat(mController.getSummary()).isEqualTo(
-                mContext.getString(R.string.location_settings_loading_app_permission_stats));
+                mContext.getResources().getQuantityString(
+                        R.plurals.location_settings_summary_location_on, locationAppCount,
+                        locationAppCount));
     }
 
     @Test
     public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() {
-        final int LOCATION_APP_COUNT = 1;
+        final int locationAppCount = 1;
         mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
-        mController.setLocationAppCount(LOCATION_APP_COUNT);
+        mController.setLocationAppCount(locationAppCount);
         assertThat(mController.getSummary()).isEqualTo(
                 mContext.getResources().getQuantityString(
                         R.plurals.location_settings_summary_location_on,
-                        LOCATION_APP_COUNT, LOCATION_APP_COUNT));
+                        locationAppCount, locationAppCount));
     }
 
     @Test
     public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() {
-        final int LOCATION_APP_COUNT = 5;
+        final int locationAppCount = 5;
         mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
-        mController.setLocationAppCount(LOCATION_APP_COUNT);
+        mController.setLocationAppCount(locationAppCount);
         assertThat(mController.getSummary()).isEqualTo(
                 mContext.getResources().getQuantityString(
                         R.plurals.location_settings_summary_location_on,
-                        LOCATION_APP_COUNT, LOCATION_APP_COUNT));
+                        locationAppCount, locationAppCount));
     }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
index 5745aa0..764962f 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -80,69 +81,17 @@
     }
 
     @Test
-    public void testMarkAppRow_unblockablePackage() {
-        AppRow appRow = new AppRow();
-        String packageName = "foo.bar.unblockable";
-        appRow.pkg = packageName;
-        String[] nonBlockablePkgs = new String[2];
-        nonBlockablePkgs[0] = packageName;
-        nonBlockablePkgs[1] = "some.other.package";
-        NotificationBackend.markAppRowWithBlockables(nonBlockablePkgs, appRow, packageName);
-
-        // This package has a package lock but no locked channels
-        assertTrue(appRow.lockedImportance);
-    }
-
-    @Test
-    public void testMarkAppRow_defaultPackage() {
-        PackageInfo pi = new PackageInfo();
-        pi.packageName = "test";
-        pi.applicationInfo = new ApplicationInfo();
-        pi.applicationInfo.packageName = "test";
-        List<String> roles = new ArrayList<>();
-        roles.add(RoleManager.ROLE_DIALER);
-        RoleManager rm = mock(RoleManager.class);
-        when(rm.getHeldRolesFromController(anyString())).thenReturn(roles);
-
-        AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), rm, pi);
-
-        assertTrue(appRow.systemApp);
-    }
-
-    @Test
-    public void testMarkAppRow_fixedPermission_withRole() throws Exception {
+    public void testMarkAppRow_fixedImportance() throws Exception {
         PackageInfo pi = new PackageInfo();
         pi.packageName = "test";
         pi.applicationInfo = new ApplicationInfo();
         pi.applicationInfo.packageName = "test";
         pi.applicationInfo.uid = 123;
 
-        List<String> roles = new ArrayList<>();
-        roles.add(RoleManager.ROLE_DIALER);
-        RoleManager rm = mock(RoleManager.class);
-        when(rm.getHeldRolesFromController(anyString())).thenReturn(roles);
-        when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false);
+        when(mInm.isImportanceLocked(pi.packageName, 123)).thenReturn(true);
 
         AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), rm, pi);
-
-        assertTrue(appRow.systemApp);
-        assertTrue(appRow.lockedImportance);
-    }
-
-    @Test
-    public void testMarkAppRow_fixedPermission() throws Exception {
-        PackageInfo pi = new PackageInfo();
-        pi.packageName = "test";
-        pi.applicationInfo = new ApplicationInfo();
-        pi.applicationInfo.packageName = "test";
-        pi.applicationInfo.uid = 123;
-
-        when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(true);
-
-        AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), mock(RoleManager.class), pi);
+                mock(PackageManager.class), pi);
 
         assertTrue(appRow.systemApp);
         assertTrue(appRow.lockedImportance);
@@ -156,10 +105,10 @@
         pi.applicationInfo.packageName = "test";
         pi.applicationInfo.uid = 123;
 
-        when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false);
+        when(mInm.isImportanceLocked(anyString(), anyInt())).thenReturn(false);
 
         AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), mock(RoleManager.class), pi);
+                mock(PackageManager.class), pi);
 
         assertFalse(appRow.systemApp);
         assertFalse(appRow.lockedImportance);
@@ -178,7 +127,7 @@
         when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false);
 
         AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), mock(RoleManager.class), pi);
+                mock(PackageManager.class), pi);
 
         assertFalse(appRow.systemApp);
         assertTrue(appRow.lockedImportance);
@@ -198,30 +147,13 @@
         when(mInm.isPermissionFixed(pi.packageName, 0)).thenReturn(false);
 
         AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), mock(RoleManager.class), pi);
+                mock(PackageManager.class), pi);
 
         assertFalse(appRow.systemApp);
         assertFalse(appRow.lockedImportance);
     }
 
     @Test
-    public void testMarkAppRow_notDefaultPackage() {
-        PackageInfo pi = new PackageInfo();
-        pi.packageName = "test";
-        pi.applicationInfo = new ApplicationInfo();
-        pi.applicationInfo.packageName = "test";
-        List<String> roles = new ArrayList<>();
-        roles.add(RoleManager.ROLE_HOME);
-        RoleManager rm = mock(RoleManager.class);
-        when(rm.getHeldRolesFromController(anyString())).thenReturn(roles);
-
-        AppRow appRow = new NotificationBackend().loadAppRow(RuntimeEnvironment.application,
-                mock(PackageManager.class), rm, pi);
-
-        assertFalse(appRow.systemApp);
-    }
-
-    @Test
     public void testGetAggregatedUsageEvents_multipleEventsAgg() {
         List<UsageEvents.Event> events = new ArrayList<>();
         UsageEvents.Event good = new UsageEvents.Event();
diff --git a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
index 4ba5fe7..b2f1673 100644
--- a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
@@ -284,24 +284,36 @@
     }
 
     @Test
-    public void testIsAppBlockable_postMigration_locked() {
+    public void testIsAppBlockable_fixedPermission() {
         mController = new TestPreferenceController(mContext, mBackend);
 
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
-        appRow.lockedImportance = true;
+        appRow.systemApp = true;
         appRow.banned = false;
         mController.onResume(appRow, null, null, null, null, null, null);
         assertFalse(mController.isAppBlockable());
     }
 
     @Test
-    public void testIsAppBlockable_postMigration_locked_butAppOff() {
+    public void testIsAppBlockable_fixedPermission_butAppOff() {
         mController = new TestPreferenceController(mContext, mBackend);
 
         NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
-        appRow.lockedImportance = true;
+        appRow.systemApp = true;
         appRow.banned = true;
         mController.onResume(appRow, null, null, null, null, null, null);
+        assertTrue(mController.isAppBlockable());
+    }
+
+    @Test
+    public void testIsAppBlockable_notFixedButAppInBadState() {
+        mController = new TestPreferenceController(mContext, mBackend);
+
+        NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+        appRow.systemApp = false;
+        appRow.banned = true;
+        appRow.lockedImportance = true;
+        mController.onResume(appRow, null, null, null, null, null, null);
         assertFalse(mController.isAppBlockable());
     }
 
diff --git a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
index 314f8c2..8bd9b01 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
@@ -142,7 +142,6 @@
         mController.onPrepareOptionsMenu(mMenu);
 
         verify(mController.mRename, atLeastOnce()).setVisible(true);
-        verify(mController.mUnmount, atLeastOnce()).setVisible(true);
         verify(mController.mFormatAsPortable, atLeastOnce()).setVisible(true);
         verify(mController.mMount, never()).setVisible(true);
         verify(mController.mFormat, never()).setVisible(true);