Merge "Import translations. DO NOT MERGE ANYWHERE"
diff --git a/res/layout/face_enroll_button.xml b/res/layout/face_enroll_button.xml
index 09094d5..6266650 100644
--- a/res/layout/face_enroll_button.xml
+++ b/res/layout/face_enroll_button.xml
@@ -18,7 +18,9 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight">
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart">
 
     <Button
         android:id="@+id/security_settings_face_settings_enroll_button"
@@ -26,7 +28,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="start"
-        android:layout_marginStart="20dp"
         android:text="@string/security_settings_face_settings_enroll"/>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/face_remove_button.xml b/res/layout/face_remove_button.xml
index ea860d5..2c2497a 100644
--- a/res/layout/face_remove_button.xml
+++ b/res/layout/face_remove_button.xml
@@ -18,7 +18,9 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight">
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart">
 
     <Button
         android:id="@+id/security_settings_face_settings_remove_button"
@@ -26,7 +28,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="start"
-        android:layout_marginStart="20dp"
         android:text="@string/security_settings_face_settings_remove_face_model"/>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/locale_drag_cell.xml b/res/layout/locale_drag_cell.xml
index 7b932f3..47bf70a 100644
--- a/res/layout/locale_drag_cell.xml
+++ b/res/layout/locale_drag_cell.xml
@@ -56,6 +56,17 @@
         android:layout_toStartOf="@+id/dragHandle"
         android:layout_below="@id/label"/>
 
+    <TextView
+        android:id="@+id/default_locale"
+        style="@style/LanguageCheckboxAndLabel"
+        android:layout_marginTop="-28dp"
+        android:paddingStart="56dp"
+        android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+        android:textColor="?android:textColorSecondary"
+        android:text="@string/desc_current_default_language"
+        android:layout_toStartOf="@+id/dragHandle"
+        android:layout_below="@id/label"/>
+
     <ImageView
         android:id="@+id/dragHandle"
         android:layout_width="wrap_content"
diff --git a/res/layout/notification_history_app_layout.xml b/res/layout/notification_history_app_layout.xml
index 7d53b4d..143fff8 100644
--- a/res/layout/notification_history_app_layout.xml
+++ b/res/layout/notification_history_app_layout.xml
@@ -35,42 +35,36 @@
             android:id="@+id/icon"
             android:layout_width="24dp"
             android:layout_height="24dp"
-            android:layout_marginEnd="14dp"
             android:scaleType="centerInside"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toStartOf="@id/text_start_guideline"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/text_start_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintStart_toEndOf="@id/icon" />
-
         <TextView
             android:id="@+id/label"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
+            android:layout_marginStart="14dp"
             android:ellipsize="end"
             android:lines="1"
             android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+            android:textDirection="locale"
             app:layout_constraintBottom_toTopOf="@id/count"
             app:layout_constraintEnd_toStartOf="@id/expand_button_wrapper"
-            app:layout_constraintStart_toEndOf="@id/text_start_guideline"
+            app:layout_constraintStart_toEndOf="@id/icon"
             app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
             android:id="@+id/count"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
+            android:layout_marginStart="14dp"
             android:paddingTop="4dp"
             android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"
             android:textDirection="locale"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@id/expand_button_wrapper"
-            app:layout_constraintStart_toEndOf="@id/text_start_guideline"
+            app:layout_constraintStart_toEndOf="@id/icon"
             app:layout_constraintTop_toBottomOf="@id/label" />
 
         <FrameLayout
diff --git a/res/layout/tare_homepage.xml b/res/layout/tare_homepage.xml
index 4cd649f..def8cb7 100644
--- a/res/layout/tare_homepage.xml
+++ b/res/layout/tare_homepage.xml
@@ -27,8 +27,8 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:padding="20dp"
-        android:textOff="@string/tare_off"
-        android:textOn="@string/tare_on"
+        android:textOff="@string/off"
+        android:textOn="@string/on"
         android:showText="true"
         android:background="?android:attr/colorBackground" />
     <TextView
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
index 1e7ff8c..8ccc058 100644
--- a/res/values-el/arrays.xml
+++ b/res/values-el/arrays.xml
@@ -499,8 +499,8 @@
   </string-array>
   <string-array name="wifi_metered_entries">
     <item msgid="3237321077949659241">"Αυτόματος εντοπισμός"</item>
-    <item msgid="3779092145391320375">"Χρήση ως δικτύου με περιορισμούς"</item>
-    <item msgid="2047166446768045816">"Χρήση ως δικτύου χωρίς περιορισμούς"</item>
+    <item msgid="3779092145391320375">"Δίκτυο με περιορισμούς"</item>
+    <item msgid="2047166446768045816">"Δίκτυο χωρίς περιορισμούς"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
     <item msgid="3485945604919292489">"Χρήση τυχαίου MAC (προεπιλογή)"</item>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 909860f..16e1c76 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -499,8 +499,8 @@
   </string-array>
   <string-array name="wifi_metered_entries">
     <item msgid="3237321077949659241">"Détecter automatiquement"</item>
-    <item msgid="3779092145391320375">"Traiter comme facturé à l\'usage"</item>
-    <item msgid="2047166446768045816">"Traiter comme sans compteur"</item>
+    <item msgid="3779092145391320375">"Traiter comme limitée"</item>
+    <item msgid="2047166446768045816">"Traiter comme illimitée"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
     <item msgid="3485945604919292489">"Utiliser MAC aléatoire (par défaut)"</item>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index 2b780b2..adecd62 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -574,7 +574,7 @@
     <!-- no translation found for rtt_setting_mode:3 (7725394146877517088) -->
   <string-array name="nfc_payment_favor">
     <item msgid="9104058551372383947">"हमेशा"</item>
-    <item msgid="5283665583617307336">"सिवाय तब, जब दूसरा पेमेंट ऐप्लिकेशन खुला हो"</item>
+    <item msgid="5283665583617307336">"दूसरा ऐप्लिकेशन खुला होने पर इसका इस्तेमाल नहीं किया जाएगा"</item>
   </string-array>
   <string-array name="nfc_payment_favor_values">
     <item msgid="2373999996715432397">"0"</item>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
index d0d6957..a19b6aa 100644
--- a/res/values-nl/arrays.xml
+++ b/res/values-nl/arrays.xml
@@ -498,7 +498,7 @@
     <item msgid="9080166583718385565">"0"</item>
   </string-array>
   <string-array name="wifi_metered_entries">
-    <item msgid="3237321077949659241">"Detecteer automatisch"</item>
+    <item msgid="3237321077949659241">"Automatisch detecteren"</item>
     <item msgid="3779092145391320375">"Behandelen als wifi met datalimiet"</item>
     <item msgid="2047166446768045816">"Behandelen als wifi zonder datalimiet"</item>
   </string-array>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
index 6e240df..991f89f 100644
--- a/res/values-or/arrays.xml
+++ b/res/values-or/arrays.xml
@@ -467,7 +467,7 @@
     <item msgid="5777152116210127847">"ଶ୍ରେଷ୍ଠ ଗତିବିଧି"</item>
     <item msgid="1834030155560727324">"ଜରୁରୀ (ଫୋର୍‌ଗ୍ରାଉଣ୍ଡ)"</item>
     <item msgid="8494424742994426350">"ଗୁରୁତ୍ଵପୁର୍ଣ୍ଣ (ପୃଷ୍ଠପଟ)"</item>
-    <item msgid="5099332663422156149">"ବ୍ୟାକଅପ୍"</item>
+    <item msgid="5099332663422156149">"ବ୍ୟାକଅପ"</item>
     <item msgid="7701089238529887617">"ଭାରୀ"</item>
     <item msgid="3006466648960525485">"ସେବା (ଚାଲୁଛି)"</item>
     <item msgid="2253476667031759713">"ସେବା (ରିଷ୍ଟାର୍ଟ ହେଉଛି)"</item>
@@ -503,7 +503,7 @@
     <item msgid="2047166446768045816">"ମିଟର୍ ହୋଇନଥିବା ରୂପେ ବିବେଚନା କରନ୍ତୁ"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
-    <item msgid="3485945604919292489">"ରେଣ୍ଡମାଇଜ୍ MAC ବ୍ୟବହାର କରନ୍ତୁ (ଡିଫଲ୍ଟ)"</item>
+    <item msgid="3485945604919292489">"ରେଣ୍ଡମାଇଜ୍ଡ MAC ବ୍ୟବହାର କରନ୍ତୁ (ଡିଫଲ୍ଟ)"</item>
     <item msgid="741680937828608749">"MAC ଡିଭାଇସ ବ୍ୟବହାର କରନ୍ତୁ"</item>
   </string-array>
   <string-array name="wifi_hidden_entries">
@@ -520,7 +520,7 @@
     <item msgid="8657797891533816070">"ଶବ୍ଦବହୁଳ"</item>
   </string-array>
   <string-array name="cdma_system_select_choices">
-    <item msgid="1205665684426617345">"କେବଳ ହୋମ୍ ନେଟ୍‌ୱର୍କ"</item>
+    <item msgid="1205665684426617345">"କେବଳ ହୋମ"</item>
     <item msgid="6691772120712000966">"ଅଟୋମେଟିକ"</item>
   </string-array>
   <string-array name="preferred_network_mode_choices">
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index 29bd3a9..5ba6ee1 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -503,8 +503,8 @@
     <item msgid="2047166446768045816">"Tratar como acesso ilimitado"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
-    <item msgid="3485945604919292489">"Utilizar MAC aleatório (predefinição)"</item>
-    <item msgid="741680937828608749">"Utilizar MAC do dispositivo"</item>
+    <item msgid="3485945604919292489">"Usar MAC aleatório (predefinição)"</item>
+    <item msgid="741680937828608749">"Usar MAC do dispositivo"</item>
   </string-array>
   <string-array name="wifi_hidden_entries">
     <item msgid="342232116597649254">"Não"</item>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index 05a5108..0ec751f 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -101,7 +101,7 @@
   <string-array name="eap_ocsp_type">
     <item msgid="8568170800958331461">"Nu verificați"</item>
     <item msgid="5703177653586269306">"Solicitați starea certificatelor"</item>
-    <item msgid="326388247868439528">"Solicitați obligatoriu starea certificatelor"</item>
+    <item msgid="326388247868439528">"Solicită obligatoriu starea certificatelor"</item>
   </string-array>
   <string-array name="wifi_p2p_wps_setup">
     <item msgid="1446717102923442720">"Buton WPS"</item>
@@ -216,7 +216,7 @@
   <string-array name="app_install_location_entries">
     <item msgid="3771157789865587832">"Stocare internă pe dispozitiv"</item>
     <item msgid="5501345333507193420">"Card SD detașabil"</item>
-    <item msgid="2362840341195111674">"Permiteți sistemului să decidă"</item>
+    <item msgid="2362840341195111674">"Permite sistemului să decidă"</item>
   </string-array>
   <string-array name="app_ops_categories">
     <item msgid="528483497841471005">"Locație"</item>
@@ -308,13 +308,13 @@
     <item msgid="8112680908829570200">"Locație"</item>
     <item msgid="5019327268152480733">"Apelează un telefon"</item>
     <item msgid="8001855901083066554">"Citiți mesaje SMS/MMS"</item>
-    <item msgid="187744670643011148">"Scrieți mesaje SMS/MMS"</item>
+    <item msgid="187744670643011148">"Scrie mesaje SMS/MMS"</item>
     <item msgid="3324078624274013835">"Primește mesaje SMS/MMS"</item>
     <item msgid="1924065490920451511">"Primește mesaje SMS/MMS"</item>
     <item msgid="1239934115787777477">"Primește mesaje SMS/MMS"</item>
     <item msgid="1030342664910454057">"Primește mesaje SMS/MMS"</item>
     <item msgid="9189359977063200554">"Trimite mesaje SMS/MMS"</item>
-    <item msgid="6954817837534799424">"Citiți mesaje SMS/MMS"</item>
+    <item msgid="6954817837534799424">"Citește mesaje SMS/MMS"</item>
     <item msgid="7921014514153395846">"Scrieți mesaje SMS/MMS"</item>
     <item msgid="8997371825401751421">"Modifică setările"</item>
     <item msgid="7005755175240764443">"Desenează deasupra"</item>
@@ -336,8 +336,8 @@
     <item msgid="1148968792599973150">"Păstrare în activitate"</item>
     <item msgid="8482874682804856549">"Locație"</item>
     <item msgid="5186169827582545242">"Locație"</item>
-    <item msgid="6122293931012635638">"Obțineți statistici de utilizare"</item>
-    <item msgid="2526677383312751932">"Activați/dezactivați microfonul"</item>
+    <item msgid="6122293931012635638">"Obține statistici de utilizare"</item>
+    <item msgid="2526677383312751932">"Activezi/dezactivezi microfonul"</item>
     <item msgid="4000577305179914546">"Afișează semnalarea"</item>
     <item msgid="8660207174515570558">"Proiectează conținutul media"</item>
     <item msgid="3904996949561946108">"Activează serviciul VPN"</item>
@@ -446,7 +446,7 @@
   </string-array>
   <string-array name="security_settings_premium_sms_values">
     <item msgid="3985605994234635072">"Întreabă"</item>
-    <item msgid="2358187544264718285">"Nu permiteți niciodată"</item>
+    <item msgid="2358187544264718285">"Nu permite niciodată"</item>
     <item msgid="7043782324123900484">"Permiteți întotdeauna"</item>
   </string-array>
   <string-array name="ram_states">
@@ -516,7 +516,7 @@
   </string-array>
   <string-array name="autofill_logging_level_entries">
     <item msgid="2263571982739726576">"Dezactivat"</item>
-    <item msgid="4295717421282345505">"Remediați erorile"</item>
+    <item msgid="4295717421282345505">"Remediază erorile"</item>
     <item msgid="8657797891533816070">"Detaliat"</item>
   </string-array>
   <string-array name="cdma_system_select_choices">
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
index b7d1e9f..34c9bd2 100644
--- a/res/values-th/arrays.xml
+++ b/res/values-th/arrays.xml
@@ -500,7 +500,7 @@
   <string-array name="wifi_metered_entries">
     <item msgid="3237321077949659241">"ตรวจหาโดยอัตโนมัติ"</item>
     <item msgid="3779092145391320375">"ถือว่ามีการจำกัดปริมาณอินเทอร์เน็ต"</item>
-    <item msgid="2047166446768045816">"ถือว่าไม่มีการวัดปริมาณอินเทอร์เน็ต"</item>
+    <item msgid="2047166446768045816">"ถือว่าไม่มีการจำกัดปริมาณอินเทอร์เน็ต"</item>
   </string-array>
   <string-array name="wifi_privacy_entries">
     <item msgid="3485945604919292489">"ใช้ MAC แบบสุ่ม (ค่าเริ่มต้น)"</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2aae74a..c0348ee 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -26,6 +26,10 @@
     <string name="deny">Deny</string>
     <!-- Used in confirmation dialogs as the action that the user will tap to turn on the feature. [CHAR LIMIT=40]-->
     <string name="confirmation_turn_on">Turn on</string>
+    <!-- State enabled. [CHAR LIMIT=NONE] -->
+    <string name="on">On</string>
+    <!-- State is disabled. [CHAR LIMIT=NONE] -->
+    <string name="off">Off</string>
 
     <!-- Device Info screen. Used for a status item's value when the proper value is not known -->
     <string name="device_info_default">Unknown</string>
