Merge "Fix transparency seekbar in accessibility button page is backwards" into sc-dev
diff --git a/res/layout/admin_support_details_dialog.xml b/res/layout/admin_support_details_dialog.xml
index 298cf24..0233a1b 100644
--- a/res/layout/admin_support_details_dialog.xml
+++ b/res/layout/admin_support_details_dialog.xml
@@ -13,45 +13,54 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:padding="@dimen/admin_details_dialog_padding"
-        android:orientation="vertical">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingTop="@dimen/admin_details_dialog_padding"
+    android:paddingStart="@dimen/admin_details_dialog_padding"
+    android:paddingEnd="@dimen/admin_details_dialog_padding"
+    android:paddingBottom="@dimen/admin_details_dialog_padding_bottom"
+    android:orientation="vertical">
     <LinearLayout
-            android:layout_width="match_parent"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:gravity="center_horizontal"
+        android:paddingBottom="@dimen/admin_details_dialog_title_bottom_padding">
+        <ImageView
+            android:id="@+id/admin_support_icon"
+            android:layout_width="@dimen/admin_details_dialog_icon_size"
+            android:layout_height="@dimen/admin_details_dialog_icon_size"
+            android:scaleType="fitCenter"
+            android:contentDescription="@null"/>
+        <TextView
+            android:id="@+id/admin_support_dialog_title"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:gravity="center_vertical"
-            android:paddingBottom="@dimen/admin_details_dialog_title_bottom_padding">
-        <ImageView android:id="@+id/admin_support_icon"
-                android:layout_width="@dimen/admin_details_dialog_icon_size"
-                android:layout_height="@dimen/admin_details_dialog_icon_size"
-                android:scaleType="fitCenter"
-                android:contentDescription="@null" />
-        <TextView android:id="@+id/admin_support_dialog_title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingStart="@dimen/admin_details_dialog_padding"
-                android:text="@string/disabled_by_policy_title"
-                android:textAppearance="@style/TextAppearance.HeadLineFontFamily"/>
+            android:layout_marginTop="16dp"
+            android:gravity="center_horizontal"
+            android:text="@string/disabled_by_policy_title"
+            android:textAppearance="@style/TextAppearance.AdminDialogTitle"/>
     </LinearLayout>
 
     <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fadeScrollbars="false">
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:fadeScrollbars="false">
-        <LinearLayout
+            android:orientation="vertical">
+            <TextView
+                android:id="@+id/admin_support_msg"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="vertical">
-            <TextView android:id="@+id/admin_support_msg"
-                      android:layout_width="match_parent"
-                      android:layout_height="wrap_content"
-                      android:textAppearance="@style/TextAppearance.HeadLineFontFamily.Subhead"
-                      android:maxLength="200"
-                      android:autoLink="email|phone|web"
-                      android:textColor="?android:attr/textColorSecondary"/>
+                android:textAppearance="@style/TextAppearance.AdminDialogMessage"
+                android:maxLength="200"
+                android:gravity="center_horizontal"
+                android:autoLink="email|phone|web"
+                android:textColor="?android:attr/textColorSecondary"/>
         </LinearLayout>
     </ScrollView>
 </LinearLayout>
diff --git a/res/layout/fingerprint_enroll_introduction.xml b/res/layout/fingerprint_enroll_introduction.xml
index 03a8e7f..f556f27 100644
--- a/res/layout/fingerprint_enroll_introduction.xml
+++ b/res/layout/fingerprint_enroll_introduction.xml
@@ -133,26 +133,6 @@
                     android:text="@string/security_settings_fingerprint_v2_enroll_introduction_footer_message_4" />
             </LinearLayout>
 
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:paddingTop="12dp">
-
-                <ImageView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:contentDescription="@null"
-                    android:src="@drawable/ic_link_24dp"/>
-                <Space
-                    android:layout_width="24dp"
-                    android:layout_height="wrap_content"/>
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/security_settings_fingerprint_v2_enroll_introduction_message_learn_more" />
-            </LinearLayout>
-
         </LinearLayout>
 
         <!-- Keep in mind -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a9cda9e..168480e 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -262,8 +262,9 @@
 
     <!-- Admin support contact details dialog. -->
     <dimen name="admin_details_dialog_padding">24dp</dimen>
-    <dimen name="admin_details_dialog_title_bottom_padding">20dp</dimen>
-    <dimen name="admin_details_dialog_icon_size">48dp</dimen>
+    <dimen name="admin_details_dialog_padding_bottom">32dp</dimen>
+    <dimen name="admin_details_dialog_title_bottom_padding">16dp</dimen>
+    <dimen name="admin_details_dialog_icon_size">32dp</dimen>
     <dimen name="admin_details_dialog_link_padding_top">36dp</dimen>
     <dimen name="admin_details_dialog_learn_more_button_top_margin">24dp</dimen>
     <dimen name="admin_details_dialog_learn_more_button_padding">8dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 34b8c22..bea0bcc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -685,24 +685,24 @@
     <!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] -->
     <string name="location_settings_loading_app_permission_stats">Loading\u2026</string>
     <!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] -->
