Merge "The text on toast should be changed when remains 1 time for SIM lock input" into rvc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cd738c3..f913b7a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4945,17 +4945,11 @@
     <!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_title_software">Tap accessibility button</string>
     <!-- Summary for software shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen</string>
+    <string name="accessibility_shortcut_edit_dialog_summary_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen.\n\nTo switch between features, touch &amp; hold the accessibility button.</string>
     <!-- Summary for software shortcut in gesture mode in accessibility edit shortcut dialog while using gesture navigation is enabled. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_software_gesture">Swipe up from the bottom of the screen with 2 fingers</string>
+    <string name="accessibility_shortcut_edit_dialog_summary_software_gesture">Swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.</string>
     <!-- Summary for software shortcut in gesture mode in accessibility edit shortcut dialog while using gesture navigation and touch exploration are enabled [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_software_gesture_talkback">Swipe up from the bottom of the screen with 3 fingers</string>
-    <!-- Summary for software shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_migration_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen.\n\nTo switch between features, touch &amp; hold the accessibility button.</string>
-    <!-- Summary for software shortcut in gesture mode in accessibility edit shortcut dialog while using gesture navigation is enabled. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_migration_software_gesture">Swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.</string>
-    <!-- Summary for software shortcut in gesture mode in accessibility edit shortcut dialog while using gesture navigation and touch exploration are enabled [CHAR LIMIT=NONE] -->
-    <string name="accessibility_shortcut_edit_dialog_summary_migration_software_gesture_talkback">Swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold.</string>
+    <string name="accessibility_shortcut_edit_dialog_summary_software_gesture_talkback">Swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold.</string>
     <!-- Title for hardware shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_title_hardware">Hold volume keys</string>
     <!-- Summary for hardware shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
@@ -5149,29 +5143,19 @@
     <string name="daltonizer_mode_tritanomaly_summary">Blue-yellow</string>
 
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
-    <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay">
-        <item quantity="one">Extremely short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
-        <item quantity="other">Extremely short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
-    </plurals>
-    <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
-    <plurals name="accessibilty_autoclick_preference_subtitle_very_short_delay">
-        <item quantity="one">Very short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
-        <item quantity="other">Very short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
-    </plurals>
-    <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <plurals name="accessibilty_autoclick_preference_subtitle_short_delay">
-        <item quantity="one">Short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
-        <item quantity="other">Short delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
+        <item quantity="one">Short (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
+        <item quantity="other">Short (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
+    </plurals>
+    <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
+    <plurals name="accessibilty_autoclick_preference_subtitle_medium_delay">
+        <item quantity="one">Medium (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
+        <item quantity="other">Medium (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
     </plurals>
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <plurals name="accessibilty_autoclick_preference_subtitle_long_delay">
-        <item quantity="one">Long delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
-        <item quantity="other">Long delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
-    </plurals>
-    <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
-    <plurals name="accessibilty_autoclick_preference_subtitle_very_long_delay">
-        <item quantity="one">Very long delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
-        <item quantity="other">Very long delay (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
+        <item quantity="one">Long (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> second)</item>
+        <item quantity="other">Long (<xliff:g id="click_delay_label" example="200">%1$s</xliff:g> seconds)</item>
     </plurals>
 
     <!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
@@ -7191,6 +7175,8 @@
     <string name="help_url_caption" translatable="false"></string>
     <!-- Help URL, Accessibility Timeout [DO NOT TRANSLATE] -->
     <string name="help_url_timeout" translatable="false"></string>
+    <!-- Help URL, Accessibility Color Inversion [DO NOT TRANSLATE] -->
+    <string name="help_url_color_inversion" translatable="false"></string>
     <string name="help_url_system_dashboard" translatable="false"></string>
     <string name="help_url_double_tap_screen" translatable="false"></string>
     <string name="help_url_account_detail" translatable="false"></string>
@@ -10671,7 +10657,7 @@
     <string name="legacy_navigation_summary">Go back, Home, and switch apps with buttons at the bottom of your screen.</string>
 
     <!-- Search keywords for System Navigation settings. [CHAR_LIMIT=NONE]-->
-    <string name="keywords_system_navigation">system navigation, 2 button navigation, 3 button navigation, gesture navigation</string>
+    <string name="keywords_system_navigation">system navigation, 2 button navigation, 3 button navigation, gesture navigation, swipe</string>
 
     <!-- Message for the alert dialog which says that the current default home app does not support gesture navigation. [CHAR LIMIT=NONE] -->
     <string name="gesture_not_supported_dialog_message">Not supported by your default home app, <xliff:g id="default_home_app" example="Pixel Launcher">%s</xliff:g></string>
diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml
index a523ec6..c505fc9 100644
--- a/res/xml/gestures.xml
+++ b/res/xml/gestures.xml
@@ -51,7 +51,8 @@
         android:key="gesture_system_navigation_input_summary"
         android:title="@string/system_navigation_title"
         android:fragment="com.android.settings.gestures.SystemNavigationGestureSettings"
-        settings:controller="com.android.settings.gestures.SystemNavigationPreferenceController" />
+        settings:controller="com.android.settings.gestures.SystemNavigationPreferenceController"
+        settings:keywords="@string/keywords_system_navigation" />
 
     <Preference
         android:key="gesture_tap_screen_input_summary"
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
index 394f50a..6c2b593 100644
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
@@ -105,7 +105,7 @@
 
     @Override
     public int getMetricsCategory() {
-        return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES;
+        return SettingsEnums.ACCESSIBILITY_CAPTION_APPEARANCE;
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
index 8e5c003..d3fd407 100644
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
@@ -44,7 +44,7 @@
 
     @Override
     public int getMetricsCategory() {
-        return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES;
+        return SettingsEnums.ACCESSIBILITY_CAPTION_MORE_OPTIONS;
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
index 5e09b2a..6624457 100644
--- a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
@@ -64,12 +64,10 @@
      * Resource ids from which autoclick preference summaries should be derived. The strings have
      * placeholder for integer delay value.
      */
-    private static final int[] mAutoclickPreferenceSummaries = {
-            R.plurals.accessibilty_autoclick_preference_subtitle_extremely_short_delay,
-            R.plurals.accessibilty_autoclick_preference_subtitle_very_short_delay,
+    private static final int[] AUTOCLICK_PREFERENCE_SUMMARIES = {
             R.plurals.accessibilty_autoclick_preference_subtitle_short_delay,
-            R.plurals.accessibilty_autoclick_preference_subtitle_long_delay,
-            R.plurals.accessibilty_autoclick_preference_subtitle_very_long_delay
+            R.plurals.accessibilty_autoclick_preference_subtitle_medium_delay,
+            R.plurals.accessibilty_autoclick_preference_subtitle_long_delay
     };
 
     /**
@@ -86,7 +84,7 @@
         // Only show integer when delay time is 1.
         final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f";
 
-        return resources.getQuantityString(mAutoclickPreferenceSummaries[summaryIndex],
+        return resources.getQuantityString(AUTOCLICK_PREFERENCE_SUMMARIES[summaryIndex],
                 quantity, String.format(decimalFormat, delaySecond));
     }
 
@@ -98,10 +96,10 @@
             return 0;
         }
         if (delay >= MAX_AUTOCLICK_DELAY_MS) {
-            return mAutoclickPreferenceSummaries.length - 1;
+            return AUTOCLICK_PREFERENCE_SUMMARIES.length - 1;
         }
         int delayRange = MAX_AUTOCLICK_DELAY_MS - MIN_AUTOCLICK_DELAY_MS;
-        int rangeSize = (delayRange) / (mAutoclickPreferenceSummaries.length - 1);
+        int rangeSize = (delayRange) / (AUTOCLICK_PREFERENCE_SUMMARIES.length - 1);
         return (delay - MIN_AUTOCLICK_DELAY_MS) / rangeSize;
     }
 
diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
index c0ad2ac..833c9f1 100644
--- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
@@ -114,6 +114,11 @@
     }
 
     @Override
+    public int getHelpResource() {
+        return R.string.help_url_color_inversion;
+    }
+
+    @Override
     public void onSettingsClicked(ShortcutPreference preference) {
         super.onSettingsClicked(preference);
         showDialog(DialogEnums.EDIT_SHORTCUT);
diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java
index 28a88a2..69a68ef 100644
--- a/src/com/android/settings/applications/RecentAppsPreferenceController.java
+++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java
@@ -17,7 +17,6 @@
 package com.android.settings.applications;
 
 import android.app.Application;
-import android.app.settings.SettingsEnums;
 import android.app.usage.UsageStats;
 import android.content.Context;
 import android.icu.text.RelativeDateTimeFormatter;
@@ -98,12 +97,12 @@
                 .setHeaderTitleRes(R.string.recent_app_category_title)
                 .setHeaderDetailsClickListener((View v) -> {
                     mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference,
-                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
+                            getMetricsCategory());
                     new SubSettingLauncher(mContext)
                             .setDestination(ManageApplications.class.getName())
                             .setArguments(null /* arguments */)
                             .setTitleRes(R.string.application_info_label)
-                            .setSourceMetricsCategory(SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY)
+                            .setSourceMetricsCategory(getMetricsCategory())
                             .launch();
                 });
     }
@@ -166,11 +165,10 @@
                         RelativeDateTimeFormatter.Style.SHORT))
                 .setOnClickListener(v -> {
                     mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference,
-                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
+                            getMetricsCategory());
                     AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
                             R.string.application_info_label, pkgName, appEntry.info.uid,
-                            mHost, 1001 /*RequestCode*/,
-                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
+                            mHost, 1001 /*RequestCode*/, getMetricsCategory());
                 })
                 .build();
     }
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
index b5ccd73..d8ec848 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
@@ -46,7 +46,6 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -202,8 +201,7 @@
         pref.setSummary(item.getDescription());
         pref.setEnabled(item.isEnabled());
         pref.setOnPreferenceClickListener(preference -> {
-            mMetricsFeatureProvider.logClickedPreference(preference,
-                    preference.getExtras().getInt(DashboardFragment.CATEGORY));
+            mMetricsFeatureProvider.logClickedPreference(preference, getMetricsCategory());
             final UserHandle user = item.getUser();
             mContext.startActivityAsUser(item.getLaunchIntent(mContext), user);
             return true;
diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java
index 1985a99..c90fe48 100644
--- a/src/com/android/settings/core/BasePreferenceController.java
+++ b/src/com/android/settings/core/BasePreferenceController.java
@@ -124,6 +124,7 @@
     private boolean mIsForWork;
     @Nullable
     private UserHandle mWorkProfileUser;
+    private int mMetricsCategory;
 
     /**
      * Instantiate a controller as specified controller type and user-defined key.
@@ -398,12 +399,28 @@
      * This won't block UI thread however has similar side effect. Please use it if you
      * want to avoid janky animation(i.e. new preference is added in the middle of page).
      *
-     * This music be used in {@link BasePreferenceController}
+     * This must be used in {@link BasePreferenceController}
      */
     public interface UiBlocker {
     }
 
     /**
+     * Set the metrics category of the parent fragment.
+     *
+     * Called by DashboardFragment#onAttach
+     */
+    public void setMetricsCategory(int metricsCategory) {
+        mMetricsCategory = metricsCategory;
+    }
+
+    /**
+     * @return the metrics category of the parent fragment.
+     */
+    protected int getMetricsCategory() {
+        return mMetricsCategory;
+    }
+
+    /**
      * @return Non-{@code null} {@link UserHandle} when a work profile is enabled.
      * Otherwise {@code null}.
      */
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index 7abe6e0..5a2a8b7 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -18,8 +18,10 @@
 import androidx.preference.Preference;
 import androidx.preference.TwoStatePreference;
 
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.slices.SliceData;
 import com.android.settings.widget.MasterSwitchPreference;
+import com.android.settings.widget.TwoStateButtonPreference;
 
 /**
  * Abstract class that consolidates logic for updating toggle controllers.
@@ -54,6 +56,8 @@
             ((TwoStatePreference) preference).setChecked(isChecked());
         } else if (preference instanceof MasterSwitchPreference) {
             ((MasterSwitchPreference) preference).setChecked(isChecked());
+        } else if (preference instanceof TwoStateButtonPreference) {
+            ((TwoStateButtonPreference) preference).setChecked(isChecked());
         } else {
             refreshSummary(preference);
         }
@@ -61,6 +65,12 @@
 
     @Override
     public final boolean onPreferenceChange(Preference preference, Object newValue) {
+        // TwoStatePreference is a regular preference and can be handled by DashboardFragment
+        if (preference instanceof MasterSwitchPreference
+                || preference instanceof TwoStateButtonPreference) {
+            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+                    .logClickedPreference(preference, getMetricsCategory());
+        }
         return setChecked((boolean) newValue);
     }
 
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index d121195..c70d841 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -113,6 +113,14 @@
             }
         });
 
+        // Set metrics category for BasePreferenceController.
+        final int metricCategory = getMetricsCategory();
+        mControllers.forEach(controller -> {
+            if (controller instanceof BasePreferenceController) {
+                ((BasePreferenceController) controller).setMetricsCategory(metricCategory);
+            }
+        });
+
         mPlaceholderPreferenceController =
                 new DashboardTilePlaceholderPreferenceController(context);
         mControllers.add(mPlaceholderPreferenceController);
diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java
index c2da56a..98d9a69 100644
--- a/src/com/android/settings/display/DarkUIPreferenceController.java
+++ b/src/com/android/settings/display/DarkUIPreferenceController.java
@@ -17,7 +17,6 @@
 package com.android.settings.display;
 
 import android.app.UiModeManager;
-import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -33,8 +32,6 @@
 
 import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -49,7 +46,6 @@
     @VisibleForTesting
     Preference mPreference;
 
-    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private UiModeManager mUiModeManager;
     private PowerManager mPowerManager;
     private Context mContext;
@@ -68,7 +64,6 @@
         mContext = context;
         mUiModeManager = context.getSystemService(UiModeManager.class);
         mPowerManager = context.getSystemService(PowerManager.class);
-        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @Override
@@ -91,7 +86,6 @@
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        mMetricsFeatureProvider.logClickedPreference(mPreference, SettingsEnums.DISPLAY);
         final boolean dialogSeen =
                 Settings.Secure.getInt(mContext.getContentResolver(),
                         Settings.Secure.DARK_MODE_DIALOG_SEEN, 0) == DIALOG_SEEN;
diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
index f68df50..4b1e295 100644
--- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.display;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.hardware.display.ColorDisplayManager;
 import android.text.TextUtils;
@@ -50,8 +49,7 @@
         @Override
         public void onClick(View v) {
             mButtonTriggered = true;
-            mMetricsFeatureProvider.logClickedPreference(mPreference,
-                    SettingsEnums.NIGHT_DISPLAY_SETTINGS);
+            mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory());
             mColorDisplayManager.setNightDisplayActivated(
                     !mColorDisplayManager.isNightDisplayActivated());
             updateStateInternal();
diff --git a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java
index 622f2e2..74b029f 100644
--- a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java
+++ b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java
@@ -16,7 +16,6 @@
 package com.android.settings.display.darkmode;
 
 import android.app.UiModeManager;
-import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.PowerManager;
@@ -136,8 +135,7 @@
     private final View.OnClickListener mListener = new View.OnClickListener() {
         @Override
         public void onClick(View v) {
-            mMetricsFeatureProvider.logClickedPreference(mPreference,
-                    SettingsEnums.DARK_UI_SETTINGS);
+            mMetricsFeatureProvider.logClickedPreference(mPreference, getMetricsCategory());
             final boolean active = (mContext.getResources().getConfiguration().uiMode
                     & Configuration.UI_MODE_NIGHT_YES) != 0;
             mUiModeManager.setNightModeActivated(!active);
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
index fff6523..a089abc 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
@@ -16,21 +16,17 @@
 
 package com.android.settings.fuelgauge.batterysaver;
 
-import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.net.Uri;
 import android.os.PowerManager;
 import android.provider.SettingsSlicesContract;
 
-import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.fuelgauge.BatterySaverReceiver;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.TwoStateButtonPreference;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -45,13 +41,11 @@
 
     private final BatterySaverReceiver mBatterySaverReceiver;
     private final PowerManager mPowerManager;
-    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private TwoStateButtonPreference mPreference;
 
     public BatterySaverButtonPreferenceController(Context context, String key) {
         super(context, key);
-        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         mBatterySaverReceiver = new BatterySaverReceiver(context);
         mBatterySaverReceiver.setBatterySaverListener(this);
@@ -100,22 +94,12 @@
 
     @Override
     public boolean setChecked(boolean stateOn) {
-        mMetricsFeatureProvider.logClickedPreference(mPreference,
-                SettingsEnums.FUELGAUGE_BATTERY_SAVER);
         // This screen already shows a warning, so we don't need another warning.
         return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,
                 false /* needFirstTimeWarning */);
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-        if (mPreference != null) {
-            mPreference.setChecked(isChecked());
-        }
-    }
-
-    @Override
     public void onPowerSaveModeChanged() {
         final boolean isChecked = isChecked();
         if (mPreference != null && mPreference.isChecked() != isChecked) {
diff --git a/src/com/android/settings/network/telephony/TelephonyConstants.java b/src/com/android/settings/network/telephony/TelephonyConstants.java
index 2a2613c..78a177e 100644
--- a/src/com/android/settings/network/telephony/TelephonyConstants.java
+++ b/src/com/android/settings/network/telephony/TelephonyConstants.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.network.telephony;
 
-
 import android.telephony.TelephonyManager;
 
 /**
@@ -210,6 +209,12 @@
      * Copied from {@link android.telephony.RadioAccessFamily}
      */
     public static class RadioAccessFamily {
+        /**
+         * TODO: get rid of RAF definition in RadioAccessFamily and
+         * use {@link TelephonyManager.NetworkTypeBitMask}
+         * TODO: public definition {@link TelephonyManager.NetworkTypeBitMask} is long.
+         * TODO: Convert from int * to long everywhere including HAL definitions.
+         */
         // 2G
         public static final int RAF_UNKNOWN = (int) TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN;
         public static final int RAF_GSM = (int) TelephonyManager.NETWORK_TYPE_BITMASK_GSM;
@@ -245,9 +250,7 @@
         public static final int WCDMA = HS | RAF_UMTS;
         // 4G
         public static final int LTE = RAF_LTE | RAF_LTE_CA;
-
         // 5G
         public static final int NR = RAF_NR;
-
     }
 }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index bba9001..581f202 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -1304,9 +1304,7 @@
                     final List<String> keys = super.getNonIndexableKeys(context);
 
                     final WifiManager wifiManager = context.getSystemService(WifiManager.class);
-                    final List<AccessPoint> accessPoints = WifiSavedConfigUtils.getAllConfigs(
-                            context, wifiManager);
-                    if (accessPoints == null || accessPoints.size() <= 0) {
+                    if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
                         keys.add(PREF_KEY_SAVED_NETWORKS);
                     }
 
diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index 1098c01..e791df8 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -76,6 +76,7 @@
 import com.android.settingslib.search.Indexable;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.wifi.LongPressWifiEntryPreference;
+import com.android.settingslib.wifi.WifiSavedConfigUtils;
 import com.android.wifitrackerlib.WifiEntry;
 import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
 import com.android.wifitrackerlib.WifiPickerTracker;
@@ -1027,7 +1028,22 @@
     };
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.wifi_settings2);
+            new BaseSearchIndexProvider(R.xml.wifi_settings2) {
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    final List<String> keys = super.getNonIndexableKeys(context);
+
+                    final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+                    if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
+                        keys.add(PREF_KEY_SAVED_NETWORKS);
+                    }
+
+                    if (!DataUsageUtils.hasWifiRadio(context)) {
+                        keys.add(PREF_KEY_DATA_USAGE);
+                    }
+                    return keys;
+                }
+            };
 
     private class WifiEntryConnectCallback implements ConnectCallback {
         final WifiEntry mConnectWifiEntry;
diff --git a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
index fc18f60..0707c2c 100644
--- a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
@@ -28,6 +28,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 
 import androidx.preference.Preference;
@@ -205,6 +206,15 @@
         assertThat(keys).isEmpty();
     }
 
+    @Test
+    public void getMetricsCategory_metricsCategoryIsSet_shouldReturnTheSameCategory() {
+        mPreferenceController.setMetricsCategory(SettingsEnums.DISPLAY);
+
+        final int category = mPreferenceController.getMetricsCategory();
+
+        assertThat(category).isEqualTo(SettingsEnums.DISPLAY);
+    }
+
     private class FakeBasePreferenceController extends BasePreferenceController {
 
         private int mAvailable;