@@ -401,6 +405,12 @@
     <!-- Title for the locale picker activity. [CHAR LIMIT=30]-->
     <string name="language_picker_title">Languages</string>
 
+    <!-- Title for category of the locale picker . [CHAR LIMIT=50]-->
+    <string name="language_picker_category_title">Preferred language order</string>
+
+    <!-- Description for indication of current system default language. [CHAR LIMIT=50]-->
+    <string name="desc_current_default_language">System language</string>
+
     <!-- Menu item in the locale menu. Will remove the selected locales. [CHAR LIMIT=30] -->
     <string name="locale_remove_menu">Remove</string>
 
@@ -414,13 +424,13 @@
     <string name="locale_picker_category_title">Preferred Language</string>
 
     <!-- Title for the Apps' locale menu entry [CHAR LIMIT=50]-->
-    <string name="app_locales_picker_menu_title">App Languages</string>
+    <string name="app_locales_picker_menu_title">App languages</string>
 
     <!-- Summary for the app's locale picker activity. [CHAR LIMIT=50]-->
     <string name="app_locale_picker_summary">Set the language for each app</string>
 
     <!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
-    <string name="app_locale_picker_title">App Language</string>
+    <string name="app_locale_picker_title">App language</string>
 
     <!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
     <string name="suggested_app_locales_title">Suggested languages</string>
@@ -443,6 +453,18 @@
     <!-- Description for introduction of the locale selection supported of app list [CHAR LIMIT=NONE]-->
     <string name="desc_app_locale_selection_supported">Only apps that support language selection are shown here.</string>
 
+    <!-- Description for the introduction to language picker activity. [CHAR LIMIT=NONE]-->
+    <string name="desc_introduction_of_language_picker">Your system, apps, and websites use the first supported language from your preferred languages.</string>
+
+    <!-- Description for the notice of language picker. [CHAR LIMIT=NONE]-->
+    <string name="desc_notice_of_language_picker">To select a language for each app, go to app language settings.</string>
+
+    <!-- Title for locale helper page [CHAR LIMIT=NONE] -->
+    <string name="desc_locale_helper_footer_general">Learn more about languages</string>
+
+    <!-- Link for Locale helper page. [CHAR LIMIT=NONE]-->
+    <string name="link_locale_picker_footer_learn_more" translatable="false">https://support.google.com/android?p=per_language_app_settings</string>
+
     <!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
     <plurals name="dlg_remove_locales_title">
         <item quantity="one">Remove selected language?</item>
@@ -458,7 +480,7 @@
     <string name="dlg_remove_locales_error_message">Keep at least one preferred language</string>
 
     <!-- This text shows in the language picker when the system is not translated into that languages [CHAR LIMIT=80] -->
-    <string name="locale_not_translated">May not be available in some apps</string>
+    <string name="locale_not_translated">Not available as system language</string>
 
     <!-- Label for an accessibility action that moves a language up in the ordered language list [CHAR LIMIT=20] -->
     <string name="action_drag_label_move_up">Move up</string>
@@ -641,8 +663,6 @@
     <string name="location_settings_title">Location</string>
     <!-- Used in the location settings to control turning on/off the feature entirely [CHAR LIMIT=60] -->
     <string name="location_settings_primary_switch_title">Use location</string>
-    <!-- Summary for Location settings when location is off [CHAR LIMIT=NONE] -->
-    <string name="location_settings_summary_location_off">Off</string>
     <!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
     <plurals name="location_settings_summary_location_on">
         <item quantity="one">On - <xliff:g id="count">%1$d</xliff:g> app has access to location</item>
@@ -1064,11 +1084,11 @@
     <!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
     <string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Fingerprint Unlock improves the more you use it to unlock your tablet or verify it\u2019s you in apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Fingerprint Unlock improves the more you use it to unlock your device or verify it\u2019s you in apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
-    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Fingerprint Unlock improves the more you use it to unlock your phone or verify it\u2019s you in apps</string>
+    <string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
     <!-- Button text to skip enrollment of fingerprint [CHAR LIMIT=40] -->
     <string name="security_settings_fingerprint_enroll_enrolling_skip">Do it later</string>
     <!-- Accessibility message for fingerprint enrollment asking the user to place the tip of their finger on the fingerprint sensor [CHAR LIMIT=NONE] -->
@@ -1870,6 +1890,21 @@
     <!-- Nfc developer settings: The description of the setting. -->
     <string name="nfc_stack_debuglog_summary">Increase NFC stack logging level</string>
 
+    <!-- Nfc developer settings: The title of the setting to enable nfc verbose vendor log. [CHAR LIMIT=60] -->
+    <string name="nfc_verbose_vendor_log_title">NFC verbose vendor debug log</string>
+    <!-- Nfc developer settings: The description of the setting to enable nfc verbose vendor log. [CHAR_LIMIT=NONE] -->
+    <string name="nfc_verbose_vendor_log_summary">Include additional device-specific vendor logs in bugreports, which may contain private information. </string>
+    <!-- Nfc developer settings: The title of the setting to enable full nfc snoop log. [CHAR LIMIT=60] -->
+    <string name="nfc_snoop_log_title">NFC NCI unfiltered snoop log</string>
+    <!-- Nfc developer settings: The description of the setting to enable full nfc snoop log. [CHAR_LIMIT=NONE] -->
+    <string name="nfc_snoop_log_summary">Capture detail NFC packets, which may contain private information. </string>
+    <!-- Nfc developer settings: The title of the popup dialog. [CHAR_LIMIT=60] -->
+    <string name="nfc_reboot_dialog_title">Restart Device?</string>
+    <!-- Nfc developer settings: The content of the popup dialog. [CHAR_LIMIT=NONE] -->
+    <string name="nfc_reboot_dialog_message">Detail NFC logging is intended for development purposes only. Additional NFC data is included in bug reports, which may contain private information. Restart your device to change this setting. </string>
+    <!-- Nfc developer settings: The confirm button of the popup dialog. [CHAR_LIMIT=60] -->
+    <string name="nfc_reboot_dialog_confirm">Restart</string>
+
     <!-- Wifi Display settings. The title of the screen. [CHAR LIMIT=40] -->
     <string name="wifi_display_settings_title">Cast</string>
     <!-- Wifi Display settings. The keywords of the setting. [CHAR LIMIT=NONE] -->
@@ -1974,8 +2009,6 @@
     <string name="android_beam_settings_title">Android Beam</string>
     <!-- Used to describe the on state of the Android Beam feature [CHAR LIMIT=NONE] -->
     <string name="android_beam_on_summary">Ready to transmit app content via NFC</string>
-    <!-- Used to describe the off state of the Android Beam feature [CHAR LIMIT=NONE] -->
-    <string name="android_beam_off_summary">Off</string>
     <!-- Used to describe the enabled state of the Android Beam feature when NFC, which it relies on, is turned off [CHAR LIMIT=NONE] -->
     <string name="nfc_disabled_summary">Unavailable because NFC is turned off</string>
     <!-- Used in the Android Beam sharing preferences screen. This phrase is a trademark. [CHAR LIMIT=32] -->
@@ -2712,8 +2745,6 @@
     <string name="emergency_address_summary">Used as your location when you make an emergency call over Wi\u2011Fi</string>
     <!-- Message of private dns that provides a help link. [CHAR LIMIT=NONE] -->
     <string name="private_dns_help_message"><annotation id="url">Learn more</annotation> about Private DNS features</string>
-    <!-- Message to display when private dns is on. [CHAR LIMIT=10] -->
-    <string name="private_dns_mode_on">On</string>
 
     <!-- Message to display when setting wifi calling are not editable [CHAR LIMIT=NONE] -->
     <string name="wifi_calling_pref_managed_by_carrier">Setting managed by carrier</string>
@@ -2845,10 +2876,6 @@
     <string name="display_settings">Display</string>
     <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
     <string name="accelerometer_title">Auto-rotate screen</string>
-    <!-- Sound & display settings screen, locked rotation check box label [CHAR LIMIT=30] -->
-    <string name="auto_rotate_option_off">Off</string>
-    <!-- Sound & display settings screen, accelerometer-based rotation check box label [CHAR LIMIT=30] -->
-    <string name="auto_rotate_option_on">On</string>
     <!-- Sound & display settings screen, face-based rotation check box label [CHAR LIMIT=30] -->
     <string name="auto_rotate_option_face_based">On - Face-based</string>
     <!-- SmartAutoRotatePreferenceFragment settings screen, face-based rotation switch label [CHAR LIMIT=30] -->
@@ -2906,10 +2933,6 @@
     <string name="auto_brightness_title">Adaptive brightness</string>
     <!-- Summary about the feature adaptive brightness [CHAR LIMIT=NONE] -->
     <string name="auto_brightness_summary">Screen brightness adjusts to environment</string>
-    <!-- Setting option summary when adaptive brightness is on [CHAR LIMIT=NONE] -->
-    <string name="auto_brightness_summary_on">On</string>
-    <!-- Setting option summary when adaptive brightness is off [CHAR LIMIT=NONE] -->
-    <string name="auto_brightness_summary_off">Off</string>
     <!-- Sound & display settings screen, setting option summary when preferred adaptive brightness is very low [CHAR LIMIT=100] -->
     <string name="auto_brightness_summary_very_low">Preferred brightness is very low</string>
     <!-- Sound & display settings screen, setting option summary when preferred adaptive brightness is low [CHAR LIMIT=100] -->
@@ -2920,8 +2943,6 @@
     <string name="auto_brightness_summary_high">Preferred brightness is high</string>
     <!-- Sound & display settings screen, setting option summary when preferred adaptive brightness is very high [CHAR LIMIT=100] -->
     <string name="auto_brightness_summary_very_high">Preferred brightness is very high</string>
-    <!-- Adaptive brightness settings screen, setting option to disable adaptive brightness [CHAR LIMIT=100] -->
-    <string name="auto_brightness_off_title">Off</string>
     <!-- Adaptive brightness settings screen, setting option to enable adaptive brightness when user prefers very low brightness [CHAR LIMIT=100] -->
     <string name="auto_brightness_very_low_title">Very low</string>
     <!-- Adaptive brightness settings screen, setting option to enable adaptive brightness when user prefers low brightness [CHAR LIMIT=100] -->
@@ -2960,8 +2981,6 @@
     <string name="adaptive_sleep_title">Screen attention</string>
     <!-- Setting option summary when adaptive sleep is on [CHAR LIMIT=NONE] -->
     <string name="adaptive_sleep_summary_on">On / Screen won\u2019t turn off if you\u2019re looking at it</string>
-    <!-- Setting option summary when adaptive sleep is off [CHAR LIMIT=NONE] -->
-    <string name="adaptive_sleep_summary_off">Off</string>
     <!-- adaptive_sleep settings screen, title about the required permission is missing [CHAR LIMIT=NONE]-->
     <string name="adaptive_sleep_title_no_permission">Camera access needed</string>
     <!-- adaptive_sleep settings screen, subtitle when permission is missing [CHAR LIMIT=NONE]-->
@@ -3131,8 +3150,6 @@
     <string name="screensaver_settings_summary_dock">While docked</string>
     <!-- Display settings screen, summary fragment for screen saver options, activated never [CHAR LIMIT=35] -->
     <string name="screensaver_settings_summary_never">Never</string>
-    <!-- Display settings screen, summary for screen saver options, screen saver is turned off [CHAR LIMIT=20] -->
-    <string name="screensaver_settings_summary_off">Off</string>
     <!-- Dream settings screen, action label, when to dream [CHAR LIMIT=20] -->
     <string name="screensaver_settings_when_to_dream">When to start</string>
     <!-- Dream settings screen, action label, current selected screen saver [CHAR LIMIT=35] -->
@@ -3168,8 +3185,6 @@
     <string name="sim_lock_settings">SIM card lock settings</string>
     <!-- Security & screen lock settings screen, SIM card lock setting option name  [CHAR LIMIT=40] -->
     <string name="sim_lock_settings_category">SIM card lock</string>
-    <!-- Security & screen lock settings screen, SIM card lock setting summary when off [CHAR LIMIT=NONE] -->
-    <string name="sim_lock_settings_summary_off">Off</string>
     <!-- Security & screen lock settings screen, SIM card lock setting summary when on [CHAR LIMIT=NONE] -->
     <string name="sim_lock_settings_summary_on">Locked</string>
     <!-- Security & location settings screen, section heading for settings related to sim card locking  [CHAR LIMIT=40] -->
@@ -3334,10 +3349,6 @@
     <string name="status_prl_version">PRL version</string>
     <!-- About phone screen, title for MEID for multi-sim devices -->
     <string name="meid_multi_sim">MEID (sim slot %1$d)</string>
-    <!-- The status text when (Wi-Fi or Bluetooth) scanning is on. [CHAR LIMIT=100] -->
-    <string name="scanning_status_text_on">On</string>
-    <!-- The status text when (Wi-Fi or Bluetooth) scanning is off. [CHAR LIMIT=100] -->
-    <string name="scanning_status_text_off">Off</string>
     <!-- The status text when both Wi-Fi scanning and Bluetooth scanning are on. [CHAR LIMIT=100] -->
     <string name="scanning_status_text_wifi_on_ble_on">Both Wi\u2011Fi and Bluetooth scanning are on</string>
     <!-- The status text when Wi-Fi scanning is on and Bluetooth scanning are off. [CHAR LIMIT=100] -->
@@ -5506,10 +5517,6 @@
     <string name="accessibility_vibration_settings_title">Vibration &amp; haptics</string>
     <!-- Summary for preference screen for configuring vibrations. [CHAR LIMIT=NONE] -->
     <string name="accessibility_vibration_settings_summary">Control the vibration strength for different usages</string>
-    <!-- "Vibration & haptics" preference's state when enabled. This text is shown next to the "Vibration & haptics" preference title. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_vibration_settings_state_on">On</string>
-    <!-- "Vibration & haptics" preference's state when disabled. This text is shown next to the "Vibration & haptics" preference title. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_vibration_settings_state_off">Off</string>
     <!-- Summary for vibration preference shown when it is disabled because the device is in silent mode. [CHAR LIMIT=NONE] -->
     <string name="accessibility_vibration_setting_disabled_for_silent_mode_summary">Setting disabled because device is set to silent</string>
     <!-- Title for the category of preferences to configure device vibrations related to calls. [CHAR LIMIT=NONE] -->
@@ -5636,10 +5643,6 @@
     <string name="accessibility_summary_shortcut_enabled">Shortcut on</string>
     <!-- Preference's shortcut when disabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_summary_shortcut_disabled">Off</string>
-    <!-- Preference's state when enabled. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_summary_state_enabled">On</string>
-    <!-- Preference's state when disabled. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_summary_state_disabled">Off</string>
     <!-- Accessibility service's preference's state when enabled but not running (like maybe it crashed). -->
     <string name="accessibility_summary_state_stopped">Not working. Tap for info.</string>
     <!-- Accessibility service's description when enabled but not running (like maybe it crashed). -->
@@ -5731,11 +5734,6 @@
     <!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] -->
     <string name="accessibility_menu_item_settings">Settings</string>
 
-    <!-- Summary for the enabled state of an accessibility feature. [CHAR LIMIT=10] -->
-    <string name="accessibility_feature_state_on">On</string>
-    <!-- Summary for the disabled state of an accessibility feature. [CHAR LIMIT=10] -->
-    <string name="accessibility_feature_state_off">Off</string>
-
     <!-- Title for the preference category containing the video caption preview. [CHAR LIMIT=35] -->
     <string name="captioning_preview_title">Preview</string>
     <!-- Title for the preference catgeory containing standard video caption options. [CHAR LIMIT=35] -->