-    <string name="location_settings_footer_location_on">
-        &lt;br>&lt;br>Apps with the Nearby devices permission can determine the
+    <string name="location_settings_footer_general">
+        Apps with the Nearby devices permission can determine the
         relative position of connected devices.
-
-        &lt;br>&lt;br>&lt;a href="<xliff:g example="http://www.google.com" id="url">
-        https://support.google.com/android/answer/3467281</xliff:g>">Learn more&lt;/a>
     </string>
     <!-- Location settings footer warning text when location is off [CHAR LIMIT=NONE] -->
     <string name="location_settings_footer_location_off">
         Location access is off for apps and services. Your device location may still be sent to
         emergency responders when you call or text an emergency number.
-
-        &lt;br>&lt;br>Apps with the Nearby devices permission can determine the relative
-        position of connected devices.
-
-        &lt;br>&lt;br>&lt;a href="<xliff:g example="http://www.google.com"
+    </string>
+    <!-- Location settings footer link to support page [CHAR LIMIT=NONE] -->
+    <string name="location_settings_footer_learn_more">
+        &lt;a href="<xliff:g example="http://www.google.com"
         id="url"> https://support.google.com/android/answer/3467281</xliff:g>">Learn more&lt;/a>
     </string>
+    <!-- Location settings footer link content description [CHAR LIMIT=NONE] -->
+    <string name="location_settings_footer_learn_more_content_description">
+        Learn more about Location Settings.
+    </string>
 
     <!-- Main Settings screen setting option title for the item to take you to the accounts screen [CHAR LIMIT=22] -->
     <string name="account_settings_title">Accounts</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c72b3a5..a5b187b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -871,4 +871,15 @@
         <item name="android:textSize">16sp</item>
         <item name="android:textColor">?android:attr/textColorSecondary</item>
     </style>
+
+    <style name="TextAppearance.AdminDialogTitle"
+           parent="@*android:style/TextAppearance.DeviceDefault.Title">
+        <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+        <item name="android:textSize">24sp</item>
+    </style>
+
+    <style name="TextAppearance.AdminDialogMessage"
+           parent="@*android:style/TextAppearance.DeviceDefault">
+        <item name="android:textColor">?android:attr/textColorSecondary</item>
+    </style>
 </resources>
diff --git a/res/values/styles_preference.xml b/res/values/styles_preference.xml
index ea2900f..1c8d015 100644
--- a/res/values/styles_preference.xml
+++ b/res/values/styles_preference.xml
@@ -48,7 +48,7 @@
         <item name="android:layout">@layout/preference_widget_seekbar_settings</item>
     </style>
 
-    <style name="SyncSwitchPreference" parent="@style/Preference.Material">
+    <style name="SyncSwitchPreference" parent="@style/SettingsSwitchPreference.SettingsLib">
         <item name="android:widgetLayout">@layout/preference_widget_sync_toggle</item>
     </style>
 
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index 857885d..880a326 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -70,8 +70,9 @@
     </PreferenceCategory>
 
     <com.android.settingslib.widget.FooterPreference
-        android:title="@string/location_settings_footer_location_on"
+        android:title="@string/location_settings_footer_general"
         android:key="location_footer"
         android:selectable="false"
+        settings:searchable="false"
         settings:controller="com.android.settings.location.LocationSettingsFooterPreferenceController"/>
 </PreferenceScreen>
diff --git a/res/xml/location_settings_personal.xml b/res/xml/location_settings_personal.xml
index 726a96c..bae1ac1 100644
--- a/res/xml/location_settings_personal.xml
+++ b/res/xml/location_settings_personal.xml
@@ -54,7 +54,7 @@
         settings:controller="com.android.settings.location.LocationServicesPreferenceController"/>
 
     <com.android.settingslib.widget.FooterPreference
-        android:title="@string/location_settings_footer_location_on"
+        android:title="@string/location_settings_footer_general"
         android:key="location_footer"
         settings:controller="com.android.settings.location.LocationSettingsFooterPreferenceController"
         android:selectable="false"/>
diff --git a/res/xml/location_settings_workprofile.xml b/res/xml/location_settings_workprofile.xml
index 99ccf14..51d8761 100644
--- a/res/xml/location_settings_workprofile.xml
+++ b/res/xml/location_settings_workprofile.xml
@@ -62,7 +62,7 @@
         settings:controller="com.android.settings.location.LocationServicesForWorkPreferenceController"/>
 
     <com.android.settingslib.widget.FooterPreference
-        android:title="@string/location_settings_footer_location_on"
+        android:title="@string/location_settings_footer_general"
         android:key="location_footer"
         settings:controller="com.android.settings.location.LocationSettingsFooterPreferenceController"
         android:selectable="false"/>
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index cc281fa..4a67deb 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -60,12 +60,6 @@
     </Preference>
 
     <Preference
-        android:key="network_scorer_picker"
-        android:title="@string/network_scorer_picker_title"
-        android:fragment="com.android.settings.network.NetworkScorerPicker"
-        settings:controller="com.android.settings.network.NetworkScorerPickerPreferenceController" />
-
-    <Preference
         android:key="wifi_direct"
         android:title="@string/wifi_menu_p2p"
         android:fragment="com.android.settings.wifi.p2p.WifiP2pSettings" />
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index c81bfb2..4b1725f 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -52,6 +52,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.accessibility.AccessibilityEditDialogUtils.DialogType;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.utils.LocaleUtils;
 import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settings.widget.SettingsMainSwitchPreference;
 import com.android.settingslib.accessibility.AccessibilityUtils;
