Merge "[Settings] Adjusts the result code to cancel when complete redaction interstitial setting" into sc-dev
diff --git a/res/drawable/ic_text_dot.xml b/res/drawable/ic_text_dot.xml
new file mode 100644
index 0000000..1a81bc7
--- /dev/null
+++ b/res/drawable/ic_text_dot.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+  -->
+<inset
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:inset="10dp">
+    <shape android:shape="oval">
+        <solid android:color="?android:attr/textColorSecondary" />
+        <size android:width="4dp" android:height="4dp" />
+    </shape>
+</inset>
diff --git a/res/layout/admin_support_details_dialog.xml b/res/layout/admin_support_details_dialog.xml
index 298cf24..0233a1b 100644
--- a/res/layout/admin_support_details_dialog.xml
+++ b/res/layout/admin_support_details_dialog.xml
@@ -13,45 +13,54 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:padding="@dimen/admin_details_dialog_padding"
-        android:orientation="vertical">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingTop="@dimen/admin_details_dialog_padding"
+    android:paddingStart="@dimen/admin_details_dialog_padding"
+    android:paddingEnd="@dimen/admin_details_dialog_padding"
+    android:paddingBottom="@dimen/admin_details_dialog_padding_bottom"
+    android:orientation="vertical">
     <LinearLayout
-            android:layout_width="match_parent"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:gravity="center_horizontal"
+        android:paddingBottom="@dimen/admin_details_dialog_title_bottom_padding">
+        <ImageView
+            android:id="@+id/admin_support_icon"
+            android:layout_width="@dimen/admin_details_dialog_icon_size"
+            android:layout_height="@dimen/admin_details_dialog_icon_size"
+            android:scaleType="fitCenter"
+            android:contentDescription="@null"/>
+        <TextView
+            android:id="@+id/admin_support_dialog_title"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:gravity="center_vertical"
-            android:paddingBottom="@dimen/admin_details_dialog_title_bottom_padding">
-        <ImageView android:id="@+id/admin_support_icon"
-                android:layout_width="@dimen/admin_details_dialog_icon_size"
-                android:layout_height="@dimen/admin_details_dialog_icon_size"
-                android:scaleType="fitCenter"
-                android:contentDescription="@null" />
-        <TextView android:id="@+id/admin_support_dialog_title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingStart="@dimen/admin_details_dialog_padding"
-                android:text="@string/disabled_by_policy_title"
-                android:textAppearance="@style/TextAppearance.HeadLineFontFamily"/>
+            android:layout_marginTop="16dp"
+            android:gravity="center_horizontal"
+            android:text="@string/disabled_by_policy_title"
+            android:textAppearance="@style/TextAppearance.AdminDialogTitle"/>
     </LinearLayout>
 
     <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fadeScrollbars="false">
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:fadeScrollbars="false">
-        <LinearLayout
+            android:orientation="vertical">
+            <TextView
+                android:id="@+id/admin_support_msg"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="vertical">
-            <TextView android:id="@+id/admin_support_msg"
-                      android:layout_width="match_parent"
-                      android:layout_height="wrap_content"
-                      android:textAppearance="@style/TextAppearance.HeadLineFontFamily.Subhead"
-                      android:maxLength="200"
-                      android:autoLink="email|phone|web"
-                      android:textColor="?android:attr/textColorSecondary"/>
+                android:textAppearance="@style/TextAppearance.AdminDialogMessage"
+                android:maxLength="200"
+                android:gravity="center_horizontal"
+                android:autoLink="email|phone|web"
+                android:textColor="?android:attr/textColorSecondary"/>
         </LinearLayout>
     </ScrollView>
 </LinearLayout>
diff --git a/res/layout/app_permission_item.xml b/res/layout/app_permission_item.xml
new file mode 100644
index 0000000..f5e3486
--- /dev/null
+++ b/res/layout/app_permission_item.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+  -->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <ImageView
+        android:id="@+id/perm_icon"
+        android:layout_width="24dip"
+        android:layout_height="24dip"
+        android:layout_alignParentStart="true"
+        android:scaleType="fitCenter" />
+
+
+    <TextView
+        android:id="@+id/permission_group"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textStyle="bold"
+        android:paddingStart="6dip"
+        android:layout_toEndOf="@id/perm_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <TextView
+        android:id="@+id/permission_list"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:layout_marginTop="-4dip"
+        android:paddingBottom="8dip"
+        android:paddingStart="6dip"
+        android:layout_below="@id/permission_group"
+        android:layout_toEndOf="@id/perm_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</RelativeLayout>
diff --git a/res/layout/device_admin_add.xml b/res/layout/device_admin_add.xml
index 7fdcd8d..3ca8d02 100644
--- a/res/layout/device_admin_add.xml
+++ b/res/layout/device_admin_add.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.
@@ -21,7 +21,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <ScrollView
+    <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1.0"
@@ -134,7 +134,7 @@
                 android:showDividers="beginning|middle|end">
                 <LinearLayout
                     android:id="@+id/restricted_action"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:orientation="horizontal"
                     android:gravity="center_vertical">
@@ -173,5 +173,5 @@
             </LinearLayout>
 
         </LinearLayout>
-    </ScrollView>
+    </androidx.core.widget.NestedScrollView>
 </LinearLayout>
diff --git a/res/layout/face_enroll_education.xml b/res/layout/face_enroll_education.xml
index d94e7c6..4ef32b7 100644
--- a/res/layout/face_enroll_education.xml
+++ b/res/layout/face_enroll_education.xml
@@ -31,14 +31,6 @@
         android:clipToPadding="false"
         android:orientation="vertical">
 
-        <com.google.android.setupdesign.view.RichTextView
-            android:id="@+id/sud_layout_description"
-            style="@style/SudDescription.Glif"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAlignment="center"
-            android:text="@string/security_settings_face_enroll_education_message"/>
-
         <Space android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"/>
diff --git a/res/layout/fingerprint_enroll_introduction.xml b/res/layout/fingerprint_enroll_introduction.xml
index 03a8e7f..f556f27 100644
--- a/res/layout/fingerprint_enroll_introduction.xml
+++ b/res/layout/fingerprint_enroll_introduction.xml
@@ -133,26 +133,6 @@
                     android:text="@string/security_settings_fingerprint_v2_enroll_introduction_footer_message_4" />
             </LinearLayout>
 
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:paddingTop="12dp">
-
-                <ImageView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:contentDescription="@null"
-                    android:src="@drawable/ic_link_24dp"/>
-                <Space
-                    android:layout_width="24dp"
-                    android:layout_height="wrap_content"/>
-                <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/security_settings_fingerprint_v2_enroll_introduction_message_learn_more" />
-            </LinearLayout>
-
         </LinearLayout>
 
         <!-- Keep in mind -->
diff --git a/res/layout/restricted_preference_dropdown.xml b/res/layout/restricted_preference_dropdown.xml
index 86053bf..8930e24 100644
--- a/res/layout/restricted_preference_dropdown.xml
+++ b/res/layout/restricted_preference_dropdown.xml
@@ -26,6 +26,6 @@
             android:visibility="invisible"
             android:layout_marginStart="@dimen/preference_no_icon_padding_start"/>
 
-    <include layout="@layout/preference_material" />
+    <include layout="@layout/settingslib_preference" />
 
 </FrameLayout>
\ No newline at end of file
diff --git a/res/layout/running_processes_item.xml b/res/layout/running_processes_item.xml
index 2bca90e..6b8547a 100644
--- a/res/layout/running_processes_item.xml
+++ b/res/layout/running_processes_item.xml
@@ -31,5 +31,5 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_toStartOf="@id/widget_summary"
-        layout="@layout/preference_material"/>
+        layout="@layout/preference_app"/>
 </RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/storage_item.xml b/res/layout/storage_item.xml
index 6de2d510..40796f7 100644
--- a/res/layout/storage_item.xml
+++ b/res/layout/storage_item.xml
@@ -35,22 +35,7 @@
         android:clipToPadding="false"
         android:paddingStart="?android:attr/listPreferredItemPaddingStart">
 
-        <LinearLayout
-            android:id="@+id/icon_frame"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="start|center_vertical"
-            android:minWidth="56dp"
-            android:orientation="horizontal"
-            android:paddingTop="4dp"
-            android:paddingBottom="4dp">
-            <com.android.internal.widget.PreferenceImageView
-                android:id="@android:id/icon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:maxWidth="24dp"
-                android:maxHeight="24dp"/>
-        </LinearLayout>
+        <include layout="@layout/settingslib_icon_frame"/>
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:layout_width="match_parent"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a9cda9e..168480e 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -262,8 +262,9 @@
 
     <!-- Admin support contact details dialog. -->
     <dimen name="admin_details_dialog_padding">24dp</dimen>
-    <dimen name="admin_details_dialog_title_bottom_padding">20dp</dimen>
-    <dimen name="admin_details_dialog_icon_size">48dp</dimen>
+    <dimen name="admin_details_dialog_padding_bottom">32dp</dimen>
+    <dimen name="admin_details_dialog_title_bottom_padding">16dp</dimen>
+    <dimen name="admin_details_dialog_icon_size">32dp</dimen>
     <dimen name="admin_details_dialog_link_padding_top">36dp</dimen>
     <dimen name="admin_details_dialog_learn_more_button_top_margin">24dp</dimen>
     <dimen name="admin_details_dialog_learn_more_button_padding">8dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0f7651a..34b8c22 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -652,7 +652,7 @@
     <!-- Text shown for the title of the lockdown option -->
     <string name="lockdown_settings_title">Show lockdown option</string>
     <!-- Text shown for the description of the lockdown option -->
-    <string name="lockdown_settings_summary">Display power button option that turns off Smart Lock, biometric unlocking, and notifications on the lock screen</string>
+    <string name="lockdown_settings_summary">Display Power button option that turns off Smart Lock, Face Unlock, Fingerprint Unlock, and notifications on the lock screen</string>
 
     <!-- Text shown for the title of the lock when trust lost option [CHAR LIMIT=40] -->
     <string name="trust_lost_locks_screen_title">Lock screen when trust is lost</string>
@@ -736,24 +736,26 @@
     <!-- Face enrollment and settings --><skip />
     <!-- Message shown in summary field when face unlock is set up. [CHAR LIMIT=40] -->
     <string name="security_settings_face_preference_summary">Face added</string>
-    <!-- Message shown in summary field when face unlock is not set up. [CHAR LIMIT=54] -->
-    <string name="security_settings_face_preference_summary_none">Set up face unlock</string>
+    <!-- Message shown in summary field when Face Unlock is not set up. [CHAR LIMIT=54] -->
+    <string name="security_settings_face_preference_summary_none">Tap to set up face</string>
     <!-- Title shown for menu item that launches face settings or enrollment. [CHAR LIMIT=32] -->
-    <string name="security_settings_face_preference_title">Face unlock</string>
+    <string name="security_settings_face_preference_title">Face Unlock</string>
     <!-- Title shown for menu item that launches face settings or enrollment, for work profile [CHAR LIMIT=50] -->