@@ -5932,9 +5930,6 @@
     <string name="print_settings">Printing</string>
 
     <!-- Print setting summary in settings screen [CHAR LIMIT=50] -->
-    <string name="print_settings_summary_no_service">Off</string>
-
-    <!-- Print setting summary in settings screen [CHAR LIMIT=50] -->
     <plurals name="print_settings_summary">
         <item quantity="one">1 print service on</item>
         <item quantity="other"><xliff:g id="count">%1$d</xliff:g> print services on</item>
@@ -5961,11 +5956,6 @@
     <!-- Title for print menu item to launch the add printers activity. [CHAR LIMIT=25] -->
     <string name="print_menu_item_add_printers">Add printers</string>
 
-    <!-- Summary for the enabled state of a print feature. [CHAR LIMIT=10] -->
-    <string name="print_feature_state_on">On</string>
-    <!-- Summary for the disabled state of a print feature. [CHAR LIMIT=10] -->
-    <string name="print_feature_state_off">Off</string>
-
     <!-- Title of the action bar button to got to Play Store to download a print service. [CHAR LIMIT=25] -->
     <string name="print_menu_item_add_service">Add service</string>
 
@@ -6622,10 +6612,6 @@
     <string name="adaptive_connectivity_title">Adaptive connectivity</string>
     <!-- Summary of Adaptive connectivity preference. [CHAR LIMIT=NONE] -->
     <string name="adaptive_connectivity_summary">Extends battery life and improves device performance by automatically managing your network connections</string>
-    <!-- Switch on text of Adaptive connectivity preference. [CHAR LIMIT=NONE]-->
-    <string name="adaptive_connectivity_switch_on">On</string>
-    <!-- Switch off text of Adaptive connectivity preference. [CHAR LIMIT=NONE]-->
-    <string name="adaptive_connectivity_switch_off">Off</string>
 
     <!-- Title of preference group for credential storage settings [CHAR LIMIT=30] -->
     <string name="credentials_title">Credential storage</string>
@@ -6718,10 +6704,6 @@
     <!-- Backup and reset Settings screen --><skip />
     <!-- Backup and reset settings menu and activity title -->
     <string name="privacy_settings_title">Backup</string>
-    <!-- Summary for the Backup settings when it is turned on. -->
-    <string name="backup_summary_state_on">On</string>
-    <!-- Summary for the Backup settings when it is turned off. -->
-    <string name="backup_summary_state_off">Off</string>
     <!-- Backup section title -->
     <string name="backup_section_title">Backup &amp; restore</string>
     <!-- Personal data section title -->
@@ -8311,9 +8293,6 @@
     <!-- Sound: Summary for the spatializer effect. [CHAR LIMIT=NONE]-->
     <string name="spatial_audio_text">Audio from compatible media becomes more immersive</string>
 
-    <!-- Sound: Summary for the Spatial audio setting when it is off. [CHAR LIMIT=NONE]-->
-    <string name="spatial_summary_off">Off</string>
-
     <!-- Sound: Summary for the Spatial audio setting when it is on with one output device enabled. [CHAR LIMIT=NONE]-->
     <string name="spatial_summary_on_one">On / <xliff:g id="output device" example="Phone speaker">%1$s</xliff:g></string>
 
@@ -8506,9 +8485,6 @@
     <!-- Sound settings screen, summary format of do not disturb when on with extra info. [CHAR LIMIT=NONE] -->
     <string name="zen_mode_sound_summary_on_with_info">On / <xliff:g name="dnd_summary" example="No sound except alarms and media">%1$s</xliff:g></string>
 
-    <!-- Sound settings screen, summary format of do not disturb when on with no extra information. [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_sound_summary_on">On</string>
-
     <!--  Do not disturb: Summary for zen mode duration setting indicating user will be prompted to set dnd duration whenever dnd is manually toggled on [CHAR LIMIT=NONE]-->
     <string name="zen_mode_duration_summary_always_prompt">Ask every time</string>
 
@@ -9411,12 +9387,6 @@
         <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> categories deleted</item>
     </plurals>
 
-    <!-- [CHAR LIMIT=NONE] App notification settings: notifications enabled-->
-    <string name="notification_toggle_on">On</string>
-
-    <!-- [CHAR LIMIT=NONE] App notification settings: notifications disabled-->
-    <string name="notification_toggle_off">Off</string>
-
     <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
     <string name="app_notification_block_title">Block all</string>
 
@@ -9898,19 +9868,6 @@
     <!-- PIN entry dialog title for entering the administrator PIN [CHAR LIMIT=none] -->
     <string name="restr_pin_enter_admin_pin">Enter admin PIN</string>
 
-    <!-- Switch On/Off  -->
-    <string name="switch_on_text">On</string>
-    <string name="switch_off_text">Off</string>
-
-    <!-- Switch text for nfc feature being on [CHAR LIMIT=NONE] -->
-    <string name="nfc_setting_on">On</string>
-    <!-- Switch text for nfc feature being off [CHAR LIMIT=NONE] -->
-    <string name="nfc_setting_off">Off</string>
-
-    <!-- The subtext when screen pinning feature is enabled. [CHAR LIMIT=28] -->
-    <string name="screen_pinning_switch_on_text">On</string>
-    <!-- The subtext when screen pinning feature is disabled. [CHAR LIMIT=28] -->
-    <string name="screen_pinning_switch_off_text">Off</string>
     <!-- [CHAR LIMIT=28] Screen pinning title -->
     <string name="screen_pinning_title">App pinning</string>
     <!-- [CHAR LIMIT=none] Screen pinning introduction -->
@@ -10109,11 +10066,7 @@
     <!-- Label for notification settings for an specific app [CHAR LIMIT=40] -->
     <string name="notifications_label">Notifications</string>
     <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
-    <string name="notifications_enabled">On</string>
-    <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
     <string name="notifications_enabled_with_info"><xliff:g id="notifications_sent" example="~6 per week">%1$s</xliff:g> / <xliff:g id="notifications_categories_off" example="3 categories turned off">%2$s</xliff:g> </string>
-    <!-- Label for showing apps with blocked notifications in list [CHAR LIMIT=30] -->
-    <string name="notifications_disabled">Off</string>
     <!-- Label for showing apps with some blocked notifications in list [CHAR LIMIT=30] -->
     <string name="notifications_partly_blocked"><xliff:g id="count" example="1">%1$d</xliff:g> of <xliff:g id="count" example="10">%2$d</xliff:g> categories turned off</string>
     <!-- App notification summary with notifications silenced [CHAR LIMIT=40] -->
@@ -11207,12 +11160,6 @@
     <!-- Description of message shown when app is blocklisted for background data access [CHAR LIMIT=NONE] -->
     <string name="restrict_background_blocklisted">Background data is turned off</string>
 
-    <!-- Summary for the Data Saver feature being on [CHAR LIMIT=NONE] -->
-    <string name="data_saver_on">On</string>
-
-    <!-- Summary for the Data Saver feature being off [CHAR LIMIT=NONE] -->
-    <string name="data_saver_off">Off</string>
-
     <!-- Switch label to enable the Data Saver feature [CHAR LIMIT=NONE] -->
     <string name="data_saver_switch_title">Use Data Saver</string>
 
@@ -11246,15 +11193,9 @@
     <!-- Summary for suggestion adding more fingerprints [CHAR LIMIT=55] -->
     <string name="suggestion_additional_fingerprints_summary">Unlock with a different finger</string>
 
-    <!-- Summary of battery saver when on [CHAR LIMIT=NONE] -->
-    <string name="battery_saver_on_summary">On</string>
-
     <!-- Summary of battery saver when it is off and scheduled [CHAR LIMIT=NONE] -->
     <string name="battery_saver_off_scheduled_summary">Will turn on at <xliff:g id="battery_percentage" example="15%">%1$s</xliff:g></string>
 
-    <!-- Summary of battery saver when it is off and scheduled [CHAR LIMIT=NONE] -->
-    <string name="battery_saver_off_summary">Off</string>
-
     <!--  Battery saver: Label for button that will turn on battery saver. [CHAR LIMIT=30] -->
     <string name="battery_saver_button_turn_on">Turn on now</string>
 
@@ -11409,9 +11350,6 @@
     <!-- Title of screen controlling which apps have access to send premium SMS messages [CHAR LIMIT=60] -->
     <string name="premium_sms_access">Premium SMS access</string>
 
-    <!-- Summary for Bluetooth when disabled. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_disabled">Off</string>
-
     <!-- Summary for Bluetooth when connected to one device. [CHAR LIMIT=NONE] -->
     <string name="bluetooth_connected_summary">Connected to <xliff:g name="device">%1$s</xliff:g></string>
 
@@ -11736,10 +11674,6 @@
     <!-- Title text for the assist gesture [CHAR LIMIT=60] DO NOT TRANSLATE -->
     <string name="assist_gesture_title" translatable="false">Assist gesture</string>
 
-    <!-- Switch text for each gesture setting state -->
-    <string name="gesture_setting_on">On</string>
-    <string name="gesture_setting_off">Off</string>
-
     <!-- setting enable OEM unlock Checkbox's summary to explain this Checkbox is disabled because the bootloader has been unlocked [CHAR_LIMIT=60] -->
     <string name="oem_unlock_enable_disabled_summary_bootloader_unlocked">Bootloader is already unlocked</string>
     <!-- setting enable OEM unlock Checkbox's summary to explain this Checkbox is disabled because there is no connectivity. [CHAR_LIMIT=60] -->
@@ -12579,9 +12513,6 @@
     <!-- Label for the on position of a switch on the mobile network details page which allows
          disabling/enabling a SIM. The SIM is enabled in this state. [CHAR LIMIT=40] -->
     <string name="mobile_network_use_sim_on">Use SIM</string>
-    <!-- Label for the off position of a switch on the mobile network details page which allows
-         disabling/enabling a SIM. The SIM is disabled in this state. [CHAR LIMIT=40] -->
-    <string name="mobile_network_use_sim_off">Off</string>
     <!-- Text shown in an information footer on the SIM details page for a physical SIM notifying
          the user that the way to disable this SIM is to physically remove it. This is in contrast
          to eSIM's, which can disabled using an on/off toggle switch. [CHAR LIMIT=NONE] -->
@@ -13181,11 +13112,6 @@
     <!-- Summary for see all preference when bluetooth is disable [CHAR LIMIT=none]-->
     <string name="connected_device_see_all_summary">Bluetooth will turn on</string>
 
-    <!-- Switch text for bluetooth feature being on [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_setting_on">On</string>
-    <!-- Switch text for bluetooth feature being off [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_setting_off">Off</string>
-
     <!-- Provider Model: Internet controls settings screen, item title to go into the networks settings -->
     <string name="provider_internet_settings">Internet</string>
     <!-- Provider Model: SIMs controls settings screen, item title to go into the SIMs settings -->
@@ -13477,10 +13403,6 @@
     <!-- TARE settings title in developer options; "TARE" is the name of the feature and cannot be
      translated. [CHAR LIMIT=40] -->
     <string name="tare_settings">TARE Settings</string>
-    <!-- Summary for the TARE feature being on (ie. enabled) [CHAR LIMIT=NONE] -->
-    <string name="tare_on">On</string>
-    <!-- Summary for the TARE feature being off (ie. disabled) [CHAR LIMIT=NONE] -->
-    <string name="tare_off">Off</string>
     <!-- Allows user to revert the TARE settings to their default values [CHAR LIMIT=40] -->
     <string name="tare_revert">Revert to Default Settings</string>
     <!-- Allows user to view AlarmManager policy factors. Alarm in this context is referring to the
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 19c1209..a0640f5 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -402,6 +402,16 @@
             android:title="@string/nfc_stack_debuglog_title"
             android:summary="@string/nfc_stack_debuglog_summary" />
 
+        <SwitchPreference
+            android:key="nfc_verbose_vendor_log"
+            android:title="@string/nfc_verbose_vendor_log_title"
+            android:summary="@string/nfc_verbose_vendor_log_summary" />
+
+        <SwitchPreference
+            android:key="nfc_snoop_log"
+            android:title="@string/nfc_snoop_log_title"
+            android:summary="@string/nfc_snoop_log_summary"/>
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/languages.xml b/res/xml/languages.xml
new file mode 100644
index 0000000..0f45540
--- /dev/null
+++ b/res/xml/languages.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/language_settings">
+
+    <com.android.settingslib.widget.TopIntroPreference
+        android:title="@string/desc_introduction_of_language_picker"
+        android:persistent="false"
+        android:selectable="false"/>
+
+    <PreferenceCategory
+        android:title="@string/language_picker_category_title">
+        <com.android.settingslib.widget.LayoutPreference
+            android:key="languages_picker"
+            android:layout="@layout/locale_order_list" />
+    </PreferenceCategory>
+
+    <com.android.settingslib.widget.FooterPreference
+        android:key="footer_languages_picker"
+        android:title="@string/desc_notice_of_language_picker"
+        android:persistent="false"
+        android:selectable="false"
+        settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
+
+</PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index ef7c2ba..1008183 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -251,8 +251,8 @@
                     : context.getText(R.string.accessibility_summary_shortcut_disabled);
         } else {
             serviceState = serviceEnabled
-                    ? context.getText(R.string.accessibility_summary_state_enabled)
-                    : context.getText(R.string.accessibility_summary_state_disabled);
+                    ? context.getText(R.string.on)
+                    : context.getText(R.string.off);
         }
 
         final CharSequence serviceSummary = info.loadSummary(context.getPackageManager());
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index 17334b1..43292d7 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -400,7 +400,7 @@
         }
 
         if (!mShortcutPreference.isChecked()) {
-            return context.getText(R.string.switch_off_text);
+            return context.getText(R.string.off);
         }
 
         final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(context,
diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java
index e2e2933..bfb1806 100644
--- a/src/com/android/settings/accessibility/AccessibilityUtil.java
+++ b/src/com/android/settings/accessibility/AccessibilityUtil.java
@@ -130,8 +130,7 @@
     static CharSequence getSummary(Context context, String settingsSecureKey) {
         final boolean enabled = Settings.Secure.getInt(context.getContentResolver(),
                 settingsSecureKey, State.OFF) == State.ON;
-        final int resId = enabled ? R.string.accessibility_feature_state_on
-                : R.string.accessibility_feature_state_off;
+        final int resId = enabled ? R.string.on : R.string.off;
         return context.getResources().getText(resId);
     }
 
diff --git a/src/com/android/settings/accessibility/AutoclickPreferenceController.java b/src/com/android/settings/accessibility/AutoclickPreferenceController.java
index b354aa6..f4df774 100644
--- a/src/com/android/settings/accessibility/AutoclickPreferenceController.java
+++ b/src/com/android/settings/accessibility/AutoclickPreferenceController.java
@@ -39,7 +39,7 @@
         final boolean enabled = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, 0) == 1;
         if (!enabled) {
-            return mContext.getResources().getText(R.string.accessibility_feature_state_off);
+            return mContext.getResources().getText(R.string.off);
         }
         final int delay = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
index 01ee249..793ab5a 100644
--- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
@@ -88,8 +88,7 @@
             resId = R.string.accessibility_screen_magnification_short_summary;
         } else {
             final boolean enabled = isChecked();
-            resId = (enabled ? R.string.accessibility_feature_state_on :
-                    R.string.accessibility_feature_state_off);
+            resId = (enabled ? R.string.on : R.string.off);
         }
         return mContext.getString(resId);
     }