@@ -659,10 +660,9 @@
         if (list.isEmpty()) {
             list.add(softwareTitle);
         }
-        final String joinStrings = TextUtils.join(/* delimiter= */", ", list);
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
-                null, joinStrings);
+                null, LocaleUtils.getConcatenatedString(list));
     }
 
     /**
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index cb0d964..57fd7ea 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -46,6 +46,7 @@
 import com.android.settings.R;
 import com.android.settings.accessibility.AccessibilityEditDialogUtils.DialogType;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.utils.LocaleUtils;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
@@ -282,10 +283,9 @@
         if (list.isEmpty()) {
             list.add(softwareTitle);
         }
-        final String joinStrings = TextUtils.join(/* delimiter= */", ", list);
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
-                null, joinStrings);
+                null, LocaleUtils.getConcatenatedString(list));
     }
 
     @Override
diff --git a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
index c639d1d..42bb34a 100644
--- a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
+++ b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
@@ -58,7 +58,6 @@
     private static final String LAUNCHING_LOCATION_SETTINGS =
         "com.android.settings.accounts.LAUNCHING_LOCATION_SETTINGS";
 
-
     private AuthenticatorHelper mAuthenticatorHelper;
     private UserHandle mUserHandle;
     private PreferenceFragmentCompat mFragment;
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index 86ffa47..2a5eda2 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -22,12 +22,8 @@
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
 import android.os.Process;
 import android.os.UserHandle;
-import android.util.IconDrawableFactory;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -38,7 +34,6 @@
 import androidx.appcompat.app.AlertDialog;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -143,21 +138,8 @@
     @VisibleForTesting
     void setAdminSupportIcon(View root, ComponentName admin, int userId) {
         ImageView supportIconView = root.requireViewById(R.id.admin_support_icon);
-        if (isNotCurrentUserOrProfile(admin, userId)) {
-            supportIconView.setImageDrawable(
-                    mActivity.getDrawable(com.android.internal.R.drawable.ic_info));
-
-            TypedArray ta = mActivity.obtainStyledAttributes(new int[]{android.R.attr.colorAccent});
-            supportIconView.setImageTintList(ColorStateList.valueOf(ta.getColor(0, 0)));
-            ta.recycle();
-        } else {
-            final Drawable badgedIcon = Utils.getBadgedIcon(
-                    IconDrawableFactory.newInstance(mActivity),
-                    mActivity.getPackageManager(),
-                    admin.getPackageName(),
-                    userId);
-            supportIconView.setImageDrawable(badgedIcon);
-        }
+        supportIconView.setImageDrawable(
+                mActivity.getDrawable(com.android.internal.R.drawable.ic_corp_badge));
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index a36c2ef..f93f0a3 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -64,7 +65,6 @@
                 ExpandDividerPreference.OnExpandListener {
     private static final String TAG = "BatteryChartPreferenceController";
     private static final String KEY_FOOTER_PREF = "battery_graph_footer";
-    private static final int ADD_FOOTER_DELAYED_MS = 250;
 
     /** Desired battery history size for timestamp slots. */
     public static final int DESIRED_HISTORY_SIZE = 25;
@@ -267,11 +267,6 @@
 
     void setBatteryHistoryMap(
             final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
-        mHandler.post(() -> setBatteryHistoryMapInner(batteryHistoryMap));
-    }
-
-    private void setBatteryHistoryMapInner(
-            final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
         // Resets all battery history data relative variables.
         if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
             mBatteryIndexedMap = null;
@@ -298,19 +293,15 @@
             mBatteryHistoryLevels[index] =
                 Math.round(batteryLevelCounter / entryMap.size());
         }
-        // Generates indexed usage map for chart.
-        mBatteryIndexedMap =
-            ConvertUtils.getIndexedUsageMap(
-                mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
-                mBatteryHistoryKeys, batteryHistoryMap,
-                /*purgeLowPercentageAndFakeData=*/ true);
         forceRefreshUi();
-
         Log.d(TAG, String.format(
             "setBatteryHistoryMap() size=%d\nkeys=%s\nlevels=%s",
             batteryHistoryMap.size(),
             utcToLocalTime(mBatteryHistoryKeys),
             Arrays.toString(mBatteryHistoryLevels)));
+
+        // Loads item icon and label in the background.
+        new LoadAllItemsInfoTask(batteryHistoryMap).execute();
     }
 
     void setBatteryChartView(final BatteryChartView batteryChartView) {
@@ -599,9 +590,7 @@
             containAppItems
                 ? R.string.battery_usage_screen_footer
                 : R.string.battery_usage_screen_footer_empty));
-        mHandler.postDelayed(
-            () -> mPreferenceScreen.addPreference(mFooterPreference),
-            ADD_FOOTER_DELAYED_MS);
+        mHandler.post(() -> mPreferenceScreen.addPreference(mFooterPreference));
     }
 
     private static String utcToLocalTime(long[] timestamps) {
@@ -670,4 +659,53 @@
         }
         return batteryHistoryKeys;
     }
