[automerger skipped] [conflict] [RESTRICT AUTOMERGE] Restrict WifiDialogActivity am: aabb15de74 am: a71eb50f99 am: 2a9ea31fb5 -s ours am: a10cad4433 -s ours

am skip reason: contains skip directive

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/26131297

Change-Id: I1ba1c842165d3f1b4607139f482c7550f26e25ee
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6689645..df4ad39 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -658,7 +658,6 @@
         <activity android:name="Settings$FaceSettingsActivity"
             android:label="@string/security_settings_face_preference_title"
             android:exported="true"
-            android:configChanges="orientation|screenSize"
             android:icon="@drawable/ic_face_header">
             <intent-filter>
                 <action android:name="android.settings.FACE_SETTINGS" />
@@ -674,7 +673,6 @@
                   android:label="@string/security_settings_face_preference_title"
                   android:exported="false"
                   android:icon="@drawable/ic_face_header"
-                  android:configChanges="orientation|screenSize"
                   android:taskAffinity="com.android.settings.root">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.biometrics.face.FaceSettings" />
@@ -864,6 +862,7 @@
 
         <activity
             android:name="Settings$LongBackgroundTasksActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/long_background_tasks_label">
             <intent-filter android:priority="1">
@@ -1545,6 +1544,7 @@
 
         <activity
             android:name="Settings$ManageApplicationsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/applications_settings">
             <intent-filter android:priority="1">
@@ -1607,6 +1607,7 @@
 
         <activity
             android:name="Settings$HighPowerApplicationsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/high_power_apps">
             <intent-filter android:priority="1">
@@ -1665,6 +1666,7 @@
              This is for compatibility with old shortcuts. -->
         <activity-alias android:name=".RunningServices"
                 android:label="@string/runningservices_settings_title"
+                android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
                 android:exported="true"
                 android:targetActivity="Settings$ManageApplicationsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1677,6 +1679,7 @@
              This is for compatibility with old shortcuts. -->
         <activity-alias android:name=".applications.StorageUse"
                 android:label="@string/storageuse_settings_title"
+                android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
                 android:exported="true"
                 android:targetActivity="Settings$ManageApplicationsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1743,6 +1746,7 @@
         <!-- Provide direct entry into manage apps showing running services. -->
         <activity android:name="Settings$RunningServicesActivity"
                 android:exported="true"
+                android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
                 android:label="@string/runningservices_settings_title">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -1761,6 +1765,7 @@
         <!-- Provide direct entry into manage apps showing storage usage of apps. -->
         <activity
             android:name="Settings$StorageUseActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/storageuse_settings_title">
             <intent-filter android:priority="1">
@@ -2105,6 +2110,7 @@
 
         <activity
             android:name="Settings$UsageAccessSettingsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/usage_access_title">
             <intent-filter android:priority="1">
@@ -3483,6 +3489,7 @@
         <activity
             android:name="Settings$TurnScreenOnSettingsActivity"
             android:exported="true"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:label="@string/turn_screen_on_title">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.TURN_SCREEN_ON_SETTINGS" />
@@ -3662,6 +3669,7 @@
         <activity android:name="Settings$NotificationAppListActivity"
                   android:label="@string/app_notifications_title"
                   android:icon="@drawable/ic_notifications"
+                  android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
                   android:exported="true">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.ALL_APPS_NOTIFICATION_SETTINGS" />
@@ -3676,6 +3684,7 @@
         <!-- Displays a list of apps available for cloning on the device -->
         <activity android:name=".Settings$ClonedAppsListActivity"
                   android:label="@string/cloned_apps_dashboard_title"
+                  android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
                   android:exported="true">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.MANAGE_CLONED_APPS_SETTINGS" />
@@ -3748,6 +3757,7 @@
         <!-- Show regulatory info (from settings item or dialing "*#07#") -->
         <activity
             android:name="RegulatoryInfoDisplayActivity"
+            android:theme="@style/Theme.AlertDialog"
             android:label="@string/regulatory_labels"
             android:exported="true"
             android:enabled="@bool/config_show_regulatory_info">
@@ -3941,6 +3951,7 @@
 
         <activity
             android:name="Settings$OverlaySettingsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/draw_overlay">
             <intent-filter android:priority="1">
@@ -3978,6 +3989,7 @@
 
         <activity
             android:name="Settings$WriteSettingsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/write_settings_title">
             <intent-filter android:priority="1">
@@ -4011,6 +4023,7 @@
         <activity
             android:name="Settings$AlarmsAndRemindersActivity"
             android:exported="true"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:label="@string/alarms_and_reminders_label">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.REQUEST_SCHEDULE_EXACT_ALARM" />
@@ -4041,6 +4054,7 @@
 
         <activity
             android:name="Settings$ManageExternalSourcesActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/install_other_apps">
             <intent-filter android:priority="1">
@@ -4095,6 +4109,7 @@
 
         <activity
             android:name="Settings$ManageExternalStorageActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/manage_external_storage_title">
             <intent-filter android:priority="1">
@@ -4126,6 +4141,7 @@
 
         <activity
             android:name="Settings$MediaManagementAppsActivity"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="true"
             android:label="@string/media_management_apps_title">
             <intent-filter android:priority="1">
@@ -4881,6 +4897,7 @@
         <activity
             android:name=".spa.SpaActivity"
             android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize"
+            android:knownActivityEmbeddingCerts="@array/config_known_host_certs"
             android:exported="false" />
         <activity android:name=".spa.SpaBridgeActivity" android:exported="false"/>
         <activity android:name=".spa.SpaAppBridgeActivity" android:exported="false"/>
diff --git a/res/layout-land/udfps_enroll_enrolling.xml b/res/layout-land/udfps_enroll_enrolling.xml
deleted file mode 100644
index 743684f..0000000
--- a/res/layout-land/udfps_enroll_enrolling.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?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.
--->
-
-<com.google.android.setupdesign.GlifLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/setup_wizard_layout"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout="@layout/sud_glif_blank_template"
-    style="?attr/fingerprint_layout_theme">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="horizontal"
-        android:clipToPadding="false"
-        android:clipChildren="false">
-
-        <!-- Both texts are kept as separate text views so it doesn't jump around in portrait.
-            See layouts/fingerprint_enroll_enrolling_base.xml. -->
-        <LinearLayout
-            android:id="@+id/layout_container"
-            android:layout_width="0dp"
-            android:layout_weight="1"
-            android:layout_height="match_parent"
-            android:layout_marginStart="?attr/sudMarginStart"
-            android:layout_marginEnd="@dimen/enroll_margin_end"
-            android:layout_marginBottom="@dimen/sud_content_frame_padding_bottom"
-            android:paddingStart="@dimen/enroll_padding_start"
-            android:paddingEnd="@dimen/enroll_padding_end"
-            android:clipChildren="false"
-            android:clipToPadding="false"
-            android:orientation="vertical">
-
-            <ScrollView
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:clipChildren="false"
-                android:clipToPadding="false"
-                android:fillViewport="true">
-
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    android:clipChildren="false"
-                    android:clipToPadding="false">
-
-                    <ImageView
-                        android:id="@+id/sud_layout_icon"
-                        style="@style/SudGlifIcon"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:scaleType="fitStart"
-                        android:layout_marginStart="0dp"
-                        android:layout_marginEnd="0dp"
-                        android:src="@drawable/ic_lock" />
-
-                    <TextView
-                        android:id="@+id/suc_layout_title"
-                        style="@style/SudGlifHeaderTitle"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginStart="0dp"
-                        android:layout_marginEnd="0dp" />
-
-                    <TextView
-                        style="@style/SudDescription.Glif"
-                        android:id="@+id/sud_layout_subtitle"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"/>
-
-                    <Space
-                        android:layout_width="0dp"
-                        android:layout_height="0dp"
-                        android:layout_weight="1" />
-
-                </LinearLayout>
-
-            </ScrollView>
-
-        </LinearLayout>
-
-    </LinearLayout>
-
-    <include layout="@layout/udfps_enroll_view" />
-</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
diff --git a/res/layout/preference_external_action_icon.xml b/res/layout/preference_external_action_icon.xml
new file mode 100644
index 0000000..fcec430
--- /dev/null
+++ b/res/layout/preference_external_action_icon.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 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.
+-->
+
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_chevron_right_24dp"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_marginHorizontal="8dp" />
\ No newline at end of file
diff --git a/res/layout/udfps_enroll_enrolling.xml b/res/layout/udfps_enroll_enrolling.xml
index 05556ff..366a87c 100644
--- a/res/layout/udfps_enroll_enrolling.xml
+++ b/res/layout/udfps_enroll_enrolling.xml
@@ -15,7 +15,7 @@
   ~ limitations under the License.
   -->
 
-<com.google.android.setupdesign.GlifLayout
+<com.android.settings.biometrics.fingerprint.UdfpsEnrollEnrollingView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
@@ -78,4 +78,4 @@
       </LinearLayout>
     </LinearLayout>
 
