Merge "Fix the multiple instences of NetworkProviderSettingsActivity issue" into sc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aa2a142..60dbb24 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1323,7 +1323,8 @@
         <activity
             android:name=".notification.history.NotificationHistoryActivity"
             android:exported="true"
-            android:label="@string/notification_history_title">
+            android:label="@string/notification_history_title"
+            android:theme="@style/Theme.Settings.NoActionBar">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.NOTIFICATION_HISTORY" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -1517,7 +1518,8 @@
         <activity android:name=".applications.specialaccess.deviceadmin.DeviceAdminAdd"
                   android:label="@string/device_admin_add_title"
                   android:exported="true"
-                  android:clearTaskOnLaunch="true">
+                  android:clearTaskOnLaunch="true"
+                  android:theme="@style/Theme.Settings.NoActionBar">
             <intent-filter>
                 <action android:name="android.app.action.ADD_DEVICE_ADMIN" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable/ic_power_settings.xml b/res/drawable/ic_power_settings.xml
deleted file mode 100644
index b56e332..0000000
--- a/res/drawable/ic_power_settings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-    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.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24"
-        android:viewportHeight="24"
-        android:tint="?android:attr/colorControlNormal">
-    <path
-        android:pathData="M11,2h2v10h-2zM18.37,5.64l-1.41,1.41c2.73,2.73 2.72,7.16 -0.01,9.89 -2.73,2.73 -7.17,2.73 -9.89,0.01 -2.73,-2.73 -2.74,-7.18 -0.01,-9.91l-1.41,-1.4c-3.51,3.51 -3.51,9.21 0.01,12.73 3.51,3.51 9.21,3.51 12.72,-0.01 3.51,-3.51 3.51,-9.2 0,-12.72z"
-        android:fillColor="@android:color/white"/>
-</vector>
\ No newline at end of file
diff --git a/res/layout/main_clear.xml b/res/layout/main_clear.xml
index cbccb0a..a2464e2 100644
--- a/res/layout/main_clear.xml
+++ b/res/layout/main_clear.xml
@@ -27,40 +27,39 @@
     <ScrollView
         android:id="@+id/main_clear_scrollview"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginStart="@dimen/reset_main_clear_margin_start"
-        android:layout_marginEnd="@dimen/reset_main_clear_margin_end">
+        android:layout_height="match_parent">
 
         <LinearLayout
             android:id="@+id/main_clear_container"
             style="@style/SudContentFrame"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
             android:orientation="vertical">
 
             <TextView
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:id="@+id/sud_layout_description"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/main_clear_desc"/>
             <TextView
                 android:id="@+id/also_erases_external"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
                 android:text="@string/main_clear_desc_also_erases_external"/>
             <TextView
                 android:id="@+id/also_erases_esim"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
                 android:text="@string/main_clear_desc_also_erases_esim"/>
             <TextView
                 android:id="@+id/accounts_label"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
@@ -76,21 +75,21 @@
             </LinearLayout>
             <TextView
                 android:id="@+id/other_users_present"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
                 android:text="@string/main_clear_other_users_present"/>
             <TextView
                 android:id="@+id/no_cancel_mobile_plan"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
                 android:text="@string/main_clear_desc_no_cancel_mobile_plan"/>
             <TextView
                 android:id="@+id/erase_external_option_text"
-                style="@style/TextAppearance.SudGlifItemSummary"
+                style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/main_clear_desc_erase_external_storage"/>
@@ -116,12 +115,12 @@
                     android:layout_gravity="center_vertical"
                     android:orientation="vertical">
                     <TextView
-                        style="@style/TextAppearance.SudGlifItemTitle"
+                        style="@style/TextAppearance.PreferenceTitle.SettingsLib"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:text="@string/erase_external_storage"/>
                     <TextView
-                        style="@style/TextAppearance.SudGlifItemSummary"
+                        style="?android:attr/textAppearanceListItemSecondary"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:text="@string/erase_external_storage_description"/>
diff --git a/res/layout/main_clear_account.xml b/res/layout/main_clear_account.xml
index f95a44f..6dbf4d8 100644
--- a/res/layout/main_clear_account.xml
+++ b/res/layout/main_clear_account.xml
@@ -4,9 +4,9 @@
      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.
@@ -30,6 +30,6 @@
         android:id="@android:id/title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        style="@style/TextAppearance.SudGlifItemSummary"/>
+        style="@style/TextAppearance.PreferenceTitle.SettingsLib"/>
 </LinearLayout>
 
diff --git a/res/layout/main_clear_confirm.xml b/res/layout/main_clear_confirm.xml
index 914a998..c5601c7 100644
--- a/res/layout/main_clear_confirm.xml
+++ b/res/layout/main_clear_confirm.xml
@@ -31,7 +31,7 @@
 
         <TextView
             android:id="@+id/sud_layout_description"
-            style="@style/SudItemTitle.GlifDescription"
+            style="@style/TextAppearance.PreferenceTitle.SettingsLib"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@string/main_clear_final_desc"/>
diff --git a/res/layout/preference_widget_main_switch.xml b/res/layout/preference_widget_main_switch.xml
index a02ed43..a01105f 100644
--- a/res/layout/preference_widget_main_switch.xml
+++ b/res/layout/preference_widget_main_switch.xml
@@ -15,10 +15,11 @@
   limitations under the License.
   -->
 