+
+    // Loads all items icon and label in the background.
+    private final class LoadAllItemsInfoTask
+            extends AsyncTask<Void, Void, Map<Integer, List<BatteryDiffEntry>>> {
+
+        private long[] mBatteryHistoryKeysCache;
+        private Map<Long, Map<String, BatteryHistEntry>> mBatteryHistoryMap;
+
+        private LoadAllItemsInfoTask(
+                Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+            this.mBatteryHistoryMap = batteryHistoryMap;
+            this.mBatteryHistoryKeysCache = mBatteryHistoryKeys;
+        }
+
+        @Override
+        protected Map<Integer, List<BatteryDiffEntry>> doInBackground(Void... voids) {
+            if (mPrefContext == null || mBatteryHistoryKeysCache == null) {
+                return null;
+            }
+            final long startTime = System.currentTimeMillis();
+            final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap =
+                ConvertUtils.getIndexedUsageMap(
+                    mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
+                    mBatteryHistoryKeysCache, mBatteryHistoryMap,
+                    /*purgeLowPercentageAndFakeData=*/ true);
+            // Pre-loads each BatteryDiffEntry relative icon and label for all slots.
+            for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
+                entries.forEach(entry -> entry.loadLabelAndIcon());
+            }
+            Log.d(TAG, String.format("execute LoadAllItemsInfoTask in %d/ms",
+                (System.currentTimeMillis() - startTime)));
+            return indexedUsageMap;
+        }
+
+        @Override
+        protected void onPostExecute(
+                Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
+            mBatteryHistoryMap = null;
+            mBatteryHistoryKeysCache = null;
+            if (indexedUsageMap == null) {
+                return;
+            }
+            // Posts results back to main thread to refresh UI.
+            mHandler.post(() -> {
+                mBatteryIndexedMap = indexedUsageMap;
+                forceRefreshUi();
+            });
+        }
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
index 5ed1cf5..9db29f3 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
@@ -142,7 +142,7 @@
         return false;
     }
 