-</com.google.android.setupdesign.GlifLayout>
+</com.android.settings.biometrics.fingerprint.UdfpsEnrollEnrollingView>
diff --git a/res/layout/udfps_enroll_view.xml b/res/layout/udfps_enroll_view.xml
index 6bf339b..bd62609 100644
--- a/res/layout/udfps_enroll_view.xml
+++ b/res/layout/udfps_enroll_view.xml
@@ -18,7 +18,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/udfps_animation_view"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:visibility="gone">
 
     <ImageView
         android:id="@+id/udfps_enroll_animation_fp_progress_view"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index cf591cb..1a4b6a0 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vee gesigmodel uit?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Jou gesigmodel sal permanent en veilig uitgevee word. \n\nNadat dit uitgevee is, sal jy jou PIN, patroon of wagwoord nodig hê om jou foon te ontsluit of vir stawing in apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Jou gesigmodel sal permanent en veilig uitgevee word. \n\nNadat dit uitgevee is, sal jy jou PIN, patroon of wagwoord nodig hê om jou foon te ontsluit."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Jou gesigmodel sal permanent en veilig uitgevee word.\n\nNadat dit uitgevee is, sal jy jou vingerafdruk, PIN, patroon of wagwoord nodig hê om jou foon te ontsluit of vir stawing in apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Jou gesigmodel sal permanent en veilig uitgevee word.\n\nNadat dit uitgevee is, sal jy jou vingerafdruk, PIN, patroon of wagwoord nodig hê om jou foon te ontsluit."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Gebruik Gesigslot om jou foon te ontsluit"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Vingerafdruk"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Vingerafdruk"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 5bfa185..a1a1604 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"የመልክ ሞዴል ይሰረዝ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"የእርስዎ የመልክ ሞዴል በቋሚነት እና ደህንነቱ በተጠበቀ ሁኔታ ይሰረዛል።\n\nከስረዛ በኋላ ስልክዎን ለመክፈት ወይም በመተግበሪያዎች ውስጥ ለማረጋገጥ የእርስዎ የጣት አሻራ፣ ፒን፣ ስርዓተ-ጥለት ወይም የይለፍ ቃል መጠቀም ይኖርብዎታል።"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"የእርስዎ የመልክ ሞዴል በቋሚነት እና ደህንነቱ በተጠበቀ መንገድ ይሰረዛል።\n\nከስረዛ በኋላ ስልክዎን ለመክፈት የእርስዎ ፒን፣ ስርዓተ-ጥለት ወይም የይለፍ ቃል ያስፈልገዎታል።"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"የእርስዎ የመልክ ሞዴል እስከመጨረሻው እና ደህንነቱ በተጠበቀ ሁኔታ ይሰረዛል።\n\nከስረዛ በኋላ ስልክዎን ለመክፈት ወይም በመተግበሪያዎች ውስጥ ለማረጋገጫ የእርስዎ የጣት አሻራ፣ ፒን፣ ስርዓተ-ጥለት ወይም የይለፍ ቃል ያስፈልግዎታል።"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"የእርስዎ የመልክ ሞዴል በቋሚነት እና ደህንነቱ በተጠበቀ ሁኔታ ይሰረዛል።\n\nከስረዛ በኋላ ስልክዎን ለመክፈት የእርስዎ የጣት አሻራ፣ ፒን፣ ስርዓተ-ጥለት ወይም የይለፍ ቃል ያስፈልግዎታል።"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"የእርስዎን ስልክ ለመክፈት በመልክ መክፈትን ይጠቀሙ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"የጣት አሻራ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"የጣት አሻራ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c9dab55..2cb3e57 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"هل تريد حذف نموذج الوجه؟"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"سيتم حذف نموذج الوجه نهائيًا وبأمان.\n\nبعد حذفه، ستحتاج إلى رقم التعريف الشخصي أو النقش أو كلمة المرور لفتح قفل هاتفك أو لعمليات المصادقة في التطبيقات."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"سيتم حذف نموذج الوجه نهائيًا وبأمان.\n\nبعد حذفه، ستحتاج إلى رقم التعريف الشخصي أو النقش أو كلمة المرور لفتح قفل الهاتف."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"سيتم حذف نموذج الوجه نهائيًا وبشكلٍ آمن.\n\nبعد حذفه، ستحتاج إلى بصمة الإصبع أو رقم التعريف الشخصي أو النقش أو كلمة المرور لفتح قفل هاتفك أو لعمليات المصادقة في التطبيقات."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"سيتم حذف نموذج الوجه نهائيًا وبأمان.\n\nبعد حذفه، ستحتاج إلى بصمة الإصبع أو رقم التعريف الشخصي أو النقش أو كلمة المرور لفتح قفل الهاتف."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"استخدام ميزة \"فتح الجهاز بالتعرف على الوجه\" لفتح قفل هاتفك"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"بصمة الإصبع"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"بصمة الإصبع"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index debd1fd..aa208a4 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"মুখাৱয়বৰ মডেলটো মচিবনে?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"আপোনাৰ মুখাৱয়বৰ মডেলটো স্থায়ী তথা সুৰক্ষিতভাৱে মচা হ’ব।\n\nমচাৰ পাছত নিজৰ ফ’নটো আনলক কৰিবলৈ অথবা এপত বিশ্বাসযোগ্যতা প্ৰমাণীকৰণৰ বাবে আপোনাক নিজৰ পিন, আৰ্হি অথবা পাছৱৰ্ডৰ প্ৰয়োজন হ’ব।"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"আপোনাৰ মুখাৱয়বৰ মডেলটো স্থায়ী তথা সুৰক্ষিতভাৱে মচা হ’ব।\n\nমচাৰ পাছত, ফ’নটো আনলক কৰিবলৈ আপোনাক নিজৰ পিন, আৰ্হি অথবা পাছৱৰ্ডৰ প্ৰয়োজন হ’ব।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"আপোনাৰ মুখাৱয়বৰ মডেলটো স্থায়ী তথা সুৰক্ষিতভাৱে মচা হ’ব।\n\nমচাৰ পাছত, নিজৰ ফ’নটো আনলক কৰিবলৈ অথবা এপত বিশ্বাসযোগ্যতা প্ৰমাণীকৰণৰ বাবে আপোনাক নিজৰ ফিংগাৰপ্ৰিণ্ট, পিন, আৰ্হি অথবা পাছৱৰ্ডৰ প্ৰয়োজন হ’ব।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"আপোনাৰ মুখাৱয়বৰ ম’ডেলটো স্থায়ী তথা সুৰক্ষিতভাৱে মচা হ’ব।\n\nমচাৰ পাছত, ফ’নটো আনলক কৰিবলৈ আপোনাক নিজৰ ফিংগাৰপ্ৰিণ্ট, পিন, আৰ্হি অথবা পাছৱৰ্ডৰ প্ৰয়োজন হ’ব।"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"আপোনাৰ ফ’নটো আনলক কৰিবলৈ ফেচ আনলক ব্যৱহাৰ কৰক"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ফিংগাৰপ্ৰিণ্ট"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ফিংগাৰপ্ৰিণ্ট"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index cefcbe4..5445b94 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Üz modeli silinsin?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Üz modeliniz həmişəlik və təhlükəsiz qaydada silinəcək. \n\nSildikdən sonra telefonunuzu kiliddən çıxarmaq, yaxud tətbiqlərdə əsllik yoxlaması üçün PIN\'iniz, modeliniz və ya parolunuz tələb ediləcək."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Üz modeliniz həmişəlik və təhlükəsiz qaydada silinəcək.\n\nSilindikdən sonra telefonu kiliddən çıxarmaq üçün PIN, model və ya parol tələb ediləcək."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Üz modeli həmişəlik və təhlükəsiz qaydada silinəcək.\n\nSildikdən sonra telefonu kiliddən çıxarmaq, yaxud tətbiqlərdə əsllik yoxlaması üçün barmaq izi, PIN, model və ya parol tələb ediləcək."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Üz modeli həmişəlik və təhlükəsiz qaydada silinəcək.\n\nSildikdən sonra telefonu kiliddən çıxarmaq üçün barmaq izi, PIN, model və ya parol tələb ediləcək."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Telefonu kiliddən çıxarmaq üçün Üz ilə kiliddən çıxarmadan istifadə edin"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Barmaq izi"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Barmaq izi"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 8406950..002cd13 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Želite da izbrišete model lica?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model lica će se trajno i bezbedno izbrisati.\n\nPosle brisanja vam treba PIN, šablon ili lozinka da biste otključali telefon ili za potvrdu identiteta u aplikacijama."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model lica će biti trajno i bezbedno izbrisan.\n\nPosle brisanja vam treba PIN, šablon ili lozinka da biste otključali telefon."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model lica će se trajno i bezbedno izbrisati.\n\nPosle brisanja treba vam otisak prsta, PIN, šablon ili lozinka da biste otključali telefon ili za potvrdu identiteta u aplikacijama."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model lica će biti trajno i bezbedno izbrisan.\n\nPosle brisanja vam treba otisak prsta, PIN, šablon ili lozinka da biste otključali telefon."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Otključajte telefon licem"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Otisak prsta"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Otisak prsta"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 97d74f3..d529dd9 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Выдаліць мадэль твару?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Мадэль вашага твару будзе канчаткова і бяспечна выдалена.\n\nПасля гэтага для разблакіроўкі тэлефона ці аўтэнтыфікацыі ў праграмах трэба будзе выкарыстоўваць PIN-код, узор разблакіроўкі ці пароль."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Мадэль вашага твару будзе канчаткова і бяспечна выдалена.\n\nПасля гэтага для разблакіроўкі тэлефона трэба будзе выкарыстоўваць PIN-код, узор разблакіроўкі ці пароль."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Мадэль вашага твару будзе канчаткова і бяспечна выдалена.\n\nПасля гэтага для разблакіроўкі тэлефона і аўтэнтыфікацыі ў праграмах трэба будзе выкарыстоўваць адбітак пальца, PIN-код, узор разблакіроўкі ці пароль."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Мадэль вашага твару будзе канчаткова і бяспечна выдалена.\n\nПасля гэтага для разблакіроўкі тэлефона трэба будзе выкарыстоўваць адбітак пальца, PIN-код, узор разблакіроўкі ці пароль."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Выкарыстанне функцыі распазнавання твару для разблакіроўкі тэлефона"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Адбітак пальца"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Адбітак пальца"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e4cc782..bf15e2e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Да се изтрие ли моделът на лицето?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Моделът на лицето ви ще бъде изтрит надеждно и за постоянно.\n\nСлед това ще имате нужда от ПИН кода, фигурата или паролата си, за да отключвате телефона или за удостоверяване в приложенията."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Моделът на лицето ви ще бъде изтрит надеждно и за постоянно.\n\nСлед това ще имате нужда от ПИН кода, фигурата или паролата си, за да отключвате телефона си."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Моделът на лицето ви ще бъде изтрит надеждно и за постоянно.\n\nСлед това ще имате нужда от отпечатъка, ПИН кода, фигурата или паролата си, за да отключвате телефона и за удостоверяване в приложения."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Моделът на лицето ви ще бъде изтрит надеждно и за постоянно.\n\nСлед това ще имате нужда от отпечатъка, ПИН кода, фигурата или паролата си, за да отключвате телефона си."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Използвайте функцията „Отключване с лице“, за да отключвате телефона си"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Отпечатък"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Отпечатък"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 95bfdda..e5d72cf 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ফেস মডেল মুছে ফেলতে চান?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"আপনার ফেস মডেল স্থায়ীভাবে এবং নিরাপদে মুছে ফেলা হবে।\n\nমুছে ফেলার পরে, আপনার ফোন আনলক করতে বা অ্যাপে যাচাইকরণের জন্য আপনার পিন, প্যাটার্ন বা পাসওয়ার্ড প্রয়োজন হবে।"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"আপনার ফেস মডেল স্থায়ীভাবে এবং নিরাপদে মুছে ফেলা হবে।\n\nমুছে ফেলার পরে, আপনার ফোন আনলক করতে পিন, প্যাটার্ন বা পাসওয়ার্ড প্রয়োজন হবে।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"আপনার ফেস মডেল স্থায়ীভাবে এবং নিরাপদে মুছে ফেলা হবে।\n\nমুছে ফেলার পরে, আপনার ফোন আনলক বা অ্যাপে যাচাইকরণ করার জন্য আপনার ফিঙ্গারপ্রিন্ট, পিন, প্যাটার্ন বা পাসওয়ার্ড প্রয়োজন হবে।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"আপনার ফেস মডেল স্থায়ীভাবে এবং নিরাপদে মুছে ফেলা হবে।\n\nমুছে ফেলার পরে, আপনার ফোন আনলক করতে, ফিঙ্গারপ্রিন্ট, পিন, প্যাটার্ন বা পাসওয়ার্ড প্রয়োজন হবে।"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"আপনার ফোন আনলক করার জন্য \'ফেস আনলক\' ব্যবহার করুন"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ফিঙ্গারপ্রিন্ট"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"আঙ্গুলের ছাপ"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 5572c43..85569ac 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Izbrisati model lica?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model lica će se trajno i sigurno izbrisati.\n\nNakon brisanja će vam za otključavanje telefona ili autentifikaciju u aplikacijama trebati PIN, uzorak ili lozinka."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model lica će se trajno i sigurno izbrisati.\n\nNakon brisanja će vam za otključavanje telefona trebati PIN, uzorak ili lozinka."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model lica će se trajno i sigurno izbrisati.\n\nNakon brisanja će vam trebati otisak prsta, PIN, uzorak ili lozinka da otključate telefon ili izvršite autentifikaciju u aplikacijama."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model lica će se trajno i sigurno izbrisati.\n\nNakon brisanja će vam trebati otisak prsta, PIN, uzorak ili lozinka da otključate telefon."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Otključajte telefon pomoću otključavanja licem"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Otisak prsta"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Otisak prsta"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 98a6264..156f100 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vols suprimir el model facial?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Se suprimirà el teu model facial de manera permanent i segura.\n\nDesprés de suprimir-lo, necessitaràs un PIN, un patró o una contrasenya per desbloquejar el teu telèfon o per a l\'autenticació en aplicacions."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Se suprimirà el teu model facial de manera permanent i segura.\n\nDesprés de suprimir-lo, necessitaràs un PIN, un patró o una contrasenya per desbloquejar el teu telèfon."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Se suprimirà el teu model facial de manera permanent i segura.\n\nDesprés de suprimir-lo, necessitaràs l\'empremta digital, un PIN, un patró o una contrasenya per desbloquejar el telèfon o per a l\'autenticació en aplicacions."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Se suprimirà el teu model facial de manera permanent i segura.\n\nDesprés de suprimir-lo, necessitaràs l\'empremta digital, un PIN, un patró o una contrasenya per desbloquejar el telèfon."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Utilitza Desbloqueig facial per desbloquejar el telèfon"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Empremta digital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Empremta digital"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7552d4e..044a013 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Smazat model obličeje?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model obličeje bude trvale a bezpečně smazán.\n\nPo smazání budete k odemykání telefonu a ověřování v aplikacích používat PIN, gesto nebo heslo."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model obličeje bude trvale a bezpečně smazán.\n\nPo smazání budete k odemknutí telefonu potřebovat PIN, gesto nebo heslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model obličeje bude trvale a bezpečně smazán.\n\nPo smazání budete k odemykání telefonu a ověřování v aplikacích používat otisk prstu, PIN, gesto nebo heslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model obličeje bude trvale a bezpečně smazán.\n\nPo smazání budete k odemknutí telefonu potřebovat PIN, gesto nebo heslo."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Odemykejte telefon pomocí obličeje"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Otisk prstu"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Otisk prstu"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a7306b8..0378b2f 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Skal ansigtsmodellen slettes?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge din pinkode, dit mønster eller din adgangskode til at låse din telefon op eller til godkendelse i apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge din pinkode, dit mønster eller din adgangskode til at låse din telefon op."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge dit fingeraftryk, din pinkode, dit mønster eller din adgangskode til at låse din telefon op eller til godkendelse i apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge dit fingeraftryk, din pinkode, dit mønster eller din adgangskode til at låse din telefon op."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Brug ansigtsoplåsning til at låse din telefon op"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingeraftryk"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingeraftryk"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index b6d5316..e8d6cad 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Gesichtsmodell löschen?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Dein Gesichtsmodell wird dauerhaft und sicher gelöscht.\n\nNach dem Löschen benötigst du deine PIN, dein Muster oder dein Passwort, um dein Smartphone zu entsperren und dich in Apps zu authentifizieren."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Dein Gesichtsmodell wird dauerhaft und sicher gelöscht.\n\nNach dem Löschen benötigst du deine PIN, dein Muster oder dein Passwort, um dein Smartphone zu entsperren."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Dein Gesichtsmodell wird dauerhaft und sicher gelöscht.\n\nNach dem Löschen benötigst du deinen Fingerabdruck, deine PIN, dein Muster oder dein Passwort, um dein Smartphone zu entsperren oder dich in Apps zu authentifizieren."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Dein Gesichtsmodell wird dauerhaft und sicher gelöscht.\n\nNach dem Löschen benötigst du deinen Fingerabdruck, deine PIN, dein Muster oder dein Passwort, um dein Smartphone zu entsperren."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Verwende die Entsperrung per Gesichtserkennung, um dein Smartphone zu entsperren"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerabdruck"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerabdruck"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 513ea13..53a9de6 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Διαγραφή μοντέλου προσώπου;"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Το μοντέλο προσώπου θα διαγραφεί οριστικά και με ασφάλεια.\n\nΜετά τη διαγραφή, θα χρειαστείτε το PIN, το μοτίβο ή τον κωδικό πρόσβασης για να ξεκλειδώσετε το τηλέφωνό σας ή για τον έλεγχο ταυτότητας σε εφαρμογές."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Το μοντέλο προσώπου θα διαγραφεί οριστικά και με ασφάλεια.\n\nΜετά τη διαγραφή, θα χρειαστείτε το PIN, το μοτίβο ή τον κωδικό πρόσβασης για να ξεκλειδώσετε το τηλέφωνό σας."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Το μοντέλο προσώπου σας θα διαγραφεί οριστικά και με ασφάλεια.\n\nΜετά τη διαγραφή, θα χρειαστείτε το δακτυλικό σας αποτύπωμα, το PIN, το μοτίβο ή τον κωδικό πρόσβασης για να ξεκλειδώσετε το τηλέφωνό σας ή για τον έλεγχο ταυτότητας σε εφαρμογές."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Το μοντέλο προσώπου θα διαγραφεί οριστικά και με ασφάλεια.\n\nΜετά τη διαγραφή, θα χρειαστείτε το δακτυλικό αποτύπωμα, το PIN, το μοτίβο ή τον κωδικό πρόσβασης για να ξεκλειδώσετε το τηλέφωνό σας."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Χρησιμοποιήστε τη λειτουργία Ξεκλείδωμα με το πρόσωπο για το ξεκλείδωμα του τηλεφώνου σας."</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Δακτυλικό αποτύπωμα"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Δακτυλικό αποτύπωμα"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index e827e64..5edd160 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Delete face model?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Your 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>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern or password to unlock your phone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"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>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"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."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Use Face Unlock to unlock your phone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerprint"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerprint"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 9ea4335..cbc8160 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Delete face model?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Your 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>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"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>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"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."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Use Face Unlock to unlock your phone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerprint"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerprint"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6b63b83..72fda4b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Delete face model?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Your 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>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern or password to unlock your phone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"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>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"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."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Use Face Unlock to unlock your phone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerprint"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerprint"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index de1f3a2..ffdefe3 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Delete face model?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Your 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>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern or password to unlock your phone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"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>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"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."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Use Face Unlock to unlock your phone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerprint"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerprint"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 5417e05..8f40e58 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎Delete face model?‎‏‎‎‏‎"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎Your face model will be permanently and securely deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.‎‏‎‎‏‎"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎Your face model will be permanently and securely deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After deletion, you will need your PIN, pattern, or password to unlock your phone.‎‏‎‎‏‎"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎Your face model will be permanently and securely deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone or for authentication in apps.‎‏‎‎‏‎"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎Your face model will be permanently and securely deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone.‎‏‎‎‏‎"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎Use Face Unlock to unlock your phone‎‏‎‎‏‎"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎Fingerprint‎‏‎‎‏‎"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎Fingerprint‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 96e1e0c..015985e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"¿Deseas borrar el modelo de rostro?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Se borrará tu modelo de rostro de forma permanente y segura.\n\nLuego de la eliminación, deberás ingresar tu PIN, patrón o contraseña para desbloquear el teléfono o autenticarte en apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Se borrará tu modelo de rostro de forma permanente y segura.\n\nLuego de la eliminación, deberás usar tu PIN, patrón o contraseña para desbloquear el teléfono."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Se borrará tu modelo de rostro de forma permanente y segura.\n\nLuego de que se borre, deberás ingresar tu huella dactilar, PIN, patrón o contraseña para desbloquear el teléfono o autenticarte en apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Se borrará tu modelo de rostro de forma permanente y segura.\n\nLuego de la eliminación, deberás usar tu huella dactilar, PIN, patrón o contraseña para desbloquear el teléfono."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usa Desbloqueo facial para desbloquear el teléfono"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Huella dactilar"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Huella dactilar"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3c3b806..9458b33 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"¿Eliminar modelo facial?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Tu modelo facial se eliminará de forma permanente y segura.\n\nUna vez eliminado, necesitarás tu PIN, patrón o contraseña para desbloquear tu teléfono o para autenticarte en aplicaciones."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Tu modelo facial se eliminará de forma permanente y segura.\n\nUna vez eliminado, necesitarás tu PIN, patrón o contraseña para desbloquear tu teléfono."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Tu modelo facial se eliminará de forma permanente y segura.\n\nUna vez eliminado, necesitarás tu huella digital, PIN, patrón o contraseña para desbloquear tu teléfono o autenticarte en aplicaciones."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Tu modelo facial se eliminará de forma permanente y segura.\n\nUna vez eliminado, necesitarás tu huella digital, PIN, patrón o contraseña para desbloquear tu teléfono."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usa Desbloqueo facial para desbloquear el teléfono"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Huella digital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Huella digital"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 4301935..e0a3e91 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Kas kustutada näomudel?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Teie näomudel kustutatakse jäädavalt ja turvaliselt.\n\nPärast kustutamist vajate telefoni avamiseks või rakendustes autentimiseks PIN-koodi, mustrit või parooli."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Teie näomudel kustutatakse jäädavalt ja turvaliselt.\n\nPärast kustutamist vajate telefoni avamiseks PIN-koodi, mustrit või parooli."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Teie näomudel kustutatakse jäädavalt ja turvaliselt.\n\nPärast kustutamist vajate telefoni avamiseks või rakendustes autentimiseks sõrmejälge, PIN-koodi, mustrit või parooli."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Teie näomudel kustutatakse jäädavalt ja turvaliselt.\n\nPärast kustutamist vajate telefoni avamiseks sõrmejälge, PIN-koodi, mustrit või parooli."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Kasutage oma telefoni avamiseks näoga avamise funktsiooni"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Sõrmejälg"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Sõrmejälg"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 66680ae..f29b01e 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Aurpegi-eredua ezabatu nahi duzu?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Aurpegi-eredua modu seguruan eta betiko ezabatuko da.\n\nHorren ondoren, PINa, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko edo aplikazioetan autentifikatzeko."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Aurpegi-eredua betiko eta modu seguruan ezabatuko da.\n\nEzabatu ondoren, hatz-marka, PINa, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Aurpegi-eredua modu seguruan eta betiko ezabatuko da.\n\nHorren ondoren, hatz-marka, PINa, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko edo aplikazioetan autentifikatzeko."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Aurpegi-eredua betiko eta modu seguruan ezabatuko da.\n\nEzabatu ondoren, hatz-marka, PINa, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Erabili aurpegi bidez desblokeatzeko eginbidea telefonoa desblokeatzeko"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Hatz-marka"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Hatz-marka digitala"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 67be2a9..9e92498 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"مدل چهره حذف شود؟"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"مدل چهره‌تان به‌طور دائم و ایمن حذف خواهد شد.\n\nپس‌از حذف، برای باز کردن قفل تلفن یا اصالت‌سنجی در برنامه‌ها به پین، الگو، یا گذرواژه نیاز خواهید داشت."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"مدل چهره شما به‌طور دائم و ایمن حذف خواهد شد.\n\n پس‌از حذف، برای باز کردن قفل تلفن به پین، الگو، یا گذرواژه نیاز خواهید داشت."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"مدل چهره شما به‌صورت دائم و ایمن حذف خواهد شد.\n\nپس‌از حذف، برای باز کردن قفل تلفنتان یا اصالت‌سنجی در برنامه‌ها به اثر انگشت، پین، الگو، یا گذرواژه نیاز خواهید داشت."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"مدل چهره شما به‌صورت دائم و ایمن حذف خواهد شد.\n\nپس‌از حذف، برای باز کردن قفل تلفنتان به اثر انگشت، پین، الگو، یا گذرواژه نیاز خواهید داشت."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"استفاده از «قفل‌گشایی با چهره» برای باز کردن قفل تلفن"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"اثر انگشت"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"اثر انگشت"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 907c487..21a8c01 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Poistetaanko kasvomalli?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Kasvomalli poistetaan pysyvästi ja turvallisesti.\n\nPoistamisen jälkeen tarvitset sormenjälkeä, PIN-koodia, kuviota tai salasanaa puhelimen lukituksen avaamiseen tai sovelluksissa todentamiseen."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Kasvomalli poistetaan pysyvästi ja turvallisesti.\n\nPoistamisen jälkeen tarvitset PIN-koodia, kuviota tai salasanaa puhelimen lukituksen avaamiseen."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Kasvomalli poistetaan pysyvästi ja turvallisesti.\n\nPoistamisen jälkeen tarvitset sormenjälkeä, PIN-koodia, kuviota tai salasanaa puhelimen lukituksen avaamiseen tai sovelluksessa todentamiseen."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Kasvomalli poistetaan pysyvästi ja turvallisesti.\n\nPoistamisen jälkeen tarvitset sormenjälkeä, PIN-koodia, kuviota tai salasanaa puhelimen lukituksen avaamiseen."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Avaa puhelimen lukitus kasvojentunnistusavauksella"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Sormenjälki"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Sormenjälki"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index bb20d8b..e82d691 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Supprimer le modèle facial?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Votre modèle facial sera supprimé définitivement de façon sécurisée.\n\nVous devrez ensuite utiliser votre NIP, votre schéma ou votre mot de passe pour déverrouiller votre téléphone ou pour vous authentifier dans les applications."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Votre modèle facial sera supprimé de façon permanente et sécurisée.\n\nPour déverrouiller votre téléphone, vous aurez ensuite besoin de ce qui suit : NIP, schéma ou mot de passe."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Votre modèle facial sera supprimé définitivement de façon sécurisée.\n\nVous devrez ensuite utiliser votre empreinte digitale, votre NIP, votre schéma ou votre mot de passe pour déverrouiller votre téléphone ou pour vous authentifier dans les applications."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Votre modèle facial sera supprimé de façon permanente et sécurisée.\n\nVous devrez ensuite utiliser votre empreinte digitale, votre NIP, votre schéma ou votre mot de passe pour déverrouiller votre téléphone."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Utilisez le déverrouillage par reconnaissance faciale pour déverrouiller votre téléphone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Empreinte digitale"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Empreintes digitales"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 9ece053..9cda5ca6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Supprimer l\'empreinte faciale ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Votre empreinte faciale sera supprimée de façon définitive et sécurisée.\n\nVous devrez ensuite utiliser un code, un schéma ou un mot de passe pour déverrouiller votre téléphone ou pour vous authentifier dans les applis."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Votre empreinte faciale sera supprimée de façon définitive et sécurisée.\n\nVous aurez alors besoin de votre code, schéma ou mot de passe pour déverrouiller votre téléphone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Votre empreinte faciale sera supprimée définitivement de façon sécurisée.\n\n Vous devrez ensuite utiliser votre empreinte digitale, un code, un schéma ou un mot de passe pour déverrouiller votre téléphone ou pour vous authentifier dans les applis."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Votre empreinte faciale sera supprimée définitivement de façon sécurisée.\n\nVous devrez ensuite utiliser votre empreinte digitale, un code, un schéma ou un mot de passe pour déverrouiller votre téléphone."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Déverrouillez votre téléphone par reconnaissance faciale"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Empreinte digitale"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Empreinte digitale"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index f384bae..91acf72 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Queres eliminar o modelo facial?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"O teu modelo facial eliminarase de xeito seguro e permanente.\n\nUnha vez eliminado, terás que usar o PIN, o padrón ou o contrasinal para desbloquear o teléfono ou para autenticarte nas aplicacións."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"O teu modelo facial eliminarase de xeito seguro e permanente.\n\nUnha vez eliminado, terás que usar o PIN, o padrón ou o contrasinal para desbloquear o teléfono."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"O teu modelo facial eliminarase de xeito seguro e permanente.\n\nUnha vez eliminado, terás que usar a impresión dixital, o PIN, o padrón ou o contrasinal para desbloquear o teléfono ou autenticarte nas aplicacións."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"O teu modelo facial eliminarase de xeito seguro e permanente.\n\nUnha vez eliminado, terás que usar a impresión dixital, o PIN, o padrón ou o contrasinal para desbloquear o teléfono."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usa o desbloqueo facial para desbloquear o teléfono"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Impresión dixital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Impresión dixital"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 1b6ded6..226f2a7 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"શું ચહેરાનું મૉડલ ડિલીટ કરીએ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"તમારા ચહેરાનું મૉડલ કાયમ માટે અને સુરક્ષિત રીતે ડિલીટ કરવામાં આવશે.\n\nડિલીટ કર્યા પછી, તમારો ફોન અનલૉક કરવા કે ઍપમાં પ્રમાણીકરણ માટે, તમને તમારા પિન, પૅટર્ન કે પાસવર્ડની જરૂર રહેશે."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"તમારા ચહેરાનું મૉડલ કાયમ માટે અને સુરક્ષિત રીતે ડિલીટ કરવામાં આવશે.\n\nડિલીટ કર્યા પછી, તમારો ફોન અનલૉક કરવા માટે, તમને તમારા પિન, પૅટર્ન કે પાસવર્ડની જરૂર રહેશે."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"તમારા ચહેરાનું મૉડલ કાયમ માટે અને સુરક્ષિત રીતે ડિલીટ કરવામાં આવશે.\n\nડિલીટ કર્યા પછી, તમારો ફોન અનલૉક કરવા કે ઍપમાં પ્રમાણીકરણ માટે, તમને તમારી ફિંગરપ્રિન્ટ, પિન, પૅટર્ન કે પાસવર્ડની જરૂર પડશે."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"તમારા ચહેરાનું મૉડલ કાયમ માટે અને સુરક્ષિત રીતે ડિલીટ કરવામાં આવશે.\n\nડિલીટ કર્યા પછી, તમારો ફોન અનલૉક કરવા માટે, તમને તમારી ફિંગરપ્રિન્ટ, પિન, પૅટર્ન કે પાસવર્ડની જરૂર પડશે."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"તમારા ફોનને અનલૉક કરવા માટે ફેસ અનલૉક સુવિધાનો ઉપયોગ કરો"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ફિંગરપ્રિન્ટ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ફિંગરપ્રિન્ટ"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0d2438b..e870812 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"क्या आपको चेहरे का मॉडल मिटाना है?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"आपके चेहरे का मॉडल सुरक्षित तरीके से हमेशा के लिए मिटा दिया जाएगा.\n\nइसके मिटने के बाद, अपने फ़ोन को अनलॉक करने या ऐप्लिकेशन में अपनी पहचान की पुष्टि करने के लिए, आपको पिन, पैटर्न या पासवर्ड का इस्तेमाल करना होगा."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"आपके चेहरे का मॉडल सुरक्षित तरीके से हमेशा के लिए मिटा दिया जाएगा.\n\nइसके मिटने के बाद, अपने फ़ोन को अनलॉक करने के लिए, आपको पिन, पैटर्न या पासवर्ड का इस्तेमाल करना होगा."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"आपके चेहरे का मॉडल सुरक्षित तरीके से हमेशा के लिए मिटा दिया जाएगा.\n\nइसके मिटने के बाद, अपने फ़ोन को अनलॉक करने या किसी ऐप्लिकेशन का इस्तेमाल करने के दौरान पुष्टि के लिए, आपको फ़िंगरप्रिंट, पिन, पैटर्न या पासवर्ड का इस्तेमाल करना होगा."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"आपके चेहरे का मॉडल सुरक्षित तरीके से हमेशा के लिए मिटा दिया जाएगा.\n\nइसके मिटने के बाद, अपने फ़ोन को अनलॉक करने के लिए, आपको पिन, पैटर्न या पासवर्ड का इस्तेमाल करना होगा."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"फ़ोन अनलॉक करने के लिए, फ़ेस अनलॉक की सुविधा का इस्तेमाल करें"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"फ़िंगरप्रिंट"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"उंगली की छाप"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 897bcaf..0664655 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Želite li izbrisati model lica?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Vaš model lica trajno će se i sigurno izbrisati.\n\nNakon brisanja trebat će vam PIN, uzorak ili zaporka da biste otključali telefon ili izvršili autentifikaciju u aplikacijama."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model lica trajno će se i sigurno izbrisati.\n\nNakon brisanja trebat će vam PIN, uzorak ili zaporka da biste otključali telefon."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Vaš model lica izbrisat će se trajno i sigurno.\n\nNakon brisanja trebat će vam otisak prsta, PIN, uzorak ili zaporka da biste otključali telefon ili za autentifikaciju u aplikacijama."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model lica trajno će se i sigurno izbrisati.\n\nNakon brisanja trebat će vam otisak prsta, PIN, uzorak ili zaporka kako biste otključali telefon."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Otključajte telefon licem"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Otisak prsta"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Otisak prsta"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 35ddc67..607bd50 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Törli az arcmodellt?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Arcmodelljét véglegesen és biztonságosan töröljük.\n\nA törlés után PIN-kódot, mintát vagy jelszót kell használnia a telefon zárolásának feloldásához és az alkalmazásokban történő hitelesítéshez."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Arcmodelljét véglegesen és biztonságosan töröljük.\n\nAz eltávolítás után PIN-kódra, mintára vagy jelszóra lesz szüksége a telefon feloldásához."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Arcmodelljét véglegesen és biztonságosan töröljük.\n\nA törlés után ujjlenyomatot, PIN-kódot, mintát vagy jelszót kell használnia a telefon zárolásának feloldásához és az alkalmazásokban történő hitelesítéshez."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Arcmodelljét véglegesen és biztonságosan töröljük.\n\nAz eltávolítás után PIN-kódot, mintát vagy jelszót kell használnia a telefon zárolásának feloldásához."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"A telefon feloldásához használja az Arcalapú feloldást"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Ujjlenyomat"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Ujjlenyomat"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 5ca93fa..7c86dee 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Ջնջե՞լ դեմքի նմուշը"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Ձեր դեմքի նմուշն ընդմիշտ կջնջվի և ոչ մի տեղ չի պահվի։\n\nՋնջելուց հետո հեռախոսը ապակողպելու և հավելվածներ մուտք գործելու համար անհրաժեշտ կլինի ձեր PIN կոդը, նախշը կամ գաղտնաբառը։"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Ձեր դեմքի նմուշն ընդմիշտ կջնջվի և ոչ մի տեղ չի պահվի։\n\nՋնջելուց հետո հեռախոսը ապակողպելու համար անհրաժեշտ կլինի ձեր PIN կոդը, նախշը կամ գաղտնաբառը։"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Ձեր դեմքի նմուշն ընդմիշտ կջնջվի և ոչ մի տեղ չի պահվի։\n\nՋնջելուց հետո հեռախոսը ապակողպելու և հավելվածներ մուտք գործելու համար անհրաժեշտ կլինի ձեր մատնահետքը, PIN կոդը, նախշը կամ գաղտնաբառը։"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Ձեր դեմքի նմուշն ընդմիշտ կջնջվի և ոչ մի տեղ չի պահվի։\n\nՋնջելուց հետո հեռախոսը ապակողպելու համար անհրաժեշտ կլինի ձեր մատնահետքը, PIN կոդը, նախշը կամ գաղտնաբառը։"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Օգտագործեք դեմքով ապակողպումը՝ հեռախոսն ապակողպելու համար"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Մատնահետք"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Մատնահետք"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 48d887f..be1bb40 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Hapus model wajah?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model wajah Anda akan dihapus secara permanen dan aman.\n\nSetelah penghapusan, Anda akan memerlukan PIN, pola, atau sandi untuk membuka kunci ponsel atau untuk tujuan autentikasi dalam aplikasi."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model wajah Anda akan dihapus secara permanen dan aman.\n\nSetelah dihapus, Anda akan memerlukan PIN, pola, atau sandi untuk membuka kunci ponsel."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model wajah Anda akan dihapus secara permanen dan aman.\n\nSetelah dihapus, Anda akan memerlukan sidik jari, PIN, pola, atau sandi untuk membuka kunci ponsel atau untuk autentikasi dalam aplikasi."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model wajah Anda akan dihapus secara permanen dan aman.\n\nSetelah dihapus, Anda akan memerlukan sidik jari, PIN, pola, atau sandi untuk membuka kunci ponsel."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Gunakan Buka dengan Wajah untuk membuka kunci ponsel Anda"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Sidik jari"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Sidik jari"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 4d3d225..2924efa 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Eyða andlitslíkani?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Andlitslíkaninu þínu verður eytt endanlega á öruggan hátt.\n\nÞegar búið er að eyða því þarftu PIN-númer, mynstur eða aðgangsorð til að taka símann úr lás eða til að auðkenna þig í forritum."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Andlitslíkaninu þínu verður eytt endanlega á öruggan hátt.\n\nÞegar búið er að eyða því þarftu PIN-númer, mynstur eða aðgangsorð til að taka símann úr lás."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Andlitslíkaninu þínu verður eytt endanlega á öruggan hátt.\n\nÞegar búið er að eyða því þarftu að nota fingrafar, PIN-númer, mynstur eða aðgangsorð til að taka símann úr lás eða til að auðkenna þig í forritum."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Andlitslíkaninu þínu verður eytt endanlega á öruggan hátt.\n\nÞegar búið er að eyða því þarftu að nota fingrafar, PIN-númer, mynstur eða aðgangsorð til að taka símann úr lás."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Notaðu andlitskenni til að taka símann úr lás"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingrafar"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingrafar"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 467e6b8..7b3104e 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Eliminare il modello del volto?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare il PIN, la sequenza o la password per sbloccare lo smartphone o eseguire l\'autenticazione nelle app."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare il PIN, la sequenza o la password per sbloccare il telefono."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare l\'impronta, il PIN, la sequenza o la password per sbloccare lo smartphone o eseguire l\'autenticazione nelle app."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare l\'impronta, il PIN, la sequenza o la password per sbloccare lo smartphone."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usa lo Sblocco con il Volto per sbloccare il tuo telefono"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Impronta"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Impronta"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index c9c1449..aa26b54 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"למחוק את התבנית לזיהוי הפנים?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"התבנית לזיהוי הפנים תימחק באופן סופי ומאובטח.\n\nלאחר המחיקה, יהיה צורך בקוד האימות, בקו ביטול הנעילה או בסיסמה שלך כדי לבטל את נעילת הטלפון או כדי לבצע אימות באפליקציות."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"התבנית לזיהוי הפנים שלך תימחק באופן סופי ומאובטח.\n\nלאחר המחיקה, יהיה צורך בקוד האימות, בקו ביטול הנעילה או בסיסמה שלך כדי לבטל את נעילת הטלפון."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"התבנית לזיהוי הפנים תימחק באופן סופי ומאובטח.\n\nלאחר המחיקה, יהיה צורך בטביעת האצבע, בקוד האימות, בקו ביטול הנעילה או בסיסמה שלך כדי לבטל את נעילת הטלפון או כדי לבצע אימות באפליקציות."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"התבנית לזיהוי הפנים תימחק באופן סופי ומאובטח.\n\nלאחר המחיקה, יהיה צורך בטביעת האצבע, בקוד האימות, בקו ביטול הנעילה או בסיסמה שלך כדי לבטל את נעילת הטלפון."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"שימוש בפתיחה ע\"י זיהוי הפנים לצורך ביטול הנעילה של הטלפון"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"טביעת אצבע"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"טביעת אצבע"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index e580679..54f29d3 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"顔モデルを削除しますか?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"顔モデルは安全かつ完全に削除されます。\n\n削除後に、スマートフォンのロック解除やアプリでの認証を行うには、PIN、パターン、パスワードのいずれかが必要になります。"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"顔モデルは安全かつ完全に削除されます。\n\n削除後に、スマートフォンのロックを解除するには、PIN、パターン、パスワードのいずれかが必要になります。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"顔モデルは安全かつ完全に削除されます。\n\n削除後に、スマートフォンのロック解除やアプリでの認証を行うには、指紋、PIN、パターン、パスワードのいずれかが必要になります。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"顔モデルは安全かつ完全に削除されます。\n\n削除後に、スマートフォンのロックを解除するには、指紋、PIN、パターン、パスワードのいずれかが必要になります。"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"顔認証を使用して、スマートフォンのロックを解除します"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"指紋"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"指紋"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index d77bf81..9dcba46 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"გსურთ სახის მოდელის წაშლა?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"თქვენი სახის მოდელი სამუდამოდ და უსაფრთხოდ წაიშლება.\n\nწაშლის შემდეგ ტელეფონის განბლოკვის ან აპებში ავტორიზაციისთვის თქვენი PIN-კოდი, ნიმუში ან პაროლი დაგჭირდებათ."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"თქვენი სახის მოდელი სამუდამოდ და უსაფრთხოდ წაიშლება.\n\nწაშლის შემდეგ ტელეფონის განბლოკვისთვის თქვენი PIN-კოდი, ნიმუში ან პაროლი დაგჭირდებათ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"თქვენი სახის მოდელი სამუდამოდ და უსაფრთხოდ წაიშლება.\n\nწაშლის შემდეგ ტელეფონის განბლოკვისთვის თქვენი თითის ანაბეჭდი, PIN-კოდი, ნიმუში ან პაროლი დაგჭირდებათ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"თქვენი სახის მოდელი სამუდამოდ და უსაფრთხოდ წაიშლება.\n\nწაშლის შემდეგ ტელეფონის განბლოკვისთვის თქვენი PIN-კოდი, ნიმუში ან პაროლი დაგჭირდებათ."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ტელეფონის განსაბლოკად გამოიყენეთ სახით განბლოკვა"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"თითის ანაბეჭდი"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"თითის ანაბეჭდი"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 5ef3bf3..3873d1f 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Бет үлгісін жою керек пе?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Бет үлгісі біржола әрі қауіпсіз жойылады.\n\nОны жойған соң, телефон құлпын ашу немесе қолданбаларда аутентификациядан өту үшін PIN кодын, өрнекті немесе құпия сөзді пайдалану керек болады."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Бет үлгісі біржола әрі қауіпсіз жойылады.\n\nОны жойған соң, телефон құлпын ашу үшін PIN кодын, өрнекті немесе құпия сөзді пайдалану керек болады."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Бет үлгісі біржола әрі қауіпсіз жойылады.\n\nОны жойған соң, телефоныңыздың құлпын ашу немесе қолданбаларда аутентификациялау үшін саусақ ізін, PIN кодын, өрнекті немесе құпия сөзді пайдалану керек болады."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Бет үлгісі біржола әрі қауіпсіз жойылады.\n\nОны жойған соң, телефон құлпын ашу үшін саусақ ізін, PIN кодын, өрнекті немесе құпия сөзді пайдалану керек болады."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Телефон құлпын ашу үшін бет тану функциясын пайдаланыңыз."</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Саусақ ізі"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Саусақ ізі"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 20f5d84..2d39d58 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"លុប​គំរូមុខ​ឬ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"គំរូមុខ​របស់អ្នក​នឹងត្រូវលុប​ដោយសុវត្ថិភាព​ជាអចិន្ត្រៃយ៍។\n\nបន្ទាប់ពី​លុបហើយ អ្នកនឹង​ត្រូវការ​កូដ PIN, លំនាំ ឬពាក្យសម្ងាត់​របស់អ្នក ដើម្បីដោះសោ​ទូរសព្ទ​របស់អ្នក ឬសម្រាប់​ការផ្ទៀងផ្ទាត់​នៅក្នុង​កម្មវិធី។"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"គំរូមុខ​របស់អ្នក​នឹងត្រូវលុប​ដោយសុវត្ថិភាព​ជាអចិន្ត្រៃយ៍។\n\nបន្ទាប់ពី​លុបហើយ អ្នកនឹង​ត្រូវការកូដ PIN, លំនាំ ឬពាក្យសម្ងាត់​របស់អ្នក ដើម្បីដោះសោ​ទូរសព្ទ​របស់អ្នក។"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"គំរូមុខ​របស់អ្នក​នឹងត្រូវលុប​ដោយសុវត្ថិភាព​ជាអចិន្ត្រៃយ៍។\n\nបន្ទាប់ពី​លុបរួច អ្នកនឹង​ត្រូវការ​ស្នាមម្រាមដៃ, កូដ PIN, លំនាំ ឬពាក្យសម្ងាត់​របស់អ្នក ដើម្បីដោះសោ​ទូរសព្ទ​របស់អ្នក ឬសម្រាប់​ការផ្ទៀងផ្ទាត់​នៅក្នុង​កម្មវិធី​។"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"គំរូមុខ​របស់អ្នក​នឹងត្រូវលុប​ដោយសុវត្ថិភាព​ជាអចិន្ត្រៃយ៍។\n\nបន្ទាប់ពី​លុបរួច អ្នកនឹង​ត្រូវការស្នាមម្រាមដៃ, កូដ PIN, លំនាំ ឬពាក្យសម្ងាត់​របស់អ្នក ដើម្បីដោះសោ​ទូរសព្ទ​របស់អ្នក។"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ប្រើ​ការដោះសោ​តាមទម្រង់​មុខ ដើម្បី​ដោះសោ​ទូរសព្ទរបស់អ្នក"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ស្នាម​ម្រាមដៃ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ស្នាមម្រាមដៃ"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 6936c20..b7ea2eb 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಅಳಿಸಬೇಕೇ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ನಿಮ್ಮ ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಬೇಕಾಗುತ್ತದೆ."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ನಿಮ್ಮ ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಬೇಕಾಗುತ್ತದೆ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ನಿಮ್ಮ ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್, ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿದೆ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ನಿಮ್ಮ ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿದೆ."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಬಳಸಿ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index d7c0321..1dac2f6 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"얼굴 모델을 삭제하시겠습니까?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"얼굴 모델이 영구적으로 안전하게 삭제됩니다.\n\n삭제 후 휴대전화를 잠금 해제하거나 앱에서 인증하려면 PIN, 패턴 또는 비밀번호가 필요합니다."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"얼굴 모델이 영구적으로 안전하게 삭제됩니다.\n\n삭제 후 휴대전화를 잠금 해제하려면 PIN, 패턴 또는 비밀번호가 필요합니다."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"얼굴 모델이 영구적으로 안전하게 삭제됩니다.\n\n삭제한 후 휴대전화를 잠금 해제하거나 앱 내에서 인증하려면 지문, PIN, 패턴 또는 비밀번호가 필요합니다."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"얼굴 모델이 영구적으로 안전하게 삭제됩니다.\n\n삭제 후 휴대전화를 잠금 해제하려면 지문, PIN, 패턴 또는 비밀번호가 필요합니다."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"얼굴 인식 잠금 해제로 휴대전화를 잠금 해제하세요"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"지문"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"지문"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 6097ec0..1651aee 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Жүздүн үлгүсүн өчүрөсүзбү?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Жүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу же колдонмолордо аутентификациядан өтүү үчүн PIN кодуңуз, графикалык ачкычыңыз же сырсөзүңүз керек болот."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Жүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу үчүн манжаңыздын изи, PIN код, графикалык ачкыч же сырсөз керек болот."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Жүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу же колдонмолордо аутентификациядан өтүү үчүн манжаңыздын изи, PIN код, графикалык ачкыч же сырсөз керек болот."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Жүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу үчүн манжаңыздын изи, PIN код, графикалык ачкыч же сырсөз керек болот."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Телефонуңузду Жүзүнөн таанып ачуу функциясы менен ачыңыз"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Манжа изи"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Манжа изи"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 2be13d4..42f6e99 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ລຶບຮູບແບບໃບໜ້າອອກບໍ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ຮູບແບບໃບໜ້າຂອງທ່ານຈະຖືກລຶບອອກຢ່າງຖາວອນ ແລະ ປອດໄພ.\n\nຫຼັງຈາກການລຶບແລ້ວ, ທ່ານຈະຕ້ອງໃຊ້ PIN, ຮູບແບບ ຫຼື ລະຫັດຜ່ານຂອງທ່ານເພື່ອປົດລັອກໂທລະສັບຂອງທ່ານ ຫຼື ສຳລັບການພິສູດຢືນຢັນໃນແອັບຕ່າງໆ."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ຮູບແບບໃບໜ້າຂອງທ່ານຈະຖືກລຶບອອກຢ່າງຖາວອນ ແລະ ປອດໄພ.\n\nຫຼັງຈາກການລຶບແລ້ວ, ທ່ານຈະຕ້ອງໃຊ້ PIN, ຮູບແບບ ຫຼື ລະຫັດຜ່ານຂອງທ່ານເພື່ອປົດລັອກໂທລະສັບຂອງທ່ານ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ຮູບແບບໃບໜ້າຂອງທ່ານຈະຖືກລຶບອອກຢ່າງຖາວອນ ແລະ ປອດໄພ.\n\nຫຼັງຈາກທີ່ລຶບແລ້ວ, ທ່ານຈະຕ້ອງໃຊ້ລາຍນິ້ວມື, PIN, ຮູບແບບ ຫຼື ລະຫັດຜ່ານຂອງທ່ານເພື່ອປົດລັອກໂທລະສັບຂອງທ່ານ ຫຼື ສຳລັບການພິສູດຢືນຢັນໃນແອັບ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ຮູບແບບໃບໜ້າຂອງທ່ານຈະຖືກລຶບອອກຢ່າງຖາວອນ ແລະ ປອດໄພ.\n\nຫຼັງຈາກທີ່ລຶບແລ້ວ, ທ່ານຈະຕ້ອງໃຊ້ລາຍນິ້ວມື, PIN, ຮູບແບບ ຫຼື ລະຫັດຜ່ານຂອງທ່ານເພື່ອປົດລັອກໂທລະສັບຂອງທ່ານ."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ໃຊ້ການປົດລັອກດ້ວຍໜ້າເພື່ອປົດລັອກໂທລະສັບຂອງທ່ານ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ລາຍນິ້ວມື"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ລາຍນີ້ວ​ມື"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index b9ea333..6ff5664 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Ištrinti veido modelį?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Jūsų veido modelis bus visam laikui saugiai ištrintas.\n\nIštrynus reikės PIN kodo, atrakinimo piešinio arba slaptažodžio, norint atrakinti telefoną ar nustatyti tapatybę programose."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Jūsų veido modelis bus visam laikui saugiai ištrintas.\n\nIštrynus reikės PIN kodo, atrakinimo piešinio arba slaptažodžio, norint atrakinti telefoną."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Jūsų veido modelis bus visam laikui saugiai ištrintas.\n\nIštrynus reikės kontrolinio kodo, PIN kodo, atrakinimo piešinio arba slaptažodžio, norint atrakinti telefoną ar nustatyti tapatybę programose."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Jūsų veido modelis bus visam laikui saugiai ištrintas.\n\nIštrynus reikės piršto atspaudo, PIN kodo, atrakinimo piešinio arba slaptažodžio, norint atrakinti telefoną."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Naudokite atrakinimo pagal veidą funkciją, kad atrakintumėte telefoną"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Piršto antspaudas"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Kontr. kodo jutiklis"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index bcdc113..b013fdc 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vai dzēst sejas modeli?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Jūsu sejas modelis tiks neatgriezeniski un droši izdzēsts.\n\nPēc tā dzēšanas jums būs jāizmanto PIN, kombinācija vai parole, lai atbloķētu savu tālruni vai veiktu autentifikāciju lietotnēs."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Jūsu sejas modelis tiks neatgriezeniski un droši izdzēsts.\n\nPēc tā dzēšanas jums būs jāizmanto PIN, kombinācija vai parole, lai atbloķētu savu tālruni."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Jūsu sejas modelis tiks neatgriezeniski un droši dzēsts.\n\nPēc tā dzēšanas jums būs jāizmanto pirksta nospiedums, PIN, kombinācija vai parole, lai atbloķētu savu tālruni vai veiktu autentifikāciju lietotnēs."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Jūsu sejas modelis tiks neatgriezeniski un droši dzēsts.\n\nPēc tā dzēšanas jums būs jāizmanto pirksta nospiedums, PIN, kombinācija vai parole, lai atbloķētu savu tālruni."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Izmantot tālruņa atbloķēšanai autorizāciju pēc sejas"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Pirksta nospiedums"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Pirkstu nospiedumi"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 8218b61..37e90d4 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Да се избрише моделот на лик?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Вашиот модел на лик ќе биде трајно и безбедно избришан.\n\nПо бришењето, ќе ви треба PIN, шема или лозинка за да го отклучите телефонот или за автентикација во апликации."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Вашиот модел на лик ќе биде трајно и безбедно избришан.\n\nПо бришењето, ќе ви треба PIN, шема или лозинка за да го отклучите телефонот."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Вашиот модел на лик ќе биде трајно и безбедно избришан.\n\nПо бришењето, ќе ви треба отпечаток, PIN, шема или лозинка за да го отклучите телефонот или за автентикација во апликациите."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Вашиот модел на лик ќе биде трајно и безбедно избришан.\n\nПо бришењето, ќе ви треба отпечаток, PIN, шема или лозинка за да го отклучите телефонот."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Користете „Отклучување со лик“ за отклучување на телефонот"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Отпечаток"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Отпечаток"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 671158e..0d81ff1 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"മുഖ മോഡൽ ഇല്ലാതാക്കണോ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"നിങ്ങളുടെ മുഖ മോഡൽ ശാശ്വതമായും സുരക്ഷിതമായും ഇല്ലാതാക്കും.\n\n ഇല്ലാതാക്കിയാൽ, ഫോൺ അൺലോക്ക് ചെയ്യാനോ ആപ്പുകളിലെ പരിശോധിച്ചുറപ്പിക്കലിനോ പിൻ, പാറ്റേൺ അല്ലെങ്കിൽ പാസ്‍വേഡ് വേണ്ടി വരും."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"നിങ്ങളുടെ മുഖ മോഡൽ ശാശ്വതമായും സുരക്ഷിതമായും ഇല്ലാതാക്കും.\n\n ഇല്ലാതാക്കിയാൽ, ഫോൺ അൺലോക്ക് ചെയ്യാൻ പിൻ, പാറ്റേൺ അല്ലെങ്കിൽ പാസ്‍വേഡ് വേണ്ടി വരും."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"നിങ്ങളുടെ മുഖ മോഡൽ ശാശ്വതമായും സുരക്ഷിതമായും ഇല്ലാതാക്കും.\n\nഇല്ലാതാക്കിയതിന് ശേഷം, ഫോൺ അൺലോക്ക് ചെയ്യാനോ ആപ്പുകളിലെ പരിശോധിച്ചുറപ്പിക്കലിനോ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ്, പിൻ, പാറ്റേൺ അല്ലെങ്കിൽ പാസ്‍വേഡ് വേണം."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"നിങ്ങളുടെ മുഖ മോഡൽ ശാശ്വതമായും സുരക്ഷിതമായും ഇല്ലാതാക്കും.\n\nഇല്ലാതാക്കിയതിന് ശേഷം, ഫോൺ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ്, പിൻ, പാറ്റേൺ അല്ലെങ്കിൽ പാസ്‌വേഡ് വേണം."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"നിങ്ങളുടെ ഫോൺ അൺലോക്ക് ചെയ്യാൻ ഫെയ്‌സ് അൺലോക്ക് ഉപയോഗിക്കുക"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ഫിംഗർപ്രിന്റ്"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ഫിംഗർപ്രിന്റ്"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index c1eba6e..67c9230 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Нүүрний загварыг устгах уу?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Таны нүүрний загварыг аюулгүйгээр бүрмөсөн устгана.\n\nУстгасны дараа та утасныхаа түгжээг тайлах эсвэл аппад баталгаажуулахын тулд ПИН, хээ эсвэл нууц үгээ оруулах шаардлагатай болно."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Таны нүүрний загварыг аюулгүйгээр бүрмөсөн устгана.\n\nУстгасны дараа та утасныхаа түгжээг тайлахын тулд ПИН, хээ эсвэл нууц үгээ оруулах шаардлагатай болно."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Таны нүүрний загварыг бүрмөсөн, аюулгүйгээр устгана.\n\nУстгасны дараа та утасныхаа түгжээг тайлах эсвэл аппад баталгаажуулахын тулд хурууны хээ, ПИН, хээ эсвэл нууц үгээ оруулах шаардлагатай болно."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Таны нүүрний загварыг аюулгүйгээр бүрмөсөн устгана.\n\nУстгасны дараа та утасныхаа түгжээг тайлахын тулд хурууны хээ, ПИН, хээ эсвэл нууц үгээ оруулах шаардлагатай болно."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Утасныхаа түгжээг тайлахын тулд Царайгаар түгжээ тайлахыг ашиглана уу"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Хурууны хээ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Хурууны хээ"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 426602a..e13acf3 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"फेस मॉडेल हटवायचे आहे का?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"तुमचे फेस मॉडेल कायमचे आणि सुरक्षितरीत्या हटवले जाईल.\n\nहटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी किंवा ॲप्समध्ये ऑथेंटिकेट करण्याकरिता तुम्हाला तुमचा पिन, पॅटर्न किंवा पासवर्ड लागेल."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"तुमचे फेस मॉडेल कायमचे आणि सुरक्षितरीत्या हटवले जाईल.\n\nहटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी तुम्हाला तुमचा पिन, पॅटर्न किंवा पासवर्ड लागेल."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"तुमचे फेस मॉडेल कायमचे आणि सुरक्षितरीत्या हटवले जाईल.\n\nहटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी किंवा ॲप्समध्ये ऑथेंटिकेट करण्याकरिता तुम्हाला तुमचे फिंगरप्रिंट, पिन, पॅटर्न किंवा पासवर्ड लागेल."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"तुमचे फेस मॉडेल कायमचे आणि सुरक्षितरीत्या हटवले जाईल.\n\nहटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी तुम्हाला तुमचे फिंगरप्रिंट, पिन, पॅटर्न किंवा पासवर्ड लागेल."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"तुमचा फोन अनलॉक करण्यासाठी फेस अनलॉक वापरा"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"फिंगरप्रिंट"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"फिंगरप्रिंट"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 1499ce2..df1bb5e 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Padamkan model wajah?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model wajah anda akan dipadamkan secara kekal dan selamat.\n\nSelepas pemadaman, anda akan memerlukan PIN, corak atau kata laluan untuk membuka kunci telefon anda atau untuk pengesahan dalam apl."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model wajah anda akan dipadamkan secara kekal dan selamat.\n\nSelepas pemadaman, anda akan memerlukan PIN, corak atau kata laluan untuk membuka kunci telefon anda."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model wajah anda akan dipadamkan secara kekal dan selamat.\n\nSelepas pemadaman, anda akan memerlukan cap jari, PIN, corak atau kata laluan untuk membuka kunci telefon anda atau untuk pengesahan dalam apl."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model wajah anda akan dipadamkan secara kekal dan selamat.\n\nSelepas pemadaman, anda akan memerlukan cap jari, PIN, corak atau kata laluan untuk membuka kunci telefon anda."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Gunakan Buka Kunci Wajah untuk membuka kunci telefon anda"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Cap jari"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Cap jari"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index c63f7b5..ba3b3b1 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"မျက်နှာနမူနာကို ဖျက်မလား။"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"သင်၏မျက်နှာနမူနာကို လုံခြုံစွာ အပြီးဖျက်လိုက်ပါမည်။ \n\nဖျက်ပြီးသည့်အခါ သင့်ဖုန်းကို လော့ခ်ဖွင့်ရန် (သို့) အက်ပ်များတွင် အထောက်အထားစိစစ်ခြင်းအတွက် ပင်နံပါတ်၊ ပုံစံ (သို့) စကားဝှက် လိုအပ်ပါမည်။"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"သင်၏မျက်နှာနမူနာကို လုံခြုံစွာ အပြီးဖျက်လိုက်ပါမည်။\n\nဖျက်ပြီးသည့်အခါ သင်၏ဖုန်းကိုဖွင့်ရန် ပင်နံပါတ်၊ ပုံစံ (သို့) စကားဝှက် လိုအပ်ပါမည်။"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"သင်၏မျက်နှာနမူနာကို လုံခြုံစွာ အပြီးဖျက်လိုက်ပါမည်။\n\nဖျက်ပြီးသည့်အခါ သင့်ဖုန်းကိုဖွင့်ရန် (သို့) အက်ပ်များတွင် အထောက်အထားစိစစ်ခြင်းအတွက် လက်ဗွေ၊ ပင်နံပါတ်၊ ပုံဖော်ခြင်း (သို့) စကားဝှက် လိုအပ်ပါမည်။"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"သင်၏မျက်နှာနမူနာကို လုံခြုံစွာ အပြီးဖျက်လိုက်ပါမည်။\n\nဖျက်ပြီးသည့်အခါ သင့်ဖုန်းကိုဖွင့်ရန် လက်ဗွေ၊ ပင်နံပါတ်၊ ပုံဖော်ခြင်း (သို့) စကားဝှက် လိုအပ်ပါမည်။"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"သင့်ဖုန်းကို လော့ခ်ဖွင့်ရန် မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း အသုံးပြုပါ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"လက်ဗွေ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"လက်ဗွေ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 927faf9..d6f9d12 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vil du slette ansiktsmodellen?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Ansiktsmodellen din blir slettet permanent og sikkert.\n\nEtter slettingen trenger du PIN-kode, mønster eller passord når du skal låse opp telefonen eller autentisere i apper."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Ansiktsmodellen din blir slettet permanent og sikkert.\n\nEtter slettingen trenger du PIN-kode, mønster eller passord når du skal låse opp telefonen."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Ansiktsmodellen din blir slettet permanent og sikkert.\n\nEtter slettingen trenger du fingeravtrykk, PIN-kode, mønster eller passord når du skal låse opp telefonen eller autentisere i apper."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Ansiktsmodellen din blir slettet permanent og sikkert.\n\nEtter slettingen trenger du fingeravtrykk, PIN-kode, mønster eller passord når du skal låse opp telefonen."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Bruk ansiktslås til å låse opp telefonen"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingeravtrykk"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingeravtrykk"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 5f6a0b0..b88bc2c 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"फेस मोडेल मेटाउने हो?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"तपाईंको फेस मोडेल सुरक्षित रूपले सदाका लागि मेटिने छ।\n\nउक्त फेस मोडेल मेटिएपछि फोन अनलक गर्न वा एपहरूमा आफ्नो पहिचान पुष्टि गर्न तपाईंले आफ्नो PIN, प्याटर्न वा पासवर्ड प्रयोग गर्नु पर्ने हुन्छ।"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"तपाईंको फेस मोडेल सुरक्षित रूपले सदाका लागि मेटिने छ।\n\nउक्त फेस मोडेल मेटिएपछि फोन अनलक गर्न तपाईंले आफ्नो PIN, प्याटर्न वा पासवर्ड प्रयोग गर्नु पर्ने हुन्छ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"तपाईंको फेस मोडेल सदाका लागि र सुरक्षित तरिकाले मेटाइने छ।\n\nयो मेटाएपछि फोन अनलक गर्न वा एपहरूमा प्रमाणीकरण गर्न तपाईंले आफ्नो फिंगरप्रिन्ट, PIN, प्याटर्न वा पासवर्ड प्रयोग गर्नु पर्ने हुन्छ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"तपाईंको फेस मोडेल सुरक्षित रूपले सदाका लागि मेटिने छ।\n\nउक्त फेस मोडेल मेटिएपछि फोन अनलक गर्न तपाईंले आफ्नो फिंगरप्रिन्ट, PIN, प्याटर्न वा पासवर्ड प्रयोग गर्नु पर्ने हुन्छ।"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"फोन अनलक गर्न फेस अनलक प्रयोग गर्नुहोस्"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"फिंगरप्रिन्ट"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"फिंगरप्रिन्ट"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 0edd4ae..1d3f3cd 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Gezichtsmodel verwijderen?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Je gezichtsmodel wordt definitief en op een beveiligde manier verwijderd.\n\nDaarna heb je je pincode, patroon of wachtwoord nodig om je telefoon te ontgrendelen of voor verificatie in apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Je gezichtsmodel wordt definitief en op een beveiligde manier verwijderd.\n\nDaarna heb je je pincode, patroon of wachtwoord nodig om je telefoon te ontgrendelen."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Je gezichtsmodel wordt definitief en beveiligd verwijderd.\n\nDaarna heb je je vingerafdruk, pincode, patroon of wachtwoord nodig om je telefoon te ontgrendelen of voor verificatie in apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Je gezichtsmodel wordt definitief en beveiligd verwijderd.\n\nDaarna heb je je vingerafdruk, pincode, patroon of wachtwoord nodig om je telefoon te ontgrendelen."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Ontgrendel je telefoon via gezichtsherkenning"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Vingerafdruk"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Vingerafdruk"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index ce18fb0..5cae6c0 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ଫେସ ମଡେଲ ଡିଲିଟ କରିବେ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ଆପଣଙ୍କ ଫେସ ମଡେଲକୁ ସ୍ଥାୟୀ ଏବଂ ସୁରକ୍ଷିତ ଭାବରେ ଡିଲିଟ କରିଦିଆଯିବ।\n\nଡିଲିଟ କରିବା ପରେ ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା କିମ୍ବା ଆପଗୁଡ଼ିକରେ ପ୍ରମାଣୀକରଣ ପାଇଁ ଆପଣ ଆପଣଙ୍କର PIN, ପାଟର୍ନ କିମ୍ବା ପାସୱାର୍ଡ ଆବଶ୍ୟକ କରିବେ।"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ଆପଣଙ୍କ ଫେସ ମଡେଲକୁ ସ୍ଥାୟୀ ଏବଂ ସୁରକ୍ଷିତ ଭାବରେ ଡିଲିଟ କରିଦିଆଯିବ।\n\nଡିଲିଟ କରିବା ପରେ ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣ ଆପଣଙ୍କର PIN, ପାଟର୍ନ କିମ୍ବା ପାସୱାର୍ଡ ଆବଶ୍ୟକ କରିବେ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ଆପଣଙ୍କ ଫେସ୍ ମଡେଲକୁ ସ୍ଥାୟୀ ଏବଂ ସୁରକ୍ଷିତ ଭାବରେ ଡିଲିଟ୍ କରିଦିଆଯିବ।\n\nଡିଲିଟ୍ କରିବା ପରେ ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ୍ କରିବା କିମ୍ବା ଆପଗୁଡ଼ିକରେ ପ୍ରମାଣୀକରଣ ପାଇଁ ଆପଣ ଆପଣଙ୍କର ଟିପଚିହ୍ନ, PIN, ପାଟର୍ନ କିମ୍ବା ପାସୱାର୍ଡ ଆବଶ୍ୟକ କରିବେ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ଆପଣଙ୍କ ଫେସ ମଡେଲକୁ ସ୍ଥାୟୀ ଏବଂ ସୁରକ୍ଷିତ ଭାବରେ ଡିଲିଟ କରିଦିଆଯିବ।\n\nଡିଲିସନ ପରେ ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣ ଆପଣଙ୍କର ଟିପଚିହ୍ନ, PIN, ପାଟର୍ନ କିମ୍ବା ପାସୱାର୍ଡ ଆବଶ୍ୟକ କରିବେ।"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ଆପଣଙ୍କର ଫୋନ୍ ଅନଲକ୍ କରିବାକୁ ଫେସ୍ ଅନଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ଟିପଚିହ୍ନ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ଟିପଚିହ୍ନ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index e0fc416..46c62b1 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ਕੀ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਮਿਟਾਉਣਾ ਹੈ?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਪੱਕੇ ਤੌਰ \'ਤੇ ਅਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।\n\nਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਜਾਂ ਐਪਾਂ ਵਿੱਚ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਆਪਣੇ ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਪੱਕੇ ਤੌਰ \'ਤੇ ਅਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।\n\nਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਆਪਣੇ ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਪੱਕੇ ਤੌਰ \'ਤੇ ਅਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।\n\n ਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਜਾਂ ਐਪਾਂ ਵਿੱਚ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ, ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਪੱਕੇ ਤੌਰ \'ਤੇ ਅਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।\n\nਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ, ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ਆਪਣਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕਰਨ ਲਈ ਫ਼ੇਸ ਅਣਲਾਕ ਵਰਤੋ"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ਫਿੰਗਰਪ੍ਰਿੰਟ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ਫਿੰਗਰਪ੍ਰਿੰਟ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 0bdbc73..74ef48f 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Usunąć model twarzy?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model twarzy zostanie trwale i bezpiecznie usunięty.\n\nPo usunięciu tych danych do odblokowywania telefonu i uwierzytelniania się w aplikacjach trzeba będzie używać kodu PIN, wzoru lub hasła."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model twarzy zostanie trwale i bezpiecznie usunięty.\n\nPo usunięciu tych danych do odblokowywania telefonu trzeba będzie używać kodu PIN, wzoru lub hasła."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model twarzy zostanie trwale i bezpiecznie usunięty.\n\nPo usunięciu tych danych do odblokowywania telefonu i uwierzytelniania się w aplikacjach trzeba będzie używać odcisku palca, kodu PIN, wzoru lub hasła."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model twarzy zostanie trwale i bezpiecznie usunięty.\n\nPo usunięciu tych danych do odblokowywania telefonu trzeba będzie używać odcisku palca, kodu PIN, wzoru lub hasła."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Używaj rozpoznawania twarzy do odblokowywania telefonu"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Odcisk palca"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Odcisk palca"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 7ff5863..b3255c8 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Excluir modelo de rosto?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone ou fazer a autenticação em apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone ou fazer a autenticação em apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usar o Desbloqueio facial para acessar o smartphone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Impressão digital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Impressão digital"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 40e921e..7b96921 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Eliminar o modelo de rosto?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"O seu modelo de rosto será eliminado de forma permanente e segura.\n\nApós a eliminação, precisará do seu PIN, padrão ou palavra-passe para desbloquear o telemóvel ou fazer a autenticação em apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"O seu modelo de rosto será eliminado de forma permanente e segura.\n\nApós a eliminação, precisará do seu PIN, padrão ou palavra-passe para desbloquear o telemóvel."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"O seu modelo de rosto será eliminado de forma permanente e segura.\n\nApós a eliminação, vai precisar da impressão digital, do PIN, do padrão ou da palavra-passe para desbloquear o telemóvel ou fazer a autenticação em apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"O seu modelo de rosto será eliminado de forma permanente e segura.\n\nApós a eliminação, vai precisar da impressão digital, do PIN, do padrão ou da palavra-passe para desbloquear o telemóvel."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Utilize o Desbloqueio facial para desbloquear o telemóvel"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Impressão digital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Impressão digital"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 7ff5863..b3255c8 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Excluir modelo de rosto?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone ou fazer a autenticação em apps."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone ou fazer a autenticação em apps."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Seu modelo de rosto será excluído de maneira permanente e segura.\n\nApós a exclusão, você precisará usar a impressão digital, o PIN, o padrão ou a senha para desbloquear o smartphone"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Usar o Desbloqueio facial para acessar o smartphone"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Impressão digital"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Impressão digital"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 79bfa16..29d5134 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Ștergi modelul facial?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Modelul facial se va șterge definitiv și în siguranță.\n\nDupă ștergere, vei avea nevoie de codul PIN, de model sau de parolă ca să-ți deblochezi telefonul sau să te autentifici în aplicații."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Modelul facial se va șterge definitiv și în siguranță.\n\nDupă ștergere, vei avea nevoie de codul PIN, de model sau de parolă ca să îți deblochezi telefonul."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Modelul facial se va șterge definitiv și în siguranță.\n\nDupă ștergere, vei avea nevoie de amprentă, de codul PIN, de model sau de parolă să îți deblochezi telefonul sau să te autentifici în aplicații."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Modelul facial se va șterge definitiv și în siguranță.\n\nDupă ștergere, vei avea nevoie de amprentă, de codul PIN, de model sau de parolă ca să îți deblochezi telefonul."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Folosește Deblocarea facială ca să-ți deblochezi telefonul"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Amprentă"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Amprentă"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d4f2148..25edc61 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Удалить модель лица?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Модель вашего лица будет удалена навсегда.\n\nПосле этого для разблокировки телефона и аутентификации в приложениях будет требоваться PIN-код, пароль или графический ключ."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Модель вашего лица будет удалена навсегда.\n\n После этого для разблокировки телефона будет требоваться PIN-код, пароль или графический ключ."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Модель вашего лица будет удалена навсегда.\n\nПосле этого для разблокировки телефона и аутентификации в приложениях вам потребуется отпечаток пальца, PIN-код, графический ключ или пароль."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Модель вашего лица будет удалена навсегда.\n\nПосле этого для разблокировки телефона вам потребуется отпечаток пальца, PIN-код, графический ключ или пароль."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Используйте фейсконтроль для разблокировки телефона"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Отпечаток пальца"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Отпечатки пальцев"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 888e17b..a8da353 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"මුහුණු ආකෘතිය මකන්නද?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ඔබගේ මුහුණු ආකෘතිය ස්ථිරව හා ආරක්ෂිතව මකනු ඇත.\n\nමැකීමෙන් පසුව, ඔබගේ දුරකථනය අගුලු හැරීමට හෝ යෙදුම්වල සත්‍යාපනය සඳහා ඔබගේ PIN, රටාව හෝ මුරපදය අවශ්‍ය වේ."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ඔබගේ මුහුණු ආකෘතිය ස්ථිරව සහ ආරක්ෂිතව මකනු ඇත.\n\nමැකීමෙන් පසුව, ඔබගේ දුරකථනය අගුලු හැරීමට ඔබට ඔබගේ PIN, රටාව හෝ මුරපදය අවශ්‍ය වනු ඇත."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ඔබේ මුහුණු ආකෘතිය ස්ථිරව සහ සුරක්ෂිතව මකනු ඇත.\n\nමැකීමෙන් පසුව, ඔබේ දුරකථනය අගුළු හැරීමට හෝ යෙදුම්වල සත්‍යාපනය සඳහා ඔබට ඔබේ ඇඟිලි සලකුණ, PIN, රටාව, හෝ මුරපදය අවශ්‍ය වනු ඇත."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ඔබේ මුහුණු ආකෘතිය ස්ථිරව සහ සුරක්ෂිතව මකනු ඇත.\n\nමැකීමෙන් පසුව, ඔබේ දුරකථනය අගුළු හැරීමට ඔබට ඔබේ PIN, රටාව, හෝ මුරපදය අවශ්‍ය වනු ඇත."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ඔබගේ දුරකථනය අගුලු හැරීමට මුහුණෙන් අගුළු හැරීම භාවිත කරන්න"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ඇඟිලි සලකුණ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ඇඟිලි සලකුණ"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 95e8292..d0f10e2 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Chcete model tváre odstrániť?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model tváre bude bezpečným spôsobom natrvalo odstránený.\n\nPo odstránení budete pri odomykaní telefónu alebo overovaní v aplikáciách potrebovať PIN, vzor alebo heslo."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model tváre bude bezpečným spôsobom natrvalo odstránený.\n\nPo odstránení budete pri odomykaní telefónu potrebovať PIN, vzor alebo heslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model tváre bude natrvalo a bezpečne odstránený.\n\nPo odstránení budete pri odomykaní telefónu alebo overovaní v aplikáciách potrebovať odtlačok prsta, PIN, vzor alebo heslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model tváre bude bezpečným spôsobom natrvalo odstránený.\n\nPo odstránení budete pri odomykaní telefónu potrebovať odtlačok prsta, PIN, vzor alebo heslo."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Odomykajte telefón tvárou"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Odtlačok prsta"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Odtlačok prsta"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 371bec7..d3f60da 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Želite izbrisati model obraza?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Model obraza bo trajno in varno izbrisan.\n\nPo izbrisu boste za odklepanje telefona ali preverjanje pristnosti v aplikacijah morali uporabiti kodo PIN, vzorec ali geslo."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Model obraza bo trajno in varno izbrisan.\n\nPo izbrisu boste za odklepanje telefona morali uporabiti kodo PIN, vzorec ali geslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Model obraza bo trajno in varno izbrisan.\n\nKo bo izbrisan, boste za odklepanje telefona ali preverjanje pristnosti v aplikacijah morali uporabiti prstni odtis, kodo PIN, vzorec ali geslo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Model obraza bo trajno in varno izbrisan.\n\nPo izbrisu boste za odklepanje telefona morali uporabiti prstni odtis, kodo PIN, vzorec ali geslo."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Za odklepanje telefona uporabite obraz"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Prstni odtis"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Prstni odtis"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 893f6fc..76f0d38 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Të fshihet modeli i fytyrës?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Modeli yt i fytyrës do të fshihet përgjithmonë dhe në mënyrë të sigurt.\n\nPas fshirjes, do të të duhet kodi yt PIN, motivi ose fjalëkalimi për të shkyçur telefonin ose për vërtetimin në aplikacione."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Modeli yt i fytyrës do të fshihet përgjithmonë dhe në mënyrë të sigurt.\n\nPas fshirjes, do të të duhet kodi yt PIN, motivi ose fjalëkalimi për të shkyçur telefonin."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Modeli yt i fytyrës do të fshihet përfundimisht dhe në mënyrë të sigurt.\n\nPas fshirjes do të të duhet gjurma jote e gishtit, kodi PIN, motivi apo fjalëkalimi për të shkyçur telefonin ose për vërtetimin në aplikacione."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Modeli yt i fytyrës do të fshihet përgjithmonë dhe në mënyrë të sigurt.\n\nPas fshirjes, do të të duhet gjurma e gishtit, kodi PIN, motivi ose fjalëkalimi për të shkyçur telefonin."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Përdor \"Shkyçjen me fytyrë\" për të shkyçur telefonin tënd"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Gjurmë gishti"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Gjurma e gishtit"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index edc2581..170a49c 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Желите да избришете модел лица?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Модел лица ће се трајно и безбедно избрисати.\n\nПосле брисања вам треба PIN, шаблон или лозинка да бисте откључали телефон или за потврду идентитета у апликацијама."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Модел лица ће бити трајно и безбедно избрисан.\n\nПосле брисања вам треба PIN, шаблон или лозинка да бисте откључали телефон."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Модел лица ће се трајно и безбедно избрисати.\n\nПосле брисања треба вам отисак прста, PIN, шаблон или лозинка да бисте откључали телефон или за потврду идентитета у апликацијама."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Модел лица ће бити трајно и безбедно избрисан.\n\nПосле брисања вам треба отисак прста, PIN, шаблон или лозинка да бисте откључали телефон."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Откључајте телефон лицем"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Отисак прста"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Отисак прста"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ff047a4..5d35610 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vill du radera ansiktsmodellen?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Ansiktsmodellen raderas permanent på ett säkert sätt.\n\nEfter borttagningen behöver du pinkod, lösenord eller mönster för att låsa upp telefonen och för autentisering i appar."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Ansiktsmodellen raderas permanent på ett säkert sätt.\n\nEfter borttagningen behöver du pinkod, lösenord eller mönster för att låsa upp telefonen."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Ansiktsmodellen raderas permanent på ett säkert sätt.\n\nEfter borttagningen behöver du fingeravtryck, pinkod, lösenord eller mönster för att låsa upp telefonen eller för autentisering i appar."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Ansiktsmodellen raderas permanent på ett säkert sätt.\n\nEfter borttagningen behöver du fingeravtryck, pinkod, lösenord eller mönster för att låsa upp telefonen."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Lås upp telefonen med ansiktslås"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingeravtryck"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingeravtryck"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 012a110..02396de 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Ungependa kufuta muundo wa uso?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Muundo wa uso wako utafutwa kabisa kwa njia salama.\n\nBaada ya kufuta, utahitaji PIN, mchoro au nenosiri lako ili ufungue simu yako au uthibitishe katika programu."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Muundo wa uso wako utafutwa kabisa kwa njia salama.\n\nBaada ya kufuta, utahitaji PIN, mchoro au nenosiri lako ili ufungue simu yako."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Muundo wa uso wako utafutwa kabisa na kwa usalama.\n\nBaada ya kufutwa, utahitaji kutumia alama ya kidole, PIN, mchoro au nenosiri lako kufungua simu yako au kutekeleza uthibitishaji katika programu."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Muundo wa uso wako utafutwa kabisa na kwa usalama.\n\nBaada ya kufutwa, utahitaji kutumia alama ya kidole, PIN, mchoro au nenosiri lako kufungua simu yako."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Tumia kipengele cha Kufungua kwa uso ili ufungue simu yako"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Alama ya kidole"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Alama ya kidole"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 874f98c..e9ea006 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"முகத் தோற்றப் பதிவை நீக்கவா?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"உங்கள் முகத் தோற்றப் பதிவு நிரந்தரமாகவும் பாதுகாப்பாகவும் நீக்கப்படும்.\n\nஅவ்வாறு நீக்கப்பட்ட பிறகு மொபைலை அன்லாக் செய்வதற்கோ ஆப்ஸில் அங்கீகரிப்பதற்கோ உங்கள் பின், பேட்டர்ன் அல்லது கடவுச்சொல்லைப் பயன்படுத்த வேண்டும்."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"உங்கள் முகத் தோற்றப் பதிவு நிரந்தரமாகவும் பாதுகாப்பாகவும் நீக்கப்படும்.\n\nஅவ்வாறு நீக்கப்பட்ட பிறகு மொபைலை அன்லாக் செய்வதற்கு உங்கள் பின், பேட்டர்ன் அல்லது கடவுச்சொல்லைப் பயன்படுத்த வேண்டும்."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"உங்கள் முகத் தோற்றப் பதிவு நிரந்தரமாகவும் பாதுகாப்பாகவும் நீக்கப்படும்.\n\nஅவ்வாறு நீக்கப்பட்ட பிறகு மொபைலை அன்லாக் செய்வதற்கு உங்கள் கைரேகை, பின், பேட்டர்ன் அல்லது கடவுச்சொல்லைப் பயன்படுத்த வேண்டும்."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"உங்கள் முகத் தோற்றப் பதிவு நிரந்தரமாகவும் பாதுகாப்பாகவும் நீக்கப்படும்.\n\nஅவ்வாறு நீக்கப்பட்ட பிறகு மொபைலை அன்லாக் செய்வதற்கு உங்கள் கைரேகை, பின், பேட்டர்ன் அல்லது கடவுச்சொல்லைப் பயன்படுத்த வேண்டும்."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"உங்கள் மொபைலை அன்லாக் செய்ய, \'முகம் காட்டித் திறத்தல்\' அம்சத்தைப் பயன்படுத்தலாம்"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"கைரேகை"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"கைரேகை"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 6afd8c0..f478924 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ఫేస్ మోడల్‌ను తొలగించాలా?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"మీ ఫేస్ మోడల్ శాశ్వతంగా, సురక్షితంగా తొలగించబడుతుంది.\n\nతొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి లేదా యాప్‌లలో ప్రామాణీకరణ కోసం మీ PIN, ఆకృతి లేదా పాస్‌వర్డ్ అవసరం."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"మీ ఫేస్ మోడల్ శాశ్వతంగా మరియు సురక్షితంగా తొలగించబడుతుంది.\n\nతొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి మీకు మీ PIN, ఆకృతి లేదా పాస్‌వర్డ్ అవసరం."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"మీ ఫేస్ మోడల్ శాశ్వతంగా, సురక్షితంగా తొలగించబడుతుంది.\n\nతొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి లేదా యాప్‌లలో ప్రామాణీకరణ కోసం మీ వేలిముద్ర, PIN, ఆకృతి లేదా పాస్‌వర్డ్ అవసరం."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"మీ ఫేస్ మోడల్ శాశ్వతంగా, సురక్షితంగా తొలగించబడుతుంది.\n\nతొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి మీకు వేలిముద్ర, PIN, ఆకృతి లేదా పాస్‌వర్డ్ అవసరం."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి ఫేస్ అన్‌లాక్‌ను ఉపయోగించండి"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"వేలిముద్ర"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"వేలిముద్ర"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a904de1..89b3d35 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"ลบรูปแบบใบหน้าใช่ไหม"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"ระบบจะลบรูปแบบใบหน้าออกอย่างถาวรและปลอดภัย\n\nหลังจากที่ลบแล้ว คุณจะต้องใช้ PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์ หรือสำหรับการตรวจสอบสิทธิ์ในแอป"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"ระบบจะลบรูปแบบใบหน้าออกอย่างถาวรและปลอดภัย\n\nหลังจากที่ลบแล้ว คุณจะต้องใช้ PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"ระบบจะลบรูปแบบใบหน้าออกอย่างถาวรและปลอดภัย\n\nหลังจากที่ลบแล้ว คุณจะต้องใช้ลายนิ้วมือ, PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์ หรือสำหรับการตรวจสอบสิทธิ์ในแอป"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"ระบบจะลบรูปแบบใบหน้าออกอย่างถาวรและปลอดภัย\n\nหลังจากที่ลบแล้ว คุณจะต้องใช้ลายนิ้วมือ, PIN, รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"ใช้การปลดล็อกด้วยใบหน้าเพื่อปลดล็อกโทรศัพท์"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"ลายนิ้วมือ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"ลายนิ้วมือ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c862705..a6aeaa4 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"I-delete ang face model?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Permanente at secure na ide-delete ang iyong face model.\n\nPagkatapos ng pag-delete, kakailanganin mo ang iyong PIN, pattern, o password para i-unlock ang telepono mo o para sa pag-authenticate sa mga app."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Permanente at secure na ide-delete ang iyong face model.\n\nPagkatapos ng pag-delete, kakailanganin mo ang iyong PIN, pattern, o password para i-unlock ang telepono mo."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Permanente at secure na ide-delete ang iyong face model.\n\nPagkatapos ng pag-delete, kakailanganin mo ang iyong fingerprint, PIN, pattern, o password para i-unlock ang telepono mo o para sa pag-authenticate sa mga app."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Permanente at secure na ide-delete ang iyong face model.\n\nPagkatapos ng pag-delete, kakailanganin mo ang iyong fingerprint, PIN, pattern, o password para i-unlock ang telepono mo."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Gamitin ang Pag-unlock Gamit ang Mukha para i-unlock ang iyong telepono"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Fingerprint"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Fingerprint"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index e14b2e8..ca51efb 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Yüz modeli silinsin mi?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Yüz modeliniz, güvenli bir şekilde kalıcı olarak silinir.\n\nSilme işleminden sonra telefonunuzun kilidini açmak veya uygulamalarda kimliğinizi doğrulamak için PIN kodunuz, deseniniz veya şifreniz gerekir."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Yüz modeliniz güvenli bir şekilde kalıcı olarak silinir.\n\nSilme işleminden sonra, telefonunuzun kilidini açmak için PIN\'iniz, deseniniz veya şifreniz gerekir."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Yüz modeliniz, güvenli bir şekilde kalıcı olarak silinir.\n\nSilme işleminden sonra telefonunuzun kilidini açmak veya uygulamalarda kimliğinizi doğrulamak için parmak iziniz, PIN kodunuz, deseniniz veya şifreniz gerekir."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Yüz modeliniz güvenli bir şekilde kalıcı olarak silinir.\n\nSilme işleminden sonra, telefonunuzun kilidini açmak için PIN\'iniz, deseniniz veya şifreniz gerekir."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Telefonunuzun kilidini açmak için Yüz Tanıma Kilidi\'ni kullanın"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Parmak izi"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Parmak izi"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 66293ff..964bea9 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Видалити модель обличчя?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Вашу модель обличчя буде видалено назавжди.\n\nПісля цього, щоб розблокувати телефон чи пройти автентифікацію в додатках, вам знадобиться використовувати PIN-код, ключ або пароль."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Вашу модель обличчя буде видалено назавжди.\n\nПісля цього, щоб розблокувати телефон, вам знадобиться використовувати PIN-код, ключ або пароль."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Вашу модель обличчя буде видалено назавжди.\n\nПісля цього, щоб розблокувати телефон чи пройти автентифікацію в додатках, вам знадобиться використовувати відбиток пальця, PIN-код, ключ або пароль."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Вашу модель обличчя буде видалено назавжди.\n\nПісля цього, щоб розблокувати телефон, вам знадобиться використовувати відбиток пальця, PIN-код, ключ або пароль."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Розблоковуйте телефон за допомогою фейсконтролю"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Відбиток пальця"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Відбиток пальця"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index aeb2003..e56d779 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"چہرے کا ماڈل حذف کریں؟"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"‏آپ کے چہرے کے ماڈل کو مستقل اور محفوظ طریقے سے حذف کر دیا جائے گا۔\n\nحذف کیے جانے کے بعد، آپ کو اپنے فون کو غیر مقفل کرنے یا ایپس میں تصدیق کے لیے اپنا PIN، پیٹرن یا پاس ورڈ درکار ہوگا۔"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"‏آپ کے چہرے کے ماڈل کو مستقل اور محفوظ طریقے سے حذف کر دیا جائے گا۔\n\nحذف کرنے کے بعد، آپ کو اپنے فون کو غیر مقفل کرنے کے لیے آپ کو اپنا PIN، پیٹرن یا پاس ورڈ درکار ہوگا۔"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"‏آپ کے چہرہ کے ماڈل کو مستقل اور محفوظ طور پر حذف کر دیا جائے گا۔\n\nحذف کرنے کے بعد آپ کو اپنے فون کو غیر مقفل کرنے یا ایپس میں تصدیق کیلئے آپ کو اپنا فنگر پرنٹ، PIN، پیٹرن یا پاس ورڈ درکار ہوگا۔"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"‏آپ کے چہرے کے ماڈل کو مستقل اور محفوظ طریقے سے حذف کر دیا جائے گا۔\n\nحذف کرنے کے بعد، آپ کو اپنے فون کو غیر مقفل کرنے کے لیے آپ کو اپنا فنگر پرنٹ، PIN، پیٹرن یا پاس ورڈ درکار ہوگا۔"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"اپنے فون کو غیر مقفل کرنے کے لیے فیس اَنلاک کا استعمال کریں"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"فنگر پرنٹ"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"فنگر پرنٹ"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index d1caee8..5048b4b 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Yuz modeli oʻchirib tashlansinmi?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Yuz modelingiz butunlay va xavfsiz oʻchirib tashlanadi.\n\nOʻchirib tashlangandan keyin telefoningiz qulfini ochish yoki ilovalarda autentifikatsiya uchun PIN kod, grafik kalit yoki parol kiritishingiz lozim."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Yuz modelingiz butunlay va xavfsiz oʻchirib tashlandi.\n\nOʻchirib tashlangandan keyin telefoningiz qulfini ochish uchun PIN kod, grafik kalit yoki parol kiritishingiz lozim."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Yuzingiz modeli butunlay va xavfsiz oʻchirib tashlanadi.\n\nOʻchirib tashlanganidan keyin telefon qulfini ochish yoki ilovalarda autentifikatsiya qilish uchun barmoq izi, PIN kod, grafik kalit yoki parolni kiritish lozim."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Yuzingiz modeli butunlay va xavfsiz oʻchirib tashlanadi.\n\nOʻchirib tashlangandan keyin telefon qulfini ochish uchun PIN kod, grafik kalit yoki parol kiritish lozim."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Telefon qulfini yuz bilan oching"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Barmoq izi"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Barmoq izi"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 29b9e1f..074ef14 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Xóa mẫu khuôn mặt?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Mẫu khuôn mặt của bạn sẽ bị xoá vĩnh viễn theo cách an toàn.\n\nSau khi xoá, bạn cần có mã PIN, hình mở khoá hoặc mật khẩu để mở khoá điện thoại hoặc để xác thực trong các ứng dụng."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Mẫu khuôn mặt của bạn sẽ bị xoá vĩnh viễn theo cách an toàn.\n\nSau khi xoá, bạn sẽ cần nhập mã PIN, hình mở khoá hoặc mật khẩu để mở khoá điện thoại."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Mẫu khuôn mặt của bạn sẽ được xoá vĩnh viễn một cách bảo mật.\n\nSau khi xoá, bạn cần nhập vân tay, mã PIN, hình mở khoá hoặc mật khẩu để mở khoá điện thoại hoặc để xác thực trong các ứng dụng."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Mẫu khuôn mặt của bạn sẽ được xoá vĩnh viễn một cách bảo mật.\n\nSau khi xoá, bạn sẽ cần nhập vân tay, mã PIN, hình mở khoá hoặc mật khẩu để mở khoá điện thoại."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Dùng tính năng Mở khóa bằng khuôn mặt để mở khóa điện thoại"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Vân tay"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Vân tay"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f074160..594e41d 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"要删除脸部模型吗?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"系统会安全地永久删除您的脸部模型。\n\n脸部模型删除后,如需解锁手机或在应用内进行身份验证,您将需要使用 PIN 码、解锁图案或密码。"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"系统会安全地永久删除您的脸部模型。\n\n脸部模型删除后,如需解锁手机,您将需要使用 PIN 码、解锁图案或密码。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"系统会安全地永久删除您的脸部模型。\n\n删除后,您将需要使用指纹、PIN 码、解锁图案或密码解锁手机或在应用内进行身份验证。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"系统会安全地永久删除您的脸部模型。\n\n删除后,您将需要使用指纹、PIN 码、解锁图案或密码解锁手机。"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"使用人脸解锁功能解锁手机"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"指纹"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"指纹"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 877ba58..2a586d7 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"要刪除面部模型嗎?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"系統會將你的面部模型安全地永久刪除。\n\n刪除後,你需要使用 PIN、圖案或密碼解鎖手機,或在應用程式內驗證身分。"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"系統會妥善地將你的面部模型永久刪除。面部模型刪除後,你便需要使用\n\n面部模型刪除後,你便需要使用 PIN、圖案或密碼來解鎖手機。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"系統會妥善地將你的面部模型永久刪除。\n\n面部模型刪除後,你需要使用指紋、PIN、圖案或密碼,才能解鎖手機或在應用程式內驗證身分。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"系統會妥善地將你的面部模型永久刪除。\n\n面部模型刪除後,你需要使用指紋、PIN、圖案或密碼,才能解鎖手機。"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"使用「面孔解鎖」解鎖手機"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"指紋"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"指紋"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index e698e36..5d9f912 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"要刪除臉部模型嗎?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"系統會安全地將臉部模型永久刪除。\n\n模型刪除後,你必須使用 PIN 碼、解鎖圖案或密碼,才能解鎖手機或在應用程式中驗證身分。"</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"系統會安全地將臉部模型永久刪除。\n\n模型刪除後,你必須使用 PIN 碼、解鎖圖案或密碼才能解鎖手機。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"系統會安全地將你的臉部模型永久刪除。\n\n臉部模型刪除後,你需要使用指紋、PIN 碼、解鎖圖案或密碼,才能解鎖手機或在應用程式內驗證身分。"</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"系統會安全地將你的臉部模型永久刪除。\n\n臉部模型刪除後,你需要使用指紋、PIN 碼、解鎖圖案或密碼才能解鎖手機。"</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"使用人臉解鎖功能解鎖手機"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"指紋"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"指紋"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index f28b158..4341b09 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -323,6 +323,8 @@
     <string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Susa imodeli yobuso?"</string>
     <string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Imodeli yakho yobuso izosulwa ingunaphakade nangokuphephile.\n\nNgemuva kokusulwa, uzodinga iphinikhodi yakho, iphethini, noma iphasiwedi ukuze uvule ifoni yakho noma ukufakazela ubuqiniso kuma-app."</string>
     <string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Imodeli yakho yobuso izosulwa ingunaphakade nangokuphephile.\n\nNgemuva kokusulwa, uzodinga iphinikhodi yakho, iphethini, noma iphasiwedi ukuze uvule ifoni yakho."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint" msgid="7609582230650860974">"Imodeli yobuso bakho izosulwa ngokuphelele nangokuphephile.\n\nNgemva kokusulwa, uzodinga isigxivizo somunwe, Iphinikhodi, iphethini, noma amaphasiwedi ukuvula ifoni yakho noma ukufakazelwa kobuqiniso kuma-app wakho."</string>
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv" msgid="2627374706274503259">"Imodeli yakho yobuso izosulwa ingunaphakade nangokuphephile.\n\nNgemuva kokusulwa, uzodinga iphinikhodi yakho, iphethini, noma iphasiwedi ukuze uvule ifoni yakho."</string>
     <string name="security_settings_face_settings_context_subtitle" msgid="8284262560781442403">"Sebenzisa Ukuvula ngobuso ukuvula ifoni yakho"</string>
     <string name="security_settings_fingerprint" msgid="6387775386189204201">"Isigxivizo somunwe"</string>
     <string name="security_settings_fingerprint_preference_title" msgid="2484965173528415458">"Izigxivizo zeminwe"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 334d4e5..5ae0220 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -345,6 +345,9 @@
     <bool name="config_show_manual">false</bool>
     <!-- Whether to show a preference item for regulatory information in About phone -->
     <bool name="config_show_regulatory_info">false</bool>