-<LinearLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    android:importantForAccessibility="no">
 
     <com.android.settings.widget.SettingsMainSwitchBar
         android:id="@+id/main_switch_bar"
@@ -26,4 +27,4 @@
         android:layout_height="wrap_content"
         android:layout_width="match_parent" />
 
-</LinearLayout>
+</FrameLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 908b640..fe0ada0 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -327,8 +327,6 @@
     <!-- Margin for the reset screens -->
     <dimen name="reset_network_margin_start">72dp</dimen>
     <dimen name="reset_network_margin_end">12dp</dimen>
-    <dimen name="reset_main_clear_margin_start">32dp</dimen>
-    <dimen name="reset_main_clear_margin_end">12dp</dimen>
     <dimen name="reset_button_margin_end">20dp</dimen>
 
     <!-- Padding for the reset screens -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2ddbae3..aeaea61 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13203,23 +13203,29 @@
     <string name="cards_passes_lower">cards &amp; passes</string>
 
     <!-- Power menu setting name [CHAR LIMIT=NONE] -->
-    <string name="power_menu_setting_name">Power menu</string>
+    <string name="power_menu_setting_name">Press and hold power button</string>
 
-    <!-- Power menu setting title [CHAR LIMIT=NONE] -->
-    <string name="power_menu_setting_title">Power button menu</string>
-
-    <!-- Power menu setting option none [CHAR LIMIT=NONE] -->
-    <string name="power_menu_none">Don\u2019t show any content</string>
+    <!-- Power menu setting summary to describe press and hold power button for Assistant is enabled. [CHAR LIMIT=NONE] -->
+    <string name="power_menu_summary_long_press_for_assist_enabled">Press and hold for the Assistant</string>
+    <!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and power menu will appear. [CHAR LIMIT=NONE] -->
+    <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu">Press and hold for the power menu</string>
+    <!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and nothing will happen. [CHAR LIMIT=NONE] -->
+    <string name="power_menu_summary_long_press_for_assist_disabled_no_action">Press and hold disabled</string>
 
     <!-- Power menu setting privacy no secure screen lock set [CHAR_LIMIT=NONE] -->
     <string name="lockscreen_privacy_not_secure">To use, first set a screen lock</string>
 
-    <!-- Power menu setting use long press power to invoke assistant. [CHAR_LIMIT=NONE] -->
+    <!-- Power menu setting use long press power to invoke assistant. [CHAR LIMIT=NONE] -->
     <string name="power_menu_long_press_for_assist">Hold for Assistant</string>
 
-    <!-- Power menu setting use log press power to invoke assistant summary. [CHAR_LIMIT=NONE] -->
+    <!-- Power menu setting use log press power to invoke assistant summary. [CHAR LIMIT=NONE] -->
     <string name="power_menu_long_press_for_assist_summary">Trigger the Assistant by holding the power button</string>
 
+    <!-- Power menu explanation to press power and volume up to show power and emergency menu. [CHAR LIMIT=NONE] -->
+    <string name="power_menu_power_volume_up_hint">Power &amp; Emergency Menu:\nPress Power and Volume up at the same time.</string>
+    <!-- Power menu explanation where to find prevent ringing option. [CHAR LIMIT=NONE] -->
+    <string name="power_menu_power_prevent_ringing_hint">Prevent ringing:\nShortcut available in the volume menu.</string>
+
     <!-- Wallet (formerly Cards and passes) toggle name [CHAR LIMIT=60] -->
     <string name="lockscreen_privacy_wallet_setting_toggle">Show wallet</string>
     <!-- Wallet (formerly Cards and passes) summary [CHAR LIMIT=NONE] -->
diff --git a/res/xml/apps.xml b/res/xml/apps.xml
index a7d823b..e6314da 100644
--- a/res/xml/apps.xml
+++ b/res/xml/apps.xml
@@ -55,7 +55,7 @@
         settings:searchable="false"/>
 
     <Preference
-        android:key="default_apps_v2"
+        android:key="default_apps"
         android:title="@string/app_default_dashboard_title"
         android:order="-996"
         settings:controller="com.android.settings.applications.DefaultAppsPreferenceController">
@@ -85,7 +85,7 @@
     </Preference>
 
     <Preference
-        android:key="special_access_v2"
+        android:key="special_access"
         android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
         android:title="@string/special_access"
         android:order="20"
diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml
index 6de9c1a..175a826 100644
--- a/res/xml/gestures.xml
+++ b/res/xml/gestures.xml
@@ -86,4 +86,10 @@
         android:title="@string/gesture_prevent_ringing_screen_title"
         android:fragment="com.android.settings.gestures.PreventRingingGestureSettings"
         settings:controller="com.android.settings.gestures.PreventRingingParentPreferenceController" />
+
+    <Preference
+        android:key="gesture_power_menu_summary"
+        android:title="@string/power_menu_setting_name"
+        android:fragment="com.android.settings.gestures.PowerMenuSettings"
+        settings:controller="com.android.settings.gestures.PowerMenuPreferenceController" />
 </PreferenceScreen>
diff --git a/res/xml/power_menu_settings.xml b/res/xml/power_menu_settings.xml
index f88531e..caaeb97 100644
--- a/res/xml/power_menu_settings.xml
+++ b/res/xml/power_menu_settings.xml
@@ -1,19 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ 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.
-  -->
+<!-- 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.
+-->
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
@@ -26,4 +23,10 @@
         android:summary="@string/power_menu_long_press_for_assist_summary"
         settings:controller="com.android.settings.gestures.LongPressPowerButtonPreferenceController"
         />