-    private void loadLabelAndIcon() {
+    void loadLabelAndIcon() {
         if (mIsLoaded) {
             return;
         }
diff --git a/src/com/android/settings/location/LocationSettingsFooterPreferenceController.java b/src/com/android/settings/location/LocationSettingsFooterPreferenceController.java
index d2d5c1f..281cc5a 100644
--- a/src/com/android/settings/location/LocationSettingsFooterPreferenceController.java
+++ b/src/com/android/settings/location/LocationSettingsFooterPreferenceController.java
@@ -24,6 +24,7 @@
 import android.content.pm.ResolveInfo;
 import android.location.LocationManager;
 import android.text.Html;
+import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.preference.Preference;
@@ -42,6 +43,7 @@
  */
 public class LocationSettingsFooterPreferenceController extends LocationBasePreferenceController {
     private static final String TAG = "LocationFooter";
+    private static final String PARAGRAPH_SEPARATOR = "<br><br>";
     private static final Intent INJECT_INTENT =
             new Intent(LocationManager.SETTINGS_FOOTER_DISPLAYED_ACTION);
 
@@ -90,24 +92,33 @@
     }
 
     private void updateFooterPreference() {
-        String footerString = mContext.getString(
-                mLocationEnabled ? R.string.location_settings_footer_location_on
-                        : R.string.location_settings_footer_location_off);
+        String footerString = mContext.getString(R.string.location_settings_footer_general);
         if (mLocationEnabled) {
-            footerString = mInjectedFooterString + footerString;
+            if (!TextUtils.isEmpty(mInjectedFooterString)) {
+                footerString = Html.escapeHtml(mInjectedFooterString) + PARAGRAPH_SEPARATOR
+                        + footerString;
+            }
+        } else {
+            footerString = mContext.getString(R.string.location_settings_footer_location_off)
+                    + PARAGRAPH_SEPARATOR
+                    + footerString;
         }
         if (mFooterPreference != null) {
-            mFooterPreference.setTitle(Html.fromHtml(footerString));
+            mFooterPreference.setTitle(Html.fromHtml(footerString
+                    + PARAGRAPH_SEPARATOR
+                    + mContext.getString(
+                    R.string.location_settings_footer_learn_more)));
+            mFooterPreference.setContentDescription(Html.fromHtml(footerString + mContext.getString(
+                    R.string.location_settings_footer_learn_more_content_description)));
         }
     }
 
     /**
-     * Location footer preference group should be displayed if there is at least one footer to
-     * inject.
+     * Location footer preference group should always be displayed.
      */
     @Override
     public int getAvailabilityStatus() {
-        return !getFooterData().isEmpty() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+        return AVAILABLE;
     }
 
     /**
diff --git a/src/com/android/settings/network/NetworkScorerPicker.java b/src/com/android/settings/network/NetworkScorerPicker.java
deleted file mode 100644
index 9ecab3b..0000000
--- a/src/com/android/settings/network/NetworkScorerPicker.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2017 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.network;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.core.InstrumentedPreferenceFragment;
-import com.android.settingslib.widget.RadioButtonPreference;
-
-import java.util.List;
-
-/**
- * Fragment for choosing default network scorer.
- */
-public class NetworkScorerPicker extends InstrumentedPreferenceFragment implements
-        RadioButtonPreference.OnClickListener {
-
-    private NetworkScoreManager mNetworkScoreManager;
-
-    @Override
-    public int getMetricsCategory() {
-        return SettingsEnums.SETTINGS_NETWORK_SCORER;
-    }
-
-    @Override
-    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-        super.onCreatePreferences(savedInstanceState, rootKey);
-        updateCandidates();
-    }
-
-    @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        mNetworkScoreManager = createNetworkScorerManager(context);
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        final View view = super.onCreateView(inflater, container, savedInstanceState);
-        // this is needed so the back button goes back to previous fragment
-        setHasOptionsMenu(true);
-        return view;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.network_scorer_picker_prefs;
-    }
-
-    @VisibleForTesting
-    public void updateCandidates() {
-        final PreferenceScreen screen = getPreferenceScreen();
-        screen.removeAll();
-
-        final List<NetworkScorerAppData> scorers = mNetworkScoreManager.getAllValidScorers();
-        final String defaultAppKey = getActiveScorerPackage();
-
-        final RadioButtonPreference nonePref = new RadioButtonPreference(getPrefContext());
-        nonePref.setTitle(R.string.network_scorer_picker_none_preference);
-        if (scorers.isEmpty()) {
-            nonePref.setChecked(true);
-        } else {
-            nonePref.setKey(null);
-            nonePref.setChecked(TextUtils.isEmpty(defaultAppKey));
-            nonePref.setOnClickListener(this);
-        }
-        screen.addPreference(nonePref);
-
-        final int numScorers = scorers.size();
-        for (int i = 0; i < numScorers; i++) {
-            final RadioButtonPreference pref = new RadioButtonPreference(getPrefContext());
-            final NetworkScorerAppData appData = scorers.get(i);
-            final String appKey = appData.getRecommendationServicePackageName();
-            pref.setTitle(appData.getRecommendationServiceLabel());
-            pref.setKey(appKey);
-            pref.setChecked(TextUtils.equals(defaultAppKey, appKey));
-            pref.setOnClickListener(this);
-            screen.addPreference(pref);
-        }
-    }
-
-    private String getActiveScorerPackage() {
-        return mNetworkScoreManager.getActiveScorerPackage();
-    }
-
-    private boolean setActiveScorer(String key) {
-        if (!TextUtils.equals(key, getActiveScorerPackage())) {
-            return mNetworkScoreManager.setActiveScorer(key);
-        }
-        return false;
-    }
-
-    @Override
-    public void onRadioButtonClicked(RadioButtonPreference selected) {
-        final String selectedKey = selected.getKey();
-        final boolean success = setActiveScorer(selectedKey);
-        if (success) {
-            updateCheckedState(selectedKey);
-        }
-    }
-
-    private void updateCheckedState(String selectedKey) {
-        final PreferenceScreen screen = getPreferenceScreen();
-        final int count = screen.getPreferenceCount();
-        for (int i = 0; i < count; i++) {
-            final Preference pref = screen.getPreference(i);
-            if (pref instanceof RadioButtonPreference) {
-                final RadioButtonPreference radioPref = (RadioButtonPreference) pref;
-                radioPref.setChecked(TextUtils.equals(pref.getKey(), selectedKey));
-            }
-        }
-    }
-
-    @VisibleForTesting
-    NetworkScoreManager createNetworkScorerManager(Context context) {
-        return (NetworkScoreManager) context.getSystemService(Context.NETWORK_SCORE_SERVICE);
-    }
-}
diff --git a/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java b/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java
deleted file mode 100644
index 4b452c0..0000000
--- a/src/com/android/settings/network/NetworkScorerPickerPreferenceController.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2017 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.network;
-
-import android.content.Context;
-import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
-
-import androidx.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
-
-import java.util.List;
-
-/**
- * {@link AbstractPreferenceController} that shows the active network scorer and toggles the
- * preference based on whether or not there are valid scorers installed.
- */
-public class NetworkScorerPickerPreferenceController extends BasePreferenceController {
-
-    private final NetworkScoreManager mNetworkScoreManager;
-
-    public NetworkScorerPickerPreferenceController(Context context, String key) {
-        super(context, key);
-        mNetworkScoreManager =
-                (NetworkScoreManager) mContext.getSystemService(Context.NETWORK_SCORE_SERVICE);
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return AVAILABLE;
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        final List<NetworkScorerAppData> allValidScorers =
-                mNetworkScoreManager.getAllValidScorers();
-        boolean enabled = !allValidScorers.isEmpty();
-        preference.setEnabled(enabled);
-        if (!enabled) {
-            preference.setSummary(null);
-            return;
-        }
-
-        NetworkScorerAppData scorer = mNetworkScoreManager.getActiveScorer();
-        if (scorer == null) {
-            preference.setSummary(mContext.getString(
-                    R.string.network_scorer_picker_none_preference));
-        } else {
-            preference.setSummary(scorer.getRecommendationServiceLabel());
-        }
-    }
-}
diff --git a/src/com/android/settings/notification/RedactionInterstitial.java b/src/com/android/settings/notification/RedactionInterstitial.java
index c8d5ffd..d6cf0c6 100644
--- a/src/com/android/settings/notification/RedactionInterstitial.java
+++ b/src/com/android/settings/notification/RedactionInterstitial.java
@@ -153,7 +153,7 @@
             }
             final RedactionInterstitial activity = (RedactionInterstitial) getActivity();
             if (activity != null) {
-                activity.setResult(RESULT_OK, null);
+                activity.setResult(RESULT_CANCELED, null);
                 finish();
             }
         }