-    <string name="security_settings_face_profile_preference_title">Face unlock for work</string>
-    <!-- Introduction title shown in face enrollment education screen [CHAR LIMIT=40] -->
-    <string name="security_settings_face_enroll_education_title">How to set up face unlock</string>
-    <!-- Introduction title shown in face enrollment education screen for accessibility [CHAR LIMI=40]-->
-    <string name="security_settings_face_enroll_education_title_accessibility">Set up face unlock</string>
+    <string name="security_settings_face_profile_preference_title">Face Unlock for work</string>
+    <!-- Introduction title shown in face enrollment education screen [CHAR LIMIT=50] -->
+    <string name="security_settings_face_enroll_education_title">How to set up Face Unlock</string>
+    <!-- Introduction title shown in face enrollment education screen for accessibility [CHAR LIMIT=50]-->
+    <string name="security_settings_face_enroll_education_title_accessibility">Set up Face Unlock</string>
     <!-- Introduction title shown in face enrollment education screen to show the face unlock feature, when face unlock is disabled by device admin [CHAR LIMIT=60] -->
     <string name="security_settings_face_enroll_education_title_unlock_disabled">Use your face to authenticate</string>
     <!-- Introduction detail message shown in face education [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_education_message"></string>
+    <!-- Introduction detail message shown in face education for accessibility [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_enroll_education_message_accessibility"></string>
     <!-- Button that takes the user to the enrollment activity [CHAR LIMIT=20] -->
     <string name="security_settings_face_enroll_education_start">Start</string>
     <!-- Confirmation dialog message shown when users with system accessibility features enabled try to start the non-accessibility version of enrollment [CHAR LIMIT=150] -->
-    <string name="security_settings_face_enroll_education_accessibility_dialog_message">If accessibility face unlock is turned off, some setup steps may not work properly with TalkBack.</string>
+    <string name="security_settings_face_enroll_education_accessibility_dialog_message">If accessibility Face Unlock is turned off, some setup steps may not work properly with TalkBack.</string>
     <!-- Negative button text for users who were shown the accessibility dialog [CHAR LIMIT=10] -->
     <string name="security_settings_face_enroll_education_accessibility_dialog_negative">Go back</string>
     <!-- Positive button text for users who were shown the accessibility dialog [CHAR LIMIT=20] -->
@@ -823,27 +825,25 @@
     <!-- Button text to exit face wizard after everything is done [CHAR LIMIT=15] -->
     <string name="security_settings_face_enroll_done">Done</string>
     <!-- Settings suggestion title text for re-enrolling a face. [CHAR LIMIT=50] -->
-    <string name="security_settings_face_enroll_should_re_enroll_title">Improve face unlock performance</string>
+    <string name="security_settings_face_enroll_should_re_enroll_title">Improve Face Unlock performance</string>
     <!-- Settings suggestion subtitle text for re-enrolling a face. [CHAR LIMIT=40] -->
-    <string name="security_settings_face_enroll_should_re_enroll_subtitle">Set up face unlock again</string>
+    <string name="security_settings_face_enroll_should_re_enroll_subtitle">Set up Face Unlock again</string>
     <!-- Settings suggestion title text for mandatory re-enrolling of a face. [CHAR LIMIT=50] -->
-    <string name="security_settings_face_enroll_must_re_enroll_title">Set up face unlock again</string>
+    <string name="security_settings_face_enroll_must_re_enroll_title">Set up Face Unlock again</string>
     <!-- Settings suggestion subtitle text for mandatory re-enrolling of a face. [CHAR LIMIT=40] -->
     <string name="security_settings_face_enroll_must_re_enroll_subtitle">Improve security and performance</string>
     <!-- Settings suggestion alert body title for re-enrolling a face. [CHAR LIMIT=60] -->
-    <string name="security_settings_face_enroll_improve_face_alert_title">Set up face unlock</string>
+    <string name="security_settings_face_enroll_improve_face_alert_title">Set up Face Unlock</string>
     <!-- Settings suggestion alert body text for re-enrolling a face. [CHAR LIMIT=300] -->
-    <string name="security_settings_face_enroll_improve_face_alert_body">Delete your current face data to set up face unlock again.\n\nThe face data used by face unlock will be permanently and securely deleted. After removal, you will need your PIN, pattern, or password to unlock your phone, sign in to apps, and confirm payments.</string>
+    <string name="security_settings_face_enroll_improve_face_alert_body">Delete your current face model to set up Face Unlock again.\n\nYour face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
+    <!-- Settings suggestion alert body text for re-enrolling a face. [CHAR LIMIT=300] -->
+    <string name="security_settings_face_enroll_improve_face_alert_body_fingerprint">Delete your current face model to set up Face Unlock again.\n\nYour face model will be permanently and securely deleted.\n\nAfter deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
     <!-- Title for a category shown for the face settings page. [CHAR LIMIT=20] -->
-    <string name="security_settings_face_settings_use_face_category">Use face unlock for</string>
-    <!-- Text shown on a toggle which allows or disallows the device to use face for unlocking the device. [CHAR LIMIT=20] -->
-    <string name="security_settings_face_settings_use_face_unlock_phone">Unlocking your phone</string>
-    <!-- Text shown on a toggle which allows or disallows the device to use face unlock for apps. This will be presented to the user together with the context of security_settings_face_settings_use_face_category. [CHAR LIMIT=30] -->
-    <string name="security_settings_face_settings_use_face_for_apps">App sign-in \u0026 payments</string>
+    <string name="security_settings_face_settings_use_face_category">Use Face Unlock for</string>
     <!-- Title for a category shown for the face settings page, followed by items that the user can toggle on/off to require/disable. -->
-    <string name="security_settings_face_settings_require_category">Requirements for face unlock</string>
+    <string name="security_settings_face_settings_require_category">Requirements for Face Unlock</string>
     <!-- Title for a category shown for the face settings page, followed by items that the user can toggle on/off to require/disable. [CHAR LIMIT=50] -->
-    <string name="security_settings_face_settings_preferences_category">When using face unlock</string>
+    <string name="security_settings_face_settings_preferences_category">When using Face Unlock</string>
     <!-- Text shown on a toggle which disables/enables face unlock, depending if the user's eyes are open. [CHAR LIMIT=30] -->
     <string name="security_settings_face_settings_require_attention">Require eyes to be open</string>
     <!-- Text shown on the details of a toggle which disables/enables face unlock, depending if the user's eyes are open. [CHAR LIMIT=70] -->
@@ -851,17 +851,17 @@
     <!-- When authenticating in apps, always require confirmation (e.g. confirm button) after a face is authenticated. [CHAR LIMIT=50] -->
     <string name="security_settings_face_settings_require_confirmation">Always require confirmation</string>
     <!-- When authenticating in apps, always require confirmation (e.g. confirm button) after a face is authenticated. [CHAR LIMIT=70] -->
-    <string name="security_settings_face_settings_require_confirmation_details">When using face unlock in apps, always require confirmation step</string>
+    <string name="security_settings_face_settings_require_confirmation_details">When using Face Unlock in apps, always require confirmation step</string>
     <!-- Button text in face settings which removes the user's face model from the device [CHAR LIMIT=40] -->
     <string name="security_settings_face_settings_remove_face_model">Delete face model</string>
     <!-- Button text in face settings which lets the user enroll their face [CHAR LIMIT=40] -->
-    <string name="security_settings_face_settings_enroll">Set up face unlock</string>
+    <string name="security_settings_face_settings_enroll">Set up Face Unlock</string>
     <!-- Text shown in face settings explaining what your face can be used for. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_top_intro">Use face unlock to unlock your device, sign in to apps, and confirm payments.</string>
+    <string name="security_settings_face_settings_top_intro">Use Face Unlock to unlock your device, sign in to apps, and confirm payments.</string>
     <!-- Text shown in face settings explaining what your face can be used for. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_footer">Keep in mind:\nLooking at the phone can unlock it when you don\u2019t intend to.\n\nYour phone can be unlocked by someone else if it\u2019s held up to your face.\n\nYour phone can be unlocked by someone who looks a lot like you, say, an identical sibling.</string>
+    <string name="security_settings_face_settings_footer">Use your face to unlock your phone or for authentication in apps, like when you sign in or approve a purchase.\n\nKeep in mind:\nYou can only have one face set up at a time. To add another face, delete the current one.\n\nLooking at the phone can unlock it when you don\u2019t intend to.\n\nYour phone can be unlocked by someone else if it\u2019s held up to your face.\n\nYour phone can be unlocked by someone who looks a lot like you, like an identical sibling.</string>
     <!-- Text shown in face settings explaining what your face can be used for. Used when attention checking is not supported. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_footer_attention_not_supported">Keep in mind:\nLooking at the phone can unlock it when you don\u2019t intend to.\n\nYour phone can be unlocked by someone else if it\u2019s held up to your face, even if your eyes are closed.\n\nYour phone can be unlocked by someone who looks a lot like you, say, an identical sibling.</string>
+    <string name="security_settings_face_settings_footer_attention_not_supported">Use your face to unlock your phone or for authentication in apps, like when you sign in or approve a purchase.\n\nKeep in mind:\nYou can only have one face set up at a time. To add another face, delete the current one.\n\nLooking at the phone can unlock it when you don\u2019t intend to.\n\nYour phone can be unlocked by someone else if it\u2019s held up to your face, even if your eyes are closed.\n\nYour phone can be unlocked by someone who looks a lot like you, like an identical sibling.</string>
     <!-- Dialog title shown when the user removes an enrollment [CHAR LIMIT=35] -->
     <string name="security_settings_face_settings_remove_dialog_title">Delete face model?</string>
     <!-- Dialog contents shown when the user removes an enrollment [CHAR LIMIT=NONE] -->
@@ -871,7 +871,7 @@
     <!-- Dialog contents shown when the user chooses to delete an existing enrolled face model. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_settings_remove_model_dialog_details">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
     <!-- Subtitle shown for contextual setting face enrollment [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_context_subtitle">Use face unlock to unlock your phone</string>
+    <string name="security_settings_face_settings_context_subtitle">Use Face Unlock to unlock your phone</string>
 
     <!-- Fingerprint enrollment and settings --><skip />
     <!-- Title shown for menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
@@ -978,11 +978,11 @@
     <!-- Message shown in summary field of biometric settings when face is enrolled, and a single fingerprintis enrolled. [CHAR LIMIT=66]-->
     <string name="security_settings_biometric_preference_summary_both_fp_single">Face and fingerprint added</string>
     <!-- Introduction shown in face and fingerprint page to introduce the biometric feature. [CHAR LIMIT=NONE]-->
-    <string name="biometric_settings_intro">When you set up face unlock and fingerprint, your phone will ask for your fingerprint when you wear a mask or are in a dark area.</string>
+    <string name="biometric_settings_intro">When you set up Face Unlock and Fingerprint Unlock, your phone will ask for your fingerprint when you wear a mask or are in a dark area</string>
     <!-- Biometric category title - biometric options for unlocking the device. [CHAR LIMIT=50] -->
     <string name="biometric_settings_category_ways_to_unlock">Ways to unlock</string>
     <!-- Biometric category title - configuration options for using biometric to unlock the device or authenticate in apps. [CHAR LIMIT=50] -->
-    <string name="biometric_settings_category_ways_to_use">Use face and fingerprint to</string>
+    <string name="biometric_settings_category_ways_to_use">Use face and fingerprint for</string>
     <!-- Text shown on a toggle which allows or disallows the device to use biometric for unlocking the device. [CHAR LIMIT=50] -->
     <string name="biometric_settings_use_biometric_unlock_phone">Unlocking your phone</string>
     <!-- Text shown on a toggle which allows or disallows the device to use biometric for authentication. [CHAR LIMIT=50] -->
@@ -1062,30 +1062,102 @@
     <string name="setup_fingerprint_enroll_enrolling_skip_title">Skip fingerprint setup?</string>
     <!-- Content of the dialog shown when the user tries to skip fingerprint setup, asking them to confirm the action [CHAR LIMIT=NONE] -->
     <string name="setup_fingerprint_enroll_enrolling_skip_message">You\u2019ve chosen to use your fingerprint as one way to unlock your phone. If you skip now, you\u2019ll need to set this up later. Setup takes only a minute or so.</string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (tablet) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet">Protect your tablet with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (device) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device">Protect your device with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (default) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default">Protect your phone with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face unlock. (tablet) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="tablet">By protecting your tablet with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face unlock. To go back, tap Cancel. </string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face unlock. (device) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="device">By protecting your device with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face unlock. To go back, tap Cancel. </string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face unlock. (default) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="default">By protecting your phone with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face unlock. To go back, tap Cancel.</string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set biometric unlock. (tablet) [CHAR LIMIT=NONE] -->
-    <string name="biometrics_lock_screen_setup_skip_dialog_text" product="tablet">By protecting your tablet with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up biometrics. To go back, tap Cancel. </string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set biometric unlock. (device) [CHAR LIMIT=NONE] -->
-    <string name="biometrics_lock_screen_setup_skip_dialog_text" product="device">By protecting your device with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up biometrics. To go back, tap Cancel. </string>
-    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set biometric unlock. (default) [CHAR LIMIT=NONE] -->
-    <string name="biometrics_lock_screen_setup_skip_dialog_text" product="default">By protecting your phone with a screen lock option, no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up biometrics. To go back, tap Cancel.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_message" product="tablet">A PIN protects your tablet if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_message" product="tablet">A pattern protects your tablet if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_message" product="tablet">A password protects your tablet if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_message" product="device">A PIN protects your device if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_message" product="device">A pattern protects your device if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_message" product="device">A password protects your device if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_message" product="default">A PIN protects your phone if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_message" product="default">A pattern protects your phone if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_message" product="default">A password protects your phone if it\u2019s lost or stolen</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_fingerprint_message" product="tablet">A PIN is required to set up Fingerprint Unlock.\n\nA PIN protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_fingerprint_message" product="tablet">A pattern is required to set up Fingerprint Unlock.\n\nA pattern protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_fingerprint_message" product="tablet">A password is required to set up Fingerprint Unlock.\n\nA password protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_fingerprint_message" product="device">A PIN is required to set up Fingerprint Unlock.\n\nA PIN protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_fingerprint_message" product="device">A pattern is required to set up Fingerprint Unlock.\n\nA pattern protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_fingerprint_message" product="device">A password is required to set up Fingerprint Unlock.\n\nA password protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_fingerprint_message" product="default">A PIN is required to set up Fingerprint Unlock.\n\nA PIN protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_fingerprint_message" product="default">A pattern is required to set up Fingerprint Unlock.\n\nA pattern protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_fingerprint_message" product="default">A password is required to set up Fingerprint Unlock.\n\nA password protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_face_message" product="tablet">A PIN is required to set up Face Unlock.\n\nA PIN protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_face_message" product="tablet">A pattern is required to set up Face Unlock.\n\nA pattern protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_face_message" product="tablet">A password is required to set up Face Unlock.\n\nA password protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_face_message" product="device">A PIN is required to set up Face Unlock.\n\nA PIN protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_face_message" product="device">A pattern is required to set up Face Unlock.\n\nA pattern protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_face_message" product="device">A password is required to set up Face Unlock.\n\nA password protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_face_message" product="default">A PIN is required to set up Face Unlock.\n\nA PIN protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_face_message" product="default">A pattern is required to set up Face Unlock.\n\nA pattern protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_face_message" product="default">A password is required to set up Face Unlock.\n\nA password protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_biometrics_message" product="tablet">A PIN is required to set up Face Unlock and Fingerprint Unlock.\n\nA PIN protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_biometrics_message" product="tablet">A pattern is required to set up Face Unlock and Fingerprint Unlock.\n\nA pattern protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (tablet) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_biometrics_message" product="tablet">A password is required to set up Face Unlock and Fingerprint Unlock.\n\nA password protects your tablet if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_biometrics_message" product="device">A PIN is required to set up Face Unlock and Fingerprint Unlock.\n\nA PIN protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_biometrics_message" product="device">A pattern is required to set up Face Unlock and Fingerprint Unlock.\n\nA pattern protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (device) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_biometrics_message" product="device">A password is required to set up Face Unlock and Fingerprint Unlock.\n\nA password protects your device if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pin_skip_biometrics_message" product="default">A PIN is required to set up Face Unlock and Fingerprint Unlock.\n\nA PIN protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_pattern_skip_biometrics_message" product="default">A pattern is required to set up Face Unlock and Fingerprint Unlock.\n\nA pattern protects your phone if it\u2019s lost or stolen.</string>
+    <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set up face or fingerprint. (default) [CHAR LIMIT=NONE] -->
+    <string name="lock_screen_password_skip_biometrics_message" product="default">A password is required to set up Face Unlock and Fingerprint Unlock.\n\nA password protects your phone if it\u2019s lost or stolen.</string>
     <!-- Title of dialog shown when the user tries to skip setting up a PIN, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
     <string name="lock_screen_pin_skip_title">Skip PIN setup?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a PIN, warning them of potential consequences of not doing so [CHAR LIMIT=90]-->
+    <string name="lock_screen_pin_skip_face_title">Skip setup for PIN and face?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a PIN, warning them of potential consequences of not doing so [CHAR LIMIT=90]-->
+    <string name="lock_screen_pin_skip_fingerprint_title">Skip setup for PIN and fingerprint?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a PIN, warning them of potential consequences of not doing so [CHAR LIMIT=90]-->
+    <string name="lock_screen_pin_skip_biometrics_title">Skip setup for PIN, face, and fingerprint?</string>
     <!-- Title of dialog shown when the user tries to skip setting up a password, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
     <string name="lock_screen_password_skip_title">Skip password setup?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a password, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_password_skip_face_title">Skip setup for password and face?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a password, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_password_skip_fingerprint_title">Skip setup for password and fingerprint?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a password, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_password_skip_biometrics_title">Skip setup for password, face, and fingerprint?</string>
     <!-- Title of dialog shown when the user tries to skip setting up a pattern, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
     <string name="lock_screen_pattern_skip_title">Skip pattern setup?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a pattern, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_pattern_skip_face_title">Skip setup for pattern and face?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a pattern, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_pattern_skip_fingerprint_title">Skip setup for pattern and fingerprint?</string>
+    <!-- Title of dialog shown when the user tries to skip setting up a pattern, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
+    <string name="lock_screen_pattern_skip_biometrics_title">Skip setup for pattern, face, and fingerprint?</string>
 
     <!-- Button text to setup screen lock in onboard dialog [CHAR LIMIT=34] -->
     <string name="security_settings_fingerprint_enroll_setup_screen_lock">Set up screen lock</string>
@@ -1431,14 +1503,14 @@
     <!-- Message shown in screen lock picker while setting up the new screen lock with fingerprint option. [CHAR LIMIT=NONE]-->
     <string name="fingerprint_unlock_title">You can unlock your phone using your fingerprint. For security, this option requires a backup screen lock.</string>
 
-    <!-- Title for preference that guides the user through creating a backup unlock pattern for face unlock [CHAR LIMIT=45]-->
-    <string name="face_unlock_set_unlock_pattern">Face unlock + Pattern</string>
-    <!-- Title for preference that guides the user through creating a backup unlock PIN for face unlock [CHAR LIMIT=45]-->
-    <string name="face_unlock_set_unlock_pin">Face unlock + PIN</string>
-    <!-- Title for preference that guides the user through creating a backup unlock password for face unlock [CHAR LIMIT=45]-->
-    <string name="face_unlock_set_unlock_password">Face unlock + Password</string>
-    <!-- Title for preference that guides the user to skip face unlock setup [CHAR LIMIT=60]-->
-    <string name="face_unlock_skip_face">Continue without face unlock</string>
+    <!-- Title for preference that guides the user through creating a backup unlock pattern for Face Unlock [CHAR LIMIT=45]-->
+    <string name="face_unlock_set_unlock_pattern">Face Unlock + Pattern</string>
+    <!-- Title for preference that guides the user through creating a backup unlock PIN for Face Unlock [CHAR LIMIT=45]-->
+    <string name="face_unlock_set_unlock_pin">Face Unlock + PIN</string>
+    <!-- Title for preference that guides the user through creating a backup unlock password for Face Unlock [CHAR LIMIT=45]-->
+    <string name="face_unlock_set_unlock_password">Face Unlock + Password</string>
+    <!-- Title for preference that guides the user to skip Face Unlock setup [CHAR LIMIT=60]-->
+    <string name="face_unlock_skip_face">Continue without Face Unlock</string>
     <!-- Message shown in screen lock picker while setting up the new screen lock with face unlock option. [CHAR LIMIT=NONE] -->
     <string name="face_unlock_title">You can unlock your phone using your face. For security, this option requires a backup screen lock.</string>
 
@@ -4335,12 +4407,12 @@
     <string name="lockpassword_pin_set_toast">PIN has been set</string>
     <!-- Toast shown if setting pattern was successful -->
     <string name="lockpassword_pattern_set_toast">Pattern has been set</string>
-    <!-- Header on first screen of choose password/PIN as backup for face unlock flow. If this string cannot be translated in under 40 characters, please translate "Set face unlock backup" [CHAR LIMIT=40] -->
-    <string name="lockpassword_choose_your_password_header_for_face">To use face unlock, set password</string>
-    <!-- Header on first screen of choose pattern as backup for face unlock flow. If this string cannot be translated in under 40 characters, please translate "Set face unlock backup" [CHAR LIMIT=40] -->
-    <string name="lockpassword_choose_your_pattern_header_for_face">To use face unlock, set pattern</string>
-    <!-- Header on first screen of choose password/PIN as backup for face unlock flow. If this string cannot be translated in under 40 characters, please translate "Set face unlock backup" [CHAR LIMIT=40] -->
-    <string name="lockpassword_choose_your_pin_header_for_face">To use face unlock, set PIN</string>
+    <!-- Header on first screen of choose password/PIN as backup for Face Unlock flow. If this string cannot be translated in under 40 characters, please translate "Set Face Unlock backup" [CHAR LIMIT=40] -->
+    <string name="lockpassword_choose_your_password_header_for_face">To use Face Unlock, set password</string>
+    <!-- Header on first screen of choose pattern as backup for Face Unlock flow. If this string cannot be translated in under 40 characters, please translate "Set Face Unlock backup" [CHAR LIMIT=40] -->
+    <string name="lockpassword_choose_your_pattern_header_for_face">To use Face Unlock, set pattern</string>
+    <!-- Header on first screen of choose password/PIN as backup for Face Unlock flow. If this string cannot be translated in under 40 characters, please translate "Set Face Unlock backup" [CHAR LIMIT=40] -->
+    <string name="lockpassword_choose_your_pin_header_for_face">To use Face Unlock, set PIN</string>
 
     <!-- Header on first screen of choose password/PIN as backup for biometric unlock flow. If this string cannot be translated in under 40 characters, please translate "Set biometric unlock backup" [CHAR LIMIT=40] -->
     <string name="lockpassword_choose_your_password_header_for_biometrics">To use biometrics, set password</string>
@@ -6497,8 +6569,10 @@
     <string name="battery_usage_for_total_time">Total: <xliff:g id="time">%s</xliff:g></string>
     <!-- [CHAR_LIMIT=NONE] Battery usage item for background usage time -->
     <string name="battery_usage_for_background_time">Background: <xliff:g id="time">%s</xliff:g></string>
-    <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer contentt -->
+    <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer content -->
     <string name="battery_usage_screen_footer">Battery usage data is approximate and doesn\'t measure usage when phone is charging</string>
+    <!-- [CHAR_LIMIT=NONE] Battery usage main screen footer for empty content -->
+    <string name="battery_usage_screen_footer_empty">Battery usage data will be available after you use your phone for a few hours</string>
     <!-- [CHAR_LIMIT=NONE] Accessibility content description for battery chart view. -->
     <string name="battery_usage_chart">Battery usage chart</string>
     <!-- Process Stats strings -->
@@ -8844,7 +8918,7 @@
     <string name="lockscreen_bypass_title">Skip lock screen</string>
 
     <!-- Configure lock screen: Summary for the option of unlocking directly to home. [CHAR LIMIT=100] -->
-    <string name="lockscreen_bypass_summary">After face unlock, go directly to last used screen</string>
+    <string name="lockscreen_bypass_summary">After unlocking, go directly to last used screen</string>
 
     <!-- Configure lock screen: Search keywords for the option of unlocking directly to home. [CHAR LIMIT=100] -->
     <string name="keywords_lockscreen_bypass">Lock screen, Lockscreen, Skip, Bypass</string>
@@ -13143,8 +13217,8 @@
     <string name="to_switch_networks_disconnect_ethernet">To switch networks, disconnect ethernet</string>
     <!-- Panel subtitle for Wi-Fi turned on. [CHAR LIMIT=60] -->
     <string name="wifi_is_turned_on_subtitle">Wi\u2011Fi is turned on</string>
-    <!-- Panel subtitle for select the network you want to use for data. [CHAR LIMIT=60] -->
-    <string name="select_network_to_connect_internet">Select the network you want to use for data</string>
+    <!-- Panel subtitle for tapping a network to connect to internet. [CHAR LIMIT=60] -->
+    <string name="tap_a_network_to_connect">Tap a network to connect</string>
     <!-- Title for merged carrier Wi-Fi offload toggle. [CHAR LIMIT=NONE] -->
     <string name="carrier_wifi_offload_title">W+ connections</string>
     <!-- Summary for merged carrier Wi-Fi offload toggle. [CHAR LIMIT=NONE] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c72b3a5..a5b187b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -871,4 +871,15 @@
         <item name="android:textSize">16sp</item>
         <item name="android:textColor">?android:attr/textColorSecondary</item>
     </style>
+
+    <style name="TextAppearance.AdminDialogTitle"
+           parent="@*android:style/TextAppearance.DeviceDefault.Title">
+        <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+        <item name="android:textSize">24sp</item>
+    </style>
+
+    <style name="TextAppearance.AdminDialogMessage"
+           parent="@*android:style/TextAppearance.DeviceDefault">
+        <item name="android:textColor">?android:attr/textColorSecondary</item>
+    </style>
 </resources>
diff --git a/res/values/styles_preference.xml b/res/values/styles_preference.xml
index 42ed0e9..1c8d015 100644
--- a/res/values/styles_preference.xml
+++ b/res/values/styles_preference.xml
@@ -48,7 +48,7 @@
         <item name="android:layout">@layout/preference_widget_seekbar_settings</item>
     </style>
 
-    <style name="SyncSwitchPreference" parent="@style/Preference.Material">
+    <style name="SyncSwitchPreference" parent="@style/SettingsSwitchPreference.SettingsLib">
         <item name="android:widgetLayout">@layout/preference_widget_sync_toggle</item>
     </style>
 
@@ -59,6 +59,7 @@
     <style name="SettingsMultiSelectListPreference" parent="@style/Preference.Material">
         <item name="android:positiveButtonText">@android:string/ok</item>
         <item name="android:negativeButtonText">@android:string/cancel</item>
+        <item name="iconSpaceReserved">@bool/settingslib_config_icon_space_reserved</item>
     </style>
 
     <style name="SettingsPreferenceFragmentStyle" parent="@style/PreferenceFragment.Material">
diff --git a/res/xml/app_info_settings_v2.xml b/res/xml/app_info_settings_v2.xml
index 8b9cf4f..b4a82e0 100644
--- a/res/xml/app_info_settings_v2.xml
+++ b/res/xml/app_info_settings_v2.xml
@@ -24,27 +24,18 @@
         android:key="header_view"
         android:layout="@layout/settings_entity_header"
         android:selectable="false"
-        android:order="-10000"
-        settings:allowDividerBelow="true"/>
+        android:order="-10000" />
 
     <com.android.settingslib.widget.LayoutPreference
         android:key="instant_app_buttons"
         android:layout="@layout/instant_app_buttons"
         android:selectable="false"
-        android:order="-9999"
-        settings:allowDividerAbove="true"
-        settings:allowDividerBelow="true"/>
+        android:order="-9999" />
 
     <com.android.settingslib.widget.ActionButtonsPreference
         android:key="action_buttons"
         android:order="-9998" />
 
-    <!-- Add SpacePreference to draw divider -->
-    <com.android.settings.applications.SpacePreference
-        android:layout_height="0dp"
-        android:order="-9997"
-        settings:allowDividerAbove="true" />
-
     <Preference
         android:key="app_settings_link"
         android:title="@string/app_settings_link"
diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
index 6092dbb..6ffc375 100644
--- a/res/xml/app_storage_settings.xml
+++ b/res/xml/app_storage_settings.xml
@@ -22,11 +22,6 @@
     <com.android.settingslib.widget.ActionButtonsPreference
         android:key="header_view" />
 
-    <com.android.settings.applications.SpacePreference
-        android:key="storage_space"
-        android:layout_height="8dp"
-        settings:allowDividerAbove="true"/>
-
     <Preference
         android:key="storage_used"
         android:title="@string/storage_used"
@@ -41,8 +36,7 @@
 
     <PreferenceCategory
         android:key="storage_category"
-        android:title="@string/app_info_storage_title"
-        settings:allowDividerAbove="true">
+        android:title="@string/app_info_storage_title">
 
         <Preference
             android:key="app_size"
diff --git a/res/xml/credential_management_app_fragment.xml b/res/xml/credential_management_app_fragment.xml
index 41007a2..d4b61ac 100644
--- a/res/xml/credential_management_app_fragment.xml
+++ b/res/xml/credential_management_app_fragment.xml
@@ -30,7 +30,8 @@
     <com.android.settingslib.widget.TopIntroPreference
         android:key="top_intro_request_manage_credentials"
         android:order="-9999"
-        android:title="@string/request_manage_credentials_description"/>
+        android:title="@string/request_manage_credentials_description"
+        settings:searchable="false"/>
 
     <!-- Buttons -->
     <com.android.settingslib.widget.ActionButtonsPreference
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 8588f8b..0ec1a61 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -163,7 +163,7 @@
             android:title="@string/call_category"
             settings:controller="com.android.settings.network.telephony.CallingPreferenceCategoryController">
 
-            <PreferenceScreen
+            <Preference
                 android:key="wifi_calling"
                 android:title="@string/wifi_calling_settings_title"
                 android:summary="@string/wifi_calling_summary"
@@ -173,7 +173,7 @@
                         android:targetClass="com.android.settings.Settings$WifiCallingSettingsActivity">
                     <extra android:name="show_drawer_menu" android:value="true"/>
                 </intent>
-            </PreferenceScreen>
+            </Preference>
 
             <SwitchPreference
                 android:key="video_calling_key"
diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml
index 67f1783..7a9c44b 100644
--- a/res/xml/power_usage_advanced.xml
+++ b/res/xml/power_usage_advanced.xml
@@ -28,6 +28,7 @@
         android:key="app_list"/>
 
     <com.android.settingslib.widget.FooterPreference
+        android:key="battery_graph_footer"
         android:title="@string/battery_usage_screen_footer"
         android:selectable="false"
         settings:searchable="false"/>
diff --git a/res/xml/security_settings_combined_biometric.xml b/res/xml/security_settings_combined_biometric.xml
index f7d0539..6ab21e4 100644
--- a/res/xml/security_settings_combined_biometric.xml
+++ b/res/xml/security_settings_combined_biometric.xml
@@ -27,19 +27,19 @@
         android:title="@string/biometric_settings_category_ways_to_unlock">
 
         <Preference
-            android:key="biometric_fingerprint_settings"
-            android:title="@string/security_settings_fingerprint_preference_title"
-            android:summary="@string/summary_placeholder"
-            settings:keywords="@string/keywords_fingerprint_settings"
-            settings:controller="com.android.settings.biometrics.combination.BiometricFingerprintStatusPreferenceController" />
-
-        <Preference
             android:key="biometric_face_settings"
             android:title="@string/security_settings_face_preference_title"
             android:summary="@string/summary_placeholder"
             settings:keywords="@string/keywords_face_settings"
             settings:controller="com.android.settings.biometrics.combination.BiometricFaceStatusPreferenceController" />
 
+        <Preference
+            android:key="biometric_fingerprint_settings"
+            android:title="@string/security_settings_fingerprint_preference_title"
+            android:summary="@string/summary_placeholder"
+            settings:keywords="@string/keywords_fingerprint_settings"
+            settings:controller="com.android.settings.biometrics.combination.BiometricFingerprintStatusPreferenceController" />
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/security_settings_face.xml b/res/xml/security_settings_face.xml
index 147c4ca..229c9df 100644
--- a/res/xml/security_settings_face.xml
+++ b/res/xml/security_settings_face.xml
@@ -29,12 +29,12 @@
         settings:controller="com.android.settings.biometrics.face.FaceUnlockCategoryPreferenceController">
         <com.android.settingslib.RestrictedSwitchPreference
             android:key="security_settings_face_keyguard"
-            android:title="@string/security_settings_face_settings_use_face_unlock_phone"
+            android:title="@string/biometric_settings_use_biometric_unlock_phone"
             settings:keywords="@string/keywords_face_unlock"
             settings:controller="com.android.settings.biometrics.face.FaceSettingsKeyguardPreferenceController"/>
         <SwitchPreference
             android:key="security_settings_face_app"
-            android:title="@string/security_settings_face_settings_use_face_for_apps"
+            android:title="@string/biometric_settings_use_biometric_for_apps"
             settings:keywords="@string/keywords_face_unlock"
             settings:controller="com.android.settings.biometrics.face.FaceSettingsAppPreferenceController"/>
         <com.android.settingslib.RestrictedSwitchPreference
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 923c2bd..7dd5fe4 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -233,18 +233,6 @@
 
     @Override
     protected void onCreate(Bundle savedState) {
-        if (FeatureFlagUtils.isEnabled(this, FeatureFlags.SILKY_HOME)) {
-            // Enable Activity transitions
-            getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
-            final MaterialSharedAxis enterTransition = new MaterialSharedAxis(
-                    MaterialSharedAxis.X, /* forward */true);
-            getWindow().setEnterTransition(enterTransition);
-
-            final MaterialSharedAxis returnTransition = new MaterialSharedAxis(
-                    MaterialSharedAxis.X, /* forward */false);
-            getWindow().setReturnTransition(returnTransition);
-        }
-
         super.onCreate(savedState);
         Log.d(LOG_TAG, "Starting onCreate");
         long startTime = System.currentTimeMillis();
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index c81bfb2..4b1725f 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -52,6 +52,7 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.accessibility.AccessibilityEditDialogUtils.DialogType;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.utils.LocaleUtils;
 import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settings.widget.SettingsMainSwitchPreference;
 import com.android.settingslib.accessibility.AccessibilityUtils;
@@ -659,10 +660,9 @@
         if (list.isEmpty()) {
             list.add(softwareTitle);
         }
-        final String joinStrings = TextUtils.join(/* delimiter= */", ", list);
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
-                null, joinStrings);
+                null, LocaleUtils.getConcatenatedString(list));
     }
 
     /**
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index cb0d964..57fd7ea 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -46,6 +46,7 @@
 import com.android.settings.R;
 import com.android.settings.accessibility.AccessibilityEditDialogUtils.DialogType;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.utils.LocaleUtils;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
@@ -282,10 +283,9 @@
         if (list.isEmpty()) {
             list.add(softwareTitle);
         }
-        final String joinStrings = TextUtils.join(/* delimiter= */", ", list);
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
-                null, joinStrings);
+                null, LocaleUtils.getConcatenatedString(list));
     }
 
     @Override