diff --git a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
index 98855f7..02fdf9e 100644
--- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
@@ -94,8 +94,7 @@
             resId = R.string.accessibility_screen_magnification_navbar_short_summary;
         } else {
             final boolean enabled = isChecked();
-            resId = (enabled ? R.string.accessibility_feature_state_on :
-                    R.string.accessibility_feature_state_off);
+            resId = (enabled ? R.string.on : R.string.off);
         }
         return mContext.getText(resId);
     }
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 17b178a..9f38ac5 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -655,7 +655,7 @@
         }
 
         if (!mShortcutPreference.isChecked()) {
-            return context.getText(R.string.switch_off_text);
+            return context.getText(R.string.off);
         }
 
         final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(context,
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 8da190a..935c3cb 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -337,7 +337,7 @@
     @Override
     protected CharSequence getShortcutTypeSummary(Context context) {
         if (!mShortcutPreference.isChecked()) {
-            return context.getText(R.string.switch_off_text);
+            return context.getText(R.string.off);
         }
 
         final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(context,
@@ -658,6 +658,6 @@
         final int uerShortcutType = getUserShortcutTypeFromSettings(context);
         return (uerShortcutType != AccessibilityUtil.UserShortcutType.EMPTY)
                 ? context.getText(R.string.accessibility_summary_shortcut_enabled)
-                : context.getText(R.string.accessibility_summary_shortcut_disabled);
+                : context.getText(R.string.off);
     }
 }
diff --git a/src/com/android/settings/accessibility/VibrationPreferenceController.java b/src/com/android/settings/accessibility/VibrationPreferenceController.java
index 61606b8..fef0958 100644
--- a/src/com/android/settings/accessibility/VibrationPreferenceController.java
+++ b/src/com/android/settings/accessibility/VibrationPreferenceController.java
@@ -44,9 +44,6 @@
     public CharSequence getSummary() {
         final boolean isVibrateOn = Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.VIBRATE_ON, ON) == ON;
-        return mContext.getText(
-                isVibrateOn
-                        ? R.string.accessibility_vibration_settings_state_on
-                        : R.string.accessibility_vibration_settings_state_off);
+        return mContext.getText(isVibrateOn ? R.string.on : R.string.off);
     }
 }