+    <!-- Package name of regulatory information overlay which provides mapping and contents.
+         Fetch resource from overlay package directly if this is set. -->
+    <string name="config_regulatory_info_overlay_package_name" translatable="false" />
 
     <!-- Whether to show a preference item for mobile plan -->
     <bool name="config_show_mobile_plan">true</bool>
@@ -364,7 +367,7 @@
     <bool name="config_show_wifi_hotspot_settings">true</bool>
 
     <!-- Whether Wi-Fi hotspot speed should be shown or not. -->
-    <bool name="config_show_wifi_hotspot_speed">false</bool>
+    <bool name="config_show_wifi_hotspot_speed">true</bool>
 
     <!-- Whether toggle_airplane is available or not. -->
     <bool name="config_show_toggle_airplane">true</bool>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fa79cbb..1ad45d5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -744,6 +744,10 @@
     <string name="security_settings_face_settings_remove_dialog_details">Your 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>
     <!-- Dialog contents shown when the user removes an enrollment when configured as a convenience [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_settings_remove_dialog_details_convenience">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone.</string>
+    <!-- Dialog contents shown when the user removes an enrollment [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_remove_dialog_details_fingerprint">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>
+    <!-- Dialog contents shown when the user removes an enrollment when configured as a convenience [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_remove_dialog_details_fingerprint_conv">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.</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>
 
diff --git a/src/com/android/settings/RegulatoryInfoDisplayActivity.java b/src/com/android/settings/RegulatoryInfoDisplayActivity.java
deleted file mode 100644
index 8f65051..0000000
--- a/src/com/android/settings/RegulatoryInfoDisplayActivity.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2013 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;
-
-import android.app.Activity;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.SystemProperties;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
-
-import java.util.Locale;
-
-/**
- * {@link Activity} that displays regulatory information for the "Regulatory information"
- * preference item, and when "*#07#" is dialed on the Phone keypad. To enable this feature,
- * set the "config_show_regulatory_info" boolean to true in a device overlay resource, and in the
- * same overlay, either add a drawable named "regulatory_info.png" containing a graphical version
- * of the required regulatory info (If ro.bootloader.hardware.sku property is set use
- * "regulatory_info_<sku>.png where sku is ro.bootloader.hardware.sku property value in lowercase"),
- * or add a string resource named "regulatory_info_text" with an HTML version of the required
- * information (text will be centered in the dialog).
- */
-public class RegulatoryInfoDisplayActivity extends Activity implements
-        DialogInterface.OnDismissListener {
-
-    private final String REGULATORY_INFO_RESOURCE = "regulatory_info";
-    private static final String DEFAULT_REGULATORY_INFO_FILEPATH =
-            "/data/misc/elabel/regulatory_info.png";
-    private static final String REGULATORY_INFO_FILEPATH_TEMPLATE =
-            "/data/misc/elabel/regulatory_info_%s.png";
-
-    /**
-     * Display the regulatory info graphic in a dialog window.
-     */
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                .setTitle(R.string.regulatory_labels)
-                .setOnDismissListener(this)
-                .setPositiveButton(android.R.string.ok, null /* onClickListener */);
-
-        boolean regulatoryInfoDrawableExists = false;
-
-        final String regulatoryInfoFile = getRegulatoryInfoImageFileName();
-        final Bitmap regulatoryInfoBitmap = BitmapFactory.decodeFile(regulatoryInfoFile);
-
-        if (regulatoryInfoBitmap != null) {
-            regulatoryInfoDrawableExists = true;
-        }
-
-        int resId = 0;
-        if (!regulatoryInfoDrawableExists) {
-            resId = getResourceId();
-        }
-        if (resId != 0) {
-            try {
-                Drawable d = getDrawable(resId);
-                // set to false if the width or height is <= 2
-                // (missing PNG can return an empty 2x2 pixel Drawable)
-                regulatoryInfoDrawableExists = (d.getIntrinsicWidth() > 2
-                        && d.getIntrinsicHeight() > 2);
-            } catch (Resources.NotFoundException ignored) {
-                regulatoryInfoDrawableExists = false;
-            }
-        }
-
-        CharSequence regulatoryText = getResources()
-                .getText(R.string.regulatory_info_text);
-
-        if (regulatoryInfoDrawableExists) {
-            View view = getLayoutInflater().inflate(R.layout.regulatory_info, null);
-            ImageView image = view.findViewById(R.id.regulatoryInfo);
-            if (regulatoryInfoBitmap != null) {
-                image.setImageBitmap(regulatoryInfoBitmap);
-            } else {
-                image.setImageResource(resId);
-            }
-            builder.setView(view);
-            builder.show();
-        } else if (regulatoryText.length() > 0) {
-            builder.setMessage(regulatoryText);
-            AlertDialog dialog = builder.show();
-            // we have to show the dialog first, or the setGravity() call will throw a NPE
-            TextView messageText = (TextView) dialog.findViewById(android.R.id.message);
-            messageText.setGravity(Gravity.CENTER);
-        } else {
-            // neither drawable nor text resource exists, finish activity
-            finish();
-        }
-    }
-
-    @VisibleForTesting
-    int getResourceId() {
-        // Use regulatory_info by default.
-        int resId = getResources().getIdentifier(
-                REGULATORY_INFO_RESOURCE, "drawable", getPackageName());
-
-        // When hardware sku property exists, use regulatory_info_<sku> resource if valid.
-        final String sku = getSku();
-        if (!TextUtils.isEmpty(sku)) {
-            String regulatory_info_res = REGULATORY_INFO_RESOURCE + "_" + sku.toLowerCase();
-            int id = getResources().getIdentifier(
-                    regulatory_info_res, "drawable", getPackageName());
-            if (id != 0) {
-                resId = id;
-            }
-        }
-
-        // When hardware coo property exists, use regulatory_info_<sku>_<coo> resource if valid.
-        final String coo = getCoo();
-        if (!TextUtils.isEmpty(coo) && !TextUtils.isEmpty(sku)) {
-            final String regulatory_info_coo_res =
-                    REGULATORY_INFO_RESOURCE + "_" + sku.toLowerCase() + "_" + coo.toLowerCase();
-            final int id = getResources().getIdentifier(
-                    regulatory_info_coo_res, "drawable", getPackageName());
-            if (id != 0) {
-                resId = id;
-            }
-        }
-        return resId;
-    }
-
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        finish();   // close the activity
-    }
-
-    private String getCoo() {
-        return SystemProperties.get("ro.boot.hardware.coo", "");
-    }
-
-    private String getSku() {
-        return SystemProperties.get("ro.boot.hardware.sku", "");
-    }
-
-    private String getRegulatoryInfoImageFileName() {
-        final String sku = getSku();
-        if (TextUtils.isEmpty(sku)) {
-            return DEFAULT_REGULATORY_INFO_FILEPATH;
-        } else {
-            return String.format(Locale.US, REGULATORY_INFO_FILEPATH_TEMPLATE,
-                    sku.toLowerCase());
-        }
-    }
-}
diff --git a/src/com/android/settings/RegulatoryInfoDisplayActivity.kt b/src/com/android/settings/RegulatoryInfoDisplayActivity.kt
new file mode 100644
index 0000000..ffacb9c
--- /dev/null
+++ b/src/com/android/settings/RegulatoryInfoDisplayActivity.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2023 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
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.Gravity
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import com.android.settings.deviceinfo.regulatory.RegulatoryInfo.getRegulatoryInfo
+
+/**
+ * [Activity] that displays regulatory information for the "Regulatory information"
+ * preference item, and when "*#07#" is dialed on the Phone keypad. To enable this feature,
+ * set the "config_show_regulatory_info" boolean to true in a device overlay resource, and in the
+ * same overlay, either add a drawable named "regulatory_info.png" containing a graphical version
+ * of the required regulatory info (If ro.bootloader.hardware.sku property is set use
+ * "regulatory_info_<sku>.png where sku is ro.bootloader.hardware.sku property value in lowercase"),
+ * or add a string resource named "regulatory_info_text" with an HTML version of the required
+ * information (text will be centered in the dialog).
+ */
+class RegulatoryInfoDisplayActivity : Activity() {
+
+    /** Display the regulatory info graphic in a dialog window. */
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        val builder = AlertDialog.Builder(this)
+            .setTitle(R.string.regulatory_labels)
+            .setOnDismissListener { finish() }  // close the activity
+            .setPositiveButton(android.R.string.ok, null)
+
+        getRegulatoryInfo()?.let {
+            val view = layoutInflater.inflate(R.layout.regulatory_info, null)
+            val image = view.findViewById<ImageView>(R.id.regulatoryInfo)
+            image.setImageDrawable(it)
+            builder.setView(view)
+            builder.show()
+            return
+        }
+
+        val regulatoryText = resources.getText(R.string.regulatory_info_text)
+        if (regulatoryText.isNotEmpty()) {
+            builder.setMessage(regulatoryText)
+            val dialog = builder.show()
+            // we have to show the dialog first, or the setGravity() call will throw a NPE
+            dialog.findViewById<TextView>(android.R.id.message)?.gravity = Gravity.CENTER
+        } else {
+            // neither drawable nor text resource exists, finish activity
+            finish()
+        }
+    }
+}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index a8fa527..a67aeaa 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -52,26 +52,9 @@
     public static class AssistGestureSettingsActivity extends SettingsActivity { /* empty */}
     public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
     public static class CreateShortcutActivity extends SettingsActivity { /* empty */ }