+
+    <com.android.settingslib.widget.FooterPreference
+        android:key="power_menu_power_volume_up_hint"
+        android:title="@string/power_menu_power_volume_up_hint"
+        android:selectable="false"
+        settings:searchable="false" />
 </PreferenceScreen>
diff --git a/res/xml/system_dashboard_fragment.xml b/res/xml/system_dashboard_fragment.xml
index 6737775..9228ddd 100644
--- a/res/xml/system_dashboard_fragment.xml
+++ b/res/xml/system_dashboard_fragment.xml
@@ -43,14 +43,6 @@
         android:fragment="com.android.settings.datetime.DateTimeSettings"
         settings:controller="com.android.settings.datetime.DateTimePreferenceController"/>
 
-    <Preference
-        android:key="gesture_power_menu_summary"
-        android:title="@string/power_menu_setting_name"
-        android:icon="@drawable/ic_power_settings"
-        android:order="-220"
-        android:fragment="com.android.settings.gestures.PowerMenuSettings"
-        settings:controller="com.android.settings.gestures.PowerMenuPreferenceController" />
-
     <!-- System updates -->
     <Preference
         android:key="additional_system_update_settings"
diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java
index d48d26c..6a93477 100644
--- a/src/com/android/settings/PointerSpeedPreference.java
+++ b/src/com/android/settings/PointerSpeedPreference.java
@@ -73,6 +73,7 @@
         mOldSpeed = mIm.getPointerSpeed(getContext());
         mSeekBar.setProgress(mOldSpeed - InputManager.MIN_POINTER_SPEED);
         mSeekBar.setOnSeekBarChangeListener(this);
+        mSeekBar.setContentDescription(getTitle());
     }
 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
diff --git a/src/com/android/settings/applications/AppDashboardFragment.java b/src/com/android/settings/applications/AppDashboardFragment.java
index ff12595..7e203b0 100644
--- a/src/com/android/settings/applications/AppDashboardFragment.java
+++ b/src/com/android/settings/applications/AppDashboardFragment.java
@@ -69,6 +69,7 @@
         use(SpecialAppAccessPreferenceController.class).setSession(getSettingsLifecycle());
         mAppsPreferenceController = use(AppsPreferenceController.class);
         mAppsPreferenceController.setFragment(this /* fragment */);
+        getSettingsLifecycle().addObserver(mAppsPreferenceController);
 
         final HibernatedAppsPreferenceController hibernatedAppsPreferenceController =
                 use(HibernatedAppsPreferenceController.class);
diff --git a/src/com/android/settings/applications/AppsPreferenceController.java b/src/com/android/settings/applications/AppsPreferenceController.java
index 72d4492..9fbd5c1 100644
--- a/src/com/android/settings/applications/AppsPreferenceController.java
+++ b/src/com/android/settings/applications/AppsPreferenceController.java
@@ -26,6 +26,9 @@
 
 import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
@@ -45,7 +48,8 @@
  * This controller displays up to four recently used apps.
  * If there is no recently used app, we only show up an "App Info" preference.
  */
-public class AppsPreferenceController extends BasePreferenceController {
+public class AppsPreferenceController extends BasePreferenceController implements
+        LifecycleObserver {
 
     public static final int SHOW_RECENT_APP_COUNT = 4;
 
@@ -73,6 +77,7 @@
     Preference mSeeAllPref;
 
     private Fragment mHost;
+    private boolean mInitialLaunch = false;
 
     public AppsPreferenceController(Context context) {
         super(context, KEY_RECENT_APPS_CATEGORY);
@@ -95,12 +100,23 @@
         super.displayPreference(screen);
         initPreferences(screen);
         refreshUi();
+        mInitialLaunch = true;
     }
 
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        refreshUi();
+        if (!mInitialLaunch) {
+            refreshUi();
+        }
+    }
+
+    /**
+     * Called when the apps page pauses.
+     */
+    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+    public void onPause() {
+        mInitialLaunch = false;
     }
 
     @VisibleForTesting
@@ -109,11 +125,15 @@
         mRecentApps = loadRecentApps();
         if (!mRecentApps.isEmpty()) {
             displayRecentApps();
+            mAllAppsInfoPref.setVisible(false);
             mRecentAppsCategory.setVisible(true);
             mGeneralCategory.setVisible(true);
             mSeeAllPref.setVisible(true);
         } else {
             mAllAppsInfoPref.setVisible(true);
+            mRecentAppsCategory.setVisible(false);
+            mGeneralCategory.setVisible(false);
+            mSeeAllPref.setVisible(false);
         }
     }
 
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index d83f5d1..89c3478 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -43,6 +43,7 @@
 import com.android.settings.fuelgauge.BatteryEntry;
 import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
 import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.ConvertUtils;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -113,7 +114,13 @@
         if (!KEY_BATTERY.equals(preference.getKey())) {
             return false;
         }