diff --git a/src/com/android/settings/applications/AppLocaleUtil.java b/src/com/android/settings/applications/AppLocaleUtil.java
index 8c3671e..79406f0 100644
--- a/src/com/android/settings/applications/AppLocaleUtil.java
+++ b/src/com/android/settings/applications/AppLocaleUtil.java
@@ -100,8 +100,8 @@
      */
     public static boolean isAppLocaleSupported(Context context, String packageName) {
         LocaleList localeList = getPackageLocales(context, packageName);
-        if (localeList != null && localeList.size() > 0) {
-            return true;
+        if (localeList != null) {
+            return localeList.size() > 0;
         }
 
         if (FeatureFlagUtils.isEnabled(
diff --git a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
index f406d87..6bf94a6 100644
--- a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
@@ -22,7 +22,6 @@
 import android.content.pm.ResolveInfo;
 import android.net.Uri;
 import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
@@ -51,9 +50,7 @@
 
     @Override
     public int getAvailabilityStatus() {
-        boolean isFeatureOn = FeatureFlagUtils
-                .isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION);
-        return isFeatureOn && canDisplayLocaleUi() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return canDisplayLocaleUi() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
diff --git a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java
index a32205b..df0d3549 100644
--- a/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppNotificationPreferenceController.java
@@ -94,11 +94,11 @@
             return "";
         }
         if (appRow.banned) {
-            return context.getText(R.string.notifications_disabled);
+            return context.getText(R.string.off);
         } else if (appRow.channelCount == 0) {
             return NotificationBackend.getSentSummary(context, appRow.sentByApp, false);
         } else if (appRow.channelCount == appRow.blockedChannelCount) {
-            return context.getText(R.string.notifications_disabled);
+            return context.getText(R.string.off);
         } else {
             if (appRow.blockedChannelCount == 0) {
                 return NotificationBackend.getSentSummary(context, appRow.sentByApp, false);
diff --git a/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java
deleted file mode 100644
index aa12b62..0000000
--- a/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.appinfo;
-
-import android.content.Context;
-import android.util.FeatureFlagUtils;
-
-import com.android.settings.core.BasePreferenceController;
-
-/**
- * A controller to update current locale information of application
- * and a entry to launch {@link ManageApplications}.
- * TODO(209775925) After feature release, this class may be removed.
- */
-public class ManageAppLocalePreferenceController extends BasePreferenceController {
-    public ManageAppLocalePreferenceController(Context context, String key) {
-        super(context, key);
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return FeatureFlagUtils
-                .isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION)
-                ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
-    }
-}
diff --git a/src/com/android/settings/backup/BackupDataPreferenceController.java b/src/com/android/settings/backup/BackupDataPreferenceController.java
index 25ef58c..7c6775a 100644
--- a/src/com/android/settings/backup/BackupDataPreferenceController.java
+++ b/src/com/android/settings/backup/BackupDataPreferenceController.java
@@ -54,8 +54,7 @@
     public CharSequence getSummary() {
         if (!mPSCD.isBackupGray()) {
             return mPSCD.isBackupEnabled()
-                    ? mContext.getText(R.string.accessibility_feature_state_on)
-                    : mContext.getText(R.string.accessibility_feature_state_off);
+                    ? mContext.getText(R.string.on) : mContext.getText(R.string.off);
         }
         return null;
     }
diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java
index 1483714..4a8ae0c 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -58,8 +58,7 @@
         UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
         if (userManager.getUserProfiles().size() == 1) {
             try {
-                int resId = mBackupManager.isBackupEnabled() ? R.string.backup_summary_state_on
-                    : R.string.backup_summary_state_off;
+                int resId = mBackupManager.isBackupEnabled() ? R.string.on : R.string.off;
                 return mContext.getText(resId).toString();
             } catch (RemoteException e) {
                 Log.e(TAG, "Error getting isBackupEnabled", e);
diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
index 7256511..1ae5dae 100644
--- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensor.java
@@ -77,7 +77,7 @@
 
         @NonNull
         public AlertDialog.Builder onCreateDialogBuilder() {
-            return new AlertDialog.Builder(getContext())
+            return new AlertDialog.Builder(getActivity(), R.style.GlifV2ThemeAlertDialog)
                     .setTitle(R.string.setup_fingerprint_enroll_skip_title)
                     .setPositiveButton(R.string.skip_anyway_button_label, this)
                     .setNegativeButton(R.string.go_back_button_label, this)
diff --git a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
index 6e82649..bf72877 100644
--- a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
@@ -74,7 +74,7 @@
     @Override
     public String getSummary() {
         if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
-            return mContext.getString(R.string.bluetooth_disabled);
+            return mContext.getString(R.string.off);
         }
         switch (mBluetoothAdapter.getConnectionState()) {
             case BluetoothAdapter.STATE_CONNECTED:
@@ -95,7 +95,7 @@
         final Set<BluetoothDevice> devices = mBluetoothAdapter.getBondedDevices();
         if (devices == null) {
             Log.e(TAG, "getConnectedDeviceSummary, bonded devices are null");
-            return mContext.getString(R.string.bluetooth_disabled);
+            return mContext.getString(R.string.off);
         } else if (devices.isEmpty()) {
             Log.e(TAG, "getConnectedDeviceSummary, no bonded devices");
             return mContext.getString(R.string.disconnected);
diff --git a/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentController.java b/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentController.java
index ee0021e..f5d6bfe 100644
--- a/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentController.java
+++ b/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentController.java
@@ -54,9 +54,9 @@
     public CharSequence getSummary() {
         if (mNfcAdapter != null) {
             if (mNfcAdapter.isEnabled()) {
-                return mContext.getText(R.string.nfc_setting_on);
+                return mContext.getText(R.string.on);
             } else {
-                return mContext.getText(R.string.nfc_setting_off);
+                return mContext.getText(R.string.off);
             }
         }
         return null;
diff --git a/src/com/android/settings/datausage/DataSaverPreference.java b/src/com/android/settings/datausage/DataSaverPreference.java
index 305d061..fd64506 100644
--- a/src/com/android/settings/datausage/DataSaverPreference.java
+++ b/src/com/android/settings/datausage/DataSaverPreference.java
@@ -44,7 +44,7 @@
 
     @Override
     public void onDataSaverChanged(boolean isDataSaving) {
-        setSummary(isDataSaving ? R.string.data_saver_on : R.string.data_saver_off);
+        setSummary(isDataSaving ? R.string.on : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index d92fb7f..210d011 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -81,7 +81,8 @@
         implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
         AdbClearKeysDialogHost, LogPersistDialogHost,
         BluetoothRebootDialog.OnRebootDialogListener,
-        AbstractBluetoothPreferenceController.Callback {
+        AbstractBluetoothPreferenceController.Callback,
+        NfcRebootDialog.OnNfcRebootDialogConfirmedListener {
 
     private static final String TAG = "DevSettingsDashboard";
 
@@ -299,10 +300,19 @@
                 final BluetoothLeAudioHwOffloadPreferenceController leAudioController =
                         getDevelopmentOptionsController(
                                 BluetoothLeAudioHwOffloadPreferenceController.class);
+                final NfcSnoopLogPreferenceController nfcSnoopLogController =
+                        getDevelopmentOptionsController(
+                                NfcSnoopLogPreferenceController.class);
+                final NfcVerboseVendorLogPreferenceController nfcVerboseLogController =
+                        getDevelopmentOptionsController(
+                                NfcVerboseVendorLogPreferenceController.class);
                 // If hardware offload isn't default value, we must reboot after disable
                 // developer options. Show a dialog for the user to confirm.
                 if ((a2dpController == null || a2dpController.isDefaultValue())
-                        && (leAudioController == null || leAudioController.isDefaultValue())) {
+                        && (leAudioController == null || leAudioController.isDefaultValue())
+                        && (nfcSnoopLogController == null || nfcSnoopLogController.isDefaultValue())
+                        && (nfcVerboseLogController == null
+                        || nfcVerboseLogController.isDefaultValue())) {
                     disableDeveloperOptions();
                 } else {
                     DisableDevSettingsDialogFragment.show(this /* host */);
@@ -396,6 +406,28 @@
     }
 
     @Override
+    public void onNfcRebootDialogConfirmed() {
+        final NfcSnoopLogPreferenceController controller =
+                getDevelopmentOptionsController(NfcSnoopLogPreferenceController.class);
+        controller.onNfcRebootDialogConfirmed();
+
+        final NfcVerboseVendorLogPreferenceController vendorLogController =
+                getDevelopmentOptionsController(NfcVerboseVendorLogPreferenceController.class);
+        vendorLogController.onNfcRebootDialogConfirmed();
+    }
+
+    @Override
+    public void onNfcRebootDialogCanceled() {
+        final NfcSnoopLogPreferenceController controller =
+                getDevelopmentOptionsController(NfcSnoopLogPreferenceController.class);
+        controller.onNfcRebootDialogCanceled();
+
+        final NfcVerboseVendorLogPreferenceController vendorLogController =
+                getDevelopmentOptionsController(NfcVerboseVendorLogPreferenceController.class);
+        vendorLogController.onNfcRebootDialogCanceled();
+    }
+
+    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         boolean handledResult = false;
         for (AbstractPreferenceController controller : mPreferenceControllers) {
@@ -555,6 +587,8 @@
         controllers.add(new BluetoothLeAudioHwOffloadPreferenceController(context, fragment));
         controllers.add(new BluetoothMaxConnectedAudioDevicesPreferenceController(context));
         controllers.add(new NfcStackDebugLogPreferenceController(context));
+        controllers.add(new NfcSnoopLogPreferenceController(context, fragment));
+        controllers.add(new NfcVerboseVendorLogPreferenceController(context, fragment));
         controllers.add(new ShowTapsPreferenceController(context));
         controllers.add(new PointerLocationPreferenceController(context));
         controllers.add(new ShowSurfaceUpdatesPreferenceController(context));
diff --git a/src/com/android/settings/development/NfcRebootDialog.java b/src/com/android/settings/development/NfcRebootDialog.java
new file mode 100644
index 0000000..7d9890e
--- /dev/null
+++ b/src/com/android/settings/development/NfcRebootDialog.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2022 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.development;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.PowerManager;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentManager;
+
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+/**
+ * The NFC log type switch should reboot the device to take effect,
+ * the dialog is to ask the user to reboot the device.
+ */
+public class NfcRebootDialog extends InstrumentedDialogFragment
+        implements DialogInterface.OnClickListener {
+
+    public static final String TAG = "NfcRebootDialog";
+
+    /**
+     * The function to show the Dialog.
+     */
+    public static void show(DevelopmentSettingsDashboardFragment host) {
+        final FragmentManager manager = host.getActivity().getSupportFragmentManager();
+        if (manager.findFragmentByTag(TAG) == null) {
+            final NfcRebootDialog dialog = new NfcRebootDialog();
+            dialog.setTargetFragment(host, 0 /* requestCode */);
+            dialog.show(manager, TAG);
+        }
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.DIALOG_NFC_ENABLE_DETAIL_LOG;
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(getActivity())
+                .setMessage(R.string.nfc_reboot_dialog_message)
+                .setTitle(R.string.nfc_reboot_dialog_title)
+                .setPositiveButton(
+                        R.string.nfc_reboot_dialog_confirm, this)
+                .setNegativeButton(
+                        android.R.string.cancel, this)
+                .create();
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        final OnNfcRebootDialogConfirmedListener host =
+                (OnNfcRebootDialogConfirmedListener) getTargetFragment();
+        if (host == null) {
+            return;
+        }
+        if (which == DialogInterface.BUTTON_POSITIVE) {
+            host.onNfcRebootDialogConfirmed();
+            PowerManager pm = getContext().getSystemService(PowerManager.class);
+            pm.reboot(null);
+        } else {
+            host.onNfcRebootDialogCanceled();
+        }
+    }
+
+    /**
+     * Interface for EnableAdbWarningDialog callbacks.
+     */
+    public interface OnNfcRebootDialogConfirmedListener {
+        /**
+         * Called when the user presses enable on the warning dialog.
+         */
+        void onNfcRebootDialogConfirmed();
+
+        /**
+         * Called when the user presses cancel on the warning dialog.
+         */
+        void onNfcRebootDialogCanceled();
+    }
+}
diff --git a/src/com/android/settings/development/NfcSnoopLogPreferenceController.java b/src/com/android/settings/development/NfcSnoopLogPreferenceController.java
new file mode 100644
index 0000000..10cfee0
--- /dev/null
+++ b/src/com/android/settings/development/NfcSnoopLogPreferenceController.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/**
+ * Preference controller to control NFCSNOOP data payload
+ */
+public class NfcSnoopLogPreferenceController extends
+        DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+    private static final String TAG = "NfcSnoopLog";
+    private static final String NFC_NFCSNOOP_LOG_KEY =
+            "nfc_snoop_log";
+    @VisibleForTesting
+    static final String NFC_NFCSNOOP_LOG_MODE_PROPERTY =
+            "persist.nfc.nfcsnooplogmode";
+    @VisibleForTesting
+    static final String NFCSNOOP_MODE_FILTERED = "filtered";
+    @VisibleForTesting
+    static final String NFCSNOOP_MODE_FULL = "full";
+
+    @VisibleForTesting
+    boolean mChanged = false;
+
+    private final DevelopmentSettingsDashboardFragment mFragment;
+
+    public NfcSnoopLogPreferenceController(Context context,
+            DevelopmentSettingsDashboardFragment fragment) {
+        super(context);
+        mFragment = fragment;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return NFC_NFCSNOOP_LOG_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        NfcRebootDialog.show(mFragment);
+        mChanged = true;
+        return false;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        try {
+            final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
+            ((SwitchPreference) mPreference).setChecked(currentValue.equals(NFCSNOOP_MODE_FULL));
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
+        }
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        try {
+            SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
+            ((SwitchPreference) mPreference).setChecked(false);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
+        }
+    }
+
+    /**
+     * Check whether the current setting is the default value or not.
+     */
+    public boolean isDefaultValue() {
+        try {
+            final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
+            return !currentValue.equals(NFCSNOOP_MODE_FULL);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
+        }
+        return true;
+    }
+
+    /**
+     * Called when the NfcRebootDialog confirm is clicked.
+     */
+    public void onNfcRebootDialogConfirmed() {
+        if (!mChanged) {
+            return;
+        }
+        try {
+            final String currentValue =
+                    SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
+            if (currentValue.equals(NFCSNOOP_MODE_FILTERED)) {
+                SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FULL);
+            } else {
+                SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
+            }
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
+        }
+
+    }
+
+    /**
+     * Called when the NfcRebootDialog cancel is clicked.
+     */
+    public void onNfcRebootDialogCanceled() {
+        mChanged = false;
+    }
+}
diff --git a/src/com/android/settings/development/NfcVerboseVendorLogPreferenceController.java b/src/com/android/settings/development/NfcVerboseVendorLogPreferenceController.java
new file mode 100644
index 0000000..8b3cab0
--- /dev/null
+++ b/src/com/android/settings/development/NfcVerboseVendorLogPreferenceController.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/**
+ * Preference controller to control NFC vendor verbose logging enable and disable
+ */
+public class NfcVerboseVendorLogPreferenceController
+        extends DeveloperOptionsPreferenceController
+        implements Preference.OnPreferenceChangeListener {
+    private static final String TAG = "NfcVerboseVendorLog";
+    private static final String NFC_VERBOSE_VENDOR_LOG_KEY = "nfc_verbose_vendor_log";
+    @VisibleForTesting
+    static final String NFC_VERBOSE_VENDOR_LOG_PROPERTY =
+            "persist.nfc.verbosevendorlog";
+    @VisibleForTesting
+    static final String VERBOSE_VENDOR_LOG_ENABLED = "enabled";
+    @VisibleForTesting
+    static final String VERBOSE_VENDOR_LOG_DISABLED = "disabled";
+
+    @VisibleForTesting
+    boolean mChanged = false;
+
+    private final DevelopmentSettingsDashboardFragment mFragment;
+
+    public NfcVerboseVendorLogPreferenceController(Context context,
+            DevelopmentSettingsDashboardFragment fragment) {
+        super(context);
+        mFragment = fragment;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return NFC_VERBOSE_VENDOR_LOG_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        NfcRebootDialog.show(mFragment);
+        mChanged = true;
+        return false;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        try {
+            final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
+            ((SwitchPreference) mPreference)
+                    .setChecked(currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED));
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
+        }
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        super.onDeveloperOptionsSwitchDisabled();
+        try {
+            SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
+            ((SwitchPreference) mPreference).setChecked(false);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
+        }
+    }
+
+    /**
+     * Check whether the current setting is the default value or not.
+     */
+    public boolean isDefaultValue() {
+        try {
+            final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
+            return !currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
+        }
+        return true;
+    }
+
+    /**
+     * Called when the NfcRebootDialog confirm is clicked.
+     */
+    public void onNfcRebootDialogConfirmed() {
+        if (!mChanged) {
+            return;
+        }
+        try {
+            final String currentValue = SystemProperties
+                    .get(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
+            if (currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)) {
+                SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_ENABLED);
+            } else {
+                SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
+            }
+            updateState(mPreference);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
+        }
+    }
+
+    /**
+     * Called when the NfcRebootDialog cancel is clicked.
+     */
+    public void onNfcRebootDialogCanceled() {
+        mChanged = false;
+    }
+}
diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
index d925de3..ffb10fb 100644
--- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java
+++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
@@ -57,9 +57,7 @@
 
     @Override
     public CharSequence getSummary() {
-        return mContext.getText(isChecked()
-                ? R.string.auto_brightness_summary_on
-                : R.string.auto_brightness_summary_off);
+        return mContext.getText(isChecked() ? R.string.on : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
index d02e336..abf4f0c 100644
--- a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
@@ -165,7 +165,7 @@
 
     @Override
     public CharSequence getSummary() {
-        int activeStringId = R.string.auto_rotate_option_off;
+        int activeStringId = R.string.off;
         if (!RotationPolicy.isRotationLocked(mContext)) {
             final int cameraRotate = Settings.Secure.getIntForUser(
                     mContext.getContentResolver(),
@@ -176,7 +176,7 @@
                     && !isCameraLocked()
                     && !isPowerSaveMode()
                     ? R.string.auto_rotate_option_face_based
-                    : R.string.auto_rotate_option_on;
+                    : R.string.on;
         }
         return mContext.getString(activeStringId);
     }
diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java
index 1d12c1a..ae4610a 100644
--- a/src/com/android/settings/dream/DreamSettings.java
+++ b/src/com/android/settings/dream/DreamSettings.java
@@ -137,7 +137,7 @@
     @VisibleForTesting
     static CharSequence getSummaryTextFromBackend(DreamBackend backend, Context context) {
         if (!backend.isEnabled()) {
-            return context.getString(R.string.screensaver_settings_summary_off);
+            return context.getString(R.string.off);
         } else {
             return backend.getActiveDreamName();
         }
diff --git a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
index 155efd3..bcf3f21 100644
--- a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
@@ -95,8 +95,7 @@
     public CharSequence getSummary() {
         return mContext.getText(
                 mEmergencyNumberUtils.getEmergencyGestureEnabled()
-                        ? R.string.gesture_setting_on
-                        : R.string.gesture_setting_off);
+                        ? R.string.on : R.string.off);
     }
 
     /**
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index c712ab0..2a39ab3 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -97,7 +97,7 @@
     public CharSequence getSummary() {
         final boolean isPowerSaveOn = mPowerManager.isPowerSaveMode();
         if (isPowerSaveOn) {
-            return mContext.getString(R.string.battery_saver_on_summary);
+            return mContext.getString(R.string.on);
         }
 
         final ContentResolver resolver = mContext.getContentResolver();
@@ -109,7 +109,7 @@
             return percent != 0 ?
                     mContext.getString(R.string.battery_saver_off_scheduled_summary,
                             Utils.formatPercentage(percent)) :
-                    mContext.getString(R.string.battery_saver_off_summary);
+                    mContext.getString(R.string.off);
         } else {
             return mContext.getString(R.string.battery_saver_pref_auto_routine_summary);
         }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index 45ae8c5..6d2c1a1 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -369,10 +369,6 @@
             addFooterPreferenceIfNeeded(false);
             return false;
         }
-        if (mBatteryUsageMap == null) {
-            // Battery usage data is not ready, wait for data ready to refresh UI.
-            return false;
-        }
 
         if (isBatteryLevelDataInOneDay()) {
             // Only 1 day data, hide the daily chart view.
@@ -394,6 +390,10 @@
             mHourlyChartView.setViewModel(hourlyViewModel);
         }
 
+        if (mBatteryUsageMap == null) {
+            // Battery usage data is not ready, wait for data ready to refresh UI.
+            return false;
+        }
         mHandler.post(() -> {
             final long start = System.currentTimeMillis();
             removeAndCacheAllPrefs();
@@ -697,12 +697,13 @@
 
         final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageData =
                 DataProcessor.getBatteryUsageData(context, batteryHistoryMap);
-        return batteryUsageData == null
-                ? null
-                : batteryUsageData
-                        .get(BatteryChartViewModel.SELECTED_INDEX_ALL)
-                        .get(BatteryChartViewModel.SELECTED_INDEX_ALL)
-                        .getAppDiffEntryList();
+        if (batteryUsageData == null) {
+            return null;
+        }
+        BatteryDiffData allBatteryDiffData = batteryUsageData.get(
+                BatteryChartViewModel.SELECTED_INDEX_ALL).get(
+                BatteryChartViewModel.SELECTED_INDEX_ALL);
+        return allBatteryDiffData == null ? null : allBatteryDiffData.getAppDiffEntryList();
     }
 
     /** Used for {@link AppBatteryPreferenceController}. */
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
index e668b37..c1cffc8 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -515,7 +515,7 @@
 
     private boolean hasOverlap(
             final Rect[] displayAreas, final int leftIndex, final int rightIndex) {
-        return displayAreas[leftIndex].right + mTextPadding * 2f > displayAreas[rightIndex].left;
+        return displayAreas[leftIndex].right + mTextPadding * 2.3f > displayAreas[rightIndex].left;
     }
 
     private void drawAxisLabelText(
@@ -595,6 +595,9 @@
 
     // Searches the corresponding trapezoid index from x location.
     private int getTrapezoidIndex(float x) {
+        if (mTrapezoidSlots == null) {
+            return BatteryChartViewModel.SELECTED_INDEX_INVALID;
+        }
         for (int index = 0; index < mTrapezoidSlots.length; index++) {
             final TrapezoidSlot slot = mTrapezoidSlots[index];
             if (x >= slot.mLeft - mTrapezoidHOffset
diff --git a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
index 49a9de6..2b32eec 100644
--- a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
+++ b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
@@ -128,8 +128,7 @@
         if (!mAssistOnly) {
             isEnabled = isEnabled || isSilenceGestureEnabled();
         }
-        return mContext.getText(
-                isEnabled ? R.string.gesture_setting_on : R.string.gesture_setting_off);
+        return mContext.getText(isEnabled ? R.string.on : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/GesturePreferenceController.java b/src/com/android/settings/gestures/GesturePreferenceController.java
index 71c3c9a..9e8181c 100644
--- a/src/com/android/settings/gestures/GesturePreferenceController.java
+++ b/src/com/android/settings/gestures/GesturePreferenceController.java
@@ -60,8 +60,7 @@
 
     @Override
     public CharSequence getSummary() {
-        return mContext.getText(
-                isChecked() ? R.string.gesture_setting_on : R.string.gesture_setting_off);
+        return mContext.getText(isChecked() ? R.string.on : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
index 6aac772..a3bc052 100644
--- a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
+++ b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
@@ -51,7 +51,7 @@
     public CharSequence getSummary() {
         return mContext.getText(
                 OneHandedSettingsUtils.isOneHandedModeEnabled(mContext)
-                        ? R.string.gesture_setting_on : R.string.gesture_setting_off);
+                        ? R.string.on : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
index 03b0259..50b6cb0 100644
--- a/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
+++ b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
@@ -104,7 +104,7 @@
                     break;
                 // VOLUME_HUSH_OFF
                 default:
-                    summary = mContext.getText(R.string.switch_off_text);
+                    summary = mContext.getText(R.string.off);
             }
             preference.setEnabled(true);
             mPreference.setSwitchEnabled(true);
diff --git a/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java b/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java
index f0bb8d9..68e46e9 100644
--- a/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java
+++ b/src/com/android/settings/inputmethod/SpellCheckerPreferenceController.java
@@ -66,7 +66,7 @@
             return;
         }
         if (!mTextServicesManager.isSpellCheckerEnabled()) {
-            preference.setSummary(R.string.switch_off_text);
+            preference.setSummary(R.string.off);
         } else {
             final SpellCheckerInfo sci = mTextServicesManager.getCurrentSpellChecker();
             if (sci != null) {
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index ab9110d..b3c2e30 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -43,7 +43,6 @@
 import java.util.List;
 import java.util.Locale;
 
-
 class LocaleDragAndDropAdapter
         extends RecyclerView.Adapter<LocaleDragAndDropAdapter.CustomViewHolder> {
 
@@ -154,8 +153,10 @@
         final LocaleDragCell dragCell = holder.getLocaleDragCell();
         final String label = feedItem.getFullNameNative();
         final String description = feedItem.getFullNameInUiLanguage();
+
         dragCell.setLabelAndDescription(label, description);
         dragCell.setLocalized(feedItem.isTranslated());
+        dragCell.setCurrentDefault(feedItem.getLocale().equals(Locale.getDefault()));
         dragCell.setMiniLabel(mNumberFormatter.format(i + 1));
         dragCell.setShowCheckbox(mRemoveMode);
         dragCell.setShowMiniLabel(!mRemoveMode);
diff --git a/src/com/android/settings/localepicker/LocaleDragCell.java b/src/com/android/settings/localepicker/LocaleDragCell.java
index ea86189..2f4cfef 100644
--- a/src/com/android/settings/localepicker/LocaleDragCell.java
+++ b/src/com/android/settings/localepicker/LocaleDragCell.java
@@ -33,6 +33,7 @@
     private CheckBox mCheckbox;
     private TextView mMiniLabel;
     private TextView mLocalized;
+    private TextView mCurrentDefault;
     private ImageView mDragHandle;
 
     public LocaleDragCell(Context context, AttributeSet attrs) {
@@ -44,6 +45,7 @@
         super.onFinishInflate();
         mLabel = (TextView) findViewById(R.id.label);
         mLocalized = (TextView) findViewById(R.id.l10nWarn);
+        mCurrentDefault = (TextView) findViewById(R.id.default_locale);
         mMiniLabel = (TextView) findViewById(R.id.miniLabel);
         mCheckbox = (CheckBox) findViewById(R.id.checkbox);
         mDragHandle = (ImageView) findViewById(R.id.dragHandle);
@@ -100,6 +102,14 @@
         invalidate();
     }
 
+    /**
+     * Indicate current locale is system default.
+     */
+    public void setCurrentDefault(boolean isCurrentDefault) {
+        mCurrentDefault.setVisibility(isCurrentDefault ? VISIBLE : GONE);
+        invalidate();
+    }
+
     public ImageView getDragHandle() {
         return mDragHandle;
     }
diff --git a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
new file mode 100644
index 0000000..05c7401
--- /dev/null
+++ b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 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.localepicker;
+
+import android.content.Context;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settingslib.HelpUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.widget.FooterPreference;
+
+/**
+ * A controller to update current locale information of application.
+ */
+public class LocaleHelperPreferenceController extends AbstractPreferenceController {
+    private static final String TAG = LocaleHelperPreferenceController.class.getSimpleName();
+
+    private static final String KEY_FOOTER_LANGUAGE_PICKER = "footer_languages_picker";
+
+    public LocaleHelperPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_FOOTER_LANGUAGE_PICKER;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
+        updateFooterPreference(footerPreference);
+    }
+
+    @VisibleForTesting
+    void updateFooterPreference(FooterPreference footerPreference) {
+        if (footerPreference != null) {
+            footerPreference.setLearnMoreAction(v -> openLocaleLearnMoreLink());
+            footerPreference.setLearnMoreText(mContext.getString(
+                    R.string.desc_locale_helper_footer_general));
+        }
+    }
+
+    private void openLocaleLearnMoreLink() {
+        mContext.startActivity(
+                HelpUtils.getHelpIntent(
+                        mContext,
+                        mContext.getString(R.string.link_locale_picker_footer_learn_more),
+                        /*backupContext=*/""));
+    }
+}
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index eac2dd1..9db3468 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -36,6 +36,7 @@
 
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
+import androidx.preference.PreferenceScreen;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.internal.app.LocalePicker;
@@ -46,6 +47,7 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.search.SearchIndexableRaw;
+import com.android.settingslib.widget.LayoutPreference;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -64,6 +66,7 @@
     private static final int REQUEST_LOCALE_PICKER = 0;
 
     private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
+    private static final String KEY_LANGUAGES_PICKER = "languages_picker";
 
     private LocaleDragAndDropAdapter mAdapter;
     private Menu mMenu;
@@ -72,6 +75,9 @@
     private boolean mShowingRemoveDialog;
     private boolean mIsUiRestricted;
 
+    private LayoutPreference mLocalePickerPreference;
+    private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
+
     public LocaleListEditor() {
         super(DISALLOW_CONFIG_LOCALE);
     }
@@ -86,6 +92,14 @@
         super.onCreate(savedInstanceState);
         setHasOptionsMenu(true);
 
+        addPreferencesFromResource(R.xml.languages);
+        final Activity activity = getActivity();
+        activity.setTitle(R.string.language_picker_title);
+        mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(activity);
+        final PreferenceScreen screen = getPreferenceScreen();
+        mLocalePickerPreference = screen.findPreference(KEY_LANGUAGES_PICKER);
+        mLocaleHelperPreferenceController.displayPreference(screen);
+
         LocaleStore.fillCache(this.getContext());
         final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList();
         mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
@@ -93,11 +107,8 @@
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstState) {
-        final View result = super.onCreateView(inflater, container, savedInstState);
-        final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result);
-
-        configureDragAndDrop(myLayout);
-        return result;
+        configureDragAndDrop(mLocalePickerPreference);
+        return super.onCreateView(inflater, container, savedInstState);
     }
 
     @Override
@@ -287,8 +298,8 @@
         return result;
     }
 
-    private void configureDragAndDrop(View view) {
-        final RecyclerView list = view.findViewById(R.id.dragList);
+    private void configureDragAndDrop(LayoutPreference layout) {
+        final RecyclerView list = layout.findViewById(R.id.dragList);
         final LocaleLinearLayoutManager llm = new LocaleLinearLayoutManager(getContext(), mAdapter);
         llm.setAutoMeasureEnabled(true);
         list.setLayoutManager(llm);
@@ -297,7 +308,7 @@
         mAdapter.setRecyclerView(list);
         list.setAdapter(mAdapter);
 
-        mAddLanguage = view.findViewById(R.id.add_language);
+        mAddLanguage = layout.findViewById(R.id.add_language);
         mAddLanguage.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
diff --git a/src/com/android/settings/location/LocationForWorkPreferenceController.java b/src/com/android/settings/location/LocationForWorkPreferenceController.java
index 45fb5f1..3341b8f 100644
--- a/src/com/android/settings/location/LocationForWorkPreferenceController.java
+++ b/src/com/android/settings/location/LocationForWorkPreferenceController.java
@@ -44,8 +44,7 @@
             final boolean switchState = mPreference.isChecked();
             mUserManager.setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, !switchState,
                     Utils.getManagedProfile(mUserManager));
-            mPreference.setSummary(switchState ?
-                    R.string.switch_on_text : R.string.switch_off_text);
+            mPreference.setSummary(switchState ? R.string.on : R.string.off);
             return true;
         }
         return false;
@@ -81,11 +80,11 @@
                     mLocationEnabler.isManagedProfileRestrictedByBase();
             if (isRestrictedByBase || !enabled) {
                 mPreference.setChecked(false);
-                summaryResId = enabled ? R.string.switch_off_text
+                summaryResId = enabled ? R.string.off
                         : R.string.location_app_permission_summary_location_off;
             } else {
                 mPreference.setChecked(true);
-                summaryResId = R.string.switch_on_text;
+                summaryResId = R.string.on;
             }
             mPreference.setSummary(summaryResId);
         }
diff --git a/src/com/android/settings/location/LocationServicesBluetoothScanningPreferenceController.java b/src/com/android/settings/location/LocationServicesBluetoothScanningPreferenceController.java
index ccda572..cc2b704 100644
--- a/src/com/android/settings/location/LocationServicesBluetoothScanningPreferenceController.java
+++ b/src/com/android/settings/location/LocationServicesBluetoothScanningPreferenceController.java
@@ -46,8 +46,7 @@
     public CharSequence getSummary() {
         final boolean bleScanOn = Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE, 0) == 1;
-        int resId =
-                bleScanOn ? R.string.scanning_status_text_on : R.string.scanning_status_text_off;
+        final int resId = bleScanOn ? R.string.on : R.string.off;
         return mContext.getString(resId);
     }
 
diff --git a/src/com/android/settings/location/LocationServicesWifiScanningPreferenceController.java b/src/com/android/settings/location/LocationServicesWifiScanningPreferenceController.java
index 2814f9d..1e8412e 100644
--- a/src/com/android/settings/location/LocationServicesWifiScanningPreferenceController.java
+++ b/src/com/android/settings/location/LocationServicesWifiScanningPreferenceController.java
@@ -47,8 +47,7 @@
     @Override
     public CharSequence getSummary() {
         final boolean wifiScanOn = mWifiManager.isScanAlwaysAvailable();
-        int resId =
-                wifiScanOn ? R.string.scanning_status_text_on : R.string.scanning_status_text_off;
+        final int resId = wifiScanOn ? R.string.on : R.string.off;
         return mContext.getString(resId);
     }
 
diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
index 5effe6c..91100b7 100644
--- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java
+++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
@@ -57,7 +57,7 @@
             }
             return sSummary;
         } else {
-            return mContext.getString(R.string.location_settings_summary_location_off);
+            return mContext.getString(R.string.off);
         }
     }
 
diff --git a/src/com/android/settings/network/AdaptiveConnectivityPreferenceController.java b/src/com/android/settings/network/AdaptiveConnectivityPreferenceController.java
index a938515..0b7acc7 100644
--- a/src/com/android/settings/network/AdaptiveConnectivityPreferenceController.java
+++ b/src/com/android/settings/network/AdaptiveConnectivityPreferenceController.java
@@ -48,7 +48,7 @@
     public CharSequence getSummary() {
         return Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 1) == 1
-                ? mContext.getString(R.string.adaptive_connectivity_switch_on)
-                : mContext.getString(R.string.adaptive_connectivity_switch_off);
+                ? mContext.getString(R.string.on)
+                : mContext.getString(R.string.off);
     }
 }
diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java
index ed6f9ed..04db834 100644
--- a/src/com/android/settings/network/PrivateDnsPreferenceController.java
+++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java
@@ -130,7 +130,7 @@
             case PRIVATE_DNS_MODE_OFF:
                 return res.getString(R.string.private_dns_mode_off);
             case PRIVATE_DNS_MODE_OPPORTUNISTIC:
-                return dnsesResolved ? res.getString(R.string.private_dns_mode_on)
+                return dnsesResolved ? res.getString(R.string.on)
                         : res.getString(R.string.private_dns_mode_opportunistic);
             case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME:
                 return dnsesResolved
diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java
index f91f787..12c359d 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -216,7 +216,7 @@
         }
         if (!hotSpotOn && !tetherOn) {
             // Both off
-            mPreference.setSummary(R.string.switch_off_text);
+            mPreference.setSummary(R.string.off);
         } else if (hotSpotOn && tetherOn) {
             // Both on
             mPreference.setSummary(R.string.tether_settings_summary_hotspot_on_tether_on);
@@ -232,7 +232,7 @@
             // Preference is not ready yet.
             return;
         }
-        mPreference.setSummary(R.string.switch_off_text);
+        mPreference.setSummary(R.string.off);
     }
 
     class SettingObserver extends ContentObserver {
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index 926c77e..bfb4943 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -78,7 +78,8 @@
     private static final String KEY_MVNO_TYPE = "mvno_type";
     private static final String KEY_PASSWORD = "apn_password";
 
-    private static final int MENU_DELETE = Menu.FIRST;
+    @VisibleForTesting
+    static final int MENU_DELETE = Menu.FIRST;
     private static final int MENU_SAVE = Menu.FIRST + 1;
     private static final int MENU_CANCEL = Menu.FIRST + 2;
 
@@ -148,6 +149,17 @@
     String mDefaultApnRoamingProtocol;
     private String[] mReadOnlyApnFields;
     private boolean mReadOnlyApn;
+    /**
+     * The APN deletion feature within menu is aligned with the APN adding feature.
+     * Having only one of them could lead to a UX which not that make sense from user's
+     * perspective.
+     *
+     * mIsAddApnAllowed stores the configuration value reading from
+     * CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL to support the presentation
+     * control of the menu options. When false, delete option would be invisible to
+     * the end user.
+     */
+    private boolean mIsAddApnAllowed;
     private Uri mCarrierUri;
     private boolean mIsCarrierIdApn;
 
@@ -282,7 +294,7 @@
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
         initApnEditorUi();
-        getCarrierCustomizedConfig();
+        getCarrierCustomizedConfig(getContext());
 
         Uri uri = null;
         if (action.equals(Intent.ACTION_EDIT)) {
@@ -826,7 +838,8 @@
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
         // If it's a new APN, then cancel will delete the new entry in onPause
-        if (!mNewApn && !mReadOnlyApn) {
+        // If APN add is not allowed, delete might lead to issue regarding recovery
+        if (!mNewApn && !mReadOnlyApn && mIsAddApnAllowed) {
             menu.add(0, MENU_DELETE, 0, R.string.menu_delete)
                 .setIcon(R.drawable.ic_delete);
         }
@@ -1319,13 +1332,15 @@
         mMvnoMatchData = (EditTextPreference) findPreference("mvno_match_data");
     }
 
-    private void getCarrierCustomizedConfig() {
+    @VisibleForTesting
+    protected void getCarrierCustomizedConfig(Context context) {
         mReadOnlyApn = false;
         mReadOnlyApnTypes = null;
         mReadOnlyApnFields = null;
+        mIsAddApnAllowed = true;
 
         final CarrierConfigManager configManager = (CarrierConfigManager)
-                getSystemService(Context.CARRIER_CONFIG_SERVICE);
+            context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
         if (configManager != null) {
             final PersistableBundle b = configManager.getConfigForSubId(mSubId);
             if (b != null) {
@@ -1357,6 +1372,11 @@
                     Log.d(TAG, "onCreate: default apn roaming protocol: "
                             + mDefaultApnRoamingProtocol);
                 }
+
+                mIsAddApnAllowed = b.getBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL);
+                if (!mIsAddApnAllowed) {
+                    Log.d(TAG, "onCreate: not allow to add new APN");
+                }
             }
         }
     }
diff --git a/src/com/android/settings/nfc/AndroidBeamEnabler.java b/src/com/android/settings/nfc/AndroidBeamEnabler.java
index 31ef702..a1ecffd 100644
--- a/src/com/android/settings/nfc/AndroidBeamEnabler.java
+++ b/src/com/android/settings/nfc/AndroidBeamEnabler.java
@@ -65,7 +65,7 @@
                 if (mNfcAdapter.isNdefPushEnabled() && mPreference.isEnabled()) {
                     mPreference.setSummary(R.string.android_beam_on_summary);
                 } else {
-                    mPreference.setSummary(R.string.android_beam_off_summary);
+                    mPreference.setSummary(R.string.off);
                 }
                 break;
             case NfcAdapter.STATE_TURNING_ON:
diff --git a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java b/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
index 3dac732..78ba9ea 100644
--- a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
@@ -44,7 +44,7 @@
         return mContext.getString(
                 areBubblesEnabled()
                         ? R.string.notifications_bubble_setting_on_summary
-                        : R.string.switch_off_text);
+                        : R.string.off);
     }
 
     @Override
diff --git a/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
index 8ae0493..5f2a9cb 100644
--- a/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
+++ b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
@@ -71,7 +71,7 @@
             return mContext.getString(R.string.spatial_summary_on_one,
                     mContext.getString(R.string.spatial_audio_wired_headphones));
         } else {
-            return mContext.getString(R.string.spatial_summary_off);
+            return mContext.getString(R.string.off);
         }
     }
 }
diff --git a/src/com/android/settings/notification/zen/ZenModeSettings.java b/src/com/android/settings/notification/zen/ZenModeSettings.java
index a707e53..b849edf 100644
--- a/src/com/android/settings/notification/zen/ZenModeSettings.java
+++ b/src/com/android/settings/notification/zen/ZenModeSettings.java
@@ -194,7 +194,7 @@
                 String description = ZenModeConfig.getDescription(mContext, true, config, false);
 
                 if (description == null) {
-                    return mContext.getString(R.string.zen_mode_sound_summary_on);
+                    return mContext.getString(R.string.on);
                 } else {
                     return mContext.getString(R.string.zen_mode_sound_summary_on_with_info,
                             description);
diff --git a/src/com/android/settings/notification/zen/ZenModeSettingsFooterPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeSettingsFooterPreferenceController.java
index 6a57441..1964ccd 100644
--- a/src/com/android/settings/notification/zen/ZenModeSettingsFooterPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeSettingsFooterPreferenceController.java
@@ -274,7 +274,7 @@
         }
 
         private int getAllowRes(boolean allow) {
-            return allow ? R.string.zen_mode_sound_summary_on : R.string.switch_off_text;
+            return allow ? R.string.on : R.string.off;
         }
 
         @Override
diff --git a/src/com/android/settings/notification/zen/ZenRulePreference.java b/src/com/android/settings/notification/zen/ZenRulePreference.java
index 8cf3106..ee13c28 100644
--- a/src/com/android/settings/notification/zen/ZenRulePreference.java
+++ b/src/com/android/settings/notification/zen/ZenRulePreference.java
@@ -151,7 +151,7 @@
         }
 
         return (rule == null || !rule.isEnabled())
-                ? mContext.getResources().getString(R.string.switch_off_text)
-                : mContext.getResources().getString(R.string.switch_on_text);
+                ? mContext.getResources().getString(R.string.off)
+                : mContext.getResources().getString(R.string.on);
     }
 }
diff --git a/src/com/android/settings/print/PrintSettingPreferenceController.java b/src/com/android/settings/print/PrintSettingPreferenceController.java
index c0adfa3..d4ae311 100644
--- a/src/com/android/settings/print/PrintSettingPreferenceController.java
+++ b/src/com/android/settings/print/PrintSettingPreferenceController.java
@@ -116,7 +116,7 @@
             final List<PrintServiceInfo> services =
                     mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES);
             if (services == null || services.isEmpty()) {
-                return mContext.getText(R.string.print_settings_summary_no_service);
+                return mContext.getText(R.string.off);
             } else {
                 final int count = services.size();
                 return mContext.getResources().getQuantityString(
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index ed21b6f..46250c7 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -204,9 +204,9 @@
                 preference.setPersistent(false);
 
                 if (service.isEnabled()) {
-                    preference.setSummary(getString(R.string.print_feature_state_on));
+                    preference.setSummary(getString(R.string.on));
                 } else {
-                    preference.setSummary(getString(R.string.print_feature_state_off));
+                    preference.setSummary(getString(R.string.off));
                 }
 
                 Drawable drawable = service.getResolveInfo().loadIcon(pm);
diff --git a/src/com/android/settings/security/ScreenPinningPreferenceController.java b/src/com/android/settings/security/ScreenPinningPreferenceController.java
index c72d018..dae6b8e 100644
--- a/src/com/android/settings/security/ScreenPinningPreferenceController.java
+++ b/src/com/android/settings/security/ScreenPinningPreferenceController.java
@@ -38,7 +38,7 @@
     public CharSequence getSummary() {
         return Settings.System.getInt(mContext.getContentResolver(),
                 Settings.System.LOCK_TO_APP_ENABLED, 0) != 0
-                ? mContext.getText(R.string.screen_pinning_switch_on_text)
-                : mContext.getText(R.string.screen_pinning_switch_off_text);
+                ? mContext.getText(R.string.on)
+                : mContext.getText(R.string.off);
     }
 }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 274d40a..2c797bb 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -279,7 +279,7 @@
         final SettingsActivity activity = (SettingsActivity) getActivity();
         final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
         switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
-        if (mUserCaps.mIsAdmin) {
+        if (isCurrentUserAdmin()) {
             switchBar.show();
         } else {
             switchBar.hide();
@@ -358,7 +358,7 @@
         mMePreference = new UserPreference(getPrefContext(), null /* attrs */, myUserId);
         mMePreference.setKey(KEY_USER_ME);
         mMePreference.setOnPreferenceClickListener(this);
-        if (mUserCaps.mIsAdmin) {
+        if (isCurrentUserAdmin()) {
             mMePreference.setSummary(R.string.user_admin);
         }
 
@@ -449,10 +449,7 @@
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         int pos = 0;
-        // TODO(b/191509236): The menu item does not need to be accessible for guest users,
-        //  regardless of mGuestUserAutoCreated
-        if (!mUserCaps.mIsAdmin && canSwitchUserNow() && !(isCurrentUserGuest()
-                && mGuestUserAutoCreated)) {
+        if (!isCurrentUserAdmin() && canSwitchUserNow() && !isCurrentUserGuest()) {
             String nickname = mUserManager.getUserName();
             MenuItem removeThisUser = menu.add(0, MENU_REMOVE_USER, pos++,
                     getResources().getString(R.string.user_remove_user_menu, nickname));
@@ -1211,12 +1208,12 @@
         // don't show the guest user icon, instead we show two preferences for guest user to
         // exit and reset itself. Hence we don't add mMePreference, i.e. guest user to the
         // list of users visible in the UI.
-        if (!mUserCaps.mIsGuest) {
+        if (!isCurrentUserGuest()) {
             userPreferences.add(mMePreference);
         }
 
         boolean canOpenUserDetails =
-                mUserCaps.mIsAdmin || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
+                isCurrentUserAdmin() || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
         for (UserInfo user : users) {
             if (user.isGuest()) {
                 // Guest user is added to guest category via updateGuestCategory
@@ -1341,6 +1338,10 @@
         return mUserCaps.mIsGuest;
     }
 
+    private boolean isCurrentUserAdmin() {
+        return mUserCaps.mIsAdmin;
+    }
+
     private boolean canSwitchUserNow() {
         return mUserManager.getUserSwitchability() == UserManager.SWITCHABILITY_STATUS_OK;
     }
@@ -1388,7 +1389,7 @@
         UserPreference pref = null;
         boolean isGuestAlreadyCreated = false;
         boolean canOpenUserDetails =
-                mUserCaps.mIsAdmin || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
+                isCurrentUserAdmin() || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
 
         mGuestUserCategory.removeAll();
         mGuestUserCategory.setVisible(false);
@@ -1436,7 +1437,7 @@
             // "reset guest on exit" preference is shown hence also make guest category visible
             mGuestUserCategory.setVisible(true);
         }
-        if (mUserCaps.mIsGuest) {
+        if (isCurrentUserGuest()) {
             // guest category is not visible for guest user.
             mGuestUserCategory.setVisible(false);
         }
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index de0d98b..7d47457 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -38,7 +38,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.StringRes;
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.R;
@@ -135,7 +134,7 @@
         lp.setMarginEnd(switchBarMarginEnd);
         setBackgroundColor(mBackgroundColor);
 
-        setSwitchBarText(R.string.switch_on_text, R.string.switch_off_text);
+        setSwitchBarText(R.string.on, R.string.off);
 
         addOnSwitchChangeListener(
                 (switchView, isChecked) -> setTextViewLabelAndBackground(isChecked));
diff --git a/src/com/android/settings/wifi/WifiSummaryUpdater.java b/src/com/android/settings/wifi/WifiSummaryUpdater.java
index 93bbe0f..030db5a 100644
--- a/src/com/android/settings/wifi/WifiSummaryUpdater.java
+++ b/src/com/android/settings/wifi/WifiSummaryUpdater.java
@@ -87,7 +87,7 @@
     @Override
     public String getSummary() {
         if (!mWifiTracker.enabled) {
-            return mContext.getString(R.string.switch_off_text);
+            return mContext.getString(R.string.off);
         }
         if (!mWifiTracker.connected) {
             return mContext.getString(R.string.disconnected);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 891439e..433fe77 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -187,7 +187,7 @@
                 mServiceInfo, SERVICE_ENABLED);
 
         assertThat(summary).isEqualTo(
-                mContext.getString(R.string.accessibility_summary_state_enabled));
+                mContext.getString(R.string.on));
     }
 
     @Test
@@ -198,13 +198,13 @@
                 mServiceInfo, SERVICE_DISABLED);
 
         assertThat(summary).isEqualTo(
-                mContext.getString(R.string.accessibility_summary_state_disabled));
+                mContext.getString(R.string.off));
     }
 
     @Test
     public void getServiceSummary_enableServiceAndHasSummary_showsEnabledSummary() {
         final String service_enabled = mContext.getString(
-                R.string.accessibility_summary_state_enabled);
+                R.string.on);
         doReturn(DEFAULT_SUMMARY).when(mServiceInfo).loadSummary(any());
 
         final CharSequence summary = AccessibilitySettings.getServiceSummary(mContext,
@@ -218,7 +218,7 @@
     @Test
     public void getServiceSummary_disableServiceAndHasSummary_showsCombineDisabledSummary() {
         final String service_disabled = mContext.getString(
-                R.string.accessibility_summary_state_disabled);
+                R.string.off);
         doReturn(DEFAULT_SUMMARY).when(mServiceInfo).loadSummary(any());
 
         final CharSequence summary = AccessibilitySettings.getServiceSummary(mContext,
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
index 83c5bc2..c89d526 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
@@ -80,7 +80,7 @@
         final CharSequence result = AccessibilityUtil.getSummary(mContext, SECURE_TEST_KEY);
 
         assertThat(result)
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_on));
+                .isEqualTo(mContext.getText(R.string.on));
     }
 
     @Test
@@ -90,7 +90,7 @@
         final CharSequence result = AccessibilityUtil.getSummary(mContext, SECURE_TEST_KEY);
 
         assertThat(result)
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 
     @Test
@@ -98,7 +98,7 @@
         final CharSequence result = AccessibilityUtil.getSummary(mContext, SECURE_TEST_KEY);
 
         assertThat(result)
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/AutoclickPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AutoclickPreferenceControllerTest.java
index d670ee8..b959483 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AutoclickPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AutoclickPreferenceControllerTest.java
@@ -55,7 +55,7 @@
                 Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, 0);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
index c44bed1..9fb7ea4 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
@@ -58,7 +58,7 @@
                 Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, ON);
 
         assertThat(mController.getSummary()).isEqualTo(
-                mContext.getText(R.string.accessibility_feature_state_on));
+                mContext.getText(R.string.on));
     }
 
     @Test
@@ -67,6 +67,6 @@
                 Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF);
 
         assertThat(mController.getSummary()).isEqualTo(
-                mContext.getText(R.string.accessibility_feature_state_off));
+                mContext.getText(R.string.off));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/ColorInversionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/ColorInversionPreferenceControllerTest.java
index e034498..47cfdaf 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ColorInversionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ColorInversionPreferenceControllerTest.java
@@ -52,7 +52,7 @@
                 DISPLAY_INVERSION_ENABLED, State.ON);
 
         assertThat(mController.getSummary().toString().contains(
-                mContext.getText(R.string.accessibility_feature_state_on))).isTrue();
+                mContext.getText(R.string.on))).isTrue();
     }
 
     @Test