-    public static class FaceSettingsActivity extends SettingsActivity {
-        @Override
-        protected void onCreate(Bundle savedState) {
-            setTheme(SetupWizardUtils.getTheme(this, getIntent()));
-            setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
-            ThemeHelper.trySetDynamicColor(this);
-            super.onCreate(savedState);
-        }
-    }
+    public static class FaceSettingsActivity extends SettingsActivity { /* empty */ }
     /** Container for {@link FaceSettings} to use with a pre-defined task affinity. */
-    public static class FaceSettingsInternalActivity extends SettingsActivity {
-        @Override
-        protected void onCreate(Bundle savedState) {
-            setTheme(SetupWizardUtils.getTheme(this, getIntent()));
-            setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
-            ThemeHelper.trySetDynamicColor(this);
-            super.onCreate(savedState);
-        }
-    }
-
+    public static class FaceSettingsInternalActivity extends SettingsActivity { /* empty */ }
     public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
     public static class CombinedBiometricSettingsActivity extends SettingsActivity { /* empty */ }
     public static class CombinedBiometricProfileSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 68b1a48..e97f020 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -97,7 +97,6 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.core.graphics.drawable.RoundedBitmapDrawable;
@@ -1295,4 +1294,5 @@
                 com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser);
         return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context));
     }
+
 }
diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java
index 2f852f0..6e11079 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollBase.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java
@@ -133,6 +133,7 @@
     protected long mChallenge;
     protected boolean mFromSettingsSummary;
     protected FooterBarMixin mFooterBarMixin;
+    protected boolean mShouldSetFooterBarBackground = true;
     @Nullable
     protected ScreenSizeFoldProvider mScreenSizeFoldProvider;
     @Nullable
@@ -191,12 +192,14 @@
         super.onPostCreate(savedInstanceState);
         initViews();
 
-        @SuppressLint("VisibleForTests")
-        final LinearLayout buttonContainer = mFooterBarMixin != null
-                ? mFooterBarMixin.getButtonContainer()
-                : null;
-        if (buttonContainer != null) {
-            buttonContainer.setBackgroundColor(getBackgroundColor());
+        if (mShouldSetFooterBarBackground) {
+            @SuppressLint("VisibleForTests")
+            final LinearLayout buttonContainer = mFooterBarMixin != null
+                    ? mFooterBarMixin.getButtonContainer()
+                    : null;
+            if (buttonContainer != null) {
+                buttonContainer.setBackgroundColor(getBackgroundColor());
+            }
         }
     }
 
@@ -331,7 +334,7 @@
     }
 
     @ColorInt
-    private int getBackgroundColor() {
+    public int getBackgroundColor() {
         final ColorStateList stateList = Utils.getColorAttr(this, android.R.attr.windowBackground);
         return stateList != null ? stateList.getDefaultColor() : Color.TRANSPARENT;
     }
diff --git a/src/com/android/settings/biometrics/BiometricEnrollSidecar.java b/src/com/android/settings/biometrics/BiometricEnrollSidecar.java
index 97d46a4..369fa4b 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollSidecar.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollSidecar.java
@@ -48,11 +48,16 @@
         /**
          * Called when a pointer down event has occurred.
          */
-        default void onPointerDown(int sensorId) { }
+        default void onUdfpsPointerDown(int sensorId) { }
         /**
          * Called when a pointer up event has occurred.
          */
-        default void onPointerUp(int sensorId) { }
+        default void onUdfpsPointerUp(int sensorId) { }
+
+        /**
+         * Called when udfps overlay is shown.
+         */
+        default void onUdfpsOverlayShown() { }
     }
 
     private int mEnrollmentSteps = -1;
@@ -126,29 +131,36 @@
         }
     }
 