diff --git a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
index c639d1d..42bb34a 100644
--- a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
+++ b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
@@ -58,7 +58,6 @@
     private static final String LAUNCHING_LOCATION_SETTINGS =
         "com.android.settings.accounts.LAUNCHING_LOCATION_SETTINGS";
 
-
     private AuthenticatorHelper mAuthenticatorHelper;
     private UserHandle mUserHandle;
     private PreferenceFragmentCompat mFragment;
diff --git a/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java b/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java
index 5452a2a..fdfe215 100644
--- a/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java
+++ b/src/com/android/settings/applications/intentpicker/VerifiedLinksPreference.java
@@ -89,7 +89,7 @@
         CheckBox checkBox = (CheckBox) view.findViewById(com.android.internal.R.id.checkbox);
         if (checkBox != null) {
             checkBox.setChecked(true);
-            checkBox.setVisibility(mShowCheckBox ? View.VISIBLE : View.INVISIBLE);
+            checkboxContainer.setVisibility(mShowCheckBox ? View.VISIBLE : View.GONE);
         }
     }
 }
diff --git a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
index b072047..e5e9b7d 100644
--- a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
+++ b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
@@ -19,6 +19,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -37,9 +38,8 @@
 
 public class ApplicationViewHolder extends RecyclerView.ViewHolder {
 
-    private final TextView mAppName;
-    private final ImageView mAppIcon;
-
+    @VisibleForTesting
+    final TextView mAppName;
     @VisibleForTesting
     final TextView mSummary;
     @VisibleForTesting
@@ -49,6 +49,8 @@
     @VisibleForTesting
     final Switch mSwitch;
 
+    private final ImageView mAppIcon;
+
     ApplicationViewHolder(View itemView) {
         super(itemView);
         mAppName = itemView.findViewById(android.R.id.title);
@@ -95,11 +97,16 @@
         itemView.setEnabled(isEnabled);
     }
 
-    void setTitle(CharSequence title) {
+    void setTitle(CharSequence title, CharSequence contentDescription) {
         if (title == null) {
             return;
         }
         mAppName.setText(title);
+
+        if (TextUtils.isEmpty(contentDescription)) {
+            return;
+        }
+        mAppName.setContentDescription(contentDescription);
     }
 
     void setIcon(int drawableRes) {
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 7469b71..d5162a85 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -1422,9 +1422,8 @@
             // Bind the data efficiently with the holder
             final ApplicationsState.AppEntry entry = mEntries.get(position);
             synchronized (entry) {
-                holder.setTitle(entry.label);
                 mState.ensureLabelDescription(entry);
-                holder.itemView.setContentDescription(entry.labelDescription);
+                holder.setTitle(entry.label, entry.labelDescription);
                 mState.ensureIcon(entry);
                 holder.setIcon(entry.icon);
                 updateSummary(holder, entry);
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 6a764d4..3ebbc06 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -38,6 +38,7 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
@@ -52,11 +53,11 @@
 import android.util.EventLog;
 import android.util.Log;
 import android.view.Display;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.view.WindowManager;
-import android.widget.AppSecurityPermissions;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -134,6 +135,8 @@
 
     boolean mIsCalledFromSupportDialog = false;
 
+    private LayoutInflater mLayoutInflaternflater;
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -142,6 +145,7 @@
 
         mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
         mAppOps = (AppOpsManager)getSystemService(Context.APP_OPS_SERVICE);
+        mLayoutInflaternflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         PackageManager packageManager = getPackageManager();
 
         if ((getIntent().getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
@@ -735,14 +739,36 @@
             for (DeviceAdminInfo.PolicyInfo pi : mDeviceAdmin.getUsedPolicies()) {
                 int descriptionId = isAdminUser ? pi.description : pi.descriptionForSecondaryUsers;
                 int labelId = isAdminUser ? pi.label : pi.labelForSecondaryUsers;
-                View view = AppSecurityPermissions.getPermissionItemView(this, getText(labelId),
-                        showDescription ? getText(descriptionId) : "", true);
+                View view = getPermissionItemView(getText(labelId),
+                        showDescription ? getText(descriptionId) : "");
                 mAdminPolicies.addView(view);
             }
             mAdminPoliciesInitialized = true;
         }
     }
 
+    /**
+     * Utility to retrieve a view displaying a single permission.  This provides
+     * the UI layout for permissions.
+     */
+    private View getPermissionItemView(CharSequence grpName, CharSequence description) {
+        Drawable icon = this.getDrawable(com.android.internal.R.drawable.ic_text_dot);
+        View permView = mLayoutInflaternflater.inflate(R.layout.app_permission_item, null);
+        TextView permGrpView = permView.findViewById(R.id.permission_group);
+        TextView permDescView = permView.findViewById(R.id.permission_list);
+        ImageView imgView = (ImageView) permView.findViewById(R.id.perm_icon);
+
+        imgView.setImageDrawable(icon);
+        if (grpName != null) {
+            permGrpView.setText(grpName);
+            permDescView.setText(description);
+        } else {
+            permGrpView.setText(description);
+            permDescView.setVisibility(View.GONE);
+        }
+        return permView;
+    }
+
     void toggleMessageEllipsis(View v) {
         TextView tv = (TextView) v;
 
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index 328ecbc..d8197c0 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -122,7 +122,10 @@
                 extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                 extras.putInt(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId);
                 extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
+                super.onPreferenceTreeClick(preference);
             });
+
+            return true;
         } else if (getFingerprintPreferenceKey().equals(key)) {
             mDoNotFinishActivity = true;
             mFingerprintManager.generateChallenge(mUserId, (sensorId, userId, challenge) -> {
@@ -131,8 +134,12 @@
                 final Bundle extras = preference.getExtras();
                 extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
                 extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
+                super.onPreferenceTreeClick(preference);
             });
+
+            return true;
         }
+
         return super.onPreferenceTreeClick(preference);
     }
 
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
index 6c5a4b4..2ad4070 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.biometrics.face;
 
+import android.annotation.StringRes;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -39,6 +40,7 @@
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupcompat.util.WizardManagerHelper;
+import com.google.android.setupdesign.GlifLayout;
 import com.google.android.setupdesign.view.IllustrationVideoView;
 
 public class FaceEnrollEducation extends BiometricEnrollBase {
@@ -62,22 +64,27 @@
             new CompoundButton.OnCheckedChangeListener() {
                 @Override
                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                    int titleRes = isChecked ?
-                            R.string.security_settings_face_enroll_education_title_accessibility
-                            : R.string.security_settings_face_enroll_education_title;
-                    getLayout().setHeaderText(titleRes);
-                    setTitle(titleRes);
+                    final int headerRes;
+                    final int descriptionRes;
+                    if (isChecked) {
+                        headerRes = R.string
+                                .security_settings_face_enroll_education_title_accessibility;
+                        descriptionRes = R.string
+                                .security_settings_face_enroll_education_message_accessibility;
+                    } else {
+                        headerRes = R.string.security_settings_face_enroll_education_title;
+                        descriptionRes = R.string.security_settings_face_enroll_education_message;
+                    }
+                    updateHeaders(headerRes, descriptionRes);
 
                     if (isChecked) {
                         mIllustrationNormal.stop();
                         mIllustrationNormal.setVisibility(View.INVISIBLE);
                         mIllustrationAccessibility.setVisibility(View.VISIBLE);
-                        mDescriptionText.setVisibility(View.INVISIBLE);
                     } else {
                         mIllustrationNormal.setVisibility(View.VISIBLE);
                         mIllustrationNormal.start();
                         mIllustrationAccessibility.setVisibility(View.INVISIBLE);
-                        mDescriptionText.setVisibility(View.VISIBLE);
                     }
                 }
             };
@@ -86,8 +93,11 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.face_enroll_education);
-        getLayout().setHeaderText(R.string.security_settings_face_enroll_education_title);
-        setTitle(R.string.security_settings_face_enroll_education_title);
+
+        final int headerRes = R.string.security_settings_face_enroll_education_title;
+        final int descriptionRes = R.string.security_settings_face_enroll_education_message;
+        updateHeaders(headerRes, descriptionRes);
+
         mHandler = new Handler();
 
         mFaceManager = Utils.getFaceManagerOrNull(this);