@@ -61,7 +61,7 @@
                 DISPLAY_INVERSION_ENABLED, State.OFF);
 
         assertThat(mController.getSummary().toString().contains(
-                mContext.getText(R.string.accessibility_feature_state_off))).isTrue();
+                mContext.getText(R.string.off))).isTrue();
     }
 
     @Retention(RetentionPolicy.SOURCE)
diff --git a/tests/robotests/src/com/android/settings/accessibility/DaltonizerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/DaltonizerPreferenceControllerTest.java
index 1a00cc1..c02131b 100644
--- a/tests/robotests/src/com/android/settings/accessibility/DaltonizerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/DaltonizerPreferenceControllerTest.java
@@ -50,7 +50,7 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, ON);
 
         assertThat(mController.getSummary().toString().contains(
-                mContext.getText(R.string.accessibility_feature_state_on))).isTrue();
+                mContext.getText(R.string.on))).isTrue();
     }
 
     @Test
@@ -59,6 +59,6 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, OFF);
 
         assertThat(mController.getSummary().toString().contains(
-                mContext.getText(R.string.accessibility_feature_state_off))).isTrue();
+                mContext.getText(R.string.off))).isTrue();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
index c7d70e0..8ccde4f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
@@ -64,13 +64,13 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, ON);
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.accessibility_feature_state_on));
+                .isEqualTo(mContext.getString(R.string.on));
 
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF);
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
index 83fe496..b2427c6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
@@ -89,13 +89,13 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, ON);
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_on));
+                .isEqualTo(mContext.getText(R.string.on));
 
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, OFF);
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceControllerTest.java
index a045dea..c266b56 100644
--- a/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceControllerTest.java
@@ -92,7 +92,7 @@
         controller.updateState(mPreference);
 
         assertThat(mPreference.getSummary().toString()).isEqualTo(
-                mContext.getString(R.string.accessibility_vibration_settings_state_on));
+                mContext.getString(R.string.on));
     }
 
     @Test