-    private class QueuedPointerDown extends QueuedEvent {
+    private class QueuedUdfpsPointerDown extends QueuedEvent {
         private final int sensorId;
 
-        public QueuedPointerDown(int sensorId) {
+        QueuedUdfpsPointerDown(int sensorId) {
             this.sensorId = sensorId;
         }
 
         @Override
         public void send(Listener listener) {
-            listener.onPointerDown(sensorId);
+            listener.onUdfpsPointerDown(sensorId);
         }
     }
 
-    private class QueuedPointerUp extends QueuedEvent {
+    private class QueuedUdfpsPointerUp extends QueuedEvent {
         private final int sensorId;
 
-        public QueuedPointerUp(int sensorId) {
+        QueuedUdfpsPointerUp(int sensorId) {
             this.sensorId = sensorId;
         }
 
         @Override
         public void send(Listener listener) {
-            listener.onPointerUp(sensorId);
+            listener.onUdfpsPointerUp(sensorId);
+        }
+    }
+
+    private class QueuedUdfpsOverlayShown extends QueuedEvent {
+        @Override
+        public void send(Listener listener) {
+            listener.onUdfpsOverlayShown();
         }
     }
 
@@ -249,19 +261,27 @@
         }
     }
 
-    protected void onPointerDown(int sensorId) {
+    protected void onUdfpsPointerDown(int sensorId) {
         if (mListener != null) {
-            mListener.onPointerDown(sensorId);
+            mListener.onUdfpsPointerDown(sensorId);
         } else {
-            mQueuedEvents.add(new QueuedPointerDown(sensorId));
+            mQueuedEvents.add(new QueuedUdfpsPointerDown(sensorId));
         }
     }
 
-    protected void onPointerUp(int sensorId) {
+    protected void onUdfpsPointerUp(int sensorId) {
         if (mListener != null) {
-            mListener.onPointerUp(sensorId);
+            mListener.onUdfpsPointerUp(sensorId);
         } else {
-            mQueuedEvents.add(new QueuedPointerUp(sensorId));
+            mQueuedEvents.add(new QueuedUdfpsPointerUp(sensorId));
+        }
+    }
+
+    protected void onUdfpsOverlayShown() {
+        if (mListener != null) {
+            mListener.onUdfpsOverlayShown();
+        } else {
+            mQueuedEvents.add(new QueuedUdfpsOverlayShown());
         }
     }
 
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index 979faa2..2e94404 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -208,6 +208,10 @@
         mRemoveButton = findPreference(FaceSettingsRemoveButtonPreferenceController.KEY);
         mEnrollButton = findPreference(FaceSettingsEnrollButtonPreferenceController.KEY);
 
+        final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
+        mEnrollButton.setVisible(!hasEnrolled);
+        mRemoveButton.setVisible(hasEnrolled);
+
         // There is no better way to do this :/
         for (AbstractPreferenceController controller : mControllers) {
             if (controller instanceof FaceSettingsPreferenceController) {
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
index 7db5958..1e74ad7 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
@@ -21,6 +21,7 @@
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.pm.PackageManager;
 import android.hardware.face.Face;
 import android.hardware.face.FaceManager;
 import android.os.Bundle;
@@ -69,10 +70,22 @@
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 
+            final PackageManager pm = getContext().getPackageManager();
+            final boolean hasFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
+            final int dialogMessageRes;
+
+            if (hasFingerprint) {
+                dialogMessageRes = mIsConvenience
+                        ? R.string.security_settings_face_remove_dialog_details_fingerprint_conv
+                        : R.string.security_settings_face_remove_dialog_details_fingerprint;
+            } else {
+                dialogMessageRes = mIsConvenience
+                        ? R.string.security_settings_face_settings_remove_dialog_details_convenience
+                        : R.string.security_settings_face_settings_remove_dialog_details;
+            }
+
             builder.setTitle(R.string.security_settings_face_settings_remove_dialog_title)
-                    .setMessage(mIsConvenience
-                            ? R.string.security_settings_face_settings_remove_dialog_details_convenience
-                            : R.string.security_settings_face_settings_remove_dialog_details)
+                    .setMessage(dialogMessageRes)
                     .setPositiveButton(R.string.delete, mOnClickListener)
                     .setNegativeButton(R.string.cancel, mOnClickListener);
             AlertDialog dialog = builder.create();
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 7e76405..dbdb024 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -32,10 +32,8 @@
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.Point;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
-import android.graphics.Rect;
 import android.graphics.drawable.Animatable2;
 import android.graphics.drawable.AnimatedVectorDrawable;
 import android.graphics.drawable.Drawable;
@@ -48,22 +46,16 @@
 import android.os.VibrationEffect;
 import android.os.Vibrator;
 import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
-import android.view.DisplayInfo;
 import android.view.MotionEvent;
 import android.view.OrientationEventListener;
 import android.view.Surface;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.animation.AccelerateDecelerateInterpolator;
 import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
@@ -79,25 +71,20 @@
 import com.android.settings.biometrics.BiometricsEnrollEnrolling;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settingslib.display.DisplayDensityUtils;
-import com.android.settingslib.udfps.UdfpsOverlayParams;
-import com.android.settingslib.udfps.UdfpsUtils;
 
 import com.airbnb.lottie.LottieAnimationView;
 import com.airbnb.lottie.LottieCompositionFactory;
 import com.airbnb.lottie.LottieProperty;
 import com.airbnb.lottie.model.KeyPath;
-import com.google.android.setupcompat.template.FooterActionButton;
 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.template.DescriptionMixin;
 import com.google.android.setupdesign.template.HeaderMixin;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
-import java.util.Locale;
 
 /**
  * Activity which handles the actual enrolling for fingerprint.
@@ -176,8 +163,6 @@
     @VisibleForTesting
     @Nullable
     UdfpsEnrollHelper mUdfpsEnrollHelper;
-    // TODO(b/260617060): Do not hard-code mScaleFactor, referring to AuthController.
-    private float mScaleFactor = 1.0f;
     private ObjectAnimator mProgressAnim;
     private TextView mErrorText;
     private Interpolator mFastOutSlowInInterpolator;
@@ -206,7 +191,7 @@
     private boolean mHaveShownSfpsLeftEdgeLottie;
     private boolean mHaveShownSfpsRightEdgeLottie;
     private boolean mShouldShowLottie;
-    private UdfpsUtils mUdfpsUtils;
+
     private ObjectAnimator mHelpAnimation;
 
     private OrientationEventListener mOrientationEventListener;
@@ -251,82 +236,17 @@
 
         mAccessibilityManager = getSystemService(AccessibilityManager.class);
         mIsAccessibilityEnabled = mAccessibilityManager.isEnabled();
-        mUdfpsUtils = new UdfpsUtils();
 
-        final boolean isLayoutRtl = (TextUtils.getLayoutDirectionFromLocale(
-                Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL);
         listenOrientationEvent();
 
         if (mCanAssumeUdfps) {
-            int rotation = getApplicationContext().getDisplay().getRotation();
-            final GlifLayout layout = (GlifLayout) getLayoutInflater().inflate(
-                    R.layout.udfps_enroll_enrolling, null, false);
-            final UdfpsEnrollView udfpsEnrollView = layout.findViewById(R.id.udfps_animation_view);
-            updateUdfpsEnrollView(udfpsEnrollView, props.get(0));
-            switch (rotation) {
-                case Surface.ROTATION_90:
-                    final LinearLayout layoutContainer = layout.findViewById(
-                            R.id.layout_container);
-                    final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
-                            LinearLayout.LayoutParams.MATCH_PARENT,
-                            LinearLayout.LayoutParams.MATCH_PARENT);
+            final UdfpsEnrollEnrollingView layout =
+                    (UdfpsEnrollEnrollingView) getLayoutInflater().inflate(
+                            R.layout.udfps_enroll_enrolling, null, false);
+            setUdfpsEnrollHelper();
+            layout.initView(props.get(0), mUdfpsEnrollHelper, mAccessibilityManager);
 
-                    lp.setMarginEnd((int) getResources().getDimension(
-                            R.dimen.rotation_90_enroll_margin_end));
-                    layoutContainer.setPaddingRelative((int) getResources().getDimension(
-                            R.dimen.rotation_90_enroll_padding_start), 0, isLayoutRtl
-                            ? 0 : (int) getResources().getDimension(
-                            R.dimen.rotation_90_enroll_padding_end), 0);
-                    layoutContainer.setLayoutParams(lp);
-
-                    setOnHoverListener(true, layout, udfpsEnrollView);
-                    setContentView(layout, lp);
-                    break;
-
-                case Surface.ROTATION_0:
-                case Surface.ROTATION_180:
-                    // In the portrait mode, layout_container's height is 0, so it's
-                    // always shown at the bottom of the screen.
-                    final FrameLayout portraitLayoutContainer = layout.findViewById(
-                            R.id.layout_container);
-
-                    // In the portrait mode, the title and lottie animation view may
-                    // overlap when title needs three lines, so adding some paddings
-                    // between them, and adjusting the fp progress view here accordingly.
-                    final int layoutLottieAnimationPadding = (int) getResources()
-                            .getDimension(R.dimen.udfps_lottie_padding_top);
-                    portraitLayoutContainer.setPadding(0,
-                            layoutLottieAnimationPadding, 0, 0);
-                    final ImageView progressView = udfpsEnrollView.findViewById(
-                            R.id.udfps_enroll_animation_fp_progress_view);
-                    progressView.setPadding(0, -(layoutLottieAnimationPadding),
-                            0, layoutLottieAnimationPadding);
-                    final ImageView fingerprintView = udfpsEnrollView.findViewById(
-                            R.id.udfps_enroll_animation_fp_view);
-                    fingerprintView.setPadding(0, -layoutLottieAnimationPadding,
-                            0, layoutLottieAnimationPadding);
-
-                    // TODO(b/260970216) Instead of hiding the description text view, we should
-                    //  make the header view scrollable if the text is too long.
-                    // If description text view has overlap with udfps progress view, hide it.
-                    View view = layout.getDescriptionTextView();
-                    layout.getViewTreeObserver().addOnDrawListener(() -> {
-                        if (view.getVisibility() == View.VISIBLE
-                                && hasOverlap(view, udfpsEnrollView)) {
-                            view.setVisibility(View.GONE);
-                        }
-                    });
-
-                    setOnHoverListener(false, layout, udfpsEnrollView);
-                    setContentView(layout);
-                    break;
-
-                case Surface.ROTATION_270:
-                default:
-                    setOnHoverListener(true, layout, udfpsEnrollView);
-                    setContentView(layout);
-                    break;
-            }
+            setContentView(layout);
             setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
         } else if (mCanAssumeSfps) {
             setContentView(R.layout.sfps_enroll_enrolling);
@@ -366,22 +286,11 @@
                         .build()
         );
 
-        if (FeatureFlagUtils.isEnabled(getApplicationContext(),
-                FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS)) {
-            // Remove the space view and make the width of footer button container WRAP_CONTENT
-            // to avoid hiding the udfps view progress bar bottom.
-            final LinearLayout buttonContainer = mFooterBarMixin.getButtonContainer();
-            View spaceView = null;
-            for (int i = 0; i < buttonContainer.getChildCount(); i++) {
-                if (!(buttonContainer.getChildAt(i) instanceof FooterActionButton)) {
-                    spaceView = buttonContainer.getChildAt(i);
-                    break;
-                }
-            }
-            if (spaceView != null) {
-                spaceView.setVisibility(View.GONE);
-                buttonContainer.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
-            }
+        // If it's udfps, set the background color only for secondary button if necessary.
+        if (mCanAssumeUdfps) {
+            mShouldSetFooterBarBackground = false;
+            ((UdfpsEnrollEnrollingView) getLayout()).setSecondaryButtonBackground(
+                    getBackgroundColor());
         }
 
         final LayerDrawable fingerprintDrawable = mProgressBar != null
@@ -919,19 +828,26 @@
     }
 
     @Override
-    public void onPointerDown(int sensorId) {
+    public void onUdfpsPointerDown(int sensorId) {
         if (mUdfpsEnrollHelper != null) {
             mUdfpsEnrollHelper.onPointerDown(sensorId);
         }
     }
 
     @Override
-    public void onPointerUp(int sensorId) {
+    public void onUdfpsPointerUp(int sensorId) {
         if (mUdfpsEnrollHelper != null) {
             mUdfpsEnrollHelper.onPointerUp(sensorId);
         }
     }
 
+    @Override
+    public void onUdfpsOverlayShown() {
+        if (mCanAssumeUdfps) {
+            findViewById(R.id.udfps_animation_view).setVisibility(View.VISIBLE);
+        }
+    }
+
     private void updateProgress(boolean animate) {
         if (mSidecar == null || !mSidecar.isEnrolling()) {
             Log.d(TAG, "Enrollment not started yet");
@@ -1224,30 +1140,7 @@
         }
     }
 
-    private UdfpsEnrollView updateUdfpsEnrollView(UdfpsEnrollView udfpsEnrollView,
-                                                  FingerprintSensorPropertiesInternal udfpsProps) {
-        DisplayInfo displayInfo = new DisplayInfo();
-        getDisplay().getDisplayInfo(displayInfo);
-        mScaleFactor = mUdfpsUtils.getScaleFactor(displayInfo);
-        Rect udfpsBounds = udfpsProps.getLocation().getRect();
-        udfpsBounds.scale(mScaleFactor);
-
-        final Rect overlayBounds = new Rect(
-                0, /* left */
-                displayInfo.getNaturalHeight() / 2, /* top */
-                displayInfo.getNaturalWidth(), /* right */
-                displayInfo.getNaturalHeight() /* botom */);
-
-        UdfpsOverlayParams params = new UdfpsOverlayParams(
-                udfpsBounds,
-                overlayBounds,
-                displayInfo.getNaturalWidth(),
-                displayInfo.getNaturalHeight(),
-                mScaleFactor,
-                displayInfo.rotation);
-
-        udfpsEnrollView.setOverlayParams(params);
-
+    private void setUdfpsEnrollHelper() {
         mUdfpsEnrollHelper = (UdfpsEnrollHelper) getSupportFragmentManager().findFragmentByTag(
                 FingerprintEnrollEnrolling.TAG_UDFPS_HELPER);
         if (mUdfpsEnrollHelper == null) {
@@ -1257,57 +1150,6 @@
                     .add(mUdfpsEnrollHelper, FingerprintEnrollEnrolling.TAG_UDFPS_HELPER)
                     .commitAllowingStateLoss();
         }
-        udfpsEnrollView.setEnrollHelper(mUdfpsEnrollHelper);
-
-        return udfpsEnrollView;
-    }
-
-    private void setOnHoverListener(boolean isLandscape, GlifLayout enrollLayout,
-            UdfpsEnrollView udfpsEnrollView) {
-        if (!mIsAccessibilityEnabled) return;
-
-        final Context context = getApplicationContext();
-        final View.OnHoverListener onHoverListener = (v, event) -> {
-            // Map the touch to portrait mode if the device is in
-            // landscape mode.
-            final Point scaledTouch =
-                    mUdfpsUtils.getTouchInNativeCoordinates(event.getPointerId(0),
-                            event, udfpsEnrollView.getOverlayParams());
-
-            if (mUdfpsUtils.isWithinSensorArea(event.getPointerId(0), event,
-                    udfpsEnrollView.getOverlayParams())) {
-                return false;
-            }
-
-            final String theStr = mUdfpsUtils.onTouchOutsideOfSensorArea(
-                    mAccessibilityManager.isTouchExplorationEnabled(), context,
-                    scaledTouch.x, scaledTouch.y, udfpsEnrollView.getOverlayParams());
-            if (theStr != null) {
-                v.announceForAccessibility(theStr);
-            }
-            return false;
-        };
-
-        enrollLayout.findManagedViewById(isLandscape ? R.id.sud_landscape_content_area
-                : R.id.sud_layout_content).setOnHoverListener(onHoverListener);
-    }
-
-
-    @VisibleForTesting boolean hasOverlap(View view1, View view2) {
-        int[] firstPosition = new int[2];
-        int[] secondPosition = new int[2];
-
-        view1.getLocationOnScreen(firstPosition);
-        view2.getLocationOnScreen(secondPosition);
-
-        // Rect constructor parameters: left, top, right, bottom
-        Rect rectView1 = new Rect(firstPosition[0], firstPosition[1],
-                firstPosition[0] + view1.getMeasuredWidth(),
-                firstPosition[1] + view1.getMeasuredHeight());
-        Rect rectView2 = new Rect(secondPosition[0], secondPosition[1],
-                secondPosition[0] + view2.getMeasuredWidth(),
-                secondPosition[1] + view2.getMeasuredHeight());
-        return rectView1.intersect(rectView2);
     }
 
     public static class IconTouchDialog extends InstrumentedDialogFragment {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java
index 5d04cd6..493302b 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollSidecar.java
@@ -124,13 +124,18 @@
         }
 
         @Override
-        public void onPointerDown(int sensorId) {
-            FingerprintEnrollSidecar.super.onPointerDown(sensorId);
+        public void onUdfpsPointerDown(int sensorId) {
+            FingerprintEnrollSidecar.super.onUdfpsPointerDown(sensorId);
         }
 
         @Override
-        public void onPointerUp(int sensorId) {
-            FingerprintEnrollSidecar.super.onPointerUp(sensorId);
+        public void onUdfpsPointerUp(int sensorId) {
+            FingerprintEnrollSidecar.super.onUdfpsPointerUp(sensorId);
+        }
+
+        @Override
+        public void onUdfpsOverlayShown() {
+            FingerprintEnrollSidecar.super.onUdfpsOverlayShown();
         }
     };
 
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index fb3319c..e47e9a8 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -479,10 +479,8 @@
                         R.string.security_settings_fingerprint_enroll_introduction_v3_message,
                         DeviceHelper.getDeviceName(getActivity()));
                 column.mLearnMoreClickListener = learnMoreClickListener;
-                if (isSfps()) {
-                    column.mLearnMoreOverrideText = getText(
-                            R.string.security_settings_fingerprint_settings_footer_learn_more);
-                }
+                column.mLearnMoreOverrideText = getText(
+                        R.string.security_settings_fingerprint_settings_footer_learn_more);
                 mFooterColumns.add(column);
             }
         }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java b/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
index 36325a7..306b1a3 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
@@ -98,13 +98,18 @@
         }
 
         @Override
-        public void onPointerDown(int sensorId) {
-            mCallback.onPointerDown(sensorId);
+        public void onUdfpsPointerDown(int sensorId) {
+            mCallback.onUdfpsPointerDown(sensorId);
         }
 
         @Override
-        public void onPointerUp(int sensorId) {
-            mCallback.onPointerUp(sensorId);
+        public void onUdfpsPointerUp(int sensorId) {
+            mCallback.onUdfpsPointerUp(sensorId);
+        }
+
+        @Override
+        public void onUdfpsOverlayShown() {
+            mCallback.onUdfpsOverlayShown();
         }
     }
 
diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java
new file mode 100644
index 0000000..df2f2f7
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.DisplayInfo;
+import android.view.Gravity;
+import android.view.Surface;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityManager;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.annotation.ColorInt;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
+import com.android.settingslib.udfps.UdfpsOverlayParams;
+import com.android.settingslib.udfps.UdfpsUtils;
+
+import com.google.android.setupcompat.template.FooterBarMixin;
+import com.google.android.setupdesign.GlifLayout;
+import com.google.android.setupdesign.view.BottomScrollView;
+
+import java.util.Locale;
+
+/**
+ * View for udfps enrolling.
+ */
+public class UdfpsEnrollEnrollingView extends GlifLayout {
+    private final UdfpsUtils mUdfpsUtils;
+    private final Context mContext;
+    // We don't need to listen to onConfigurationChanged() for mRotation here because
+    // FingerprintEnrollEnrolling is always recreated once the configuration is changed.
+    private final int mRotation;
+    private final boolean mIsLandscape;
+    private final boolean mShouldUseReverseLandscape;
+    private UdfpsEnrollView mUdfpsEnrollView;
+    private View mHeaderView;
+    private AccessibilityManager mAccessibilityManager;
+
+
+    public UdfpsEnrollEnrollingView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mContext = context;
+        mRotation = mContext.getDisplay().getRotation();
+        mIsLandscape = mRotation == Surface.ROTATION_90 || mRotation == Surface.ROTATION_270;
+        final boolean isLayoutRtl = (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())
+                == View.LAYOUT_DIRECTION_RTL);
+        mShouldUseReverseLandscape = (mRotation == Surface.ROTATION_90 && isLayoutRtl)
+                || (mRotation == Surface.ROTATION_270 && !isLayoutRtl);
+
+        mUdfpsUtils = new UdfpsUtils();
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mHeaderView = findViewById(R.id.sud_landscape_header_area);
+        mUdfpsEnrollView = findViewById(R.id.udfps_animation_view);
+    }
+
+    void initView(FingerprintSensorPropertiesInternal udfpsProps,
+            UdfpsEnrollHelper udfpsEnrollHelper,
+            AccessibilityManager accessibilityManager) {
+        mAccessibilityManager = accessibilityManager;
+        initUdfpsEnrollView(udfpsProps, udfpsEnrollHelper);
+
+        if (!mIsLandscape) {
+            adjustPortraitPaddings();
+        } else if (mShouldUseReverseLandscape) {
+            swapHeaderAndContent();
+        }
+        setOnHoverListener();
+    }
+
+    void setSecondaryButtonBackground(@ColorInt int color) {
+        // Set the button background only when the button is not under udfps overlay to avoid UI
+        // overlap.
+        if (!mIsLandscape || mShouldUseReverseLandscape) {
+            return;
+        }
+        final Button secondaryButtonView =
+                getMixin(FooterBarMixin.class).getSecondaryButtonView();
+        secondaryButtonView.setBackgroundColor(color);
+        if (mRotation == Surface.ROTATION_90) {
+            secondaryButtonView.setGravity(Gravity.START);
+        } else {
+            secondaryButtonView.setGravity(Gravity.END);
+        }
+        mHeaderView.post(() -> {
+            secondaryButtonView.setLayoutParams(
+                    new LinearLayout.LayoutParams(mHeaderView.getMeasuredWidth(),
+                            ViewGroup.LayoutParams.WRAP_CONTENT));
+        });
+    }
+
+    private void initUdfpsEnrollView(FingerprintSensorPropertiesInternal udfpsProps,
+                                     UdfpsEnrollHelper udfpsEnrollHelper) {
+        DisplayInfo displayInfo = new DisplayInfo();
+        mContext.getDisplay().getDisplayInfo(displayInfo);
+
+        final float scaleFactor = mUdfpsUtils.getScaleFactor(displayInfo);
+        Rect udfpsBounds = udfpsProps.getLocation().getRect();
+        udfpsBounds.scale(scaleFactor);
+
+        final Rect overlayBounds = new Rect(
+                0, /* left */
+                displayInfo.getNaturalHeight() / 2, /* top */
+                displayInfo.getNaturalWidth(), /* right */
+                displayInfo.getNaturalHeight() /* botom */);
+
+        UdfpsOverlayParams params = new UdfpsOverlayParams(
+                udfpsBounds,
+                overlayBounds,
+                displayInfo.getNaturalWidth(),
+                displayInfo.getNaturalHeight(),
+                scaleFactor,
+                displayInfo.rotation);
+
+        mUdfpsEnrollView.setOverlayParams(params);
+        mUdfpsEnrollView.setEnrollHelper(udfpsEnrollHelper);
+    }
+
+    private void adjustPortraitPaddings() {
+        // In the portrait mode, layout_container's height is 0, so it's
+        // always shown at the bottom of the screen.
+        final FrameLayout portraitLayoutContainer = findViewById(R.id.layout_container);
+
+        // In the portrait mode, the title and lottie animation view may
+        // overlap when title needs three lines, so adding some paddings
+        // between them, and adjusting the fp progress view here accordingly.
+        final int layoutLottieAnimationPadding = (int) getResources()
+                .getDimension(R.dimen.udfps_lottie_padding_top);
+        portraitLayoutContainer.setPadding(0,
+                layoutLottieAnimationPadding, 0, 0);
+        final ImageView progressView = mUdfpsEnrollView.findViewById(
+                R.id.udfps_enroll_animation_fp_progress_view);
+        progressView.setPadding(0, -(layoutLottieAnimationPadding),
+                0, layoutLottieAnimationPadding);
+        final ImageView fingerprintView = mUdfpsEnrollView.findViewById(
+                R.id.udfps_enroll_animation_fp_view);
+        fingerprintView.setPadding(0, -layoutLottieAnimationPadding,
+                0, layoutLottieAnimationPadding);
+
+        // TODO(b/260970216) Instead of hiding the description text view, we should
+        //  make the header view scrollable if the text is too long.
+        // If description text view has overlap with udfps progress view, hide it.
+        final View descView = getDescriptionTextView();
+        getViewTreeObserver().addOnDrawListener(() -> {
+            if (descView.getVisibility() == View.VISIBLE
+                    && hasOverlap(descView, mUdfpsEnrollView)) {
+                descView.setVisibility(View.GONE);
+            }
+        });
+    }
+
+    private void setOnHoverListener() {
+        if (!mAccessibilityManager.isEnabled()) return;
+
+        final View.OnHoverListener onHoverListener = (v, event) -> {
+            // Map the touch to portrait mode if the device is in
+            // landscape mode.
+            final Point scaledTouch =
+                    mUdfpsUtils.getTouchInNativeCoordinates(event.getPointerId(0),
+                            event, mUdfpsEnrollView.getOverlayParams());
+
+            if (mUdfpsUtils.isWithinSensorArea(event.getPointerId(0), event,
+                    mUdfpsEnrollView.getOverlayParams())) {
+                return false;
+            }
+
+            final String theStr = mUdfpsUtils.onTouchOutsideOfSensorArea(
+                    mAccessibilityManager.isTouchExplorationEnabled(), mContext,
+                    scaledTouch.x, scaledTouch.y, mUdfpsEnrollView.getOverlayParams());
+            if (theStr != null) {
+                v.announceForAccessibility(theStr);
+            }
+            return false;
+        };
+
+        findManagedViewById(mIsLandscape ? R.id.sud_landscape_content_area
+                : R.id.sud_layout_content).setOnHoverListener(onHoverListener);
+    }
+
+    private void swapHeaderAndContent() {
+        // Reverse header and body
+        ViewGroup parentView = (ViewGroup) mHeaderView.getParent();
+        parentView.removeView(mHeaderView);
+        parentView.addView(mHeaderView);
+
+        // Hide scroll indicators
+        BottomScrollView headerScrollView = mHeaderView.findViewById(R.id.sud_header_scroll_view);
+        headerScrollView.setScrollIndicators(0);
+    }
+
+    @VisibleForTesting
+    boolean hasOverlap(View view1, View view2) {
+        int[] firstPosition = new int[2];
+        int[] secondPosition = new int[2];
+
+        view1.getLocationOnScreen(firstPosition);
+        view2.getLocationOnScreen(secondPosition);
+
+        // Rect constructor parameters: left, top, right, bottom
+        Rect rectView1 = new Rect(firstPosition[0], firstPosition[1],
+                firstPosition[0] + view1.getMeasuredWidth(),
+                firstPosition[1] + view1.getMeasuredHeight());
+        Rect rectView2 = new Rect(secondPosition[0], secondPosition[1],
+                secondPosition[0] + view2.getMeasuredWidth(),
+                secondPosition[1] + view2.getMeasuredHeight());
+        return rectView1.intersect(rectView2);
+    }
+}
diff --git a/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModel.java b/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModel.java
index d77d9d3..7074288 100644
--- a/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModel.java
+++ b/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModel.java
@@ -103,12 +103,12 @@
         }
 
         @Override
-        public void onPointerDown(int sensorId) {
+        public void onUdfpsPointerDown(int sensorId) {
             mPointerDownLiveData.postValue(sensorId);
         }
 
         @Override
-        public void onPointerUp(int sensorId) {
+        public void onUdfpsPointerUp(int sensorId) {
             mPointerUpLiveData.postValue(sensorId);
         }
     };
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
index 724947c..3472e39 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
@@ -69,6 +69,7 @@
     private static final String ENABLE_DUAL_MODE_AUDIO =
             "persist.bluetooth.enable_dual_mode_audio";
     private static final String CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT = "le_audio_enabled_by_default";
+    private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = false;
 
     private LocalBluetoothManager mManager;
     private LocalBluetoothProfileManager mProfileManager;
@@ -96,12 +97,6 @@
     protected void init(PreferenceScreen screen) {
         mProfilesContainer = (PreferenceCategory)screen.findPreference(getPreferenceKey());
         mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
-        mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
-                SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, true);
-        mIsLeAudioToggleEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
-                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED, false)
-                || DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
-                CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT, false);
         // Call refresh here even though it will get called later in onResume, to avoid the
         // list of switches appearing to "pop" into the page.
         refresh();
@@ -151,8 +146,8 @@
             profilePref.setEnabled(!mCachedDevice.isBusy());
         }
 