@@ -237,4 +247,13 @@
     public int getMetricsCategory() {
         return SettingsEnums.FACE_ENROLL_INTRO;
     }
+
+    private void updateHeaders(@StringRes int headerRes, @StringRes int descriptionRes) {
+        final CharSequence headerText = getText(headerRes);
+        setTitle(headerText);
+
+        final GlifLayout layout = getLayout();
+        layout.setHeaderText(headerText);
+        layout.setDescriptionText(descriptionRes);
+    }
 }
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index 06e6584..183c6f7 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.core;
 
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_PAGE_SCROLL;
+
 import android.content.Context;
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -24,7 +26,9 @@
 import androidx.annotation.XmlRes;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.RecyclerView;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.survey.SurveyMixin;
 import com.android.settingslib.core.instrumentation.Instrumentable;
@@ -47,6 +51,7 @@
     protected final int PLACEHOLDER_METRIC = 10000;
 
     private VisibilityLoggerMixin mVisibilityLoggerMixin;
+    private RecyclerView.OnScrollListener mOnScrollListener;
 
     @Override
     public void onAttach(Context context) {
@@ -62,10 +67,26 @@
     @Override
     public void onResume() {
         mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity());
+        // Add scroll listener to trace interaction jank.
+        final RecyclerView recyclerView = getListView();
+        if (recyclerView != null) {
+            mOnScrollListener = new OnScrollListener(getClass().getName());
+            recyclerView.addOnScrollListener(mOnScrollListener);
+        }
         super.onResume();
     }
 
     @Override