@@ -103,7 +103,7 @@
         controller.updateState(mPreference);
 
         assertThat(mPreference.getSummary().toString()).isEqualTo(
-                mContext.getString(R.string.accessibility_vibration_settings_state_on));
+                mContext.getString(R.string.on));
     }
 
     @Test
@@ -114,7 +114,7 @@
         controller.updateState(mPreference);
 
         assertThat(mPreference.getSummary().toString()).isEqualTo(
-                mContext.getString(R.string.accessibility_vibration_settings_state_off));
+                mContext.getString(R.string.off));
     }
 
     private VibrationPreferenceController createPreferenceController() {
diff --git a/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java
index 1a6537b..98f48f5 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupDataPreferenceControllerTest.java
@@ -73,7 +73,7 @@
 
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.accessibility_feature_state_on));
+                .isEqualTo(mContext.getString(R.string.on));
     }
 
     @Test
@@ -83,7 +83,7 @@
 
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.accessibility_feature_state_off));
+                .isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
index b6ef32c..6e922dd 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
@@ -90,7 +90,7 @@
 
         String backupSummary = mBackupSettingsHelper.getSummary();
 
-        assertThat(backupSummary).isEqualTo(mContext.getString(R.string.backup_summary_state_on));
+        assertThat(backupSummary).isEqualTo(mContext.getString(R.string.on));
     }
 
     @Test
@@ -100,7 +100,7 @@
 
         String backupSummary = mBackupSettingsHelper.getSummary();
 
-        assertThat(backupSummary).isEqualTo(mContext.getString(R.string.backup_summary_state_off));
+        assertThat(backupSummary).isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
index a198d86..54a7fb1 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFindSensorTest.java
@@ -22,7 +22,6 @@
 
 import android.content.Intent;
 import android.hardware.fingerprint.FingerprintManager;
-import android.widget.Button;
 
 import androidx.appcompat.app.AlertDialog;
 
@@ -66,6 +65,23 @@
 
     @Test
     public void fingerprintEnroll_showsAlert_whenClickingSkip() {
+        final AlertDialog alertDialog = setupAlertDialog();
+        final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(
+                alertDialog);
+        final int titleRes = R.string.setup_fingerprint_enroll_skip_title;
+
+        assertThat(application.getString(titleRes)).isEqualTo(shadowAlertDialog.getTitle());
+    }
+
+    @Test
+    public void fingerprintEnroll_showsAlert_setSudTheme() {
+        final AlertDialog alertDialog = setupAlertDialog();
+
+        assertThat(alertDialog.getContext().getThemeResId()).isEqualTo(
+                R.style.GlifV2ThemeAlertDialog);
+    }
+
+    private AlertDialog setupAlertDialog() {
         final Intent intent = new Intent()
                 // Set the challenge token so the confirm screen will not be shown
                 .putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
@@ -80,9 +96,6 @@
         final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(alertDialog).isNotNull();
 
-        final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(
-                alertDialog);
-        final int titleRes = R.string.setup_fingerprint_enroll_skip_title;
-        assertThat(application.getString(titleRes)).isEqualTo(shadowAlertDialog.getTitle());
+        return alertDialog;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
index 2aca4a3..dcd45ce 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
@@ -132,7 +132,7 @@
 
         mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_OFF);
 
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disabled));
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.off));
     }
 
     @Test
@@ -197,12 +197,12 @@
 
         mShadowBluetoothAdapter.setEnabled(false);
         mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_OFF);
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disabled));
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.off));
 
         // Turning ON means not enabled
         mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_TURNING_ON);
         // There should still be only one invocation of disabled message