+
         if (mBatteryDiffEntry != null) {
+            Log.i(TAG, "BatteryDiffEntry not null, launch : "
+                    + mBatteryDiffEntry.getPackageName()
+                    + " | uid : "
+                    + mBatteryDiffEntry.mBatteryHistEntry.mUid
+                    + " with DiffEntry data");
             AdvancedPowerUsageDetail.startBatteryDetailPage(
                     mParent.getActivity(),
                     mParent,
@@ -131,10 +138,16 @@
             final BatteryEntry entry = new BatteryEntry(mContext, /* handler */null, userManager,
                     mUidBatteryConsumer, /* isHidden */ false,
                     mUidBatteryConsumer.getUid(), /* packages */ null, mPackageName);
+            Log.i(TAG, "Battery consumer available, launch : "
+                    + entry.getDefaultPackageName()
+                    + " | uid : "
+                    + entry.getUid()
+                    + " with BatteryEntry data");
             AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent, entry,
                     mIsChartGraphEnabled ? Utils.formatPercentage(0) : mBatteryPercent,
                     !mIsChartGraphEnabled);
         } else {
+            Log.i(TAG, "Launch : " + mPackageName + " with package name");
             AdvancedPowerUsageDetail.startBatteryDetailPage(mParent.getActivity(), mParent,
                     mPackageName);
         }