+    public void onPause() {
+        final RecyclerView recyclerView = getListView();
+        if (mOnScrollListener != null) {
+            recyclerView.removeOnScrollListener(mOnScrollListener);
+            mOnScrollListener = null;
+        }
+        super.onPause();
+    }
+
+    @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
         final int resId = getPreferenceScreenResId();
         if (resId > 0) {
@@ -123,4 +144,26 @@
         }
     }
 
+    private static final class OnScrollListener extends RecyclerView.OnScrollListener {
+        private final InteractionJankMonitor mMonitor = InteractionJankMonitor.getInstance();
+        private final String mClassName;
+
+        private OnScrollListener(String className) {
+            mClassName = className;
+        }
+
+        @Override
+        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+            switch (newState) {
+                case RecyclerView.SCROLL_STATE_DRAGGING:
+                    // TODO: Update API with tag parameter (class name).
+                    mMonitor.begin(recyclerView, CUJ_SETTINGS_PAGE_SCROLL);
+                    break;
+                case RecyclerView.SCROLL_STATE_IDLE:
+                    mMonitor.end(CUJ_SETTINGS_PAGE_SCROLL);
+                    break;
+                default:
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index 05635cb..6af95b2 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -77,6 +77,7 @@
 
     protected CollapsingToolbarLayout mCollapsingToolbarLayout;
     private int mCategoriesUpdateTaskCount;
+    private Toolbar mToolbar;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -130,20 +131,38 @@
     }
 
     @Override
+    public void setActionBar(@androidx.annotation.Nullable Toolbar toolbar) {
+        super.setActionBar(toolbar);
+
+        mToolbar = toolbar;
+    }
+
+    @Override
     public boolean onNavigateUp() {
         if (!super.onNavigateUp()) {
-            finish();
+            finishAfterTransition();
         }
         return true;
     }
 
     @Override
+    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            // Make the up button behave the same as the back button.
+            finishAfterTransition();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
     public void startActivity(Intent intent) {
         if (!Utils.isPageTransitionEnabled(this)) {
             super.startActivity(intent);
             return;
         }
-        super.startActivity(intent, getActivityOptionsBundle());
+        super.startActivity(intent, createActivityOptionsBundleForTransition(null));
     }
 
     @Override
@@ -152,11 +171,7 @@
             super.startActivity(intent, options);
             return;
         }