-        if (profile instanceof LeAudioProfile && !mIsLeAudioToggleEnabled) {
-            profilePref.setVisible(false);
+        if (profile instanceof LeAudioProfile) {
+            profilePref.setVisible(mIsLeAudioToggleEnabled);
         }
 
         if (profile instanceof MapProfile) {
@@ -437,6 +432,7 @@
 
     @Override
     public void onResume() {
+        updateLeAudioConfig();
         for (CachedBluetoothDevice item : mAllOfCachedDevices) {
             item.registerCallback(this);
         }
@@ -444,6 +440,21 @@
         refresh();
     }
 
+    private void updateLeAudioConfig() {
+        mIsLeContactSharingEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_LE_AUDIO_CONTACT_SHARING_ENABLED, true);
+        boolean isLeDeviceDetailEnabled = DeviceConfig.getBoolean(
+                DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED,
+                LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE);
+        boolean isLeEnabledByDefault = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BLUETOOTH,
+                CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT, false);
+        mIsLeAudioToggleEnabled = isLeDeviceDetailEnabled || isLeEnabledByDefault;
+        Log.d(TAG, "BT_LE_AUDIO_CONTACT_SHARING_ENABLED:" + mIsLeContactSharingEnabled
+                + ", BT_LE_AUDIO_DEVICE_DETAIL_ENABLED:" + isLeDeviceDetailEnabled
+                + ", CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT:" + isLeEnabledByDefault);
+    }
+
     @Override
     public void onDeviceAttributesChanged() {
         for (CachedBluetoothDevice item : mAllOfCachedDevices) {
diff --git a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
index 1da8672..60d63c6 100644
--- a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
+++ b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
@@ -63,6 +64,13 @@
 
     @Override
     public Dialog onCreateDialog(Bundle inState) {
+        Context context = getContext();
+        mDevice = getDevice(context);
+        if (mDevice == null) {
+            Log.e(TAG, "onCreateDialog: Device is null.");
+            return null;
+        }
+
         DialogInterface.OnClickListener onConfirm = (dialog, which) -> {
             mDevice.unpair();
             Activity activity = getActivity();
@@ -70,9 +78,6 @@
                 activity.finish();
             }
         };
-        Context context = getContext();
-        mDevice = getDevice(context);
-
         AlertDialog dialog = new AlertDialog.Builder(context)
                 .setPositiveButton(R.string.bluetooth_unpair_dialog_forget_confirm_button,
                         onConfirm)
diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java b/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
index 92786c9..a0b249d 100644
--- a/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
+++ b/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
@@ -98,7 +98,7 @@
                         BluetoothBroadcastUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
 
         if (fragment == null) {
-            fragment = new QrCodeScanModeFragment(mIsGroupOp, mSink);
+            fragment = new QrCodeScanModeFragment();
         } else {
             if (fragment.isVisible()) {
                 return;
diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
index f89dac6..80aedd7 100644
--- a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
+++ b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
@@ -18,7 +18,6 @@
 
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
-import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Matrix;
@@ -71,9 +70,7 @@
 
     public static final String KEY_BROADCAST_METADATA = "key_broadcast_metadata";
 
-    private boolean mIsGroupOp;
     private int mCornerRadius;
-    private BluetoothDevice mSink;
     private String mBroadcastMetadata;
     private Context mContext;
     private QrCamera mCamera;
@@ -81,11 +78,6 @@
     private TextView mSummary;
     private TextView mErrorMessage;
 
-    public QrCodeScanModeFragment(boolean isGroupOp, BluetoothDevice sink) {
-        mIsGroupOp = isGroupOp;
-        mSink = sink;
-    }
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 4dc8f1a..578493a 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -33,6 +33,7 @@
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI;
 
+import android.app.PendingIntent;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Context;
@@ -75,6 +76,8 @@
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.settingslib.widget.AdaptiveIcon;
 
+import com.google.common.collect.Iterables;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -152,7 +155,14 @@
         }
         bindIcon(pref, tile, forceRoundedIcon);
 
-        if (tile instanceof ActivityTile) {
+        if (tile.hasPendingIntent()) {
+            // Pending intent cannot be launched within the settings app panel, and will thus always
+            // be executed directly.
+            pref.setOnPreferenceClickListener(preference -> {
+                launchPendingIntentOrSelectProfile(activity, tile, fragment.getMetricsCategory());
+                return true;
+            });
+        } else if (tile instanceof ActivityTile) {
             final int sourceMetricsCategory = fragment.getMetricsCategory();
             final Bundle metadata = tile.getMetaData();
             String clsName = null;
@@ -441,6 +451,33 @@
         preference.setIcon(iconDrawable);
     }
 
+    private void launchPendingIntentOrSelectProfile(FragmentActivity activity, Tile tile,
+            int sourceMetricCategory) {
+        ProfileSelectDialog.updatePendingIntentsIfNeeded(mContext, tile);
+
+        if (tile.pendingIntentMap.isEmpty()) {
+            Log.w(TAG, "Cannot resolve pendingIntent, skipping. " + tile.getIntent());
+            return;
+        }
+
+        mMetricsFeatureProvider.logSettingsTileClick(tile.getKey(mContext), sourceMetricCategory);
+
+        // Launch the pending intent directly if there's only one available.
+        if (tile.pendingIntentMap.size() == 1) {
+            PendingIntent pendingIntent = Iterables.getOnlyElement(tile.pendingIntentMap.values());
+            try {
+                pendingIntent.send();
+            } catch (PendingIntent.CanceledException e) {
+                Log.w(TAG, "Failed executing pendingIntent. " + pendingIntent.getIntent(), e);
+            }
+            return;
+        }
+
+        ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile,
+                sourceMetricCategory, /* onShowListener= */ null,
+                /* onDismissListener= */ null, /* onCancelListener= */ null);
+    }
+
     private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent,
             int sourceMetricCategory, TopLevelHighlightMixin highlightMixin,
             boolean isDuplicateClick) {
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 6076a25..f8a5d76 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -31,6 +31,7 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
@@ -47,7 +48,6 @@
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.drawer.DashboardCategory;
-import com.android.settingslib.drawer.ProviderTile;
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.search.Indexable;
 
@@ -55,6 +55,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -504,6 +505,10 @@
         // Install dashboard tiles and collect pending observers.
         final boolean forceRoundedIcons = shouldForceRoundedIcon();
         final List<DynamicDataObserver> pendingObservers = new ArrayList<>();
+
+        // Move group tiles to the beginning of the list to ensure they are created before the
+        // other tiles.
+        tiles.sort(Comparator.comparingInt(tile -> tile.getType() == Tile.Type.GROUP ? 0 : 1));
         for (Tile tile : tiles) {
             final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile);
             if (TextUtils.isEmpty(key)) {
@@ -526,7 +531,14 @@
                 observers = mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers(
                         getActivity(), this, forceRoundedIcons, pref, tile, key,
                         mPlaceholderPreferenceController.getOrder());
-                screen.addPreference(pref);
+                if (tile.hasGroupKey() && mDashboardTilePrefKeys.containsKey(tile.getGroupKey())) {
+                    final Preference group = screen.findPreference(tile.getGroupKey());
+                    if (group instanceof PreferenceCategory) {
+                        ((PreferenceCategory) group).addPreference(pref);
+                    }
+                } else {
+                    screen.addPreference(pref);
+                }
                 registerDynamicDataObservers(observers);
                 mDashboardTilePrefKeys.put(key, observers);
             }
@@ -569,11 +581,28 @@
     }
 
     protected Preference createPreference(Tile tile) {
-        return tile instanceof ProviderTile
-                ? new SwitchPreference(getPrefContext())
-                : tile.hasSwitch()
-                        ? new PrimarySwitchPreference(getPrefContext())
-                        : new Preference(getPrefContext());
+        switch (tile.getType()) {
+            case EXTERNAL_ACTION:
+                Preference externalActionPreference = new Preference(getPrefContext());
+                externalActionPreference
+                        .setWidgetLayoutResource(R.layout.preference_external_action_icon);
+                return externalActionPreference;
+            case SWITCH:
+                return new SwitchPreference(getPrefContext());
+            case SWITCH_WITH_ACTION:
+                return new PrimarySwitchPreference(getPrefContext());
+            case GROUP:
+                mMetricsFeatureProvider.action(
+                        mMetricsFeatureProvider.getAttribution(getActivity()),
+                        SettingsEnums.ACTION_SETTINGS_GROUP_TILE_ADDED_TO_SCREEN,
+                        getMetricsCategory(),
+                        tile.getKey(getContext()),
+                        /* value= */ 0);
+                return new PreferenceCategory((getPrefContext()));
+            case ACTION:
+            default:
+                return new Preference(getPrefContext());
+        }
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
index ef6ad83..58a51cb 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
@@ -17,6 +17,7 @@
 package com.android.settings.dashboard.profileselector;
 
 import android.app.Dialog;
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
@@ -127,13 +128,25 @@
     @Override
     public void onClick(int position) {
         final UserHandle user = mSelectedTile.userHandle.get(position);
-        // Show menu on top level items.
-        final Intent intent = new Intent(mSelectedTile.getIntent());
-        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
-                .logStartedIntentWithProfile(intent, mSourceMetricCategory,
-                        position == 1 /* isWorkProfile */);
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        getActivity().startActivityAsUser(intent, user);
+        if (!mSelectedTile.hasPendingIntent()) {
+            final Intent intent = new Intent(mSelectedTile.getIntent());
+            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
+                    .logStartedIntentWithProfile(intent, mSourceMetricCategory,
+                            position == 1 /* isWorkProfile */);
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+            getActivity().startActivityAsUser(intent, user);
+        } else {
+            PendingIntent pendingIntent = mSelectedTile.pendingIntentMap.get(user);
+            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
+                    .logSettingsTileClickWithProfile(mSelectedTile.getKey(getContext()),
+                            mSourceMetricCategory,
+                            position == 1 /* isWorkProfile */);
+            try {
+                pendingIntent.send();
+            } catch (PendingIntent.CanceledException e) {
+                Log.w(TAG, "Failed executing pendingIntent. " + pendingIntent.getIntent(), e);
+            }
+        }
         dismiss();
     }
 
@@ -178,4 +191,36 @@
             }
         }
     }
+
+    /**
+     * Checks the userHandle and pendingIntentMap in the provided tile, and remove the invalid
+     * entries if any.
+     */
+    public static void updatePendingIntentsIfNeeded(Context context, Tile tile) {
+        if (tile.userHandle == null || tile.userHandle.size() <= 1
+                || tile.pendingIntentMap.size() <= 1) {
+            return;
+        }
+        for (UserHandle userHandle : List.copyOf(tile.userHandle)) {
+            if (!tile.pendingIntentMap.containsKey(userHandle)) {
+                if (DEBUG) {
+                    Log.d(TAG, "Delete the user without pending intent: "
+                            + userHandle.getIdentifier());
+                }
+                tile.userHandle.remove(userHandle);
+            }
+        }
+
+        final UserManager userManager = UserManager.get(context);
+        for (UserHandle userHandle : List.copyOf(tile.pendingIntentMap.keySet())) {
+            UserInfo userInfo = userManager.getUserInfo(userHandle.getIdentifier());
+            if (userInfo == null || userInfo.isCloneProfile()) {
+                if (DEBUG) {
+                    Log.d(TAG, "Delete the user: " + userHandle.getIdentifier());
+                }
+                tile.userHandle.remove(userHandle);
+                tile.pendingIntentMap.remove(userHandle);
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java b/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
index a54c594..9545728 100644
--- a/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
@@ -40,6 +40,7 @@
 
     private static final String PREFERENCE_KEY = "bluetooth_show_leaudio_device_details";
     private static final String CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT = "le_audio_enabled_by_default";
+    private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = false;
     static int sLeAudioSupportedStateCache = BluetoothStatusCodes.ERROR_UNKNOWN;
 
     @VisibleForTesting
@@ -75,7 +76,7 @@
         DeviceConfig.setProperty(
                 DeviceConfig.NAMESPACE_SETTINGS_UI,
                 SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED,
-                isEnabled ? "true" : "false", false);
+                isEnabled ? "true" : "false", LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE);
         return true;
     }
 
@@ -87,7 +88,8 @@
 
         final boolean leAudioDeviceDetailEnabled = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_SETTINGS_UI,
-                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED, false);
+                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED,
+                LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE);
         final boolean leAudioEnabledByDefault = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_BLUETOOTH, CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT, false);
 
@@ -102,6 +104,7 @@
         // Reset the toggle to null when the developer option is disabled
         DeviceConfig.setProperty(
                 DeviceConfig.NAMESPACE_SETTINGS_UI,
-                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED, "null", false);
+                SettingsUIDeviceConfig.BT_LE_AUDIO_DEVICE_DETAIL_ENABLED, "null",
+                LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE);
     }
 }
diff --git a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
index e682783..ccae7e9 100644
--- a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
@@ -74,10 +74,12 @@
         return ThreadUtils.postOnBackgroundThread(() -> {
             final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
                     getStorageManagerVolumeProvider());
-            storageCacheHelper.cacheUsedSize(info.totalBytes - info.freeBytes);
+
+            long usedBytes = info.totalBytes - info.freeBytes;
+            storageCacheHelper.cacheUsedSize(usedBytes);
             ThreadUtils.postOnMainThread(() -> {
                 preference.setSummary(
-                        getSummary(info.totalBytes - info.freeBytes, info.totalBytes));
+                        getSummary(usedBytes, info.totalBytes));
             });
         });
     }
diff --git a/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfo.kt b/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfo.kt
new file mode 100644
index 0000000..e26e061
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfo.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2023 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.deviceinfo.regulatory
+
+import android.content.Context
+import android.content.res.Resources
+import android.graphics.drawable.Drawable
+import android.os.SystemProperties
+import androidx.annotation.DrawableRes
+import androidx.annotation.VisibleForTesting
+import com.android.settings.R
+
+
+
+/** To load Regulatory Info from device. */
+object RegulatoryInfo {
+    private const val REGULATORY_INFO_RESOURCE = "regulatory_info"
+
+    @VisibleForTesting
+    const val KEY_COO = "ro.boot.hardware.coo"
+
+    @VisibleForTesting
+    const val KEY_SKU = "ro.boot.hardware.sku"
+
+    /** Gets the regulatory drawable. */
+    fun Context.getRegulatoryInfo(): Drawable? {
+        val sku = getSku()
+        if (sku.isNotBlank()) {
+            // When hardware coo property exists, use regulatory_info_<sku>_<coo> resource if valid.
+            val coo = getCoo()
+            if (coo.isNotBlank()) {
+                getRegulatoryInfo("${REGULATORY_INFO_RESOURCE}_${sku}_$coo")?.let { return it }
+            }
+            // Use regulatory_info_<sku> resource if valid.
+            getRegulatoryInfo("${REGULATORY_INFO_RESOURCE}_$sku")?.let { return it }
+        }
+        return getRegulatoryInfo(REGULATORY_INFO_RESOURCE)
+    }
+
+    private fun getCoo(): String = SystemProperties.get(KEY_COO).lowercase()
+
+    private fun getSku(): String = SystemProperties.get(KEY_SKU).lowercase()
+
+    private fun Context.getRegulatoryInfo(fileName: String): Drawable? {
+        val overlayPackageName =
+            resources.getString(R.string.config_regulatory_info_overlay_package_name)
+                .ifBlank { packageName }
+        val resources = packageManager.getResourcesForApplication(overlayPackageName)
+        val id = resources.getIdentifier(fileName, "drawable", overlayPackageName)
+        return if (id > 0) resources.getRegulatoryInfo(id) else null
+    }
+
+    private fun Resources.getRegulatoryInfo(@DrawableRes resId: Int): Drawable? = try {
+        getDrawable(resId, null).takeIf {
+            // Ignore the placeholder image
+            it.intrinsicWidth > 10 && it.intrinsicHeight > 10
+        }
+    } catch (_: Resources.NotFoundException) {
+        null
+    }
+}
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
index de7d25f..daf1793 100644
--- a/src/com/android/settings/display/ScreenResolutionFragment.java
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -369,6 +369,12 @@
 
         private void restoreDensity() {
             final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
+            /* If current density is the same as a default density of other resolutions,
+             * then mCurrentIndex may be out of boundary.
+             */
+            if (density.getDefaultDisplayDensityValues().length <= mCurrentIndex) {
+                mCurrentIndex = density.getCurrentIndexForDefaultDisplay();
+            }
             if (density.getDefaultDisplayDensityValues()[mCurrentIndex]
                     != density.getDefaultDensityForDefaultDisplay()) {
                 density.setForcedDisplayDensity(mCurrentIndex);
diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java
index 95a0e4d..49a1a85 100644
--- a/src/com/android/settings/network/UiccSlotUtil.java
+++ b/src/com/android/settings/network/UiccSlotUtil.java
@@ -17,7 +17,10 @@
 package com.android.settings.network;
 
 import android.annotation.IntDef;
+import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.provider.Settings;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -54,6 +57,28 @@
     public static final int INVALID_PHYSICAL_SLOT_ID = -1;
     public static final int INVALID_PORT_ID = -1;
 
+    @VisibleForTesting
+    static class SimSlotChangeReceiver extends BroadcastReceiver{
+        private final CountDownLatch mLatch;
+        SimSlotChangeReceiver(CountDownLatch latch) {
+            mLatch = latch;
+        }
+
+        public void registerOn(Context context) {
+            context.registerReceiver(this,
+                    new IntentFilter(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED),
+                    Context.RECEIVER_EXPORTED/*UNAUDITED*/);
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            Log.i(TAG, "Action: " + intent.getAction());
+            if (TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED.equals(intent.getAction())) {
+                mLatch.countDown();
+            }
+        }
+    }
+
     /**
      * Mode for switching to eSIM slot which decides whether there is cleanup process, e.g.
      * disabling test profile, after eSIM slot is activated and whether we will wait it finished.
@@ -229,19 +254,27 @@
                                 && uiccSlotMapping.getPortIndex() == port);
     }
 
-    private static void performSwitchToSlot(TelephonyManager telMgr,
+    @VisibleForTesting
+    static void performSwitchToSlot(TelephonyManager telMgr,
             Collection<UiccSlotMapping> uiccSlotMappings, Context context)
             throws UiccSlotsException {
-        CarrierConfigChangedReceiver receiver = null;
+        BroadcastReceiver receiver = null;
         long waitingTimeMillis =
                 Settings.Global.getLong(
                         context.getContentResolver(),
                         Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
                         DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS);
+        Log.d(TAG, "Set waitingTime as " + waitingTimeMillis);
+
         try {
             CountDownLatch latch = new CountDownLatch(1);
-            receiver = new CarrierConfigChangedReceiver(latch);
-            receiver.registerOn(context);
+            if (isMultipleEnabledProfilesSupported(telMgr)) {
+                receiver = new SimSlotChangeReceiver(latch);
+                ((SimSlotChangeReceiver) receiver).registerOn(context);
+            } else {
+                receiver = new CarrierConfigChangedReceiver(latch);
+                ((CarrierConfigChangedReceiver) receiver).registerOn(context);
+            }
             telMgr.setSimSlotMapping(uiccSlotMappings);
             latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS);
         } catch (InterruptedException e) {
@@ -435,4 +468,14 @@
         Log.i(TAG, "isRemovableSimEnabled: " + isRemovableSimEnabled);
         return isRemovableSimEnabled;
     }
+
+    private static boolean isMultipleEnabledProfilesSupported(TelephonyManager telMgr) {
+        List<UiccCardInfo> cardInfos = telMgr.getUiccCardsInfo();
+        if (cardInfos == null) {
+            Log.w(TAG, "UICC cards info list is empty.");
+            return false;
+        }
+        return cardInfos.stream().anyMatch(
+                cardInfo -> cardInfo.isMultipleEnabledProfilesSupported());
+    }
 }
diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java b/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
deleted file mode 100644
index a536c1d..0000000
--- a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.telephony;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.NetworkTemplate;
-import android.provider.Settings;
-import android.telephony.SubscriptionManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.preference.Preference;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.R;
-import com.android.settings.datausage.DataUsageUtils;
-import com.android.settings.datausage.lib.DataUsageLib;
-import com.android.settingslib.net.DataUsageController;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Preference controller for "Data usage"
- */
-public class DataUsagePreferenceController extends TelephonyBasePreferenceController {
-
-    private static final String LOG_TAG = "DataUsagePreferCtrl";
-
-    private Future<NetworkTemplate> mTemplateFuture;
-    private AtomicReference<NetworkTemplate> mTemplate;
-    private Future<Long> mHistoricalUsageLevel;
-
-    public DataUsagePreferenceController(Context context, String key) {
-        super(context, key);
-        mTemplate = new AtomicReference<NetworkTemplate>();
-    }
-
-    @Override
-    public int getAvailabilityStatus(int subId) {
-        return (SubscriptionManager.isValidSubscriptionId(subId))
-                && DataUsageUtils.hasMobileData(mContext)
-                ? AVAILABLE
-                : AVAILABLE_UNSEARCHABLE;
-    }
-
-    @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
-            return false;
-        }
-        final Intent intent = new Intent(Settings.ACTION_MOBILE_DATA_USAGE);
-        intent.putExtra(Settings.EXTRA_NETWORK_TEMPLATE, getNetworkTemplate());
-        intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
-
-        mContext.startActivity(intent);
-        return true;
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
-            preference.setEnabled(false);
-            return;
-        }
-        final CharSequence summary = getDataUsageSummary(mContext, mSubId);
-        if (summary == null) {
-            preference.setEnabled(false);
-        } else {
-            preference.setEnabled(true);
-            preference.setSummary(summary);
-        }
-    }
-
-    public void init(int subId) {
-        mSubId = subId;
-        mTemplate.set(null);
-        mTemplateFuture = ThreadUtils.postOnBackgroundThread(()
-                -> fetchMobileTemplate(mContext, mSubId));
-    }
-
-    private NetworkTemplate fetchMobileTemplate(Context context, int subId) {
-        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
-            return null;
-        }
-        return DataUsageLib.getMobileTemplate(context, subId);
-    }
-
-    private NetworkTemplate getNetworkTemplate() {
-        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
-            return null;
-        }
-        NetworkTemplate template = mTemplate.get();
-        if (template != null) {
-            return template;
-        }
-        try {
-            template = mTemplateFuture.get();
-            mTemplate.set(template);
-        } catch (ExecutionException | InterruptedException | NullPointerException exception) {
-            Log.e(LOG_TAG, "Fail to get data usage template", exception);
-        }
-        return template;
-    }
-
-    @VisibleForTesting
-    DataUsageController.DataUsageInfo getDataUsageInfo(DataUsageController controller) {
-        return controller.getDataUsageInfo(getNetworkTemplate());
-    }
-
-    private CharSequence getDataUsageSummary(Context context, int subId) {
-        final DataUsageController controller = new DataUsageController(context);
-        controller.setSubscriptionId(subId);
-
-        mHistoricalUsageLevel = ThreadUtils.postOnBackgroundThread(() ->
-                controller.getHistoricalUsageLevel(getNetworkTemplate()));
-
-        final DataUsageController.DataUsageInfo usageInfo = getDataUsageInfo(controller);
-
-        long usageLevel = usageInfo.usageLevel;
-        if (usageLevel <= 0L) {
-            try {
-                usageLevel = mHistoricalUsageLevel.get();
-            } catch (Exception exception) {
-            }
-        }
-        if (usageLevel <= 0L) {
-            return null;
-        }
-        return context.getString(R.string.data_usage_template,
-                DataUsageUtils.formatDataUsage(context, usageLevel), usageInfo.period);
-    }
-}
diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt
new file mode 100644
index 0000000..88da325
--- /dev/null
+++ b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony
+
+import android.content.Context
+import android.content.Intent
+import android.net.NetworkTemplate
+import android.provider.Settings
+import android.telephony.SubscriptionManager
+import androidx.annotation.VisibleForTesting
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import androidx.preference.Preference
+import androidx.preference.PreferenceScreen
+import com.android.settings.R
+import com.android.settings.datausage.DataUsageUtils
+import com.android.settings.datausage.lib.DataUsageLib
+import com.android.settingslib.net.DataUsageController
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Preference controller for "Data usage"
+ */
+class DataUsagePreferenceController(context: Context, key: String) :
+    TelephonyBasePreferenceController(context, key) {
+
+    private lateinit var preference: Preference
+    private var networkTemplate: NetworkTemplate? = null
+
+    @VisibleForTesting
+    var dataUsageControllerFactory: (Context) -> DataUsageController = { DataUsageController(it) }
+
+    fun init(subId: Int) {
+        mSubId = subId
+    }
+
+    override fun getAvailabilityStatus(subId: Int): Int = when {
+        SubscriptionManager.isValidSubscriptionId(subId) &&
+            DataUsageUtils.hasMobileData(mContext) -> AVAILABLE
+
+        else -> AVAILABLE_UNSEARCHABLE
+    }
+
+    override fun displayPreference(screen: PreferenceScreen) {
+        super.displayPreference(screen)
+        preference = screen.findPreference(preferenceKey)!!
+    }
+
+    fun whenViewCreated(viewLifecycleOwner: LifecycleOwner) {
+        viewLifecycleOwner.lifecycleScope.launch {
+            viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+                update()
+            }
+        }
+    }
+
+    override fun handlePreferenceTreeClick(preference: Preference): Boolean {
+        if (preference.key != preferenceKey || networkTemplate == null) return false
+        val intent = Intent(Settings.ACTION_MOBILE_DATA_USAGE).apply {
+            putExtra(Settings.EXTRA_NETWORK_TEMPLATE, networkTemplate)
+            putExtra(Settings.EXTRA_SUB_ID, mSubId)
+        }
+        mContext.startActivity(intent)
+        return true
+    }
+
+    private suspend fun update() {
+        val summary = withContext(Dispatchers.Default) {
+            networkTemplate = getNetworkTemplate()
+            getDataUsageSummary()
+        }
+        if (summary == null) {
+            preference.isEnabled = false
+        } else {
+            preference.isEnabled = true
+            preference.summary = summary
+        }
+    }
+
+    private fun getNetworkTemplate(): NetworkTemplate? = when {
+        SubscriptionManager.isValidSubscriptionId(mSubId) -> {
+            DataUsageLib.getMobileTemplate(mContext, mSubId)
+        }
+
+        else -> null
+    }
+
+    private fun getDataUsageSummary(): String? {
+        val networkTemplate = networkTemplate ?: return null
+        val controller = dataUsageControllerFactory(mContext).apply {
+            setSubscriptionId(mSubId)
+        }
+        val usageInfo = controller.getDataUsageInfo(networkTemplate)
+        if (usageInfo != null && usageInfo.usageLevel > 0) {
+            return mContext.getString(
+                R.string.data_usage_template,
+                DataUsageUtils.formatDataUsage(mContext, usageInfo.usageLevel),
+                usageInfo.period,
+            )
+        }
+
+        return controller.getHistoricalUsageLevel(networkTemplate).takeIf { it > 0 }?.let {
+            mContext.getString(
+                R.string.data_used_template,
+                DataUsageUtils.formatDataUsage(mContext, it),
+            )
+        }
+    }
+}
diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
index 5908ecd..8f59f0e 100644
--- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
@@ -23,6 +23,7 @@
 import android.telephony.TelephonyManager;
 import android.telephony.data.ApnSetting;
 
+import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.network.MobileDataContentObserver;
@@ -31,21 +32,20 @@
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
 /**
- * Preference controller for "Mobile data"
+ * Preference controller for "MMS messages"
  */
 public class MmsMessagePreferenceController extends TelephonyTogglePreferenceController implements
         LifecycleObserver, OnStart, OnStop {
     private TelephonyManager mTelephonyManager;
-    private SubscriptionManager mSubscriptionManager;
     private MobileDataContentObserver mMobileDataContentObserver;
     private PreferenceScreen mScreen;
+    private Preference mPreference;
 
     public MmsMessagePreferenceController(Context context, String key) {
         super(context, key);
-        mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
         mMobileDataContentObserver = new MobileDataContentObserver(
                 new Handler(Looper.getMainLooper()));
-        mMobileDataContentObserver.setOnMobileDataChangedListener(()->refreshPreference());
+        mMobileDataContentObserver.setOnMobileDataChangedListener(() -> refreshPreference());
     }
 
     @Override
@@ -63,6 +63,7 @@
     public void onStart() {
         if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             mMobileDataContentObserver.register(mContext, mSubId);
+            updateState(mPreference);
         }
     }
 
@@ -77,6 +78,7 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mScreen = screen;
+        mPreference = screen.findPreference(getPreferenceKey());
     }
 
 
@@ -88,12 +90,15 @@
 
     @Override
     public boolean setChecked(boolean isChecked) {
+        if (mTelephonyManager == null) {
+            return false;
+        }
         mTelephonyManager.setMobileDataPolicyEnabled(
                 TelephonyManager.MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, isChecked);
-        return isChecked == mTelephonyManager.isMobileDataPolicyEnabled(
-                TelephonyManager.MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED);
+        return true;
     }
 
+
     @Override
     public boolean isChecked() {
         return mTelephonyManager != null && mTelephonyManager.isDataEnabledForApn(
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 1d862f3..5b57ede 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -31,7 +31,10 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.view.View;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
@@ -328,6 +331,12 @@
     }
 
     @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        use(DataUsagePreferenceController.class).whenViewCreated(getViewLifecycleOwner());
+    }
+
+    @Override
     public void onResume() {
         super.onResume();
         mMobileNetworkRepository.addRegister(this, this, mSubId);
diff --git a/src/com/android/settings/network/tether/TetherSettings.java b/src/com/android/settings/network/tether/TetherSettings.java
index 6f6ba8e..5398e9b 100644
--- a/src/com/android/settings/network/tether/TetherSettings.java
+++ b/src/com/android/settings/network/tether/TetherSettings.java
@@ -148,12 +148,13 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+        // Even when the UI is restricted, addPreferencesFromResource cannot be omitted.
+        addPreferencesFromResource(R.xml.tether_prefs);
         setIfOnlyAvailableForAdmins(true);
         if (isUiRestricted()) {
             return;
         }
 
-        addPreferencesFromResource(R.xml.tether_prefs);
         mContext = getContext();
         mDataSaverBackend = new DataSaverBackend(mContext);
         mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled();
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index deab9f2..16c4f5b 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -1103,13 +1103,8 @@
 
         @Override
         protected Pair<Boolean, Intent> saveAndVerifyInBackground() {
-            boolean success;
-            try {
-                success = mUtils.setLockCredential(mChosenPassword, mCurrentCredential, mUserId);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "Failed to set lockscreen credential", e);
-                success = false;
-            }
+            final boolean success = mUtils.setLockCredential(
+                    mChosenPassword, mCurrentCredential, mUserId);
             if (success) {
                 unifyProfileCredentialIfRequested();
             }
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 7854076..a2fd986 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -442,7 +442,8 @@
         protected boolean mForFace;
         protected boolean mForBiometrics;
 
-        private static final String KEY_UI_STAGE = "uiStage";
+        @VisibleForTesting
+        static final String KEY_UI_STAGE = "uiStage";
         private static final String KEY_PATTERN_CHOICE = "chosenPattern";
         private static final String KEY_CURRENT_PATTERN = "currentPattern";
 
@@ -718,10 +719,6 @@
             final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
             mUiStage = stage;
 
-            if (stage == Stage.Introduction) {
-                layout.setDescriptionText(stage.headerMessage);
-            }
-
             // header text, footer text, visibility and
             // enabled state all known from the stage
             if (stage == Stage.ChoiceTooShort) {
@@ -744,16 +741,13 @@
                 Theme theme = getActivity().getTheme();
                 theme.resolveAttribute(R.attr.colorError, typedValue, true);
                 mHeaderText.setTextColor(typedValue.data);
+            } else if (mDefaultHeaderColorList != null) {
+                mHeaderText.setTextColor(mDefaultHeaderColorList);
+            }
 
-            } else {
-                if (mDefaultHeaderColorList != null) {
-                    mHeaderText.setTextColor(mDefaultHeaderColorList);
-                }
 
-                if (stage == Stage.NeedToConfirm) {
-                    mHeaderText.setText(stage.headerMessage);
-                    layout.setHeaderText(R.string.lockpassword_draw_your_pattern_again_header);
-                }
+            if (stage == Stage.ConfirmWrong || stage == Stage.NeedToConfirm) {
+                layout.setHeaderText(R.string.lockpassword_draw_your_pattern_again_header);
             }
 
             updateFooterLeftButton(stage);
@@ -898,13 +892,8 @@
         @Override
         protected Pair<Boolean, Intent> saveAndVerifyInBackground() {
             final int userId = mUserId;
-            boolean success;
-            try {
-                success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential, userId);
-            } catch (RuntimeException e) {
-                Log.e(TAG, "Failed to set lockscreen credential", e);
-                success = false;
-            }
+            final boolean success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential,
+                    userId);
             if (success) {
                 unifyProfileCredentialIfRequested();
             }
diff --git a/src/com/android/settings/password/PasswordRequirementAdapter.java b/src/com/android/settings/password/PasswordRequirementAdapter.java
index 0e194af..a21a3f4 100644
--- a/src/com/android/settings/password/PasswordRequirementAdapter.java
+++ b/src/com/android/settings/password/PasswordRequirementAdapter.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.password;
 
+import android.annotation.NonNull;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -60,6 +61,11 @@
     }
 
     @Override
+    public void onViewAttachedToWindow(@NonNull PasswordRequirementViewHolder holder) {
+        holder.mDescriptionText.announceForAccessibility(holder.mDescriptionText.getText());
+    }
+
+    @Override
     public void onBindViewHolder(PasswordRequirementViewHolder holder, int position) {
         holder.mDescriptionText.setText(mRequirements[position]);
     }
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 0c3d769..3890ddf 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -94,7 +94,6 @@
     private ListWithEntrySummaryPreference mButtonWfcRoamingMode;
     private Preference mUpdateAddress;
 
-    private boolean mValidListener = false;
     private boolean mEditableWfcMode = true;
     private boolean mEditableWfcRoamingMode = true;
     private boolean mUseWfcHomeModeForRoaming = false;
@@ -104,7 +103,7 @@
     private ProvisioningManager mProvisioningManager;
     private TelephonyManager mTelephonyManager;
 