@@ -162,7 +175,9 @@
                         BatteryChartPreferenceController.getBatteryLast24HrUsageData(mContext);
                 if (batteryDiffEntries != null) {
                     for (BatteryDiffEntry batteryDiffEntry : batteryDiffEntries) {
-                        if (batteryDiffEntry.mBatteryHistEntry.mUid == mUid) {
+                        if (batteryDiffEntry.mBatteryHistEntry.mUid == mUid
+                                && batteryDiffEntry.mBatteryHistEntry.mConsumerType
+                                == ConvertUtils.CONSUMER_TYPE_UID_BATTERY) {
                             return batteryDiffEntry;
                         }
                     }
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 6d3aaa3..e1ea8e4 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -582,9 +582,8 @@
         if (mUid <= 0) {
             final Intent intent = args == null
                     ? getActivity().getIntent() : (Intent) args.getParcelable("intent");
-            if (intent != null && intent.getExtras() != null) {
-                mUid = intent.getIntExtra("uId", -1);
-            }
+            mUid = intent != null && intent.getExtras() != null
+                    ? mUid = intent.getIntExtra("uId", -1) : -1;
         }
         return mUid;
     }
diff --git a/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java b/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
index 8e43853..7cbbf6d 100644
--- a/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
+++ b/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
@@ -67,6 +67,7 @@
 public class PasswordsPreferenceController extends BasePreferenceController
         implements LifecycleObserver {
     private static final String TAG = "AutofillSettings";
+    private static final boolean DEBUG = false;
 
     private final PackageManager mPm;
     private final IconDrawableFactory mIconFactory;
@@ -128,6 +129,8 @@
             pref.setIntent(
                     new Intent(Intent.ACTION_MAIN)
                             .setClassName(serviceInfo.packageName, service.getPasswordsActivity()));
+            // Set an empty summary to avoid a UI flicker when the value loads.
+            pref.setSummary(R.string.summary_placeholder);
 
             final MutableLiveData<Integer> passwordCount = new MutableLiveData<>();
             passwordCount.observe(
@@ -172,15 +175,18 @@
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
             final IAutoFillService autofillService = IAutoFillService.Stub.asInterface(service);
-            // TODO check if debug is logged on user build.
-            Log.d(TAG, "Fetching password count from " + name);
+            if (DEBUG) {
+                Log.d(TAG, "Fetching password count from " + name);
+            }
             try {
                 autofillService.onSavedPasswordCountRequest(
                         new IResultReceiver.Stub() {
                             @Override
                             public void send(int resultCode, Bundle resultData) {
-                                Log.d(TAG, "Received password count result " + resultCode
-                                        + " from " + name);
+                                if (DEBUG) {
+                                    Log.d(TAG, "Received password count result " + resultCode
+                                            + " from " + name);
+                                }
                                 if (resultCode == 0 && resultData != null) {
                                     mData.postValue(resultData.getInt(EXTRA_RESULT));
                                 }
diff --git a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java
index 0a60ed3..ec311f4 100644
--- a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java
+++ b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java
@@ -54,7 +54,7 @@
         SettingsMainSwitchPreference pref = (SettingsMainSwitchPreference) screen.findPreference(
                 getPreferenceKey());
         pref.addOnSwitchChangeListener(this);
-        pref.updateStatus(isChecked());
+        pref.setChecked(isChecked());
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index 15070c3..8fec9b4 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -15,6 +15,7 @@
  */
 package com.android.settings.fuelgauge;
 
+import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -23,6 +24,7 @@
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.provider.Settings.Global;
+import android.util.Pair;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
@@ -30,6 +32,8 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
+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;
@@ -44,6 +48,7 @@
     private final BatterySaverReceiver mBatteryStateChangeReceiver;
     private final PowerManager mPowerManager;
     private Preference mBatterySaverPref;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private final ContentObserver mObserver = new ContentObserver(
             new Handler(Looper.getMainLooper())) {
         @Override
@@ -56,6 +61,7 @@
         super(context, KEY_BATTERY_SAVER);
 
         mPowerManager = mContext.getSystemService(PowerManager.class);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
         mBatteryStateChangeReceiver.setBatterySaverListener(this);
         BatterySaverUtils.revertScheduleToNoneIfNeeded(context);
@@ -121,9 +127,43 @@
         }
     }
 
+    private void logPowerSaver() {
+        if (!mPowerManager.isPowerSaveMode()) {
+            // Power saver is off, so don't do anything.
+            return;
+        }
+
+        final ContentResolver resolver = mContext.getContentResolver();
+        final int mode = Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
+                PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+        int fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
+        switch (mode) {
+            case PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE:
+                fuelgaugeScheduleType =
+                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
+                final int powerLevelTriggerPercentage = Global.getInt(resolver,
+                        Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+                mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                                fuelgaugeScheduleType),
+                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                                powerLevelTriggerPercentage));
+                break;
+            case PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC:
+                fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
+                break;
+            default:
+                // empty
+        }
+        mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        fuelgaugeScheduleType));
+    }
+
     @Override
     public void onPowerSaveModeChanged() {
         updateSummary();
+        logPowerSaver();
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
index 96db2c9..3e9c80f 100644
--- a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
+++ b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
@@ -16,45 +16,30 @@
 
 package com.android.settings.gestures;
 
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
 import android.provider.Settings;
 
-import androidx.annotation.Nullable;
-import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
-import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+
 /**
  * Configures the behaviour of long press power button action.
  */
-public class LongPressPowerButtonPreferenceController extends TogglePreferenceController implements
-        LifecycleObserver {
+public class LongPressPowerButtonPreferenceController extends TogglePreferenceController {
 
     private static final String POWER_BUTTON_LONG_PRESS_SETTING =
             Settings.Global.POWER_BUTTON_LONG_PRESS;
-    private static final Uri POWER_BUTTON_LONG_PRESS_SETTING_URI =
-            Settings.Global.getUriFor(POWER_BUTTON_LONG_PRESS_SETTING);
     private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING =
             Settings.Global.KEY_CHORD_POWER_VOLUME_UP;
 
-    // Used for fallback to global actions if necessary.
-    @VisibleForTesting
-    static final String CARDS_AVAILABLE_KEY =
-            Settings.Secure.GLOBAL_ACTIONS_PANEL_AVAILABLE;
-    @VisibleForTesting
-    static final String CARDS_ENABLED_KEY = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED;
+    private static final String FOOTER_HINT_KEY = "power_menu_power_volume_up_hint";
+    private static final String ASSIST_SWITCH_KEY = "gesture_power_menu_long_press_for_assist";
 
     /**
      * Values used for long press power button behaviour when Assist setting is enabled.
@@ -63,9 +48,9 @@
      * source of the value.
      */
     @VisibleForTesting
-    static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
+    static final int LONG_PRESS_POWER_NO_ACTION = 0;
     @VisibleForTesting
-    static final int LONG_PRESS_POWER_SHUT_OFF = 2;
+    static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
     @VisibleForTesting
     static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT
 
@@ -89,13 +74,18 @@
      * power menu, depending on their respective settings.
      */
     private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
-            R.integer.config_longPressOnPowerBehavior;
+            com.android.internal.R.integer.config_longPressOnPowerBehavior;
 
     private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE =
-            R.integer.config_keyChordPowerVolumeUp;
+            com.android.internal.R.integer.config_keyChordPowerVolumeUp;
 
-    @Nullable
-    private SettingObserver mSettingsObserver;
+    @MonotonicNonNull
+    @VisibleForTesting
+    Preference mFooterHint;
+
+    @MonotonicNonNull
+    @VisibleForTesting
+    Preference mAssistSwitch;
 
     public LongPressPowerButtonPreferenceController(Context context, String key) {
         super(context, key);
@@ -104,26 +94,22 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        mSettingsObserver = new SettingObserver(screen.findPreference(getPreferenceKey()));
+        mFooterHint = screen.findPreference(FOOTER_HINT_KEY);
+        mAssistSwitch = screen.findPreference(ASSIST_SWITCH_KEY);
+        refreshStateDisplay();
     }
 
-    /**
-     * Called when the settings pages resumes.
-     */
-    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
-    public void onResume() {
-        if (mSettingsObserver != null) {
-            mSettingsObserver.register();
-        }
-    }
-
-    /**
-     * Called when the settings page pauses.
-     */
-    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
-    public void onPause() {
-        if (mSettingsObserver != null) {
-            mSettingsObserver.unregister();
+    @Override
+    public CharSequence getSummary() {
+        final int powerButtonValue = getPowerButtonValue();
+        if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
+            return mContext.getString(R.string.power_menu_summary_long_press_for_assist_enabled);
+        } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
+            return mContext.getString(
+                    R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
+        } else {
+            return mContext.getString(
+                    R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
         }
     }
 
@@ -136,10 +122,7 @@
 
     @Override
     public boolean isChecked() {
-        final int powerButtonValue = Settings.Global.getInt(mContext.getContentResolver(),
-                POWER_BUTTON_LONG_PRESS_SETTING,
-                mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
-        return powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE;
+        return getPowerButtonValue() == LONG_PRESS_POWER_ASSISTANT_VALUE;
     }
 
     @Override
@@ -148,12 +131,48 @@
             // The key chord value is dependant on the long press setting and it always
             // toggled in tandem. POWER_BUTTON_LONG_PRESS_SETTING is always the source
             // of truth for both.
-            return setPowerVolumeChordValue(isChecked);
+            setPowerVolumeChordValue(isChecked);
+            refreshStateDisplay();
+            return true;
         }
 
         return false;
     }
 
+    private void refreshStateDisplay() {
+        if (mAssistSwitch != null) {
+            mAssistSwitch.setSummary(getSummary());
+        }
+
+        if (mFooterHint != null) {
+            String footerHintText = mContext.getString(R.string.power_menu_power_volume_up_hint);
+            // If the device supports hush gesture, we need to notify the user where to find
+            // the setting.
+            if (mContext.getResources().getBoolean(
+                    com.android.internal.R.bool.config_volumeHushGestureEnabled)) {
+                footerHintText = footerHintText + "\n\n" + mContext.getString(
+                        R.string.power_menu_power_prevent_ringing_hint);
+            }
+
+            mFooterHint.setSummary(footerHintText);
+            mFooterHint.setVisible(isPowerMenuKeyChordEnabled(mContext));
+        }
+    }
+
+    private int getPowerButtonValue() {
+        return Settings.Global.getInt(mContext.getContentResolver(),
+                POWER_BUTTON_LONG_PRESS_SETTING,
+                mContext.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
+    }
+
+    private static boolean isPowerMenuKeyChordEnabled(Context context) {
+        return Settings.Global.getInt(context.getContentResolver(),
+                KEY_CHORD_POWER_VOLUME_UP_SETTING,
+                context.getResources().getInteger(
+                        com.android.internal.R.integer.config_keyChordPowerVolumeUp))
+                == KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS;
+    }
+
     private boolean setPowerLongPressValue(boolean isChecked) {
         if (isChecked) {
             return Settings.Global.putInt(mContext.getContentResolver(),
@@ -162,14 +181,12 @@
 
         // We need to determine the right disabled value - we set it to device default
         // if it's different than Assist, otherwise we fallback to either global actions or power
-        //menu.
+        // menu.
         final int defaultPowerButtonValue = mContext.getResources().getInteger(
                 POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE);
         if (defaultPowerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
-            final int fallbackValue = isCardsOrControlsAvailable() ? LONG_PRESS_POWER_GLOBAL_ACTIONS
-                    : LONG_PRESS_POWER_SHUT_OFF;
             return Settings.Global.putInt(mContext.getContentResolver(),
-                    POWER_BUTTON_LONG_PRESS_SETTING, fallbackValue);
+                    POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_NO_ACTION);
         }
 
         return Settings.Global.putInt(mContext.getContentResolver(),
@@ -187,53 +204,11 @@
                     KEY_CHORD_POWER_VOLUME_UP_SETTING, KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
         }
 
-        // If the key chord defaults to mute toggle, we restore that setting if LPP option is
-        // disabled. Otherwise we default to no action.
-        boolean isMuteToggleKeyChordDefault = mContext.getResources().getInteger(
-                KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE)
-                == KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE;
+        // We restore key chord to the default value.
+        int keyChordDefaultValue = mContext.getResources().getInteger(
+                KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE);
         return Settings.Global.putInt(mContext.getContentResolver(),
-                KEY_CHORD_POWER_VOLUME_UP_SETTING, isMuteToggleKeyChordDefault
-                        ? KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE
-                        : KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
-    }
-
-    /**
-     * Returns true if the global actions menu on power button click is enabled via any of the
-     * content options.
-     */
-    private boolean isCardsOrControlsAvailable() {
-        final ContentResolver resolver = mContext.getContentResolver();
-        final boolean cardsAvailable = Settings.Secure.getInt(resolver, CARDS_AVAILABLE_KEY, 0)
-                != 0;
-        final boolean controlsAvailable = mContext.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_CONTROLS);
-        return cardsAvailable || controlsAvailable;
-    }
-
-    private final class SettingObserver extends ContentObserver {
-
-        private final Preference mPreference;
-
-        SettingObserver(Preference preference) {
-            super(new Handler(Looper.getMainLooper()));
-            mPreference = preference;
-        }
-
-        public void register() {
-            final ContentResolver cr = mContext.getContentResolver();
-            cr.registerContentObserver(POWER_BUTTON_LONG_PRESS_SETTING_URI, false, this);
-        }
-
-        public void unregister() {
-            final ContentResolver cr = mContext.getContentResolver();
-            cr.unregisterContentObserver(this);
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            updateState(mPreference);
-        }
+                KEY_CHORD_POWER_VOLUME_UP_SETTING, keyChordDefaultValue);
     }
 
 }
diff --git a/src/com/android/settings/gestures/PowerMenuPreferenceController.java b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
index 0693753..0d5f810 100644
--- a/src/com/android/settings/gestures/PowerMenuPreferenceController.java
+++ b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
@@ -17,28 +17,54 @@
 package com.android.settings.gestures;
 
 import android.content.Context;
+import android.provider.Settings;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 
 public class PowerMenuPreferenceController extends BasePreferenceController {
 
+    private static final String POWER_BUTTON_LONG_PRESS_SETTING =
+            Settings.Global.POWER_BUTTON_LONG_PRESS;
+
+    @VisibleForTesting
+    static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
+    @VisibleForTesting
+    static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5;
+
     public PowerMenuPreferenceController(Context context, String key) {
         super(context, key);
     }
 
     @Override
     public CharSequence getSummary() {
-        return mContext.getText(R.string.power_menu_long_press_for_assist);
+        final int powerButtonValue = getPowerButtonLongPressValue(mContext);
+        if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
+            return mContext.getText(R.string.power_menu_summary_long_press_for_assist_enabled);
+        } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
+            return mContext.getText(
+                    R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
+        } else {
+            return mContext.getText(
+                    R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
+        }
     }
 
     @Override
     public int getAvailabilityStatus() {
-        return isAssistInvocationAvailable() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return isAssistInvocationAvailable() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     private boolean isAssistInvocationAvailable() {
         return mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
     }
+
+    private static int getPowerButtonLongPressValue(Context context) {
+        return Settings.Global.getInt(context.getContentResolver(),
+                POWER_BUTTON_LONG_PRESS_SETTING,
+                context.getResources().getInteger(
+                        com.android.internal.R.integer.config_longPressOnPowerBehavior));
+    }
 }
diff --git a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
index 14c9117..5ea01ea 100644
--- a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
+++ b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
@@ -150,6 +150,6 @@
         final Intent intent = new Intent(ACTION_ZEN_MODE_SLICE_CHANGED)
                 .setClass(context, SliceBroadcastReceiver.class);
         return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
-                PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
+                PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_MUTABLE);
     }
 }
diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
index 09e1ca4..f0e8d95 100644
--- a/src/com/android/settings/widget/SettingsMainSwitchPreference.java
+++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
@@ -86,9 +86,12 @@
             mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced();
         }
         mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
+        initMainSwitchBar();
         if (mIsVisible) {
             mMainSwitchBar.show();
-            updateStatus(isChecked());
+            if (mMainSwitchBar.isChecked() != isChecked()) {
+                setChecked(isChecked());
+            }
             registerListenerToSwitchBar();
         } else {
             mMainSwitchBar.hide();
@@ -145,18 +148,6 @@
     }
 
     /**
-     * Update the switch status of preference
-     */
-    public void updateStatus(boolean checked) {
-        setChecked(checked);
-        if (mMainSwitchBar != null) {
-            mMainSwitchBar.setTitle(mTitle);
-            mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
-            mMainSwitchBar.show();
-        }
-    }
-
-    /**
      * Show the MainSwitchBar
      */
     public void show() {
@@ -251,6 +242,13 @@
         }
     }
 
+    private void initMainSwitchBar() {
+        if (mMainSwitchBar != null) {
+            mMainSwitchBar.setTitle(mTitle);
+            mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin);
+        }
+    }
+
     private void registerListenerToSwitchBar() {
         for (OnBeforeCheckedChangeListener listener : mBeforeCheckedChangeListeners) {
             mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
diff --git a/tests/robotests/res/layout/main_clear.xml b/tests/robotests/res/layout/main_clear.xml
index 868d88f..b9a126d 100644
--- a/tests/robotests/res/layout/main_clear.xml
+++ b/tests/robotests/res/layout/main_clear.xml
@@ -28,9 +28,7 @@
     <ScrollView
         android:id="@+id/main_clear_scrollview"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginStart="@dimen/reset_main_clear_margin_start"
-        android:layout_marginEnd="@dimen/reset_main_clear_margin_end">
+        android:layout_height="match_parent">
 
         <LinearLayout
             android:id="@+id/main_clear_container"
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index 52f682c..cee1160 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -21,12 +21,17 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.os.PowerManager;
 import android.provider.Settings;
+import android.util.Pair;
 
 import androidx.preference.Preference;
 
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -46,12 +51,16 @@
 
     private BatterySaverController mBatterySaverController;
     private Context mContext;
+    private FakeFeatureFactory mFeatureFactory;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
+        mFeatureFactory = FakeFeatureFactory.setupForTest();
+        mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
         mBatterySaverController = spy(new BatterySaverController(mContext));
         ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
         ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
@@ -73,6 +82,49 @@
     }
 
     @Test
+    public void onPreferenceChange_onPowerSaveModeChanged_manualTrigger_logsType() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.AUTOMATIC_POWER_SAVE_MODE, -1);
+
+        mBatterySaverController.onPowerSaveModeChanged();
+        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE));
+    }
+
+    @Test
+    public void onPreferenceChange_onPowerSaveModeChanged_triggerPercent_logsTypeAndPercentage() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
+                PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
+        final int percentageVal = 15;
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, percentageVal);
+
+        mBatterySaverController.onPowerSaveModeChanged();
+        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE),
+                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                        percentageVal));
+    }
+
+    @Test
+    public void onPreferenceChange_onPowerSaveModeChanged_triggerDynamic_logsType() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
+                PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
+
+        mBatterySaverController.onPowerSaveModeChanged();
+        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE));
+    }
+
+    @Test
     public void getSummary_batterySaverOn_showSummaryOn() {
         when(mPowerManager.isPowerSaveMode()).thenReturn(true);
 
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
index 085e53d..053fa5a 100644
--- a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
@@ -18,20 +18,28 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyInt;
 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.app.Application;
 import android.content.res.Resources;
 import android.provider.Settings;
 
+import androidx.annotation.StringRes;
+import androidx.preference.Preference;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
 public class LongPressPowerButtonPreferenceControllerTest {
@@ -46,14 +54,20 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
+        mContext = spy(ApplicationProvider.getApplicationContext());
         mResources = mock(Resources.class);
         when(mContext.getResources()).thenReturn(mResources);
+        when(mResources.getString(anyInt())).thenAnswer((Answer<String>) invocation -> {
+            int id = invocation.getArgument(0);
+            return getString(id);
+        });
         when(mResources.getBoolean(
                 com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
                 .thenReturn(true);
         mController = new LongPressPowerButtonPreferenceController(mContext,
                 KEY_LONG_PRESS_POWER_BUTTON);
+        mController.mAssistSwitch = mock(Preference.class);
+        mController.mFooterHint = mock(Preference.class);
     }
 
     @Test
@@ -75,6 +89,60 @@
     }
 
     @Test
+    public void preferenceChecked_powerMenuHintTextShown() {
+        mController.onPreferenceChange(null, true);
+
+        verify(mController.mFooterHint).setSummary(
+                getString(
+                        R.string.power_menu_power_volume_up_hint));
+        verify(mController.mFooterHint).setVisible(true);
+    }
+
+
+    @Test
+    public void preferenceUnchecked_keyChordEnabled_powerMenuHintTextShown() {
+        when(mResources.getInteger(
+                com.android.internal.R.integer.config_keyChordPowerVolumeUp))
+                .thenReturn(
+                 LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
+
+        mController.onPreferenceChange(null, false);
+
+        verify(mController.mFooterHint).setSummary(
+                getString(
+                        R.string.power_menu_power_volume_up_hint));
+        verify(mController.mFooterHint).setVisible(true);
+    }
+
+    @Test
+    public void preferenceChecked_hushGestureEnabled_powerMenuHintTextIncludesHushHint() {
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_volumeHushGestureEnabled))
+                .thenReturn(true);
+
+        mController.onPreferenceChange(null, true);
+
+        verify(mController.mFooterHint).setSummary(
+                getString(
+                        R.string.power_menu_power_volume_up_hint) + "\n\n"
+                        + getString(
+                        R.string.power_menu_power_prevent_ringing_hint));
+        verify(mController.mFooterHint).setVisible(true);
+    }
+
+
+    @Test
+    public void preferenceUnchecked_keyChordDisabled_powerMenuHintTextHidden() {
+        mController.onPreferenceChange(null, false);
+        when(mResources.getInteger(
+                com.android.internal.R.integer.config_keyChordPowerVolumeUp))
+                .thenReturn(
+                      LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
+
+        verify(mController.mFooterHint).setVisible(false);
+    }
+
+    @Test
     public void preferenceChecked_longPressPowerSettingSetToAssistant() {
         mController.onPreferenceChange(null, true);
 
@@ -84,21 +152,29 @@
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
                 LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
+        verify(mController.mAssistSwitch).setSummary(
+                getString(
+                        R.string.power_menu_summary_long_press_for_assist_enabled));
     }
 
     @Test
     public void preferenceUnchecked_longPressPowerSettingSetToDefaultValue() {
-        // Value out of range chosen deliberately.
         when(mResources.getInteger(
                 com.android.internal.R.integer.config_longPressOnPowerBehavior))
-                .thenReturn(8);
+                .thenReturn(
+                        LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
 
         mController.onPreferenceChange(null, false);
+
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8);
+                Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
+                LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
                 LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
+        verify(mController.mAssistSwitch).setSummary(
+                getString(
+                       R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu));
     }
 
     @Test
@@ -110,9 +186,10 @@
         when(mResources.getInteger(
                 com.android.internal.R.integer.config_keyChordPowerVolumeUp))
                 .thenReturn(
-                LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
+                    LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
 
         mController.onPreferenceChange(null, false);
+
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8);
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
@@ -121,7 +198,7 @@
     }
 
     @Test
-    public void preferenceUnchecked_assistDefault_setShutOff() {
+    public void preferenceUnchecked_assistDefault_setNoAction() {
         // Value out of range chosen deliberately.
         when(mResources.getInteger(
                 com.android.internal.R.integer.config_longPressOnPowerBehavior))
@@ -129,33 +206,19 @@
                         LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
 
         mController.onPreferenceChange(null, false);
+
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
-                LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_SHUT_OFF);
+                LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_NO_ACTION);
         assertThat(Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
                 LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
+        verify(mController.mAssistSwitch).setSummary(
+                getString(
+                        R.string.power_menu_summary_long_press_for_assist_disabled_no_action));
     }
 
-
-    @Test
-    public void preferenceUnchecked_assistDefaultGlobalActionsEnabled_setGlobalActions() {
-        // Value out of range chosen deliberately.
-        when(mResources.getInteger(
-                com.android.internal.R.integer.config_longPressOnPowerBehavior))
-                .thenReturn(
-                        LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE);
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                LongPressPowerButtonPreferenceController.CARDS_AVAILABLE_KEY, 1);
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                LongPressPowerButtonPreferenceController.CARDS_ENABLED_KEY, 1);
-
-        mController.onPreferenceChange(null, false);
-        assertThat(Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
-                LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS);
-        assertThat(Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
-                LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
+    private String getString(@StringRes int id) {
+        return ApplicationProvider.getApplicationContext().getString(id);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
index 811ed70..1a82a13 100644
--- a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
@@ -70,6 +70,6 @@
                     .thenReturn(false);
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+                BasePreferenceController.UNSUPPORTED_ON_DEVICE);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
index c0c4fd7..31d10d9 100644
--- a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
@@ -59,8 +59,8 @@
     }
 
     @Test
-    public void updateStatus_isRestricted_restrictIconShouldDisplay() {
-        mPreference.updateStatus(true);
+    public void onBindViewHolder_isRestricted_restrictIconShouldDisplay() {
+        mPreference.onBindViewHolder(mHolder);
 
         final SettingsMainSwitchBar switchBar = mPreference.getSwitchBar();
         final ImageView restrictedIcon = switchBar.findViewById(