-        if (options != null) {
-            super.startActivity(intent, getMergedBundleForTransition(options));
-            return;
-        }
-        super.startActivity(intent, getActivityOptionsBundle());
+        super.startActivity(intent, createActivityOptionsBundleForTransition(options));
     }
 
     @Override
@@ -167,7 +182,8 @@
             super.startActivityForResult(intent, requestCode);
             return;
         }
-        super.startActivityForResult(intent, requestCode, getActivityOptionsBundle());
+        super.startActivityForResult(intent, requestCode,
+                createActivityOptionsBundleForTransition(null));
     }
 
     @Override
@@ -177,12 +193,8 @@
             super.startActivityForResult(intent, requestCode, options);
             return;
         }
-        if (options != null) {
-            super.startActivityForResult(intent, requestCode,
-                    getMergedBundleForTransition(options));
-            return;
-        }
-        super.startActivityForResult(intent, requestCode, getActivityOptionsBundle());
+        super.startActivityForResult(intent, requestCode,
+                createActivityOptionsBundleForTransition(options));
     }
 
     @Override
@@ -192,7 +204,8 @@
             super.startActivityForResultAsUser(intent, requestCode, userHandle);
             return;
         }
-        super.startActivityForResultAsUser(intent, requestCode, getActivityOptionsBundle(),
+        super.startActivityForResultAsUser(intent, requestCode,
+                createActivityOptionsBundleForTransition(null),
                 userHandle);
     }
 
@@ -243,17 +256,6 @@
     }
 
     @Override