-        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disabled));
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.off));
 
         mShadowBluetoothAdapter.setEnabled(true);
         mDeviceConnected[0] = false;
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentControllerTest.java
index 8acb81c..c894716 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/NfcAndPaymentFragmentControllerTest.java
@@ -92,13 +92,13 @@
     public void getSummary_nfcOn_shouldProvideOnSummary() {
         mShadowNfcAdapter.setEnabled(true);
         assertThat(mController.getSummary().toString()).contains(
-                mContext.getString(R.string.switch_on_text));
+                mContext.getString(R.string.on));
     }
 
     @Test
     public void getSummary_nfcOff_shouldProvideOffSummary() {
         mShadowNfcAdapter.setEnabled(false);
         assertThat(mController.getSummary().toString()).contains(
-                mContext.getString(R.string.switch_off_text));
+                mContext.getString(R.string.off));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/development/NfcSnoopLogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/NfcSnoopLogPreferenceControllerTest.java
new file mode 100644
index 0000000..4ea5475
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/NfcSnoopLogPreferenceControllerTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import static com.android.settings.development.NfcSnoopLogPreferenceController
+        .NFCSNOOP_MODE_FILTERED;
+import static com.android.settings.development.NfcSnoopLogPreferenceController
+        .NFCSNOOP_MODE_FULL;
+import static com.android.settings.development.NfcSnoopLogPreferenceController
+        .NFC_NFCSNOOP_LOG_MODE_PROPERTY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class NfcSnoopLogPreferenceControllerTest {
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private DevelopmentSettingsDashboardFragment mFragment;
+
+    private Context mContext;
+    private SwitchPreference mPreference;
+    private NfcSnoopLogPreferenceController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mPreference = new SwitchPreference(mContext);
+        mController = spy(new NfcSnoopLogPreferenceController(mContext, mFragment));
+        when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+            .thenReturn(mPreference);
+        mController.displayPreference(mPreferenceScreen);
+    }
+
+    @Test
+    public void onNfcRebootDialogConfirmed_nfcSnoopLogDisabled_shouldChangeProperty() {
+        SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogConfirmed();
+
+        final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
+        assertThat(currentValue.equals(NFCSNOOP_MODE_FULL)).isTrue();
+    }
+
+    @Test
+    public void onNfcRebootDialogConfirmed_nfcSnoopLogEnabled_shouldChangeProperty() {
+        SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FULL);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogConfirmed();
+
+        final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
+        assertThat(currentValue.equals(NFCSNOOP_MODE_FILTERED)).isTrue();
+    }
+
+    @Test
+    public void onNfcRebootDialogCanceled_shouldNotChangeProperty() {
+        SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogCanceled();
+
+        final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
+        assertThat(currentValue.equals(NFCSNOOP_MODE_FILTERED)).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/development/NfcVerboseVendorLogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/NfcVerboseVendorLogPreferenceControllerTest.java
new file mode 100644
index 0000000..49ddd30
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/NfcVerboseVendorLogPreferenceControllerTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022 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.development;
+
+import static com.android.settings.development.NfcVerboseVendorLogPreferenceController
+        .NFC_VERBOSE_VENDOR_LOG_PROPERTY;
+import static com.android.settings.development.NfcVerboseVendorLogPreferenceController
+        .VERBOSE_VENDOR_LOG_DISABLED;
+import static com.android.settings.development.NfcVerboseVendorLogPreferenceController
+        .VERBOSE_VENDOR_LOG_ENABLED;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class NfcVerboseVendorLogPreferenceControllerTest {
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private DevelopmentSettingsDashboardFragment mFragment;
+
+    private Context mContext;
+    private SwitchPreference mPreference;
+    private NfcVerboseVendorLogPreferenceController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mPreference = new SwitchPreference(mContext);
+        mController = spy(new NfcVerboseVendorLogPreferenceController(mContext, mFragment));
+        when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+            .thenReturn(mPreference);
+        mController.displayPreference(mPreferenceScreen);
+    }
+
+    @Test
+    public void onNfcRebootDialogConfirmed_nfcVendorLogDisabled_shouldChangeProperty() {
+        SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogConfirmed();
+
+        final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
+        assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED)).isTrue();
+    }
+
+    @Test
+    public void onNfcRebootDialogConfirmed_nfcVendorLogEnabled_shouldChangeProperty() {
+        SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_ENABLED);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogConfirmed();
+
+        final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
+        assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)).isTrue();
+    }
+
+    @Test
+    public void onNfcRebootDialogCanceled_shouldNotChangeProperty() {
+        SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
+        mController.mChanged = true;
+
+        mController.onNfcRebootDialogCanceled();
+
+        final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
+        assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
index 0229173..4fa0003 100644
--- a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
@@ -109,7 +109,7 @@
         mController.setChecked(true);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getText(R.string.auto_brightness_summary_on));
+                .isEqualTo(mContext.getText(R.string.on));
     }
 
     @Test
@@ -117,7 +117,7 @@
         mController.setChecked(false);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getText(R.string.auto_brightness_summary_off));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
index 39fdb04..6b8d706 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
@@ -83,9 +83,9 @@
         doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
                 Manifest.permission.CAMERA, PACKAGE_NAME);
-        when(mContext.getString(R.string.auto_rotate_option_off))
+        when(mContext.getString(R.string.off))
                 .thenReturn("Off");
-        when(mContext.getString(R.string.auto_rotate_option_on))
+        when(mContext.getString(R.string.on))
                 .thenReturn("On");
         when(mContext.getString(R.string.auto_rotate_option_face_based))
                 .thenReturn("On - Face-based");
diff --git a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
index a554564..4d0adb4 100644
--- a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
@@ -29,10 +29,10 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
 
 import java.util.Arrays;
 import java.util.List;
-import org.robolectric.RobolectricTestRunner;
 
 @RunWith(RobolectricTestRunner.class)
 public class DreamSettingsTest {
@@ -96,7 +96,7 @@
         when(mockBackend.isEnabled()).thenReturn(false);
 
         assertThat(DreamSettings.getSummaryTextFromBackend(mockBackend, mockContext))
-                .isEqualTo(mockContext.getString(R.string.screensaver_settings_summary_off));
+                .isEqualTo(mockContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
index d0f6485..0006485 100644
--- a/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
@@ -67,7 +67,7 @@
         OneHandedSettingsUtils.setOneHandedModeEnabled(mContext, true);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getText(R.string.switch_on_text));
+                .isEqualTo(mContext.getText(R.string.on));
     }
 
     @Test
@@ -75,6 +75,6 @@
         OneHandedSettingsUtils.setOneHandedModeEnabled(mContext, false);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getText(R.string.switch_off_text));
+                .isEqualTo(mContext.getText(R.string.off));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
index 04467a4..8f06d37 100644
--- a/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PreventRingingParentPreferenceControllerTest.java
@@ -137,7 +137,7 @@
                 VOLUME_HUSH_OFF);
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getText(
-                R.string.switch_off_text));
+                R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java
index b050970..e13e2a7 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/SpellCheckerPreferenceControllerTest.java
@@ -97,7 +97,7 @@
 
         mController.updateState(mPreference);
         assertThat(mPreference.getSummary())
-                .isEqualTo(mAppContext.getString(R.string.switch_off_text));
+                .isEqualTo(mAppContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/location/LocationForWorkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationForWorkPreferenceControllerTest.java
index 03f4663..a8a1a86 100644
--- a/tests/robotests/src/com/android/settings/location/LocationForWorkPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationForWorkPreferenceControllerTest.java
@@ -97,7 +97,7 @@
 
         verify(mUserManager)
             .setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, false, mUserHandle);
-        verify(mPreference).setSummary(R.string.switch_on_text);
+        verify(mPreference).setSummary(R.string.on);
     }
 
     @Test
@@ -109,7 +109,7 @@
 
         verify(mUserManager)
             .setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, true, mUserHandle);
-        verify(mPreference).setSummary(R.string.switch_off_text);
+        verify(mPreference).setSummary(R.string.off);
     }
 
     @Test
@@ -147,7 +147,7 @@
         mController.onLocationModeChanged(Settings.Secure.LOCATION_MODE_BATTERY_SAVING, false);
 
         verify(mPreference).setEnabled(true);
-        verify(mPreference).setSummary(R.string.switch_on_text);
+        verify(mPreference).setSummary(R.string.on);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
index f0bc705..db809f3 100644
--- a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
@@ -52,7 +52,7 @@
     public void getSummary_whenLocationIsOff_shouldReturnStringForOff() {
         mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle());
         assertThat(mController.getSummary()).isEqualTo(
-                mContext.getString(R.string.location_settings_summary_location_off));
+                mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityPreferenceControllerTest.java
index 9ba6238..654d3bf 100644
--- a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityPreferenceControllerTest.java
@@ -74,7 +74,7 @@
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 1);
 
-        assertThat(mController.getSummary()).isEqualTo(mContext.getString(R.string.switch_on_text));
+        assertThat(mController.getSummary()).isEqualTo(mContext.getString(R.string.on));
     }
 
     @Test
@@ -83,6 +83,6 @@
                 Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 0);
 
         assertThat(mController.getSummary())
-                .isEqualTo(mContext.getString(R.string.switch_off_text));
+                .isEqualTo(mContext.getString(R.string.off));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java
index 057b6cb..71da26e 100644
--- a/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java
@@ -224,7 +224,7 @@
         when(lp.getValidatedPrivateDnsServers()).thenReturn(NON_EMPTY_ADDRESS_LIST);
         updateLinkProperties(lp);
         mController.updateState(mPreference);
-        verify(mPreference).setSummary(getResourceString(R.string.private_dns_mode_on));
+        verify(mPreference).setSummary(getResourceString(R.string.on));
 
         reset(mPreference);
         lp = mock(LinkProperties.class);
diff --git a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
index 9aa79ff..5cec125 100644
--- a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
@@ -139,7 +139,7 @@
         when(mTetheringManager.getTetherableWifiRegexs()).thenReturn(new String[]{"456"});
 
         mController.updateSummary();
-        verify(mPreference).setSummary(R.string.switch_off_text);
+        verify(mPreference).setSummary(R.string.off);
     }
 
     @Test
@@ -169,7 +169,7 @@
             ReflectionHelpers.getField(mController, "mAirplaneModeObserver");
         observer.onChange(true, Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON));
 
-        verify(mPreference).setSummary(R.string.switch_off_text);
+        verify(mPreference).setSummary(R.string.off);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java
index 0a430cd..f03b6d8 100644
--- a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java
+++ b/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java
@@ -17,14 +17,15 @@
 package com.android.settings.network.apn;
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.content.ContentResolver;
@@ -34,22 +35,21 @@
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-
 import androidx.fragment.app.FragmentActivity;
 import androidx.preference.EditTextPreference;
 import androidx.preference.ListPreference;
 import androidx.preference.MultiSelectListPreference;
 import androidx.preference.SwitchPreference;
-
 import com.android.settings.R;
 import com.android.settings.network.ProxySubscriptionManager;
 import com.android.settings.network.apn.ApnEditor.ApnData;
 import com.android.settings.testutils.shadow.ShadowFragment;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -103,13 +103,15 @@
     private FragmentActivity mActivity;
     @Mock
     private ProxySubscriptionManager mProxySubscriptionMgr;
-
+    @Mock
+    private CarrierConfigManager mCarrierConfigManager;
     @Captor
     private ArgumentCaptor<Uri> mUriCaptor;
 
     private ApnEditor mApnEditorUT;
     private Context mContext;
     private Resources mResources;
+    private PersistableBundle mBundle = new PersistableBundle();
 
     @Before
     public void setUp() {
@@ -127,6 +129,10 @@
         doReturn(mContext.getTheme()).when(mActivity).getTheme();
         doReturn(mContext.getContentResolver()).when(mActivity).getContentResolver();
 
+        doReturn(mCarrierConfigManager).when(mContext)
+                .getSystemService(Context.CARRIER_CONFIG_SERVICE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+
         setMockPreference(mContext);
         mApnEditorUT.mApnData = new FakeApnData(APN_DATA);
         mApnEditorUT.sNotSet = "Not Set";
@@ -379,6 +385,20 @@
         verify(mApnEditorUT).finish();
     }
 
+    @Test
+    public void testDeleteApnData_shouldNotPresentMenuWhenNotSupportAdding() {
+        mBundle.putBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL, false);
+
+        MenuItem item = Mockito.mock(MenuItem.class);
+        Menu menu = Mockito.mock(Menu.class);
+        doReturn(item).when(menu).add(anyInt(), anyInt(), anyInt(), anyInt());
+
+        mApnEditorUT.getCarrierCustomizedConfig(mContext);
+        mApnEditorUT.onCreateOptionsMenu(menu, null);
+
+        verify(menu, times(0)).add(anyInt(), eq(ApnEditor.MENU_DELETE), anyInt(), anyInt());
+    }
+
     @Test(expected = ClassCastException.class)
     public void testApnData_invalidIntegerType_throwsInvalidTypeException() {
         // GIVEN a ApnData constructed from cursor
diff --git a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
index e24eb8f..c782d9b 100644
--- a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
@@ -144,7 +144,7 @@
         mController.updateState(mPreference);
 
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.print_settings_summary_no_service));
+                .isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java
index 4f694bc..0b6643b 100644
--- a/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/ScreenPinningPreferenceControllerTest.java
@@ -76,7 +76,7 @@
         mController.updateState(mPreference);
 
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.switch_off_text));
+                .isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
@@ -87,7 +87,7 @@
         mController.updateState(mPreference);
 
         assertThat(mPreference.getSummary())
-                .isEqualTo(mContext.getString(R.string.switch_on_text));
+                .isEqualTo(mContext.getString(R.string.on));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java b/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
index 0c297f4..7eb2878 100644
--- a/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
@@ -55,8 +55,8 @@
 
     @Test
     public void cycleChecked_defaultLabel_shouldUpdateTextAndBackground() {
-        final int defaultOnText = R.string.switch_on_text;
-        final int defaultOffText = R.string.switch_off_text;
+        final int defaultOnText = R.string.on;
+        final int defaultOffText = R.string.off;
 
         assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
                 .isEqualTo(mContext.getString(defaultOffText));
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java
index 99040db..e060c0f 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java
@@ -110,7 +110,7 @@
         mWifiTracker.enabled = false;
 
         assertThat(mSummaryUpdater.getSummary())
-            .isEqualTo(mContext.getString(R.string.switch_off_text));
+            .isEqualTo(mContext.getString(R.string.off));
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java
index 526b6cc..805041c 100644
--- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java
@@ -19,7 +19,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
-import android.util.FeatureFlagUtils;
 
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -49,22 +48,10 @@
                 return mCanDisplayLocaleUi;
             }
         };
-        FeatureFlagUtils
-                .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
     }
 
     @Test
-    public void getAvailabilityStatus_canShowUiButFeatureFlagOff_shouldReturnUnavailable() {
-        mCanDisplayLocaleUi = true;
-        FeatureFlagUtils
-                .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
-
-        assertThat(mController.getAvailabilityStatus())
-                .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
-    }
-
-    @Test
-    public void getAvailabilityStatus_canShowUiAndFeatureFlagOn_shouldReturnAvailable() {
+    public void getAvailabilityStatus_canShowUi_shouldReturnAvailable() {
         mCanDisplayLocaleUi = true;
 
         assertThat(mController.getAvailabilityStatus())
@@ -72,20 +59,10 @@
     }
 
     @Test
-    public void getAvailabilityStatus_featureFlagOnButCanNotShowUi_shouldReturnUnavailable() {
+    public void getAvailabilityStatus_canNotShowUi_shouldReturnUnavailable() {
         mCanDisplayLocaleUi = false;
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
     }
-
-    @Test
-    public void getAvailabilityStatus_featureFlagOffAndCanNotShowUi_shouldReturnUnavailable() {
-        mCanDisplayLocaleUi = false;
-        FeatureFlagUtils
-                .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
-
-        assertThat(mController.getAvailabilityStatus())
-                .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
-    }
 }
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java
deleted file mode 100644
index 648c757..0000000
--- a/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.appinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.util.FeatureFlagUtils;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-
-import com.android.settings.core.BasePreferenceController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-public class ManageAppLocalePreferenceControllerTest {
-    private Context mContext;
-    private ManageAppLocalePreferenceController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(ApplicationProvider.getApplicationContext());
-        mController = spy(new ManageAppLocalePreferenceController(mContext, "a key"));
-
-        FeatureFlagUtils
-                .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
-    }
-
-    @Test
-    public void getAvailabilityStatus_featureFlagOff_shouldReturnUnavailable() {
-        FeatureFlagUtils
-                .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
-
-        assertThat(mController.getAvailabilityStatus())
-                .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
-    }
-
-    @Test
-    public void getAvailabilityStatus_featureFlagOn_shouldReturnAvailable() {
-        assertThat(mController.getAvailabilityStatus())
-                .isEqualTo(BasePreferenceController.AVAILABLE);
-    }
-}
diff --git a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
new file mode 100644
index 0000000..31b8e79
--- /dev/null
+++ b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022 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.localepicker;
+
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.os.Looper;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settingslib.widget.FooterPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class LocaleHelperPreferenceControllerTest {
+    private Context mContext;
+    private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
+
+    @Mock
+    private FooterPreference mMockFooterPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+        mContext = ApplicationProvider.getApplicationContext();
+        mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(mContext);
+    }
+
+    @Test
+    public void updateFooterPreference_setFooterPreference_hasClickAction() {
+        mLocaleHelperPreferenceController.updateFooterPreference(mMockFooterPreference);
+        verify(mMockFooterPreference).setLearnMoreText(anyString());
+    }
+}