-    private final PhoneTelephonyCallback mTelephonyCallback = new PhoneTelephonyCallback();
+    private PhoneTelephonyCallback mTelephonyCallback;
 
     private class PhoneTelephonyCallback extends TelephonyCallback implements
             TelephonyCallback.CallStateListener {
@@ -418,27 +417,20 @@
     @Override
     public void onResume() {
         super.onResume();
-
         updateBody();
-
-        final Context context = getActivity();
-        if (queryImsState(mSubId).isWifiCallingSupported()) {
+        Context context = getActivity();
+        if (mTelephonyCallback == null && queryImsState(mSubId).isWifiCallingSupported()) {
+            mTelephonyCallback = new PhoneTelephonyCallback();
             getTelephonyManagerForSub(mSubId).registerTelephonyCallback(
                     context.getMainExecutor(), mTelephonyCallback);
-
             mSwitchBar.addOnSwitchChangeListener(this);
-
-            mValidListener = true;
         }
-
         context.registerReceiver(mIntentReceiver, mIntentFilter,
                 Context.RECEIVER_EXPORTED_UNAUDITED);
-
         final Intent intent = getActivity().getIntent();
         if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) {
             showAlert(intent);
         }
-
         // Register callback for provisioning changes.
         registerProvisioningChangedCallback();
     }
@@ -446,19 +438,13 @@
     @Override
     public void onPause() {
         super.onPause();
-
-        final Context context = getActivity();
-
-        if (mValidListener) {
-            mValidListener = false;
-
+        Context context = getActivity();
+        if (mTelephonyCallback != null) {
             getTelephonyManagerForSub(mSubId).unregisterTelephonyCallback(mTelephonyCallback);
-
+            mTelephonyCallback = null;
             mSwitchBar.removeOnSwitchChangeListener(this);
         }
-
         context.unregisterReceiver(mIntentReceiver);
-
         // Remove callback for provisioning changes.
         unregisterProvisioningChangedCallback();
     }
diff --git a/src/com/android/settings/wifi/repository/WifiHotspotRepository.java b/src/com/android/settings/wifi/repository/WifiHotspotRepository.java
index 6764214..af8eb47 100644
--- a/src/com/android/settings/wifi/repository/WifiHotspotRepository.java
+++ b/src/com/android/settings/wifi/repository/WifiHotspotRepository.java
@@ -623,9 +623,11 @@
 
     @VisibleForTesting
     class SoftApCallback implements WifiManager.SoftApCallback {
+        private static final String TAG = "SoftApCallback";
+
         @Override
         public void onStateChanged(int state, int failureReason) {
-            log("onStateChanged(), state:" + state + ", failureReason:" + failureReason);
+            Log.d(TAG, "onStateChanged(), state:" + state + ", failureReason:" + failureReason);
             mWifiApState = state;
             if (!mIsRestarting) {
                 return;
diff --git a/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettings.java b/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettings.java
index f5066bd..a5e12d8 100644
--- a/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettings.java
@@ -108,15 +108,17 @@
             if (radioButton == null) {
                 continue;
             }
-            if (radioButton.isChecked() != speedInfo.mIsChecked) {
-                radioButton.setChecked(speedInfo.mIsChecked);
+            if (!speedInfo.mIsVisible) {
+                radioButton.setVisible(false);
+                continue;
             }
-            if (radioButton.isEnabled() != speedInfo.mIsEnabled) {
-                radioButton.setEnabled(speedInfo.mIsEnabled);
+            radioButton.setEnabled(speedInfo.mIsEnabled);
+            radioButton.setChecked(speedInfo.mIsChecked);
+            if (speedInfo.mSummary != null) {
+                radioButton.setSummary(speedInfo.mSummary);
             }
-            if (radioButton.isVisible() != speedInfo.mIsVisible) {
-                radioButton.setVisible(speedInfo.mIsVisible);
-            }
+            // setVisible at the end to avoid UI flickering
+            radioButton.setVisible(true);
         }
     }
 
diff --git a/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModel.java b/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModel.java
index f04669a..e7eb3a6 100644
--- a/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModel.java
+++ b/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModel.java
@@ -22,12 +22,15 @@
 import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ;
 
 import android.app.Application;
+import android.util.Log;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.lifecycle.AndroidViewModel;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Observer;
 
+import com.android.settings.R;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.wifi.repository.WifiHotspotRepository;
 
@@ -41,6 +44,12 @@
  */
 public class WifiHotspotSpeedViewModel extends AndroidViewModel {
     private static final String TAG = "WifiHotspotSpeedViewModel";
+    @VisibleForTesting
+    static final int RES_SPEED_5G_SUMMARY = R.string.wifi_hotspot_speed_5g_summary;
+    @VisibleForTesting
+    static final int RES_SPEED_6G_SUMMARY = R.string.wifi_hotspot_speed_6g_summary;
+    @VisibleForTesting
+    static final int RES_SUMMARY_UNAVAILABLE = R.string.wifi_hotspot_speed_summary_unavailable;
 
     protected final WifiHotspotRepository mWifiHotspotRepository;
     protected Map<Integer, SpeedInfo> mSpeedInfoMap = new HashMap<>();
@@ -75,14 +84,18 @@
     }
 
     protected void on6gAvailableChanged(Boolean available) {
-        log("on6gAvailableChanged(), available:" + available);
+        Log.d(TAG, "on6gAvailableChanged(), available:" + available);
         mSpeedInfo6g.mIsEnabled = available;
+        mSpeedInfo6g.mSummary = getApplication()
+                .getString(available ? RES_SPEED_6G_SUMMARY : RES_SUMMARY_UNAVAILABLE);
         updateSpeedInfoMapData();
     }
 
     protected void on5gAvailableChanged(Boolean available) {
-        log("on5gAvailableChanged(), available:" + available);
+        Log.d(TAG, "on5gAvailableChanged(), available:" + available);
         mSpeedInfo5g.mIsEnabled = available;
+        mSpeedInfo5g.mSummary = getApplication()
+                .getString(available ? RES_SPEED_5G_SUMMARY : RES_SUMMARY_UNAVAILABLE);
 
         boolean showDualBand = mWifiHotspotRepository.isDualBand() && available;
         log("on5gAvailableChanged(), showDualBand:" + showDualBand);
@@ -144,6 +157,7 @@
         Boolean mIsChecked;
         boolean mIsEnabled;
         boolean mIsVisible;
+        String mSummary;
 
         public SpeedInfo(boolean isChecked, boolean isEnabled, boolean isVisible) {
             this.mIsChecked = isChecked;
@@ -157,6 +171,7 @@
                     .append("isChecked:").append(mIsChecked)
                     .append(",isEnabled:").append(mIsEnabled)
                     .append(",isVisible:").append(mIsVisible)
+                    .append(",mSummary:").append(mSummary)
                     .append('}').toString();
         }
     }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java
index 5dc5758..0b6d533 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java
@@ -20,19 +20,29 @@
 import android.net.wifi.SoftApConfiguration;
 import android.net.wifi.WifiManager;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.wifi.repository.WifiHotspotRepository;
 
 public class WifiTetherAutoOffPreferenceController extends BasePreferenceController implements
         Preference.OnPreferenceChangeListener {
 
     private final WifiManager mWifiManager;
     private boolean mSettingsOn;
+    @VisibleForTesting
+    boolean mNeedShutdownSecondarySap;
 
     public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
+        WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFactory(context)
+                .getWifiFeatureProvider().getWifiHotspotRepository();
+        if (wifiHotspotRepository.isSpeedFeatureAvailable() && wifiHotspotRepository.isDualBand()) {
+            mNeedShutdownSecondarySap = true;
+        }
         mWifiManager = context.getSystemService(WifiManager.class);
     }
 
@@ -51,14 +61,15 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
-        final boolean settingsOn = (Boolean) newValue;
-        SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration();
-        SoftApConfiguration newSoftApConfiguration =
-                new SoftApConfiguration.Builder(softApConfiguration)
-                        .setAutoShutdownEnabled(settingsOn)
-                        .build();
+        boolean settingsOn = (Boolean) newValue;
+        SoftApConfiguration.Builder configBuilder =
+                new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
+        configBuilder.setAutoShutdownEnabled(settingsOn);
+        if (mNeedShutdownSecondarySap) {
+            configBuilder.setBridgedModeOpportunisticShutdownEnabled(settingsOn);
+        }
         mSettingsOn = settingsOn;
-        return mWifiManager.setSoftApConfiguration(newSoftApConfiguration);
+        return mWifiManager.setSoftApConfiguration(configBuilder.build());
     }
 
     public boolean isEnabled() {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 88d601a..d8c3908 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -91,7 +91,8 @@
     @VisibleForTesting
     WifiTetherAutoOffPreferenceController mWifiTetherAutoOffPreferenceController;
 
-    private boolean mUnavailable;
+    @VisibleForTesting
+    boolean mUnavailable;
     private WifiRestriction mWifiRestriction;
     @VisibleForTesting
     TetherChangeReceiver mTetherChangeReceiver;
@@ -139,6 +140,9 @@
 
         setIfOnlyAvailableForAdmins(true);
         mUnavailable = isUiRestricted() || !mWifiRestriction.isHotspotAvailable(getContext());
+        if (mUnavailable) {
+            return;
+        }
 
         mWifiTetherViewModel = FeatureFactory.getFactory(getContext()).getWifiFeatureProvider()
                 .getWifiTetherViewModel(this);
@@ -342,7 +346,16 @@
 
         @Override
         protected boolean isPageSearchEnabled(Context context) {
-            if (context == null || !WifiUtils.canShowWifiHotspot(context)) return false;
+            if (context == null) {
+                return false;
+            }
+            UserManager userManager = context.getSystemService(UserManager.class);
+            if (userManager == null || !userManager.isAdminUser()) {
+                return false;
+            }
+            if (!WifiUtils.canShowWifiHotspot(context)) {
+                return false;
+            }
             return !FeatureFlagUtils.isEnabled(context, FeatureFlags.TETHER_ALL_IN_ONE);
         }
 
diff --git a/tests/robotests/res/drawable/regulatory_info.png b/tests/robotests/res/drawable/regulatory_info.png
deleted file mode 100644
index 65de26c..0000000
--- a/tests/robotests/res/drawable/regulatory_info.png
+++ /dev/null
Binary files differ
diff --git a/tests/robotests/res/drawable/regulatory_info_sku.png b/tests/robotests/res/drawable/regulatory_info_sku.png
deleted file mode 100644
index 65de26c..0000000
--- a/tests/robotests/res/drawable/regulatory_info_sku.png
+++ /dev/null
Binary files differ
diff --git a/tests/robotests/res/drawable/regulatory_info_sku1_coo.png b/tests/robotests/res/drawable/regulatory_info_sku1_coo.png
deleted file mode 100644
index 65de26c..0000000
--- a/tests/robotests/res/drawable/regulatory_info_sku1_coo.png
+++ /dev/null
Binary files differ
diff --git a/tests/robotests/src/com/android/settings/RegulatoryInfoDisplayActivityTest.java b/tests/robotests/src/com/android/settings/RegulatoryInfoDisplayActivityTest.java
deleted file mode 100644
index d05d5d7..0000000
--- a/tests/robotests/src/com/android/settings/RegulatoryInfoDisplayActivityTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2019 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;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.os.SystemProperties;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-
-
-@RunWith(RobolectricTestRunner.class)
-public class RegulatoryInfoDisplayActivityTest {
-
-    private static final String SKU_PROP_KEY = "ro.boot.hardware.sku";
-    private static final String COO_PROP_KEY = "ro.boot.hardware.coo";
-
-    private RegulatoryInfoDisplayActivity mRegulatoryInfoDisplayActivity;
-
-    @Before
-    public void setUp() {
-        mRegulatoryInfoDisplayActivity = Robolectric.buildActivity(
-                RegulatoryInfoDisplayActivity.class).create().get();
-    }
-
-    @Test
-    public void getResourceId_noSkuProperty_shouldReturnDefaultLabel() {
-        SystemProperties.set(SKU_PROP_KEY, "");
-
-        final int expectedResId = getResourceId("regulatory_info");
-        assertThat(mRegulatoryInfoDisplayActivity.getResourceId()).isEqualTo(expectedResId);
-    }
-
-    @Test
-    public void getResourceId_noCooProperty_shouldReturnSkuLabel() {
-        SystemProperties.set(SKU_PROP_KEY, "sku");
-        SystemProperties.set(COO_PROP_KEY, "");
-
-        final int expectedResId = getResourceId("regulatory_info_sku");
-        assertThat(mRegulatoryInfoDisplayActivity.getResourceId()).isEqualTo(expectedResId);
-    }
-
-    @Test
-    public void getResourceId_hasSkuAndCooProperties_shouldReturnCooLabel() {
-        SystemProperties.set(SKU_PROP_KEY, "sku1");
-        SystemProperties.set(COO_PROP_KEY, "coo");
-
-        final int expectedResId = getResourceId("regulatory_info_sku1_coo");
-        assertThat(mRegulatoryInfoDisplayActivity.getResourceId()).isEqualTo(expectedResId);
-    }
-
-    @Test
-    public void getResourceId_noCorrespondingCooLabel_shouldReturnSkuLabel() {
-        SystemProperties.set(SKU_PROP_KEY, "sku");
-        SystemProperties.set(COO_PROP_KEY, "unknown");
-
-        final int expectedResId = getResourceId("regulatory_info_sku");
-        assertThat(mRegulatoryInfoDisplayActivity.getResourceId()).isEqualTo(expectedResId);
-    }
-
-    private int getResourceId(String resourceName) {
-        return mRegulatoryInfoDisplayActivity.getResources().getIdentifier(resourceName, "drawable",
-                mRegulatoryInfoDisplayActivity.getPackageName());
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsActivityTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsActivityTest.java
deleted file mode 100644
index 2a95f4c..0000000
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceSettingsActivityTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2023 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.biometrics.face;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-
-import android.content.res.Resources;
-import android.os.Bundle;
-
-import com.android.settings.Settings;
-import com.android.settings.testutils.FakeFeatureFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.android.controller.ActivityController;
-
-@RunWith(RobolectricTestRunner.class)
-public class FaceSettingsActivityTest {
-
-    private static final String APPLIED_SETUP_WIZARD_THEME = "SettingsPreferenceTheme.SetupWizard";
-
-    private Settings.FaceSettingsActivity mActivity;
-    private Resources.Theme mTheme;
-
-    @Before
-    public void setUp() {
-        FakeFeatureFactory.setupForTest();
-        mActivity = spy(Settings.FaceSettingsActivity.class);
-    }
-
-    @Test
-    public void verifyFaceSettingsActivity_shouldAppliedSetupWizardTheme() {
-        createActivity();
-
-        assertThat(isThemeApplied(APPLIED_SETUP_WIZARD_THEME)).isTrue();
-    }
-
-    private boolean isThemeApplied(String themeName) {
-        final String [] appliedThemes =  mTheme.getTheme();
-        for (String theme : appliedThemes) {
-            if (theme.contains(themeName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private void createActivity() {
-        ActivityController.of(mActivity).create(new Bundle());
-        mTheme = mActivity.getTheme();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index 959c642..0f12d1e 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -56,6 +56,7 @@
 import android.view.Display;
 import android.view.Surface;
 import android.view.View;
+import android.view.accessibility.AccessibilityManager;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -314,11 +315,17 @@
     @Test
     public void fingerprintUdfpsOverlayEnrollment_descriptionViewGoneWithOverlap() {
         initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL);
-        doReturn(true).when(mActivity).hasOverlap(any(), any());
         when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);
         createActivity();
 
-        final GlifLayout defaultLayout = spy(mActivity.findViewById(R.id.setup_wizard_layout));
+        final UdfpsEnrollEnrollingView defaultLayout = spy(
+                mActivity.findViewById(R.id.setup_wizard_layout));
+        doReturn(true).when(defaultLayout).hasOverlap(any(), any());
+
+        // Somehow spy doesn't work, and we need to call initView manually.
+        defaultLayout.initView(mFingerprintManager.getSensorPropertiesInternal().get(0),
+                mActivity.mUdfpsEnrollHelper,
+                mActivity.getSystemService(AccessibilityManager.class));
         final TextView descriptionTextView = defaultLayout.getDescriptionTextView();
 
         defaultLayout.getViewTreeObserver().dispatchOnDraw();
@@ -328,11 +335,17 @@
     @Test
     public void fingerprintUdfpsOverlayEnrollment_descriptionViewVisibleWithoutOverlap() {
         initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL);
-        doReturn(false).when(mActivity).hasOverlap(any(), any());
         when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);
         createActivity();
 
-        final GlifLayout defaultLayout = spy(mActivity.findViewById(R.id.setup_wizard_layout));
+        final UdfpsEnrollEnrollingView defaultLayout = spy(
+                mActivity.findViewById(R.id.setup_wizard_layout));
+        doReturn(false).when(defaultLayout).hasOverlap(any(), any());
+
+        // Somehow spy doesn't work, and we need to call initView manually.
+        defaultLayout.initView(mFingerprintManager.getSensorPropertiesInternal().get(0),
+                mActivity.mUdfpsEnrollHelper,
+                mActivity.getSystemService(AccessibilityManager.class));
         final TextView descriptionTextView = defaultLayout.getDescriptionTextView();
 
         defaultLayout.getViewTreeObserver().dispatchOnDraw();
@@ -340,6 +353,19 @@
     }
 
     @Test
+    public void fingerprintUdfpsOverlayEnrollment_udfpsAnimationViewVisibility() {
+        initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL);
+        when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);
+        createActivity();
+
+        final UdfpsEnrollView enrollView = mActivity.findViewById(R.id.udfps_animation_view);
+        assertThat(enrollView.getVisibility()).isEqualTo(View.GONE);
+
+        mActivity.onUdfpsOverlayShown();
+        assertThat(enrollView.getVisibility()).isEqualTo(View.VISIBLE);
+    }
+
+    @Test
     public void forwardEnrollProgressEvents() {
         initializeActivityFor(TYPE_UDFPS_OPTICAL);
 
@@ -380,11 +406,11 @@
     }
 
     @Test
-    public void forwardEnrollPointerDownEvents() {
+    public void forwardUdfpsEnrollPointerDownEvents() {
         initializeActivityFor(TYPE_UDFPS_OPTICAL);
 
         EnrollListener listener = new EnrollListener(mActivity);
-        mActivity.onPointerDown(0);
+        mActivity.onUdfpsPointerDown(0);
         assertThat(listener.mProgress).isFalse();
         assertThat(listener.mHelp).isFalse();
         assertThat(listener.mAcquired).isFalse();
@@ -393,11 +419,11 @@
     }
 
     @Test
-    public void forwardEnrollPointerUpEvents() {
+    public void forwardUdfpsEnrollPointerUpEvents() {
         initializeActivityFor(TYPE_UDFPS_OPTICAL);
 
         EnrollListener listener = new EnrollListener(mActivity);
-        mActivity.onPointerUp(0);
+        mActivity.onUdfpsPointerUp(0);
         assertThat(listener.mProgress).isFalse();
         assertThat(listener.mHelp).isFalse();
         assertThat(listener.mAcquired).isFalse();
@@ -578,7 +604,6 @@
         mContext = spy(RuntimeEnvironment.application);
         mActivity = spy(FingerprintEnrollEnrolling.class);
 
-        when(mFingerprintManager.getSensorPropertiesInternal()).thenReturn(props);
         when(mContext.getDisplay()).thenReturn(mMockDisplay);
         when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0);
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 4ba6eae..f7a940f 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -43,6 +43,7 @@
 import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
 
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
@@ -57,6 +58,7 @@
 import android.os.UserManager;
 import android.util.Pair;
 
+import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
@@ -200,6 +202,27 @@
     }
 
     @Test
+    public void bindPreference_providerTileWithPendingIntent_shouldBindIntent() {
+        final Preference preference = new SwitchPreference(RuntimeEnvironment.application);
+        Bundle metaData = new Bundle();
+        metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label);
+        metaData.putInt(META_DATA_PREFERENCE_SUMMARY, R.string.about_settings_summary);
+        metaData.putInt(META_DATA_KEY_ORDER, 10);
+        metaData.putString(META_DATA_PREFERENCE_KEYHINT, KEY);
+        final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE, metaData);
+        PendingIntent pendingIntent =
+                PendingIntent.getActivity(RuntimeEnvironment.application, 0, new Intent("test"), 0);
+        tile.pendingIntentMap.put(UserHandle.CURRENT, pendingIntent);
+
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
+
+        assertThat(preference.getFragment()).isNull();
+        assertThat(preference.getOnPreferenceClickListener()).isNotNull();
+        assertThat(preference.getOrder()).isEqualTo(tile.getOrder());
+    }
+
+    @Test
     public void bindPreference_noFragmentMetadata_shouldBindIntent() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
         mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
@@ -631,6 +654,55 @@
     }
 
     @Test
+    public void clickPreference_providerTileWithPendingIntent_singleUser_executesPendingIntent() {
+        final Preference preference = new SwitchPreference(RuntimeEnvironment.application);
+        Bundle metaData = new Bundle();
+        metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label);
+        metaData.putInt(META_DATA_PREFERENCE_SUMMARY, R.string.about_settings_summary);
+        metaData.putInt(META_DATA_KEY_ORDER, 10);
+        metaData.putString(META_DATA_PREFERENCE_KEYHINT, KEY);
+        final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE, metaData);
+        PendingIntent pendingIntent =
+                PendingIntent.getActivity(RuntimeEnvironment.application, 0, new Intent("test"), 0);
+        tile.pendingIntentMap.put(UserHandle.CURRENT, pendingIntent);
+
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
+        preference.performClick();
+
+        Intent nextStartedActivity =
+                Shadows.shadowOf(RuntimeEnvironment.application).peekNextStartedActivity();
+        assertThat(nextStartedActivity).isNotNull();
+        assertThat(nextStartedActivity.getAction()).isEqualTo("test");
+    }
+
+    @Test
+    public void clickPreference_providerTileWithPendingIntent_multiUser_showsProfileDialog() {
+        final Preference preference = new SwitchPreference(RuntimeEnvironment.application);
+        Bundle metaData = new Bundle();
+        metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label);
+        metaData.putInt(META_DATA_PREFERENCE_SUMMARY, R.string.about_settings_summary);
+        metaData.putInt(META_DATA_KEY_ORDER, 10);
+        metaData.putString(META_DATA_PREFERENCE_KEYHINT, KEY);
+        final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE, metaData);
+        PendingIntent pendingIntent =
+                PendingIntent.getActivity(RuntimeEnvironment.application, 0, new Intent("test"), 0);
+        tile.pendingIntentMap.put(UserHandle.CURRENT, pendingIntent);
+        tile.pendingIntentMap.put(new UserHandle(10), pendingIntent);
+
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
+        preference.performClick();
+
+        Fragment dialogFragment =
+                mActivity.getSupportFragmentManager().findFragmentByTag("select_profile");
+        assertThat(dialogFragment).isNotNull();
+        Intent nextStartedActivity =
+                Shadows.shadowOf(RuntimeEnvironment.application).peekNextStartedActivity();
+        assertThat(nextStartedActivity).isNull();
+    }
+
+    @Test
     public void openTileIntent_profileSelectionDialog_shouldShow() {
         ShadowUserManager.getShadow().addUser(10, "Someone", 0);
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 0739294..ecaf36f 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -16,7 +16,9 @@
 package com.android.settings.dashboard;
 
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_GROUP_KEY;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_PENDING_INTENT;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -30,6 +32,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.PendingIntent;
 import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -38,15 +41,18 @@
 import android.content.pm.ProviderInfo;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.preference.PreferenceManager.OnActivityResultListener;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreference;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.slices.BlockingSlicePrefController;
 import com.android.settings.testutils.FakeFeatureFactory;
@@ -57,6 +63,7 @@
 import com.android.settingslib.drawer.ActivityTile;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.ProviderTile;
+import com.android.settingslib.drawer.Tile;
 
 import org.junit.Before;
 import org.junit.Ignore;
@@ -178,6 +185,43 @@
     }
 
     @Test
+    public void displayTilesAsPreference_withGroup_shouldAddTilesIntoGroup() {
+        final ProviderInfo providerInfo = new ProviderInfo();
+        providerInfo.packageName = "pkg";
+        providerInfo.name = "provider";
+        providerInfo.authority = "authority";
+        final Bundle groupTileMetaData = new Bundle();
+        groupTileMetaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_group_key");
+        ProviderTile groupTile = new ProviderTile(providerInfo, mDashboardCategory.key,
+                groupTileMetaData);
+        mDashboardCategory.addTile(groupTile);
+
+        final Bundle subTileMetaData = new Bundle();
+        subTileMetaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key3");
+        subTileMetaData.putString(META_DATA_PREFERENCE_GROUP_KEY, "injected_tile_group_key");
+        subTileMetaData.putParcelable(
+                META_DATA_PREFERENCE_PENDING_INTENT,
+                PendingIntent.getActivity(mContext, 0, new Intent(), 0));
+        ProviderTile subTile = new ProviderTile(providerInfo, mDashboardCategory.key,
+                subTileMetaData);
+        mDashboardCategory.addTile(subTile);
+
+        PreferenceCategory groupPreference = mock(PreferenceCategory.class);
+        when(mFakeFeatureFactory.dashboardFeatureProvider
+                .getTilesForCategory(nullable(String.class)))
+                .thenReturn(mDashboardCategory);
+        when(mFakeFeatureFactory.dashboardFeatureProvider
+                .getDashboardKeyForTile(any(Tile.class)))
+                .then(invocation -> ((Tile) invocation.getArgument(0)).getKey(mContext));
+        when(mTestFragment.mScreen.findPreference("injected_tile_group_key"))
+                .thenReturn(groupPreference);
+        mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
+
+        verify(mTestFragment.mScreen, times(3)).addPreference(nullable(Preference.class));
+        verify(groupPreference).addPreference(nullable(Preference.class));
+    }
+
+    @Test
     public void displayTilesAsPreference_shouldNotAddTilesWithoutIntent() {
         mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
 
@@ -352,6 +396,16 @@
     }
 
     @Test
+    public void createPreference_isActivityTile_returnPreference() {
+        final Preference pref = mTestFragment.createPreference(mActivityTile);
+
+        assertThat(pref).isInstanceOf(Preference.class);
+        assertThat(pref).isNotInstanceOf(PrimarySwitchPreference.class);
+        assertThat(pref).isNotInstanceOf(SwitchPreference.class);
+        assertThat(pref.getWidgetLayoutResource()).isEqualTo(0);
+    }
+
+    @Test
     public void createPreference_isActivityTileAndHasSwitch_returnPrimarySwitchPreference() {
         mActivityTile.getMetaData().putString(META_DATA_PREFERENCE_SWITCH_URI, "uri");
 
@@ -361,6 +415,64 @@
     }
 
     @Test
+    public void createPreference_isProviderTileWithPendingIntent_returnPreferenceWithIcon() {
+        final ProviderInfo providerInfo = new ProviderInfo();
+        providerInfo.packageName = "pkg";
+        providerInfo.name = "provider";
+        providerInfo.authority = "authority";
+        final Bundle metaData = new Bundle();
+        metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key2");
+        ProviderTile providerTile = new ProviderTile(providerInfo, mDashboardCategory.key,
+                metaData);
+        providerTile.pendingIntentMap.put(
+                UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0));
+
+        final Preference pref = mTestFragment.createPreference(providerTile);
+
+        assertThat(pref).isInstanceOf(Preference.class);
+        assertThat(pref).isNotInstanceOf(PrimarySwitchPreference.class);
+        assertThat(pref).isNotInstanceOf(SwitchPreference.class);
+        assertThat(pref.getWidgetLayoutResource())
+                .isEqualTo(R.layout.preference_external_action_icon);
+    }
+
+    @Test
+    public void createPreference_isProviderTileWithPendingIntentAndSwitch_returnPrimarySwitch() {
+        mProviderTile.pendingIntentMap.put(
+                UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0));
+
+        final Preference pref = mTestFragment.createPreference(mProviderTile);
+
+        assertThat(pref).isInstanceOf(PrimarySwitchPreference.class);
+    }
+
+    @Test
+    public void createPreference_isGroupTile_returnPreferenceCategory_logTileAdded() {
+        final ProviderInfo providerInfo = new ProviderInfo();
+        providerInfo.packageName = "pkg";
+        providerInfo.name = "provider";
+        providerInfo.authority = "authority";
+        final Bundle metaData = new Bundle();
+        metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key2");
+        ProviderTile providerTile =
+                new ProviderTile(providerInfo, mDashboardCategory.key, metaData);
+        MetricsFeatureProvider metricsFeatureProvider =
+                mFakeFeatureFactory.getMetricsFeatureProvider();
+        when(metricsFeatureProvider.getAttribution(any())).thenReturn(123);
+
+        final Preference pref = mTestFragment.createPreference(providerTile);
+
+        assertThat(pref).isInstanceOf(PreferenceCategory.class);
+        verify(metricsFeatureProvider)
+                .action(
+                        123,
+                        SettingsEnums.ACTION_SETTINGS_GROUP_TILE_ADDED_TO_SCREEN,
+                        mTestFragment.getMetricsCategory(),
+                        "injected_tile_key2",
+                        0);
+    }
+
+    @Test
     public void onActivityResult_test() {
         final int requestCode = 10;
         final int resultCode = 1;
diff --git a/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectDialogTest.java b/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectDialogTest.java
index 4e81cee..9a13961 100644
--- a/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectDialogTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectDialogTest.java
@@ -24,7 +24,9 @@
 import static org.mockito.Mockito.when;
 
 import android.app.Dialog;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.UserInfo;
 import android.os.UserHandle;
@@ -119,6 +121,28 @@
     }
 
     @Test