-    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
-        final int id = item.getItemId();
-        if (id == android.R.id.home) {
-            // Make the up button behave the same as the back button.
-            onBackPressed();
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
     public void setTitle(CharSequence title) {
         if (mCollapsingToolbarLayout != null) {
             mCollapsingToolbarLayout.setTitle(title);
@@ -341,20 +343,21 @@
         }
     }
 
-    private Bundle getActivityOptionsBundle() {
-        final Toolbar toolbar = findViewById(R.id.action_bar);
-        return ActivityOptions.makeSceneTransitionAnimation(this, toolbar,
-                "shared_element_view").toBundle();
-    }
-
-    private Bundle getMergedBundleForTransition(@NonNull Bundle options) {
-        final Bundle mergedBundle = new Bundle();
-        mergedBundle.putAll(options);
-        final Bundle activityOptionsBundle = getActivityOptionsBundle();
-        if (activityOptionsBundle != null) {
-            mergedBundle.putAll(activityOptionsBundle);
+    @androidx.annotation.Nullable
+    private Bundle createActivityOptionsBundleForTransition(
+            @androidx.annotation.Nullable Bundle options) {
+        if (mToolbar == null) {
+            Log.w(TAG, "setActionBar(Toolbar) is not called. Cannot apply settings transition!");
+            return options;
         }
-        return mergedBundle;
+        final Bundle transitionOptions = ActivityOptions.makeSceneTransitionAnimation(this,
+                mToolbar, "shared_element_view").toBundle();
+        if (options == null) {
+            return transitionOptions;
+        }
+        final Bundle mergedOptions = new Bundle(options);
+        mergedOptions.putAll(transitionOptions);
+        return mergedOptions;
     }
 
     public interface CategoryListener {
diff --git a/src/com/android/settings/deviceinfo/storage/StorageEntry.java b/src/com/android/settings/deviceinfo/storage/StorageEntry.java
index f718116..b419370 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageEntry.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageEntry.java
@@ -26,6 +26,8 @@
 import android.os.storage.VolumeRecord;
 import android.text.TextUtils;
 
+import com.android.settings.R;
+
 import java.io.File;
 
 /**
@@ -44,8 +46,15 @@
         mVolumeInfo = volumeInfo;
         mUnsupportedDiskInfo = null;
         mMissingVolumeRecord = null;
-        mVolumeInfoDescription = context.getSystemService(StorageManager.class)
-                .getBestVolumeDescription(mVolumeInfo);
+
+        if (isDefaultInternalStorage()) {
+            // Shows "This device" for default internal storage.
+            mVolumeInfoDescription = context.getResources()
+                    .getString(R.string.storage_default_internal_storage);
+        } else {
+            mVolumeInfoDescription = context.getSystemService(StorageManager.class)
+                    .getBestVolumeDescription(mVolumeInfo);
+        }
     }
 
     public StorageEntry(@NonNull DiskInfo diskInfo) {
diff --git a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
index 855c507..528c94d 100644
--- a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
@@ -32,23 +32,20 @@
 public class AdaptiveSleepBatterySaverPreferenceController {
 
     @VisibleForTesting
-    final BannerMessagePreference mPreference;
+    BannerMessagePreference mPreference;
     private final PowerManager mPowerManager;
+    private final Context mContext;
 
     public AdaptiveSleepBatterySaverPreferenceController(Context context) {
-        mPreference = new BannerMessagePreference(context);
-        mPreference.setTitle(R.string.ambient_camera_summary_battery_saver_on);
-        mPreference.setPositiveButtonText(R.string.disable_text);
         mPowerManager = context.getSystemService(PowerManager.class);
-        mPreference.setPositiveButtonOnClickListener(p -> {
-            mPowerManager.setPowerSaveModeEnabled(false);
-        });
+        mContext = context;
     }
 
     /**
      * Adds the controlled preference to the provided preference screen.
      */
     public void addToScreen(PreferenceScreen screen) {
+        initializePreference();
         screen.addPreference(mPreference);
         updateVisibility();
     }
@@ -66,6 +63,17 @@
      * Refreshes the visibility of the preference.
      */
     public void updateVisibility() {
+        initializePreference();
         mPreference.setVisible(isPowerSaveMode());
     }
+
+    private void initializePreference() {
+        if (mPreference == null) {
+            mPreference = new BannerMessagePreference(mContext);
+            mPreference.setTitle(R.string.ambient_camera_summary_battery_saver_on);
+            mPreference.setPositiveButtonText(R.string.disable_text);
+            mPreference.setPositiveButtonOnClickListener(
+                    p -> mPowerManager.setPowerSaveModeEnabled(false));
+        }
+    }
 }
diff --git a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
index ba7a3ab..20080ce 100644
--- a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
@@ -33,26 +33,22 @@
  */
 public class AdaptiveSleepCameraStatePreferenceController {
     @VisibleForTesting
-    final BannerMessagePreference mPreference;
+    BannerMessagePreference mPreference;
     private final SensorPrivacyManager mPrivacyManager;
+    private final Context mContext;
 
     public AdaptiveSleepCameraStatePreferenceController(Context context) {
-        mPreference = new BannerMessagePreference(context);
-        mPreference.setTitle(R.string.auto_rotate_camera_lock_title);
-        mPreference.setSummary(R.string.adaptive_sleep_camera_lock_summary);
-        mPreference.setPositiveButtonText(R.string.allow);
         mPrivacyManager = SensorPrivacyManager.getInstance(context);
         mPrivacyManager.addSensorPrivacyListener(CAMERA,
                 (sensor, enabled) -> updateVisibility());
-        mPreference.setPositiveButtonOnClickListener(p -> {
-            mPrivacyManager.setSensorPrivacy(CAMERA, false);
-        });
+        mContext = context;
     }
 
     /**
      * Adds the controlled preference to the provided preference screen.
      */
     public void addToScreen(PreferenceScreen screen) {
+        initializePreference();
         screen.addPreference(mPreference);
         updateVisibility();
     }
@@ -70,6 +66,18 @@
      * Refreshes the visibility of the preference.
      */
     public void updateVisibility() {
+        initializePreference();
         mPreference.setVisible(isCameraLocked());
     }
+
+    private void initializePreference() {
+        if (mPreference == null) {
+            mPreference = new BannerMessagePreference(mContext);
+            mPreference.setTitle(R.string.auto_rotate_camera_lock_title);
+            mPreference.setSummary(R.string.adaptive_sleep_camera_lock_summary);
+            mPreference.setPositiveButtonText(R.string.allow);
+            mPreference.setPositiveButtonOnClickListener(
+                    p -> mPrivacyManager.setSensorPrivacy(CAMERA, false));
+        }
+    }
 }
diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
index c57904e..b86a070 100644
--- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
@@ -65,19 +65,6 @@
         mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         mPrivacyManager = SensorPrivacyManager.getInstance(context);
         mPowerManager = context.getSystemService(PowerManager.class);
-        mPreference = new RestrictedSwitchPreference(context);
-        mPreference.setTitle(R.string.adaptive_sleep_title);
-        mPreference.setSummary(R.string.adaptive_sleep_description);
-        mPreference.setChecked(isChecked());
-        mPreference.setKey(PREFERENCE_KEY);
-        mPreference.setOnPreferenceClickListener(preference -> {
-            final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked();
-            mMetricsFeatureProvider.action(context, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED,
-                    isChecked);
-            Settings.Secure.putInt(context.getContentResolver(),
-                    Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE);
-            return true;
-        });
         mPackageManager = context.getPackageManager();
     }
 
@@ -116,8 +103,8 @@
             mPreference.setSummary(R.string.adaptive_sleep_description);
             mPreference.setChecked(isChecked());
             mPreference.setKey(PREFERENCE_KEY);
-            mPreference.setOnPreferenceChangeListener((preference, value) -> {
-                final boolean isChecked = (Boolean) value;
+            mPreference.setOnPreferenceClickListener(preference -> {
+                final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked();
                 mMetricsFeatureProvider.action(mContext,
                         SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED,
                         isChecked);
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index 86ffa47..2a5eda2 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -22,12 +22,8 @@
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
 import android.os.Process;
 import android.os.UserHandle;
-import android.util.IconDrawableFactory;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -38,7 +34,6 @@
 import androidx.appcompat.app.AlertDialog;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -143,21 +138,8 @@
     @VisibleForTesting
     void setAdminSupportIcon(View root, ComponentName admin, int userId) {
         ImageView supportIconView = root.requireViewById(R.id.admin_support_icon);
-        if (isNotCurrentUserOrProfile(admin, userId)) {
-            supportIconView.setImageDrawable(
-                    mActivity.getDrawable(com.android.internal.R.drawable.ic_info));
-
-            TypedArray ta = mActivity.obtainStyledAttributes(new int[]{android.R.attr.colorAccent});
-            supportIconView.setImageTintList(ColorStateList.valueOf(ta.getColor(0, 0)));
-            ta.recycle();
-        } else {
-            final Drawable badgedIcon = Utils.getBadgedIcon(
-                    IconDrawableFactory.newInstance(mActivity),
-                    mActivity.getPackageManager(),
-                    admin.getPackageName(),
-                    userId);
-            supportIconView.setImageDrawable(badgedIcon);
-        }
+        supportIconView.setImageDrawable(
+                mActivity.getDrawable(com.android.internal.R.drawable.ic_corp_badge));
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index 2ac55e7..a36c2ef 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -48,6 +48,7 @@
 import com.android.settingslib.core.lifecycle.events.OnResume;
 import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
 import com.android.settingslib.utils.StringUtil;
+import com.android.settingslib.widget.FooterPreference;
 
 import java.util.Arrays;
 import java.util.ArrayList;
@@ -62,6 +63,9 @@
                 OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume,
                 ExpandDividerPreference.OnExpandListener {
     private static final String TAG = "BatteryChartPreferenceController";
+    private static final String KEY_FOOTER_PREF = "battery_graph_footer";
+    private static final int ADD_FOOTER_DELAYED_MS = 250;
+
     /** Desired battery history size for timestamp slots. */
     public static final int DESIRED_HISTORY_SIZE = 25;
     private static final int CHART_LEVEL_ARRAY_SIZE = 13;
@@ -90,6 +94,9 @@
     @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID;
 
     private boolean mIs24HourFormat = false;
+    private boolean mIsFooterPrefAdded = false;
+    private PreferenceScreen mPreferenceScreen;
+    private FooterPreference mFooterPreference;
 
     private final String mPreferenceKey;
     private final SettingsActivity mActivity;
@@ -178,9 +185,15 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
+        mPreferenceScreen = screen;
         mPrefContext = screen.getContext();
         mAppListPrefGroup = screen.findPreference(mPreferenceKey);
         mAppListPrefGroup.setOrderingAsAdded(false);
+        mFooterPreference = screen.findPreference(KEY_FOOTER_PREF);
+        // Removes footer first until usage data is loaded to avoid flashing.
+        if (mFooterPreference != null) {
+            screen.removePreference(mFooterPreference);
+        }
     }
 
     @Override
@@ -264,6 +277,7 @@
             mBatteryIndexedMap = null;
             mBatteryHistoryKeys = null;
             mBatteryHistoryLevels = null;
+            addFooterPreferenceIfNeeded(false);
             return;
         }
         mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap);
@@ -347,6 +361,7 @@
     private void addAllPreferences() {
         final List<BatteryDiffEntry> entries =
             mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex));
+        addFooterPreferenceIfNeeded(!entries.isEmpty());
         if (entries == null) {
             Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex);
             return;
@@ -575,6 +590,20 @@
         mBatteryChartView.setLatestTimestamp(latestTimestamp);
     }
 
+    private void addFooterPreferenceIfNeeded(boolean containAppItems) {
+        if (mIsFooterPrefAdded || mFooterPreference == null) {
+            return;
+        }
+        mIsFooterPrefAdded = true;
+        mFooterPreference.setTitle(mPrefContext.getString(
+            containAppItems
+                ? R.string.battery_usage_screen_footer
+                : R.string.battery_usage_screen_footer_empty));
+        mHandler.postDelayed(
+            () -> mPreferenceScreen.addPreference(mFooterPreference),
+            ADD_FOOTER_DELAYED_MS);
+    }
+
     private static String utcToLocalTime(long[] timestamps) {
         final StringBuilder builder = new StringBuilder();
         for (int index = 0; index < timestamps.length; index++) {
diff --git a/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java b/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
index 46ba26d..e778e8c 100644
--- a/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
+++ b/src/com/android/settings/homepage/contextualcards/FaceReEnrollDialog.java
@@ -20,10 +20,10 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.hardware.face.Face;
 import android.hardware.face.FaceManager;
 import android.os.Bundle;
-import android.provider.Settings;
 import android.util.Log;
 
 import com.android.internal.app.AlertActivity;
@@ -53,11 +53,15 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        final PackageManager pm = getApplicationContext().getPackageManager();
+        final int dialogMessageRes = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
+                ? R.string.security_settings_face_enroll_improve_face_alert_body_fingerprint
+                : R.string.security_settings_face_enroll_improve_face_alert_body;
+
         final AlertController.AlertParams alertParams = mAlertParams;
         alertParams.mTitle = getText(
                 R.string.security_settings_face_enroll_improve_face_alert_title);
-        alertParams.mMessage = getText(
-                R.string.security_settings_face_enroll_improve_face_alert_body);
+        alertParams.mMessage = getText(dialogMessageRes);
         alertParams.mPositiveButtonText = getText(R.string.storage_menu_set_up);
         alertParams.mNegativeButtonText = getText(R.string.cancel);
         alertParams.mPositiveButtonListener = this;
diff --git a/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java b/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
index de7e780..b456e53 100644
--- a/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
+++ b/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
@@ -86,7 +86,11 @@
     private boolean isCellBroadcastAppLinkEnabled() {
         // Enable link to CMAS app settings depending on the value in config.xml.
         boolean enabled = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_cellBroadcastAppLinks);
+            com.android.internal.R.bool.config_cellBroadcastAppLinks) &&
+            // For data-only tablet devices which need to not forwarding any WEA-alert and hide from
+            // settings menu.
+            !mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_disable_all_cb_messages);
         if (enabled) {
             try {
                 String packageName = CellBroadcastUtils
diff --git a/src/com/android/settings/panel/InternetConnectivityPanel.java b/src/com/android/settings/panel/InternetConnectivityPanel.java
index 50371ae..a6c18a5 100644
--- a/src/com/android/settings/panel/InternetConnectivityPanel.java
+++ b/src/com/android/settings/panel/InternetConnectivityPanel.java
@@ -65,8 +65,8 @@
     private static final String TAG = "InternetConnectivityPanel";
     private static final int SUBTITLE_TEXT_NONE = -1;
     private static final int SUBTITLE_TEXT_WIFI_IS_TURNED_ON = R.string.wifi_is_turned_on_subtitle;
-    private static final int SUBTITLE_TEXT_SELECT_NETWORK_TO_CONNECT_INTERNET =
-            R.string.select_network_to_connect_internet;
+    private static final int SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT =
+            R.string.tap_a_network_to_connect;
     private static final int SUBTITLE_TEXT_SEARCHING_FOR_NETWORKS =
             R.string.wifi_empty_list_wifi_on;
     private static final int SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE =
@@ -326,7 +326,7 @@
         if (wifiList != null && wifiList.size() != 0) {
             // When the Wi-Fi scan result is not empty
             //   Sub-Title: Select the network you want to use for data
-            mSubtitle = SUBTITLE_TEXT_SELECT_NETWORK_TO_CONNECT_INTERNET;
+            mSubtitle = SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT;
             return;
         }
 
diff --git a/src/com/android/settings/password/SetupSkipDialog.java b/src/com/android/settings/password/SetupSkipDialog.java
index ef00357..dc4516a 100644
--- a/src/com/android/settings/password/SetupSkipDialog.java
+++ b/src/com/android/settings/password/SetupSkipDialog.java
@@ -23,6 +23,7 @@
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.FragmentManager;
 
@@ -77,22 +78,20 @@
         final boolean forBiometrics =
                 args.getBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS);
         if (forFace || forFingerprint || forBiometrics) {
+            final boolean hasFace = forFace || forBiometrics;
+            final boolean hasFingerprint = forFingerprint || forBiometrics;
+
             final int titleId;
-
-            if (args.getBoolean(ARG_LOCK_TYPE_PATTERN)) {
-                titleId = R.string.lock_screen_pattern_skip_title;
-            } else {
-                titleId = args.getBoolean(ARG_LOCK_TYPE_ALPHANUMERIC) ?
-                    R.string.lock_screen_password_skip_title : R.string.lock_screen_pin_skip_title;
-            }
-
             final int msgResId;
-            if (forBiometrics) {
-                msgResId = R.string.biometrics_lock_screen_setup_skip_dialog_text;
-            } else if (forFace) {
-                msgResId = R.string.face_lock_screen_setup_skip_dialog_text;
+            if (args.getBoolean(ARG_LOCK_TYPE_PATTERN)) {
+                titleId = getPatternSkipTitleRes(hasFace, hasFingerprint);
+                msgResId = getPatternSkipMessageRes(hasFace, hasFingerprint);
+            } else if (args.getBoolean(ARG_LOCK_TYPE_ALPHANUMERIC)) {
+                titleId = getPasswordSkipTitleRes(hasFace, hasFingerprint);
+                msgResId = getPasswordSkipMessageRes(hasFace, hasFingerprint);
             } else {
-                msgResId = R.string.fingerprint_lock_screen_setup_skip_dialog_text;
+                titleId = getPinSkipTitleRes(hasFace, hasFingerprint);
+                msgResId = getPinSkipMessageRes(hasFace, hasFingerprint);
             }
 
             return new AlertDialog.Builder(getContext())
@@ -111,6 +110,84 @@
         }
     }
 
+    @StringRes
+    private int getPatternSkipTitleRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_pattern_skip_biometrics_title;
+        } else if (hasFace) {
+            return R.string.lock_screen_pattern_skip_face_title;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_pattern_skip_fingerprint_title;
+        } else {
+            return R.string.lock_screen_pattern_skip_title;
+        }
+    }
+
+    @StringRes
+    private int getPatternSkipMessageRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_pattern_skip_biometrics_message;
+        } else if (hasFace) {
+            return R.string.lock_screen_pattern_skip_face_message;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_pattern_skip_fingerprint_message;
+        } else {
+            return R.string.lock_screen_pattern_skip_message;
+        }
+    }
+
+    @StringRes
+    private int getPasswordSkipTitleRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_password_skip_biometrics_title;
+        } else if (hasFace) {
+            return R.string.lock_screen_password_skip_face_title;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_password_skip_fingerprint_title;
+        } else {
+            return R.string.lock_screen_password_skip_title;
+        }
+    }
+
+    @StringRes
+    private int getPasswordSkipMessageRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_password_skip_biometrics_message;
+        } else if (hasFace) {
+            return R.string.lock_screen_password_skip_face_message;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_password_skip_fingerprint_message;
+        } else {
+            return R.string.lock_screen_password_skip_message;
+        }
+    }
+
+    @StringRes
+    private int getPinSkipTitleRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_pin_skip_biometrics_title;
+        } else if (hasFace) {
+            return R.string.lock_screen_pin_skip_face_title;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_pin_skip_fingerprint_title;
+        } else {
+            return R.string.lock_screen_pin_skip_title;
+        }
+    }
+
+    @StringRes
+    private int getPinSkipMessageRes(boolean hasFace, boolean hasFingerprint) {
+        if (hasFace && hasFingerprint) {
+            return R.string.lock_screen_pin_skip_biometrics_message;
+        } else if (hasFace) {
+            return R.string.lock_screen_pin_skip_face_message;
+        } else if (hasFingerprint) {
+            return R.string.lock_screen_pin_skip_fingerprint_message;
+        } else {
+            return R.string.lock_screen_pin_skip_message;
+        }
+    }
+
     @Override
     public void onClick(DialogInterface dialog, int button) {
         switch (button) {
diff --git a/src/com/android/settings/utils/LocaleUtils.java b/src/com/android/settings/utils/LocaleUtils.java
new file mode 100644
index 0000000..8fab344
--- /dev/null
+++ b/src/com/android/settings/utils/LocaleUtils.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.utils;
+
+import android.icu.text.ListFormatter;
+import android.text.TextUtils;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * This class implements some common methods to process with locales
+ */
+public class LocaleUtils {
+
+    /**
+     * Returns a character sequence concatenating the items with the localized comma.
+     *
+     * @param items items to be concatenated
+     */
+    public static CharSequence getConcatenatedString(List<CharSequence> items) {
+        final ListFormatter listFormatter = ListFormatter.getInstance(Locale.getDefault());
+        final CharSequence lastItem =  items.get(items.size() - 1);
+        items.add("fake last item");
+
+        // For English with "{0}, {1}, and {2}", the pattern is "{0}, {1}, and {2}".
+        // To get "{0}, {1}, {2}", we add a {fake item}, then the pattern result would be
+        // "{0}, {1}, {2} and {fake item}", then get the substring with the end index of the
+        // last item.
+        final String formatted = listFormatter.format(items);
+        return formatted.subSequence(0, TextUtils.indexOf(formatted, lastItem) + lastItem.length());
+    }
+}
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index b66633e..18cd553 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -87,14 +87,10 @@
 import com.android.settingslib.widget.LayoutPreference;
 import com.android.wifitrackerlib.WifiEntry;
 import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
-import com.android.wifitrackerlib.WifiEntry.ConnectCallback.ConnectStatus;
 import com.android.wifitrackerlib.WifiEntry.ConnectedInfo;
 import com.android.wifitrackerlib.WifiEntry.DisconnectCallback;
-import com.android.wifitrackerlib.WifiEntry.DisconnectCallback.DisconnectStatus;
 import com.android.wifitrackerlib.WifiEntry.ForgetCallback;
-import com.android.wifitrackerlib.WifiEntry.ForgetCallback.ForgetStatus;
 import com.android.wifitrackerlib.WifiEntry.SignInCallback;
-import com.android.wifitrackerlib.WifiEntry.SignInCallback.SignInStatus;
 import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
 
 import java.net.Inet4Address;
@@ -390,8 +386,6 @@
 
         mIpv6Category = screen.findPreference(KEY_IPV6_CATEGORY);
         mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF);
-
-        mSecurityPref.setSummary(mWifiEntry.getSecurityString(false /* concise */));
     }
 
     /**
@@ -545,6 +539,8 @@
         refreshRssiViews();
         // Frequency Pref
         refreshFrequency();
+        // Security Pref
+        refreshSecurity();
         // Transmit Link Speed Pref
         refreshTxSpeed();
         // Receive Link Speed Pref
@@ -646,6 +642,10 @@
         mFrequencyPref.setVisible(true);
     }
 
+    private void refreshSecurity() {
+        mSecurityPref.setSummary(mWifiEntry.getSecurityString(false /* concise */));
+    }
+
     private void refreshTxSpeed() {
         if (mWifiInfo == null
                 || mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED) {
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
index c3ae904..83d74a7 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
@@ -70,6 +70,22 @@
     }
 
     @Test
+    public void setTitle_titleIsNotEmptyAndContentIsNotEmpty_shouldSetTitleAndContentDescription() {
+        mHolder.setTitle("title", "content");
+
+        assertThat(mHolder.mAppName).isEqualTo("title");
+        assertThat(mHolder.mAppName.getContentDescription()).isEqualTo("content");
+    }
+
+    @Test
+    public void setTitle_titleIsNotEmptyButContentIsEmpty_shouldSetTitle() {
+        mHolder.setTitle("title", "");
+
+        assertThat(mHolder.mAppName).isEqualTo("title");
+        assertThat(mHolder.mAppName.getContentDescription()).isEqualTo("title");
+    }
+
+    @Test
     public void updateSize() {
         final String invalidStr = "invalid";
         final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
index 5350d45..5a44c79 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
@@ -68,6 +68,7 @@
     private static final int BATTERY_LEVEL_50 = 50;
     private static final String ICON_URI = "content://test.provider/icon.png";
     private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C";
+    private static final String DEVICE_SUMMARY = "test summary";
 
     private Context mContext;
 
@@ -133,7 +134,6 @@
                 View.GONE);
         assertThat(mLayoutPreference.findViewById(R.id.layout_middle).getVisibility()).isEqualTo(
                 View.VISIBLE);
-        assertBatteryLevel(mLayoutPreference.findViewById(R.id.layout_middle), BATTERY_LEVEL_MAIN);
     }
 
     @Test