diff --git a/src/com/android/settings/utils/LocaleUtils.java b/src/com/android/settings/utils/LocaleUtils.java
new file mode 100644
index 0000000..8fab344
--- /dev/null
+++ b/src/com/android/settings/utils/LocaleUtils.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2021 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.utils;
+
+import android.icu.text.ListFormatter;
+import android.text.TextUtils;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * This class implements some common methods to process with locales
+ */
+public class LocaleUtils {
+
+    /**
+     * Returns a character sequence concatenating the items with the localized comma.
+     *
+     * @param items items to be concatenated
+     */
+    public static CharSequence getConcatenatedString(List<CharSequence> items) {
+        final ListFormatter listFormatter = ListFormatter.getInstance(Locale.getDefault());
+        final CharSequence lastItem =  items.get(items.size() - 1);
+        items.add("fake last item");
+
+        // For English with "{0}, {1}, and {2}", the pattern is "{0}, {1}, and {2}".
+        // To get "{0}, {1}, {2}", we add a {fake item}, then the pattern result would be
+        // "{0}, {1}, {2} and {fake item}", then get the substring with the end index of the
+        // last item.
+        final String formatted = listFormatter.format(items);
+        return formatted.subSequence(0, TextUtils.indexOf(formatted, lastItem) + lastItem.length());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
index 5350d45..5a44c79 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
@@ -68,6 +68,7 @@
     private static final int BATTERY_LEVEL_50 = 50;
     private static final String ICON_URI = "content://test.provider/icon.png";
     private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C";
+    private static final String DEVICE_SUMMARY = "test summary";
 
     private Context mContext;
 
@@ -133,7 +134,6 @@
                 View.GONE);
         assertThat(mLayoutPreference.findViewById(R.id.layout_middle).getVisibility()).isEqualTo(
                 View.VISIBLE);
-        assertBatteryLevel(mLayoutPreference.findViewById(R.id.layout_middle), BATTERY_LEVEL_MAIN);
     }
 
     @Test
@@ -232,67 +232,18 @@
     }
 
     @Test