+    public void updatePendingIntentsIfNeeded_removesUsersWithNoPendingIntentsAndCloneProfile() {
+        final UserInfo userInfo = new UserInfo(CLONE_USER.getIdentifier(), "clone_user", null,
+                UserInfo.FLAG_PROFILE, UserManager.USER_TYPE_PROFILE_CLONE);
+        when(mUserManager.getUserInfo(CLONE_USER.getIdentifier())).thenReturn(userInfo);
+        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
+        tile.userHandle.add(CLONE_USER);
+        tile.userHandle.add(NORMAL_USER);
+        tile.userHandle.add(new UserHandle(10));
+        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(), 0);
+        tile.pendingIntentMap.put(CLONE_USER, pendingIntent);
+        tile.pendingIntentMap.put(NORMAL_USER, pendingIntent);
+
+        ProfileSelectDialog.updatePendingIntentsIfNeeded(mContext, tile);
+
+        assertThat(tile.userHandle).hasSize(1);
+        assertThat(tile.userHandle).containsExactly(NORMAL_USER);
+        assertThat(tile.pendingIntentMap).hasSize(1);
+        assertThat(tile.pendingIntentMap).containsKey(NORMAL_USER);
+        verify(mUserManager, times(1)).getUserInfo(CLONE_USER.getIdentifier());
+    }
+
+    @Test
     public void createDialog_showsCorrectTitle() {
         mContext.setTheme(R.style.Theme_AppCompat);
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
deleted file mode 100644
index a3be60d..0000000
--- a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.telephony;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-
-import android.app.usage.NetworkStatsManager;
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Settings;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.util.DataUnit;
-
-import androidx.preference.SwitchPreference;
-
-import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.net.DataUsageController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.shadows.ShadowTelephonyManager;
-
-@RunWith(RobolectricTestRunner.class)
-public class DataUsagePreferenceControllerTest {
-    private static final int SUB_ID = 2;
-
-    @Mock
-    private NetworkStatsManager mNetworkStatsManager;
-    private DataUsagePreferenceController mController;
-    private SwitchPreference mPreference;
-    private Context mContext;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        mContext = spy(RuntimeEnvironment.application);
-
-        final TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class);
-        final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(telephonyManager);
-        shadowTelephonyManager.setTelephonyManagerForSubscriptionId(SUB_ID, telephonyManager);
-        shadowTelephonyManager.setTelephonyManagerForSubscriptionId(
-                SubscriptionManager.INVALID_SUBSCRIPTION_ID, telephonyManager);
-
-        doReturn(mNetworkStatsManager).when(mContext).getSystemService(NetworkStatsManager.class);
-
-        mPreference = new SwitchPreference(mContext);
-        mController = spy(new DataUsagePreferenceController(mContext, "data_usage"));
-        mController.init(SUB_ID);
-        mPreference.setKey(mController.getPreferenceKey());
-    }
-
-    @Test
-    public void getAvailabilityStatus_validSubId_returnAvailable() {
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.AVAILABLE);
-    }
-
-    @Test
-    public void getAvailabilityStatus_invalidSubId_returnUnsearchable() {
-        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(
-                BasePreferenceController.AVAILABLE_UNSEARCHABLE);
-    }
-
-    @Test
-    public void handlePreferenceTreeClick_needDialog_showDialog() {
-        final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
-        doNothing().when(mContext).startActivity(captor.capture());
-
-        mController.handlePreferenceTreeClick(mPreference);
-
-        final Intent intent = captor.getValue();
-
-        assertThat(intent.getAction()).isEqualTo(Settings.ACTION_MOBILE_DATA_USAGE);
-        assertThat(intent.getIntExtra(Settings.EXTRA_SUB_ID, 0)).isEqualTo(SUB_ID);
-    }
-
-    @Test
-    public void updateState_invalidSubId_disabled() {
-        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void updateState_noUsageData_shouldDisablePreference() {
-        final DataUsageController.DataUsageInfo usageInfo =
-                new DataUsageController.DataUsageInfo();
-        doReturn(usageInfo).when(mController).getDataUsageInfo(any());
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void updateState_shouldUseIECUnit() {
-        final DataUsageController.DataUsageInfo usageInfo =
-                new DataUsageController.DataUsageInfo();
-        usageInfo.usageLevel = DataUnit.MEBIBYTES.toBytes(1);
-        doReturn(usageInfo).when(mController).getDataUsageInfo(any());
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.getSummary().toString())
-                .contains("1.00 MB");
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
index bf03e82..7fe1187 100644
--- a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
@@ -131,10 +131,12 @@
     @Test
     @Config(shadows = ShadowRestrictedSettingsFragment.class)
     public void onCreate_isUiRestricted_doNotSetupViewModel() {
+        doNothing().when(mTetherSettings).addPreferencesFromResource(anyInt());
         when(mTetherSettings.isUiRestricted()).thenReturn(true);
 
         mTetherSettings.onCreate(null);
 
+        verify(mTetherSettings).addPreferencesFromResource(anyInt());
         verify(mTetherSettings, never()).setupViewModel();
     }
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index 442d021..301a6db 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -18,12 +18,15 @@
 
 import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 
+import static com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment.KEY_UI_STAGE;
+
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.robolectric.RuntimeEnvironment.application;
 
 import android.content.Intent;
+import android.os.Bundle;
 import android.os.UserHandle;
 import android.view.View;
 
@@ -34,6 +37,8 @@
 import com.android.settings.password.ChooseLockPattern.IntentBuilder;
 import com.android.settings.testutils.shadow.ShadowUtils;
 
+import com.google.android.setupdesign.GlifLayout;
+
 import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -119,6 +124,21 @@
         assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
     }
 
+    @Test
+    public void headerText_stageConfirmWrong() {
+        ChooseLockPattern activity = createActivity(true);
+        ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
+                activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
+        final GlifLayout layout = fragment.getView().findViewById(R.id.setup_wizard_layout);
+        Bundle savedInstanceState = new Bundle();
+        savedInstanceState.putInt(KEY_UI_STAGE,
+                ChooseLockPatternFragment.Stage.ConfirmWrong.ordinal());
+
+        fragment.onViewCreated(layout, savedInstanceState);
+        assertThat(layout.getHeaderText().toString()).isEqualTo(activity.getResources().getString(
+                R.string.lockpassword_draw_your_pattern_again_header));
+    }
+
     private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
         return Robolectric.buildActivity(
                 ChooseLockPattern.class,
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettingsTest.java
index 969f992..31f4c09 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiHotspotSpeedSettingsTest.java
@@ -25,8 +25,10 @@
 import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_5GHZ;
 import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_6GHZ;
 
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.anyBoolean;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -89,98 +91,156 @@
 
     @Test
     public void onSpeedInfoMapDataChanged_checkedSpeed2g_checkedToRadioButton2g() {
-        mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false);
+        mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
         updateSpeedInfoMap();
-        mockRadioButton(true, false, true);
+        mockRadioButton(false, false, false);
         mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(false, true, false);
+        verifyRadioButton(true, true, true);
     }
 
     @Test
     public void onSpeedInfoMapDataChanged_uncheckedSpeed2g_uncheckedToRadioButton2g() {
-        mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
+        mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
         updateSpeedInfoMap();
-        mockRadioButton(false, true, false);
+        mockRadioButton(true, true, true);
         mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(true, false, true);
+        verifyRadioButton(false, false, true);
     }
 
     @Test
     public void onSpeedInfoMapDataChanged_checkedSpeed5g_checkedToRadioButton5g() {
-        mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false);
+        mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
         updateSpeedInfoMap();
-        mockRadioButton(true, false, true);
+        mockRadioButton(false, false, false);
         mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(false, true, false);
+        verifyRadioButton(true, true, true);
     }
 
     @Test
     public void onSpeedInfoMapDataChanged_uncheckedSpeed5g_uncheckedToRadioButton5g() {
-        mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
+        mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
         updateSpeedInfoMap();
-        mockRadioButton(false, true, false);
+        mockRadioButton(true, true, true);
         mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(true, false, true);
+        verifyRadioButton(false, false, true);
     }
 
     @Test
     public void onSpeedInfoMapDataChanged_checkedSpeed2g5g_checkedToRadioButton2g5g() {
-        mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false);
+        mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
         updateSpeedInfoMap();
-        mockRadioButton(true, false, true);
+        mockRadioButton(false, false, false);
         mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(false, true, false);
+        verifyRadioButton(true, true, true);
     }
 
     @Test
-    public void onSpeedInfoMapDataChanged_uncheckedSpeed25g_uncheckedToRadioButton25g() {
-        mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
+    public void onSpeedInfoMapDataChanged_uncheckedSpeed2g5g_uncheckedToRadioButton2g5g() {
+        mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
         updateSpeedInfoMap();
-        mockRadioButton(false, true, false);
+        mockRadioButton(true, true, true);
         mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(true, false, true);
+        verifyRadioButton(false, false, true);
     }
 
     @Test
     public void onSpeedInfoMapDataChanged_checkedSpeed6g_checkedToRadioButton6g() {
-        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false);
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
         updateSpeedInfoMap();
+        mockRadioButton(false, false, false);
+        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
+
+        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
+
+        verifyRadioButton(true, true, true);
+    }
+
+    @Test
+    public void onSpeedInfoMapDataChanged_uncheckedSpeed6g_uncheckedToRadioButton6g() {
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
+        updateSpeedInfoMap();
+        mockRadioButton(true, true, true);
+        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
+
+        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
+
+        verifyRadioButton(false, false, true);
+    }
+
+    @Test
+    public void onSpeedInfoMapDataChanged_setVisibleFalse_setVisibleOnly() {
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, false);
+        mSpeedInfo6g.mSummary = "summary";
+        mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
+        mockRadioButton(true, true, true);
+        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
+
+        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
+
+        verify(mRadioButton).setVisible(false);
+        verify(mRadioButton, never()).setChecked(anyBoolean());
+        verify(mRadioButton, never()).setEnabled(anyBoolean());
+        verify(mRadioButton, never()).setSummary(anyString());
+    }
+
+    @Test
+    public void onSpeedInfoMapDataChanged_setVisibleTrue_setAllProperties() {
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
+        mSpeedInfo6g.mSummary = "summary";
+        mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
+        mockRadioButton(true, true, true);
+        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
+
+        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
+
+        verify(mRadioButton).setVisible(true);
+        verify(mRadioButton).setChecked(anyBoolean());
+        verify(mRadioButton).setEnabled(anyBoolean());
+        verify(mRadioButton).setSummary(anyString());
+    }
+
+    @Test
+    public void onSpeedInfoMapDataChanged_summaryIsNull_doNotSetSummary() {
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
+        mSpeedInfo6g.mSummary = null;
+        mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
+        mockRadioButton(true, true, true);
+        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
+
+        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
+
+        verify(mRadioButton, never()).setSummary(anyString());
+    }
+
+    @Test
+    public void onSpeedInfoMapDataChanged_summaryNotNull_setSummary() {
+        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
+        mSpeedInfo6g.mSummary = "summary";
+        mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
         mockRadioButton(true, false, true);
         mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
 
         mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
 
-        verifyRadioButton(false, true, false);
-    }
-
-    @Test
-    public void onSpeedInfoMapDataChanged_uncheckedSpeed6g_uncheckedToRadioButton6g() {
-        mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
-        updateSpeedInfoMap();
-        mockRadioButton(false, true, false);
-        mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
-
-        mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
-
-        verifyRadioButton(true, false, true);
+        verify(mRadioButton).setSummary(mSpeedInfo6g.mSummary);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java
index fbc4aaa..535e4ab 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -28,6 +29,10 @@
 
 import androidx.preference.SwitchPreference;
 
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.wifi.factory.WifiFeatureProvider;
+import com.android.settings.wifi.repository.WifiHotspotRepository;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,6 +59,8 @@
 
         mContext = spy(RuntimeEnvironment.application);
 
+        WifiFeatureProvider provider = FakeFeatureFactory.setupForTest().getWifiFeatureProvider();
+        when(provider.getWifiHotspotRepository()).thenReturn(mock(WifiHotspotRepository.class));
         when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
         mSoftApConfiguration = new SoftApConfiguration.Builder().build();
         when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
@@ -101,6 +108,32 @@
         assertThat(mSwitchPreference.isChecked()).isTrue();
     }
 
+    @Test
+    public void onPreferenceChange_needShutdownSecondarySap_setSecondarySap() {
+        mController.mNeedShutdownSecondarySap = true;
+        setConfigShutdownSecondarySap(false);
+
+        mController.onPreferenceChange(mSwitchPreference, true);
+
+        ArgumentCaptor<SoftApConfiguration> config =
+                ArgumentCaptor.forClass(SoftApConfiguration.class);
+        verify(mWifiManager).setSoftApConfiguration(config.capture());
+        assertThat(config.getValue().isBridgedModeOpportunisticShutdownEnabled()).isTrue();
+    }
+
+    @Test
+    public void onPreferenceChange_noNeedShutdownSecondarySap_doNotSetSecondarySap() {
+        mController.mNeedShutdownSecondarySap = false;
+        setConfigShutdownSecondarySap(false);
+
+        mController.onPreferenceChange(mSwitchPreference, true);
+
+        ArgumentCaptor<SoftApConfiguration> config =
+                ArgumentCaptor.forClass(SoftApConfiguration.class);
+        verify(mWifiManager).setSoftApConfiguration(config.capture());
+        assertThat(config.getValue().isBridgedModeOpportunisticShutdownEnabled()).isFalse();
+    }
+
     private boolean getAutoOffSetting() {
         ArgumentCaptor<SoftApConfiguration> softApConfigCaptor =
                 ArgumentCaptor.forClass(SoftApConfiguration.class);
@@ -115,4 +148,12 @@
                         .build();
         when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
     }
+
+    private void setConfigShutdownSecondarySap(boolean enabled) {
+        mSoftApConfiguration =
+                new SoftApConfiguration.Builder(mSoftApConfiguration)
+                        .setBridgedModeOpportunisticShutdownEnabled(enabled)
+                        .build();
+        when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
index 5005f4c..75d49fe 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
@@ -146,6 +146,7 @@
         doReturn(mTetheringManager).when(mContext).getSystemService(Context.TETHERING_SERVICE);
         doReturn(WIFI_REGEXS).when(mTetheringManager).getTetherableWifiRegexs();
         doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+        doReturn(true).when(mUserManager).isAdminUser();
         when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true);
         when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true);
 
@@ -185,9 +186,21 @@
     }
 
     @Test
+    @Config(shadows = ShadowRestrictedDashboardFragment.class)
+    public void onCreate_uiIsRestricted_shouldNotGetViewModel() {
+        mSettings.mWifiTetherViewModel = null;
+        when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false);
+
+        mSettings.onCreate(null);
+
+        assertThat(mSettings.mWifiTetherViewModel).isNull();
+    }
+
+    @Test
     @Config(shadows = ShadowFragment.class)
     public void onStart_uiIsRestricted_removeAllPreferences() {
         spyWifiTetherSettings();
+        mSettings.mUnavailable = true;
 
         mSettings.onStart();
 
@@ -306,7 +319,7 @@
     }
 
     @Test
-    public void isPageSearchEnabled_canShowWifiHotspot_returnTrue() {
+    public void isPageSearchEnabled_allReady_returnTrue() {
         setCanShowWifiHotspotCached(true);
 
         assertThat(WifiTetherSettings.SEARCH_INDEX_DATA_PROVIDER.isPageSearchEnabled(mContext))
@@ -314,6 +327,14 @@
     }
 
     @Test
+    public void isPageSearchEnabled_isNotAdminUser_returnFalse() {
+        doReturn(false).when(mUserManager).isAdminUser();
+
+        assertThat(WifiTetherSettings.SEARCH_INDEX_DATA_PROVIDER.isPageSearchEnabled(mContext))
+                .isFalse();
+    }
+
+    @Test
     public void isPageSearchEnabled_canNotShowWifiHotspot_returnFalse() {
         setCanShowWifiHotspotCached(false);
 
@@ -419,5 +440,10 @@
         public void onCreate(Bundle icicle) {
             // do nothing
         }
+
+        @Implementation
+        public boolean isUiRestricted() {
+            return false;
+        }
     }
 }
diff --git a/tests/spa_unit/res/drawable/regulatory_info.xml b/tests/spa_unit/res/drawable/regulatory_info.xml
new file mode 100644
index 0000000..7cc3803
--- /dev/null
+++ b/tests/spa_unit/res/drawable/regulatory_info.xml
@@ -0,0 +1,20 @@
+<!--
+  ~ Copyright (C) 2023 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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#ff0000"/>
+    <size android:width="24dp" android:height="24dp" />
+</shape>
diff --git a/tests/spa_unit/res/drawable/regulatory_info_sku.xml b/tests/spa_unit/res/drawable/regulatory_info_sku.xml
new file mode 100644
index 0000000..634e55e
--- /dev/null
+++ b/tests/spa_unit/res/drawable/regulatory_info_sku.xml
@@ -0,0 +1,21 @@
+<!--
+  ~ Copyright (C) 2023 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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#00ff00"/>
+    <size android:width="24dp" android:height="24dp" />
+</shape>
+
diff --git a/tests/spa_unit/res/drawable/regulatory_info_sku1_coo.xml b/tests/spa_unit/res/drawable/regulatory_info_sku1_coo.xml
new file mode 100644
index 0000000..7e6b9ef
--- /dev/null
+++ b/tests/spa_unit/res/drawable/regulatory_info_sku1_coo.xml
@@ -0,0 +1,20 @@
+<!--
+  ~ Copyright (C) 2023 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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#0000ff"/>
+    <size android:width="24dp" android:height="24dp" />
+</shape>
diff --git a/tests/spa_unit/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfoTest.kt b/tests/spa_unit/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfoTest.kt
new file mode 100644
index 0000000..f1e18fc
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/deviceinfo/regulatory/RegulatoryInfoTest.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2023 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.deviceinfo.regulatory
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.os.SystemProperties
+import androidx.annotation.DrawableRes
+import androidx.core.graphics.drawable.toBitmap
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.dx.mockito.inline.extended.ExtendedMockito
+import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
+import com.android.settings.deviceinfo.regulatory.RegulatoryInfo.KEY_COO
+import com.android.settings.deviceinfo.regulatory.RegulatoryInfo.KEY_SKU
+import com.android.settings.deviceinfo.regulatory.RegulatoryInfo.getRegulatoryInfo
+import com.android.settings.tests.spa_unit.R
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.MockitoSession
+import org.mockito.Spy
+import org.mockito.quality.Strictness
+
+@RunWith(AndroidJUnit4::class)
+class RegulatoryInfoTest {
+    private lateinit var mockSession: MockitoSession
+
+    @Spy
+    private val context: Context = ApplicationProvider.getApplicationContext()
+
+    @Before
+    fun setUp() {
+        mockSession = ExtendedMockito.mockitoSession()
+            .initMocks(this)
+            .mockStatic(SystemProperties::class.java)
+            .strictness(Strictness.LENIENT)
+            .startMocking()
+    }
+
+    @After
+    fun tearDown() {
+        mockSession.finishMocking()
+    }
+
+    @Test
+    fun getRegulatoryInfo_noSkuProperty_shouldReturnDefaultLabel() {
+        doReturn("").`when` { SystemProperties.get(KEY_SKU) }
+
+        val regulatoryInfo = context.getRegulatoryInfo()
+
+        assertDrawableSameAs(regulatoryInfo, R.drawable.regulatory_info)
+    }
+
+    @Test
+    fun getResourceId_noCooProperty_shouldReturnSkuLabel() {
+        doReturn("sku").`when` { SystemProperties.get(KEY_SKU) }
+        doReturn("").`when` { SystemProperties.get(KEY_COO) }
+
+        val regulatoryInfo = context.getRegulatoryInfo()
+
+        assertDrawableSameAs(regulatoryInfo, R.drawable.regulatory_info_sku)
+    }
+
+    @Test
+    fun getResourceId_hasSkuAndCooProperties_shouldReturnCooLabel() {
+        doReturn("sku1").`when` { SystemProperties.get(KEY_SKU) }
+        doReturn("coo").`when` { SystemProperties.get(KEY_COO) }
+
+        val regulatoryInfo = context.getRegulatoryInfo()
+
+        assertDrawableSameAs(regulatoryInfo, R.drawable.regulatory_info_sku1_coo)
+    }
+
+    @Test
+    fun getResourceId_noCorrespondingCooLabel_shouldReturnSkuLabel() {
+        doReturn("sku").`when` { SystemProperties.get(KEY_SKU) }
+        doReturn("unknown").`when` { SystemProperties.get(KEY_COO) }
+
+        val regulatoryInfo = context.getRegulatoryInfo()
+
+        assertDrawableSameAs(regulatoryInfo, R.drawable.regulatory_info_sku)
+    }
+
+    private fun assertDrawableSameAs(drawable: Drawable?, @DrawableRes resId: Int) {
+        val expected = context.getDrawable(resId)!!.toBitmap()
+        assertThat(drawable!!.toBitmap().sameAs(expected)).isTrue()
+    }
+}
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt
new file mode 100644
index 0000000..a42e41e
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony
+
+import android.content.Context
+import android.content.Intent
+import android.net.NetworkTemplate
+import android.provider.Settings
+import android.telephony.SubscriptionManager
+import android.util.DataUnit
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.preference.Preference
+import androidx.preference.PreferenceScreen
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.dx.mockito.inline.extended.ExtendedMockito
+import com.android.settings.core.BasePreferenceController.AVAILABLE
+import com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE
+import com.android.settings.datausage.DataUsageUtils
+import com.android.settings.datausage.lib.DataUsageLib
+import com.android.settingslib.net.DataUsageController
+import com.android.settingslib.net.DataUsageController.DataUsageInfo
+import com.android.settingslib.spa.testutils.waitUntil
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.verify
+import org.mockito.MockitoSession
+import org.mockito.Spy
+import org.mockito.quality.Strictness
+import org.mockito.Mockito.`when` as whenever
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@RunWith(AndroidJUnit4::class)
+class DataUsagePreferenceControllerTest {
+
+    private lateinit var mockSession: MockitoSession
+
+    @Spy
+    private val context: Context = ApplicationProvider.getApplicationContext()
+
+    private lateinit var controller: DataUsagePreferenceController
+
+    private val preference = Preference(context)
+
+    @Mock
+    private lateinit var networkTemplate: NetworkTemplate
+
+    @Mock
+    private lateinit var dataUsageController: DataUsageController
+
+    @Mock
+    private lateinit var preferenceScreen: PreferenceScreen
+
+    @Before
+    fun setUp() {
+        mockSession = ExtendedMockito.mockitoSession()
+            .initMocks(this)
+            .mockStatic(SubscriptionManager::class.java)
+            .spyStatic(DataUsageUtils::class.java)
+            .spyStatic(DataUsageLib::class.java)
+            .strictness(Strictness.LENIENT)
+            .startMocking()
+
+        whenever(SubscriptionManager.isValidSubscriptionId(SUB_ID)).thenReturn(true)
+        ExtendedMockito.doReturn(true).`when` { DataUsageUtils.hasMobileData(context) }
+        ExtendedMockito.doReturn(networkTemplate)
+            .`when` { DataUsageLib.getMobileTemplate(context, SUB_ID) }
+        preference.key = TEST_KEY
+        whenever(preferenceScreen.findPreference<Preference>(TEST_KEY)).thenReturn(preference)
+
+        controller =
+            DataUsagePreferenceController(context, TEST_KEY).apply {
+                init(SUB_ID)
+                displayPreference(preferenceScreen)
+                dataUsageControllerFactory = { dataUsageController }
+            }
+    }
+
+    @After
+    fun tearDown() {
+        mockSession.finishMocking()
+    }
+
+    @Test
+    fun getAvailabilityStatus_validSubId_returnAvailable() {
+        assertThat(controller.availabilityStatus).isEqualTo(AVAILABLE)
+    }
+
+    @Test
+    fun getAvailabilityStatus_invalidSubId_returnUnsearchable() {
+        controller.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+
+        assertThat(controller.availabilityStatus).isEqualTo(AVAILABLE_UNSEARCHABLE)
+    }
+
+    @Test
+    fun handlePreferenceTreeClick_startActivity() = runTest {
+        val usageInfo = DataUsageInfo().apply {
+            usageLevel = DataUnit.MEBIBYTES.toBytes(1)
+        }
+        whenever(dataUsageController.getDataUsageInfo(networkTemplate)).thenReturn(usageInfo)
+        doNothing().`when`(context).startActivity(any())
+        controller.whenViewCreated(TestLifecycleOwner(initialState = Lifecycle.State.STARTED))
+        waitUntil { preference.summary != null }
+
+        controller.handlePreferenceTreeClick(preference)
+
+        val captor = ArgumentCaptor.forClass(Intent::class.java)
+        verify(context).startActivity(captor.capture())
+        val intent = captor.value
+        assertThat(intent.action).isEqualTo(Settings.ACTION_MOBILE_DATA_USAGE)
+        assertThat(intent.getIntExtra(Settings.EXTRA_SUB_ID, 0)).isEqualTo(SUB_ID)
+    }
+
+    @Test
+    fun updateState_invalidSubId_disabled() = runTest {
+        controller.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+
+        controller.whenViewCreated(TestLifecycleOwner(initialState = Lifecycle.State.STARTED))
+
+        waitUntil { !preference.isEnabled }
+    }
+
+    @Test
+    fun updateState_noUsageData_shouldDisablePreference() = runTest {
+        val usageInfo = DataUsageInfo()
+        whenever(dataUsageController.getDataUsageInfo(networkTemplate)).thenReturn(usageInfo)
+
+        controller.whenViewCreated(TestLifecycleOwner(initialState = Lifecycle.State.STARTED))
+
+        waitUntil { !preference.isEnabled }
+    }
+
+    @Test
+    fun updateState_shouldUseIecUnit() = runTest {
+        val usageInfo = DataUsageInfo().apply {
+            usageLevel = DataUnit.MEBIBYTES.toBytes(1)
+        }
+        whenever(dataUsageController.getDataUsageInfo(networkTemplate)).thenReturn(usageInfo)
+
+        controller.whenViewCreated(TestLifecycleOwner(initialState = Lifecycle.State.STARTED))
+
+        waitUntil { preference.summary?.contains("1.00 MB") == true }
+    }
+
+    private companion object {
+        const val TEST_KEY = "test_key"
+        const val SUB_ID = 2
+    }
+}
diff --git a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModelTest.java b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModelTest.java
index bdb45b0..2c830ad 100644
--- a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModelTest.java
+++ b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollProgressViewModelTest.java
@@ -379,7 +379,7 @@
 
         // Notify acquire message
         final int value = 33;
-        mCallbackWrapper.mValue.onPointerDown(value);
+        mCallbackWrapper.mValue.onUdfpsPointerDown(value);
         assertThat(liveData.getValue()).isEqualTo(value);
     }
 
@@ -397,7 +397,7 @@
 
         // Notify acquire message
         final int value = 44;
-        mCallbackWrapper.mValue.onPointerUp(value);
+        mCallbackWrapper.mValue.onUdfpsPointerUp(value);
         assertThat(liveData.getValue()).isEqualTo(value);
     }
 
diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
index 9a2c611..2e17fb2 100644
--- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java
@@ -20,10 +20,13 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.content.Intent;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -49,6 +52,7 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 @RunWith(AndroidJUnit4.class)
 public class UiccSlotUtilTest {
@@ -738,6 +742,25 @@
         assertThat(testSlot).isFalse();
     }
 
+    @Test
+    public void performSwitchToSlot_setSimSlotMapping() throws UiccSlotsException {
+        Collection<UiccSlotMapping> uiccSlotMappings = createUiccSlotMappingDualPortsBNoOrding();
+
+        UiccSlotUtil.performSwitchToSlot(mTelephonyManager, uiccSlotMappings, mContext);
+
+        verify(mTelephonyManager).setSimSlotMapping(any());
+    }
+
+    @Test
+    public void onReceiveSimSlotChangeReceiver_receiveAction_timerCountDown() {
+        CountDownLatch latch = spy(new CountDownLatch(1));
+        UiccSlotUtil.SimSlotChangeReceiver receive = new UiccSlotUtil.SimSlotChangeReceiver(latch);
+
+        receive.onReceive(mContext, new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED));
+
+        verify(latch).countDown();
+    }
+
     private void compareTwoUiccSlotMappings(Collection<UiccSlotMapping> testUiccSlotMappings,
             Collection<UiccSlotMapping> verifyUiccSlotMappings) {
         assertThat(testUiccSlotMappings.size()).isEqualTo(verifyUiccSlotMappings.size());
diff --git a/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java
index a0219a0..127cdfd 100644
--- a/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java
@@ -21,15 +21,20 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.os.Looper;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.data.ApnSetting;
 
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreference;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -63,7 +68,7 @@
         when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
         when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
 
-        mPreference = new SwitchPreference(mContext);
+        mPreference = spy(new SwitchPreference(mContext));
         mController = new MmsMessagePreferenceController(mContext, "mms_message");
         mController.init(SUB_ID);
         mPreference.setKey(mController.getPreferenceKey());
@@ -118,4 +123,20 @@
         verify(mTelephonyManager).setMobileDataPolicyEnabled(
                 TelephonyManager.MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, false);
     }
+
+    @Test
+    public void onStart_updatePreferenceUiState() {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+        PreferenceManager preferenceManager = new PreferenceManager(mContext);
+        PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
+        preferenceScreen.addPreference(mPreference);
+        mController.displayPreference(preferenceScreen);
+
+        mController.onStart();
+
+        // First is preference initialization, and second is in onStart();
+        verify(mPreference, times(2)).setChecked(anyBoolean());
+    }
 }
diff --git a/tests/unit/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModelTest.java b/tests/unit/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModelTest.java
index 3a1a927..f52478e 100644
--- a/tests/unit/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModelTest.java
+++ b/tests/unit/src/com/android/settings/wifi/tether/WifiHotspotSpeedViewModelTest.java
@@ -20,6 +20,9 @@
 import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_2GHZ_5GHZ;
 import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_5GHZ;
 import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ;
+import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SPEED_5G_SUMMARY;
+import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SPEED_6G_SUMMARY;
+import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SUMMARY_UNAVAILABLE;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -128,7 +131,9 @@
         mViewModel.on6gAvailableChanged(true);
 
         verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
-        assertThat(mViewModel.mSpeedInfoMap.get(SPEED_6GHZ).mIsEnabled).isTrue();
+        WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_6GHZ);
+        assertThat(speedInfo.mIsEnabled).isTrue();
+        assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SPEED_6G_SUMMARY));
     }
 
     @Test
@@ -139,7 +144,9 @@
         mViewModel.on6gAvailableChanged(false);
 
         verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
-        assertThat(mViewModel.mSpeedInfoMap.get(SPEED_6GHZ).mIsEnabled).isFalse();
+        WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_6GHZ);
+        assertThat(speedInfo.mIsEnabled).isFalse();
+        assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SUMMARY_UNAVAILABLE));
     }
 
     @Test
@@ -150,7 +157,9 @@
         mViewModel.on5gAvailableChanged(true);
 
         verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
-        assertThat(mViewModel.mSpeedInfoMap.get(SPEED_5GHZ).mIsEnabled).isTrue();
+        WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_5GHZ);
+        assertThat(speedInfo.mIsEnabled).isTrue();
+        assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SPEED_5G_SUMMARY));
     }
 
     @Test
@@ -161,7 +170,9 @@
         mViewModel.on5gAvailableChanged(false);
 
         verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
-        assertThat(mViewModel.mSpeedInfoMap.get(SPEED_5GHZ).mIsEnabled).isFalse();
+        WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_5GHZ);
+        assertThat(speedInfo.mIsEnabled).isFalse();
+        assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SUMMARY_UNAVAILABLE));
     }
 
     @Test