@@ -232,67 +232,18 @@
     }
 
     @Test
-    public void refresh_underLowBatteryThreshold_showAlertIcon() {
+    public void refresh_connectedWatch_checkSummary() {
         when(mBluetoothDevice.getMetadata(
                 BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
                 BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_5).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(false).getBytes());
         when(mCachedDevice.isConnected()).thenReturn(true);
+        when(mCachedDevice.getConnectionSummary(/* shortSummary= */ true))
+                .thenReturn(DEVICE_SUMMARY);
 
         mController.refresh();
 
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle),
-                R.drawable.ic_battery_alert_24dp);
-    }
-
-    @Test
-    public void refresh_underLowBatteryThresholdInCharging_showAlertIcon() {
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
-                BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_5).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(true).getBytes());
-        when(mCachedDevice.isConnected()).thenReturn(true);
-
-        mController.refresh();
-
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle), /* resId= */-1);
-    }
-
-    @Test
-    public void refresh_aboveLowBatteryThreshold_noAlertIcon() {
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
-                BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_BATTERY)).thenReturn(
-                String.valueOf(BATTERY_LEVEL_50).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_LOW_BATTERY_THRESHOLD)).thenReturn(
-                String.valueOf(LOW_BATTERY_LEVEL_THRESHOLD).getBytes());
-        when(mBluetoothDevice.getMetadata(
-                BluetoothDevice.METADATA_MAIN_CHARGING)).thenReturn(
-                String.valueOf(false).getBytes());
-        when(mCachedDevice.isConnected()).thenReturn(true);
-
-        mController.refresh();
-
-        assertBatteryIcon(mLayoutPreference.findViewById(R.id.layout_middle), /* resId= */-1);
+        assertThat(((TextView) (mLayoutPreference.findViewById(R.id.entity_header_summary)))
+                .getText()).isEqualTo(DEVICE_SUMMARY);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index 6b92e57..fd711f8 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -57,6 +57,7 @@
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment;
 import com.android.settings.search.SearchFeatureProvider;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
 import com.android.settings.testutils.shadow.ShadowStorageManager;
 import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -81,7 +82,8 @@
                 ShadowPersistentDataBlockManager.class,
                 ShadowStorageManager.class,
                 ShadowUserManager.class,
-                ShadowUtils.class
+                ShadowUtils.class,
+                ShadowInteractionJankMonitor.class
         })
 public class ChooseLockGenericTest {
 
diff --git a/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java b/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
index 1de0c7b..d267fa9 100644
--- a/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupSkipDialogTest.java
@@ -82,11 +82,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pin_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, true, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_biometrics_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_biometrics_message));
     }
 
     @Test
@@ -98,11 +97,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_password_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, true, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_face_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_face_message));
     }
 
     @Test
@@ -114,11 +112,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pattern_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, true, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_face_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_face_message));
     }
 
     @Test
@@ -130,11 +127,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pin_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(true, false, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_fingerprint_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_fingerprint_message));
     }
 
     @Test
@@ -146,11 +142,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_password_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(true, false, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_fingerprint_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_fingerprint_message));
     }
 
     @Test
@@ -162,11 +157,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pattern_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(true, false, false))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_fingerprint_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_fingerprint_message));
     }
 
 
@@ -179,11 +173,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pin_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, false, true))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_biometrics_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pin_skip_biometrics_message));
     }
 
     @Test
@@ -195,11 +188,10 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_password_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, false, true))
-                .isEqualTo(shadowAlertDialog.getMessage());
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_biometrics_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_password_skip_biometrics_message));
     }
 
     @Test
@@ -211,25 +203,9 @@
         AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
         ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(alertDialog);
-        assertThat(mActivity.getString(R.string.lock_screen_pattern_skip_title)).isEqualTo(
-                shadowAlertDialog.getTitle());
-
-        assertThat(getSkipDialogMessage(false, false, true))
-                .isEqualTo(shadowAlertDialog.getMessage());
-    }
-
-    public String getSkipDialogMessage(boolean forFingerprint, boolean forFace,
-            boolean forBiometrics) {
-        final int resId;
-        if (forFingerprint) {
-            resId = R.string.fingerprint_lock_screen_setup_skip_dialog_text;
-        } else if (forFace) {
-            resId = R.string.face_lock_screen_setup_skip_dialog_text;
-        } else if (forBiometrics) {
-            resId = R.string.biometrics_lock_screen_setup_skip_dialog_text;
-        } else {
-            return null;
-        }
-        return String.format(mActivity.getString(resId));
+        assertThat(shadowAlertDialog.getTitle()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_biometrics_title));
+        assertThat(shadowAlertDialog.getMessage()).isEqualTo(
+                mActivity.getString(R.string.lock_screen_pattern_skip_biometrics_message));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowInteractionJankMonitor.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowInteractionJankMonitor.java
new file mode 100644
index 0000000..3ec07c5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowInteractionJankMonitor.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.testutils.shadow;
+
+import static org.mockito.Mockito.mock;
+
+import com.android.internal.jank.InteractionJankMonitor;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(InteractionJankMonitor.class)
+public class ShadowInteractionJankMonitor {
+
+    @Implementation
+    public static InteractionJankMonitor getInstance() {
+        return mock(InteractionJankMonitor.class);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
index c9d2119..ab306d9 100644
--- a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
@@ -45,6 +45,7 @@
 import androidx.fragment.app.FragmentTransaction;
 
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import org.junit.Before;
@@ -55,11 +56,13 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowInteractionJankMonitor.class)
 public class WifiP2pSettingsTest {
 
     private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java
index 657d3a7..8c07ac3 100644
--- a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java
@@ -33,6 +33,7 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import org.junit.Before;
@@ -43,8 +44,10 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowInteractionJankMonitor.class)
 public class SavedAccessPointsWifiSettings2Test {
 
     @Mock
diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageEntryTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageEntryTest.java
index c2591a7..7541e93 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageEntryTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageEntryTest.java
@@ -31,6 +31,8 @@
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.settings.testutils.ResourcesUtils;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -247,6 +249,17 @@
     }
 
     @Test
+    public void getDescription_defaultInternalStorage_returnThisDevice() {
+        final VolumeInfo volumeInfo = mock(VolumeInfo.class);
+        when(volumeInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
+        when(volumeInfo.getId()).thenReturn(VolumeInfo.ID_PRIVATE_INTERNAL);
+        final StorageEntry volumeStorage = new StorageEntry(mContext, volumeInfo);
+
+        assertThat(volumeStorage.getDescription()).isEqualTo(
+                ResourcesUtils.getResourcesString(mContext, "storage_default_internal_storage"));
+    }
+
+    @Test
     public void getDiskId_shouldReturnDiskId() {
         final VolumeInfo volumeInfo = mock(VolumeInfo.class);
         final StorageEntry volumeStorage = new StorageEntry(mContext, volumeInfo);
diff --git a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
index 651eb04..150c99e 100644
--- a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
+++ b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
@@ -63,10 +63,9 @@
             ApplicationProvider.getApplicationContext(), "airplane_mode");
     public static final String SUBTITLE_WIFI_IS_TURNED_ON = ResourcesUtils.getResourcesString(
             ApplicationProvider.getApplicationContext(), "wifi_is_turned_on_subtitle");
-    public static final String SUBTITLE_TEXT_SELECT_NETWORK_TO_CONNECT_INTERNET =
-            ResourcesUtils.getResourcesString(
-                    ApplicationProvider.getApplicationContext(),
-                    "select_network_to_connect_internet");
+    public static final String SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT =
+            ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
+                    "tap_a_network_to_connect");
     public static final String BUTTON_SETTINGS = ResourcesUtils.getResourcesString(
             ApplicationProvider.getApplicationContext(), "settings_button");
     public static final String SUBTITLE_NON_CARRIER_NETWORK_UNAVAILABLE =
@@ -179,7 +178,7 @@
     }
 
     @Test
-    public void getSubTitle_apmOffWifiOnTwoWifiItemsNoCarrierData_selectNetworkToConnectInternet() {
+    public void getSubTitle_apmOffWifiOnTwoWifiItemsNoCarrierData_tapANetworkToConnect() {
         List wifiList = new ArrayList<ScanResult>();
         wifiList.add(new ScanResult());
         wifiList.add(new ScanResult());
@@ -187,8 +186,7 @@
 
         mPanel.updatePanelTitle();
 
-        assertThat(mPanel.getSubTitle())
-                .isEqualTo(SUBTITLE_TEXT_SELECT_NETWORK_TO_CONNECT_INTERNET);
+        assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_TEXT_TAP_A_NETWORK_TO_CONNECT);
     }
 
     @Test