-    public void refresh_underLowBatteryThreshold_showAlertIcon() {
+    public void refresh_connectedWatch_checkSummary() {
         when(mBluetoothDevice.getMetadata(
                 BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
                 BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_5).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(false).getBytes());
         when(mCachedDevice.isConnected()).thenReturn(true);
+        when(mCachedDevice.getConnectionSummary(/* shortSummary= */ true))
+                .thenReturn(DEVICE_SUMMARY);
 
         mController.refresh();
 
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle),
-                R.drawable.ic_battery_alert_24dp);
-    }
-
-    @Test
-    public void refresh_underLowBatteryThresholdInCharging_showAlertIcon() {
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
-                BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_5).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(true).getBytes());
-        when(mCachedDevice.isConnected()).thenReturn(true);
-
-        mController.refresh();
-
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle), /* resId= */-1);
-    }
-
-    @Test
-    public void refresh_aboveLowBatteryThreshold_noAlertIcon() {
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
-                BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_50).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(false).getBytes());
-        when(mCachedDevice.isConnected()).thenReturn(true);
-
-        mController.refresh();
-
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle), /* resId= */-1);
+        assertThat(((TextView) (mLayoutPreference.findViewById(R.id.entity_header_summary)))
+                .getText()).isEqualTo(DEVICE_SUMMARY);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/NetworkScorerPickerTest.java b/tests/robotests/src/com/android/settings/network/NetworkScorerPickerTest.java
deleted file mode 100644
index c4e953c..0000000
--- a/tests/robotests/src/com/android/settings/network/NetworkScorerPickerTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2017 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.network;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settingslib.widget.RadioButtonPreference;
-
-import com.google.android.collect.Lists;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.ArrayList;
-
-@RunWith(RobolectricTestRunner.class)
-public class NetworkScorerPickerTest {
-
-    private static final String TEST_SCORER_PACKAGE_1 = "Test Package 1";
-    private static final String TEST_SCORER_CLASS_1 = "Test Class 1";
-    private static final String TEST_SCORER_LABEL_1 = "Test Label 1";
-    private static final String TEST_SCORER_PACKAGE_2 = "Test Package 2";
-
-    private Context mContext;
-    @Mock
-    private NetworkScoreManager mNetworkScoreManager;
-    @Mock
-    private PreferenceScreen mPreferenceScreen;
-
-    private TestFragment mFragment;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mFragment = new TestFragment(mContext, mPreferenceScreen, mNetworkScoreManager);
-        mFragment.onAttach(mContext);
-    }
-
-    @Test
-    public void testOnRadioButtonClicked_success() {
-        RadioButtonPreference pref = new RadioButtonPreference(mContext);
-        pref.setKey(TEST_SCORER_PACKAGE_1);
-        when(mPreferenceScreen.getPreference(anyInt())).thenReturn(pref);
-        when(mPreferenceScreen.getPreferenceCount()).thenReturn(1);
-        when(mNetworkScoreManager.setActiveScorer(TEST_SCORER_PACKAGE_1)).thenReturn(true);
-        when(mNetworkScoreManager.getActiveScorerPackage()).thenReturn(TEST_SCORER_PACKAGE_2);
-
-        mFragment.onRadioButtonClicked(pref);
-
-        verify(mNetworkScoreManager).setActiveScorer(TEST_SCORER_PACKAGE_1);
-        assertThat(pref.isChecked()).isTrue();
-    }
-
-    @Test
-    public void testOnRadioButtonClicked_currentScorer_doNothing() {
-        RadioButtonPreference pref = new RadioButtonPreference(mContext);
-        pref.setKey(TEST_SCORER_PACKAGE_1);
-        pref.setChecked(true);
-        when(mPreferenceScreen.getPreference(anyInt())).thenReturn(pref);
-        when(mPreferenceScreen.getPreferenceCount()).thenReturn(1);
-        when(mNetworkScoreManager.setActiveScorer(TEST_SCORER_PACKAGE_1)).thenReturn(true);
-        when(mNetworkScoreManager.getActiveScorerPackage()).thenReturn(TEST_SCORER_PACKAGE_1);
-
-        mFragment.onRadioButtonClicked(pref);
-
-        verify(mNetworkScoreManager, never()).setActiveScorer(any());
-        assertThat(pref.isChecked()).isTrue();
-    }
-
-    @Test
-    public void testUpdateCandidates_noValidScorers_nonePreference() {
-        when(mNetworkScoreManager.getAllValidScorers()).thenReturn(new ArrayList<>());
-        ArgumentCaptor<RadioButtonPreference> arg =
-                ArgumentCaptor.forClass(RadioButtonPreference.class);
-
-        mFragment.updateCandidates();
-
-        verify(mPreferenceScreen).addPreference(arg.capture());
-        assertThat(arg.getValue().getTitle())
-                .isEqualTo(mContext.getString(R.string.network_scorer_picker_none_preference));
-        assertThat(arg.getValue().isChecked()).isTrue();
-    }
-
-    @Test
-    public void testUpdateCandidates_validScorers_noActiveScorer() {
-        ComponentName scorer = new ComponentName(TEST_SCORER_PACKAGE_1, TEST_SCORER_CLASS_1);
-        NetworkScorerAppData scorerAppData = new NetworkScorerAppData(
-                0, scorer, TEST_SCORER_LABEL_1, null /* enableUseOpenWifiActivity */,
-                null /* networkAvailableNotificationChannelId */);
-        when(mNetworkScoreManager.getAllValidScorers()).thenReturn(
-                Lists.newArrayList(scorerAppData));
-        when(mNetworkScoreManager.getActiveScorerPackage()).thenReturn(null);
-
-        ArgumentCaptor<RadioButtonPreference> arg =
-                ArgumentCaptor.forClass(RadioButtonPreference.class);
-
-        mFragment.updateCandidates();
-
-        verify(mPreferenceScreen, times(2)).addPreference(arg.capture());
-
-        final RadioButtonPreference nonePref = arg.getAllValues().get(0);
-        assertThat(nonePref.getKey()).isNull();
-        assertThat(nonePref.isChecked()).isTrue();
-
-        final RadioButtonPreference testScorerPref = arg.getAllValues().get(1);
-        assertThat(testScorerPref.getTitle()).isEqualTo(TEST_SCORER_LABEL_1);
-        assertThat(testScorerPref.isChecked()).isFalse();
-    }
-
-    @Test
-    public void testUpdateCandidates_validScorer() {
-        ComponentName scorer = new ComponentName(TEST_SCORER_PACKAGE_1, TEST_SCORER_CLASS_1);
-        NetworkScorerAppData scorerAppData = new NetworkScorerAppData(
-                0, scorer, TEST_SCORER_LABEL_1, null /* enableUseOpenWifiActivity */,
-                null /* networkAvailableNotificationChannelId */);
-        when(mNetworkScoreManager.getAllValidScorers()).thenReturn(
-                Lists.newArrayList(scorerAppData));
-        when(mNetworkScoreManager.getActiveScorerPackage()).thenReturn(TEST_SCORER_PACKAGE_1);
-        ArgumentCaptor<RadioButtonPreference> arg =
-                ArgumentCaptor.forClass(RadioButtonPreference.class);
-
-        mFragment.updateCandidates();
-
-        // The first preference added is the "none" preference and the second is the
-        // pref for the test scorer.
-        verify(mPreferenceScreen, times(2)).addPreference(arg.capture());
-        // Returns the last captured value which is expected to be the test scorer pref.
-        RadioButtonPreference pref = arg.getValue();
-        assertThat(pref.getTitle()).isEqualTo(TEST_SCORER_LABEL_1);
-        assertThat(pref.isChecked()).isTrue();
-    }
-
-    public static class TestFragment extends NetworkScorerPicker {
-
-        private final Context mContext;
-        private final PreferenceScreen mScreen;
-        private final PreferenceManager mPrefManager;
-        private final NetworkScoreManager mNetworkScoreManager;
-
-        public TestFragment(Context context, PreferenceScreen preferenceScreen,
-                NetworkScoreManager networkScoreManager) {
-            mContext = context;
-            mScreen = preferenceScreen;
-            mNetworkScoreManager = networkScoreManager;
-            mPrefManager = mock(PreferenceManager.class);
-            when(mPrefManager.getContext()).thenReturn(context);
-        }
-
-        @Override
-        public Context getContext() {
-            return mContext;
-        }
-
-        @Override
-        public PreferenceManager getPreferenceManager() {
-            return mPrefManager;
-        }
-
-        @Override
-        public PreferenceScreen getPreferenceScreen() {
-            return mScreen;
-        }
-
-        @Override
-        NetworkScoreManager createNetworkScorerManager(Context context) {
-            return mNetworkScoreManager;
-        }
-    }
-}
diff --git a/tests/unit/src/com/android/settings/network/NetworkScorerPickerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/NetworkScorerPickerPreferenceControllerTest.java
deleted file mode 100644
index 542d2ff..0000000
--- a/tests/unit/src/com/android/settings/network/NetworkScorerPickerPreferenceControllerTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2020 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.network;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
-
-import androidx.preference.Preference;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Collections;
-
-@RunWith(AndroidJUnit4.class)
-public class NetworkScorerPickerPreferenceControllerTest {
-
-    private static final String TEST_SCORER_PACKAGE = "Test Package";
-    private static final String TEST_SCORER_CLASS = "Test Class";
-    private static final String TEST_SCORER_LABEL = "Test Label";
-
-    private Context mContext;
-    @Mock
-    private NetworkScoreManager mNetworkScorer;
-
-    private NetworkScorerPickerPreferenceController mController;
-
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(ApplicationProvider.getApplicationContext());
-        doReturn(mNetworkScorer).when(mContext).getSystemService(Context.NETWORK_SCORE_SERVICE);
-
-        mController = new NetworkScorerPickerPreferenceController(mContext, "test_key");
-    }
-
-    @Test
-    public void testIsAvailable_shouldAlwaysReturnTrue() {
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    public void updateState_preferenceSetSummaryAsActiveScorerLabel() {
-
-        ComponentName scorer = new ComponentName(TEST_SCORER_PACKAGE, TEST_SCORER_CLASS);
-
-        NetworkScorerAppData scorerAppData = new NetworkScorerAppData(
-                0, scorer, TEST_SCORER_LABEL, null /* enableUseOpenWifiActivity */,
-                null /* networkAvailableNotificationChannelId */);
-
-        when(mNetworkScorer.getAllValidScorers())
-                .thenReturn(Collections.singletonList(scorerAppData));
-
-        when(mNetworkScorer.getActiveScorer()).thenReturn(scorerAppData);
-
-        Preference preference = mock(Preference.class);
-
-        mController.updateState(preference);
-
-        verify(preference).setSummary(TEST_SCORER_LABEL);
-    }
-
-    @Test
-    public void updateState_scorersAvailable_noActiveScorer_preferenceSetSummaryToNone() {
-        ComponentName scorer = new ComponentName(TEST_SCORER_PACKAGE, TEST_SCORER_CLASS);
-        NetworkScorerAppData scorerAppData = new NetworkScorerAppData(
-                0, scorer, TEST_SCORER_LABEL, null /* enableUseOpenWifiActivity */,
-                null /* networkAvailableNotificationChannelId */);
-        when(mNetworkScorer.getAllValidScorers())
-                .thenReturn(Collections.singletonList(scorerAppData));
-        when(mNetworkScorer.getActiveScorer()).thenReturn(null);
-
-        Preference preference = mock(Preference.class);
-
-        mController.updateState(preference);
-
-        Context context = ApplicationProvider.getApplicationContext();
-
-        verify(preference).setSummary(
-                resourceString("network_scorer_picker_none_preference"));
-    }
-
-    @Test
-    public void updateState_scorersAvailable_preferenceEnabled() {
-        ComponentName scorer = new ComponentName(TEST_SCORER_PACKAGE, TEST_SCORER_CLASS);
-        NetworkScorerAppData scorerAppData = new NetworkScorerAppData(
-                0, scorer, TEST_SCORER_LABEL, null /* enableUseOpenWifiActivity */,
-                null /* networkAvailableNotificationChannelId */);
-        when(mNetworkScorer.getAllValidScorers())
-                .thenReturn(Collections.singletonList(scorerAppData));
-
-        Preference preference = mock(Preference.class);
-
-        mController.updateState(preference);
-
-        verify(preference).setEnabled(true);
-    }
-
-    @Test
-    public void updateState_noScorersAvailable_preferenceDisabled() {
-        when(mNetworkScorer.getAllValidScorers())
-                .thenReturn(Collections.emptyList());
-        Preference preference = mock(Preference.class);
-
-        mController.updateState(preference);
-
-        verify(preference).setEnabled(false);
-        verify(preference).setSummary(null);
-    }
-
-    public int resourceId(String type, String name) {
-        return mContext.getResources().getIdentifier(name, type, mContext.getPackageName());
-    }
-
-    public String resourceString(String name) {
-        return mContext.getResources().getString(resourceId("string", name));
-    }
-}