Merge "Flag off stickiness of show/hide system setting." into tm-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 71c07a0..0472f07 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2855,7 +2855,7 @@
             android:name="Settings$BatterySaverSettingsActivity"
             android:label="@string/battery_saver"
             android:exported="true"
-            android:icon="@drawable/ic_settings_battery">
+            android:icon="@drawable/ic_homepage_battery">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.BATTERY_SAVER_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -2870,6 +2870,7 @@
 
         <activity android:name=".fuelgauge.BatterySaverModeVoiceActivity"
                 android:label="@string/power_usage_summary_title"
+                android:icon="@drawable/ic_homepage_battery"
                 android:theme="@*android:style/Theme.DeviceDefault.Light.Voice"
                 android:exported="true">
             <intent-filter>
diff --git a/res/drawable/homepage_app_bar_background.xml b/res/drawable/homepage_app_bar_background.xml
new file mode 100644
index 0000000..6872ab7
--- /dev/null
+++ b/res/drawable/homepage_app_bar_background.xml
@@ -0,0 +1,24 @@
+<?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.
+  -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <solid
+        android:color="@color/settings_two_pane_background_color" />
+    <corners
+        android:bottomLeftRadius="@dimen/homepage_app_bar_corner_radius"
+        android:bottomRightRadius="@dimen/homepage_app_bar_corner_radius" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/homepage_highlighted_item_background.xml b/res/drawable/homepage_highlighted_item_background.xml
index 7e0dea5..4656a46 100644
--- a/res/drawable/homepage_highlighted_item_background.xml
+++ b/res/drawable/homepage_highlighted_item_background.xml
@@ -14,10 +14,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-       android:shape="rectangle">
-    <solid
-        android:color="@color/accent_select_background" />
-    <corners
-        android:radius="@dimen/homepage_preference_corner_radius" />
-</shape>
\ No newline at end of file
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="@*android:color/ripple_material_light">
+    <item>
+        <shape android:shape="rectangle">
+            <solid
+                android:color="@color/accent_select_background" />
+            <corners
+                android:radius="@dimen/homepage_preference_corner_radius" />
+        </shape>
+    </item>
+</ripple>
\ No newline at end of file
diff --git a/res/layout/search_bar_two_pane_version.xml b/res/layout/search_bar_two_pane_version.xml
index ede5722..9ce220c 100644
--- a/res/layout/search_bar_two_pane_version.xml
+++ b/res/layout/search_bar_two_pane_version.xml
@@ -21,8 +21,7 @@
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_weight="1"
-    android:layout_marginEnd="@dimen/search_bar_margin"
-    android:layout_marginVertical="@dimen/search_bar_margin">
+    android:layout_marginEnd="@dimen/search_bar_margin">
     <Toolbar
         android:id="@+id/search_action_bar_two_pane"
         android:layout_width="match_parent"
diff --git a/res/layout/settings_homepage_app_bar_two_pane_layout.xml b/res/layout/settings_homepage_app_bar_two_pane_layout.xml
index 0cd8c90..b9c1493 100644
--- a/res/layout/settings_homepage_app_bar_two_pane_layout.xml
+++ b/res/layout/settings_homepage_app_bar_two_pane_layout.xml
@@ -17,29 +17,21 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/app_bar_content"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:background="@color/settings_two_pane_background_color">
+    android:layout_marginHorizontal="@dimen/homepage_app_bar_margin_horizontal_two_pane"
+    android:padding="@dimen/homepage_app_bar_padding_two_pane"
+    android:orientation="horizontal"
+    android:background="@drawable/homepage_app_bar_background">
 
-    <FrameLayout
-        android:id="@+id/two_pane_suggestion_content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
+    <include layout="@layout/search_bar_two_pane_version"/>
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal">
+    <ImageView
+        android:id="@+id/account_avatar_two_pane_version"
+        android:layout_width="@dimen/avatar_length"
+        android:layout_height="@dimen/avatar_length"
+        android:layout_gravity="center"
+        android:contentDescription="@string/search_bar_account_avatar_content_description"/>
 
-        <include layout="@layout/search_bar_two_pane_version"/>
-
-        <ImageView
-            android:id="@+id/account_avatar_two_pane_version"
-            android:layout_width="@dimen/avatar_length"
-            android:layout_height="@dimen/avatar_length"
-            android:layout_gravity="center"
-            android:contentDescription="@string/search_bar_account_avatar_content_description"/>
-    </LinearLayout>
-
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/res/layout/settings_homepage_container.xml b/res/layout/settings_homepage_container.xml
index 3de5a8a..89d40d0 100644
--- a/res/layout/settings_homepage_container.xml
+++ b/res/layout/settings_homepage_container.xml
@@ -34,6 +34,11 @@
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
+            <include
+                android:id="@+id/suggestion_container_two_pane"
+                layout="@layout/suggestion_container_two_pane"
+                android:visibility="gone"/>
+
             <FrameLayout
                 android:id="@+id/contextual_cards_content"
                 android:layout_width="match_parent"
diff --git a/res/layout/suggestion_container_two_pane.xml b/res/layout/suggestion_container_two_pane.xml
new file mode 100644
index 0000000..412a0d4
--- /dev/null
+++ b/res/layout/suggestion_container_two_pane.xml
@@ -0,0 +1,30 @@
+<?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.
+-->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="@dimen/homepage_app_bar_margin_bottom_two_pane"
+    android:layout_marginHorizontal="@dimen/homepage_padding_horizontal_two_pane">
+
+    <FrameLayout
+        android:id="@+id/two_pane_suggestion_content"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+</FrameLayout>
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
index 4c0ac1d..b7c367a 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -485,7 +485,7 @@
     <item msgid="8186970968968646288">"Gekas (leeg)"</item>
   </string-array>
   <string-array name="color_picker">
-    <item msgid="7216413848731287689">"Groenblou"</item>
+    <item msgid="7216413848731287689">"Siaan"</item>
     <item msgid="5661027589207588703">"Blou"</item>
     <item msgid="1219738214736244749">"Groen"</item>
     <item msgid="6331809026622602308">"Pers"</item>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index dfb2596..91f3f3b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Stelselverstek"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Taalkeuse vir hierdie program is nie in Instellings beskikbaar nie."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Taal kan verskil van tale wat in die program beskikbaar is. Sommige programme steun dalk nie hierdie instelling nie."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Net programme wat taalkeuses ondersteun, word hier gewys."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Verwyder gekose tale?</item>
       <item quantity="one">Verwyder gekose taal?</item>
diff --git a/res/values-as/arrays.xml b/res/values-as/arrays.xml
index 52cbe56..02c8c51 100644
--- a/res/values-as/arrays.xml
+++ b/res/values-as/arrays.xml
@@ -180,7 +180,7 @@
   </string-array>
   <string-array name="wifi_proxy_settings">
     <item msgid="4669222334822978847">"নাই"</item>
-    <item msgid="6242198071587397280">"হস্তকৃত"</item>
+    <item msgid="6242198071587397280">"মেনুৱেল"</item>
     <item msgid="464383874780058242">"প্ৰক্সি স্বয়ং-কনফিগাৰেশ্বন"</item>
   </string-array>
   <string-array name="apn_auth_entries">
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 147a818..80842d2 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ছিষ্টেম ডিফ’ল্ট"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"এই এপ্‌টোৰ বাবে ছেটিঙৰ পৰা ভাষা বাছনি কৰাৰ সুবিধা উপলব্ধ নহয়।"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ভাষাটো এপ্‌টোত উপলব্ধ ভাষাসমূহতকৈ পৃথক হ’ব পাৰে। কিছুমান এপে এই ছেটিংটো সমৰ্থন নকৰিব পাৰে।"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"কেৱল ভাষা বাছনি কৰাৰ সুবিধা থকা এপ্‌সমূহ ইয়াত দেখুওৱা হৈছে।"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">বাছনি কৰা ভাষাসমূহ আঁতৰাবনে?</item>
       <item quantity="other">বাছনি কৰা ভাষাসমূহ আঁতৰাবনে?</item>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f4821fe..bdffc5e 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Sistem defoltu"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Bu tətbiq üçün dil seçimini Ayarlardan etmək olmur."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Dil tətbiqdə əlçatan dillərdən fərqli ola bilər. Bəzi tətbiqlər bu ayarı dəstəkləməyə bilər."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Burada yalnız dil seçimini dəstəkləyən tətbiqlər göstərilir."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Seçilmiş dillər silinsin?</item>
       <item quantity="one">Seçilmiş dil silinsin?</item>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 2713d6b..b17b156 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -229,6 +229,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Podrazumevani sistemski"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Izbor jezika za ovu aplikaciju nije dostupan iz Podešavanja."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Jezik može da se razlikuje od jezika dostupnih u aplikaciji. Neke aplikacije možda ne podržavaju ovo podešavanje."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Ovde se prikazuju samo aplikacije koje podržavaju izbor jezika."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Želite li da uklonite izabrane jezike?</item>
       <item quantity="few">Želite li da uklonite izabrane jezike?</item>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ccc6d75..fe9af98 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Стандартно за системата"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Избирането на език за това приложение не е налице от настройките."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Езикът може да се различава от езиците, налични в приложението. Възможно е някои приложения да не поддържат тази настройка."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Тук са показани само приложенията, които поддържат избиране на език."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Да се премахнат ли избраните езици?</item>
       <item quantity="one">Да се премахне ли избраният език?</item>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 9ceb9c6..87cf387 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"সিস্টেম ডিফল্ট"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"এই অ্যাপের জন্য \'সেটিংস\' থেকে ভাষা বেছে নেওয়ার সুবিধা উপলভ্য নেই।"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"অ্যাপে উপলভ্য থাকা ভাষা আলাদা হতে পারে। কিছু অ্যাপে এই সেটিং কাজ নাও করতে পারে।"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"শুধুমাত্র সেইসব অ্যাপ দেখানো হয়েছে যার মধ্যে ভাষা বেছে নেওয়ার বিকল্প আছে।"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">নির্বাচিত ভাষা সরাবেন?</item>
       <item quantity="other">নির্বাচিত ভাষা সরাবেন?</item>
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 42dc013..3e1f8f3 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -387,11 +387,11 @@
     <item msgid="5012882784126308133">"Mala početna slova"</item>
   </string-array>
   <string-array name="captioning_font_size_selector_titles">
-    <item msgid="923916134548435468">"Vrlo mali"</item>
-    <item msgid="5738147437573674872">"Mali"</item>
+    <item msgid="923916134548435468">"Vrlo malo"</item>
+    <item msgid="5738147437573674872">"Malo"</item>
     <item msgid="4691660235626027304">"Srednje"</item>
-    <item msgid="824386705928670045">"Veliki"</item>
-    <item msgid="2790561781512874585">"Vrlo veliki"</item>
+    <item msgid="824386705928670045">"Veliko"</item>
+    <item msgid="2790561781512874585">"Vrlo veliko"</item>
   </string-array>
   <string-array name="captioning_edge_type_selector_titles">
     <item msgid="70686029249840227">"Zadano"</item>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 63a8ddd..28ea355 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -229,6 +229,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Sistemski zadano"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Odabir jezika za ovu aplikaciju nije dostupan u Postavkama."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Jezik se može razlikovati od jezika dostupnih u aplikaciji. Neke aplikacije možda neće podržavati ovu postavku."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Ovdje su prikazane samo aplikacije koje podržavaju odabir jezika."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Ukloniti odabrane jezike?</item>
       <item quantity="few">Ukloniti odabrane jezike?</item>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index 68f7be9..0f94336 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -387,7 +387,7 @@
     <item msgid="5012882784126308133">"Versaletes"</item>
   </string-array>
   <string-array name="captioning_font_size_selector_titles">
-    <item msgid="923916134548435468">"Molt petit"</item>
+    <item msgid="923916134548435468">"Molt petita"</item>
     <item msgid="5738147437573674872">"Petita"</item>
     <item msgid="4691660235626027304">"Mitjana"</item>
     <item msgid="824386705928670045">"Gran"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 51a8a1b..96108b6 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Valor predeterminat del sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"La selecció d\'idioma per a aquesta aplicació no està disponible des de Configuració."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"És possible que l\'idioma no coincideixi amb els que hi ha disponibles a l\'aplicació. Algunes aplicacions no admeten aquesta opció de configuració."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Aquí només es mostren les aplicacions que admeten la selecció d'idioma."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Vols suprimir els idiomes seleccionats?</item>
       <item quantity="one">Vols suprimir l\'idioma seleccionat?</item>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index e90a20e..8058bac 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -230,6 +230,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Výchozí nastavení systému"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"V Nastavení nelze vybrat jazyk pro tuto aplikaci."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Jazyky nemusí odpovídat jazykům dostupným v aplikaci. Toto nastavení mohou podporovat jen některé aplikace."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Zobrazují se tu pouze aplikace, které podporují výběr jazyka."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="few">Odstranit vybrané jazyky?</item>
       <item quantity="many">Odstranit vybrané jazyky?</item>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1c46693..ca4351b 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Standardeinstellung des Systems"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Für diese App ist in den Einstellungen keine Sprachauswahl verfügbar."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Die Sprache kann von den in der App verfügbaren Sprachen abweichen. Einige Apps unterstützen diese Einstellung möglicherweise nicht."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Hier werden nur Apps angezeigt, die die Sprachauswahl unterstützen."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Ausgewählte Sprachen entfernen?</item>
       <item quantity="one">Ausgewählte Sprache entfernen?</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 47745fd..4dba7f5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Προεπιλογή συστήματος"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Η δυνατότητα επιλογής γλώσσας για αυτήν την εφαρμογή δεν είναι διαθέσιμη από τις Ρυθμίσεις."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Η γλώσσα μπορεί να διαφέρει από τις γλώσσες που είναι διαθέσιμες στην εφαρμογή. Ορισμένες εφαρμογές μπορεί να μην υποστηρίζουν αυτήν τη ρύθμιση."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Εδώ εμφανίζονται μόνο εφαρμογές που υποστηρίζουν την επιλογή γλώσσας."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Να αφαιρεθούν οι επιλεγμένες γλώσσες;</item>
       <item quantity="one">Να αφαιρεθεί η επιλεγμένη γλώσσα;</item>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 4e2c331..b0d74f2 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"System default"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Language selection for this app isn’t available from Settings."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Language may differ from languages available in the app. Some apps may not support this setting."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Only apps that support language selection are shown here."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Remove selected languages?</item>
       <item quantity="one">Remove selected language?</item>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 98c1a46..a30e3f4 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"System default"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Language selection for this app isn’t available from Settings."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Language may differ from languages available in the app. Some apps may not support this setting."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Only apps that support language selection are shown here."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Remove selected languages?</item>
       <item quantity="one">Remove selected language?</item>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index d49243d..cdc2556 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"System default"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Language selection for this app isn’t available from Settings."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Language may differ from languages available in the app. Some apps may not support this setting."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Only apps that support language selection are shown here."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Remove selected languages?</item>
       <item quantity="one">Remove selected language?</item>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index bb089bb..e5f065a 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"System default"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Language selection for this app isn’t available from Settings."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Language may differ from languages available in the app. Some apps may not support this setting."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Only apps that support language selection are shown here."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Remove selected languages?</item>
       <item quantity="one">Remove selected language?</item>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 65414c8..0901515 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎System default‎‏‎‎‏‎"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎Language selection for this app isn’t available from Settings.‎‏‎‎‏‎"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎Language may differ from languages available in the app. Some apps may not support this setting.‎‏‎‎‏‎"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎Only apps that support language selection are shown here.‎‏‎‎‏‎"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎Remove selected languages?‎‏‎‎‏‎</item>
       <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎Remove selected language?‎‏‎‎‏‎</item>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index 7af2782..513f813 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -580,7 +580,7 @@
     <!-- no translation found for rtt_setting_mode:3 (7725394146877517088) -->
   <string-array name="nfc_payment_favor">
     <item msgid="9104058551372383947">"Siempre"</item>
-    <item msgid="5283665583617307336">"Excepto si hay otra aplicación de pago abierta"</item>
+    <item msgid="5283665583617307336">"Excepto si hay otra aplicación para pagos abierta"</item>
   </string-array>
   <string-array name="nfc_payment_favor_values">
     <item msgid="2373999996715432397">"0"</item>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 7b8d2c9..3b6b76e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Predeterminado del sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"La selección de idioma para esta aplicación no está disponible en Ajustes."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Puede que el idioma no coincida con los que hay disponibles en la aplicación. Algunas aplicaciones no son compatibles con este ajuste."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Aquí solo se muestran las aplicaciones que admiten la selección de idioma."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">¿Quitar idiomas seleccionados?</item>
       <item quantity="one">¿Quitar idioma seleccionado?</item>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index c8b4176..4a1073f 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Süsteemi vaikeseade"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Selle rakenduse jaoks pole seadetes keele valimine saadaval."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Keel võib rakenduses saadaolevatest keeltest erineda. Mõni rakendus ei pruugi seda seadet toetada."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Siin on kuvatud ainult rakendused, mis toetavad keele valimist."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Kas eemaldada valitud keeled?</item>
       <item quantity="one">Kas eemaldada valitud keel?</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 96b8745..6009305 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"پیش‌فرض سیستم"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"انتخاب زبان از «تنظیمات» برای این برنامه دردسترس نیست."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"زبان ممکن است با زبان‌های موجود در برنامه متفاوت باشد. ممکن است برخی‌از برنامه‌ها از این تنظیم پشتیبانی نکنند."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"فقط برنامه‌هایی که از انتخاب زبان پشتیبانی می‌کنند اینجا نمایش داده می‌شود."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">زبان‌های انتخابی حذف شوند؟</item>
       <item quantity="other">زبان‌های انتخابی حذف شوند؟</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index b9cca3c..468a633 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Järjestelmän oletusarvo"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Sovellukselle ei voi valita kieltä asetuksista."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Kieli saattaa erota sovelluksessa saatavilla olevista kielistä. Jotkin sovellukset eivät ehkä tue tätä asetusta."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Täällä näkyvät vain sovellukset, jotka tukevat kielen valitsemista."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Poistetaanko valitut kielet?</item>
       <item quantity="one">Poistetaanko valittu kieli?</item>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index e59245e..d5ac122 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Paramètre système par défaut"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"La sélection de la langue pour cette application n\'est pas accessible à partir des paramètres."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"La langue peut différer des langues offertes dans l\'application. Certaines applications peuvent ne pas prendre en charge ce paramètre."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Seules les applications qui prennent en charge la sélection de la langue sont affichées ici."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Supprimer la langue sélectionnée?</item>
       <item quantity="other">Supprimer les langues sélectionnées?</item>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 4a448c6..286997b 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Opción predeterminada do sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"A opción de seleccionar un idioma para esta aplicación non está dispoñible en Configuración."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"É posible que o idioma non estea dispoñible na aplicación. Pode que algunhas aplicacións non sexan compatibles con esta opción de configuración."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Aquí só se mostran as aplicacións que admiten a selección de idioma."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Queres quitar os idiomas seleccionados?</item>
       <item quantity="one">Queres quitar o idioma seleccionado?</item>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index eb50a6a..73bafa7 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"સિસ્ટમ ડિફૉલ્ટ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"આ ઍપ માટે સેટિંગમાંથી ભાષા પસંદ કરી શકાતી નથી."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"આ ભાષા ઍપમાં ઉપલબ્ધ ભાષાઓથી અલગ હોઈ શકે છે. કેટલીક ઍપ આ સેટિંગને સપોર્ટ ન કરે એવું બની શકે છે."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"માત્ર ભાષાની પસંદગીને સપોર્ટ કરતી ઍપ જ અહીં બતાવવામાં આવી છે."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">પસંદ કરેલ ભાષાઓને કાઢી નાખીએ?</item>
       <item quantity="other">પસંદ કરેલ ભાષાઓને કાઢી નાખીએ?</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index ec8b8a6..f5b63aa 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"सिस्टम डिफ़ॉल्ट"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"सेटिंग में, इस ऐप्लिकेशन की भाषा चुनने का विकल्प मौजूद नहीं है."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"भाषा, ऐप्लिकेशन में उपलब्ध भाषाओं से अलग हो सकती है. हो सकता है कि कुछ ऐप्लिकेशन के साथ, भाषा की यह सेटिंग काम न करे."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"यहां सिर्फ़ वे ऐप्लिकेशन दिखाए गए हैं जिनमें भाषा चुनने का विकल्प मौजूद है."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">क्या आप चुनी गई भाषा हटाना चाहते हैं?</item>
       <item quantity="other">क्या आप चुनी गई भाषाएं हटाना चाहते हैं?</item>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 487a3a1..9cbc0fc 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -229,6 +229,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Zadane postavke sustava"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Odabir jezika za ovu aplikaciju nije dostupan u postavkama."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Jezik se može razlikovati od jezika dostupnih u aplikaciji. Neke aplikacije možda ne podržavaju tu postavku."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Ovdje se prikazuju samo aplikacije koje podržavaju odabir jezika."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Želite li ukloniti odabrane jezike?</item>
       <item quantity="few">Želite li ukloniti odabrane jezike?</item>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0bb827b..9dad46f 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Rendszerbeállítás"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"A Nyelvválasztás nem áll rendelkezésre ehhez az alkalmazáshoz a Beállításokban."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"A nyelv eltérhet az alkalmazásban rendelkezésre álló nyelvektől. Előfordulhat, hogy egyes alkalmazások nem támogatják ezt a beállítást."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Csak azok az alkalmazások láthatók itt, amelyek támogatják a nyelvválasztást."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Eltávolítja a kiválasztott nyelveket?</item>
       <item quantity="one">Eltávolítja a kiválasztott nyelvet?</item>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index 9681888..42043b3 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -409,9 +409,9 @@
   </string-array>
   <string-array name="captioning_preset_selector_titles">
     <item msgid="3880932435325583041">"Կարգավորված է հավելվածով"</item>
-    <item msgid="8719204526359229387">"Սպիտակը սևի վրա"</item>
-    <item msgid="5410164687403735103">"Սևը սպիտակի վրա"</item>
-    <item msgid="1119043472912497241">"Դեղինը սևի վրա"</item>
+    <item msgid="8719204526359229387">"Սպիտակ՝ սևի վրա"</item>
+    <item msgid="5410164687403735103">"Սև՝ սպիտակի վրա"</item>
+    <item msgid="1119043472912497241">"Դեղին՝ սևի վրա"</item>
     <item msgid="2836895041823327816">"Դեղինը կապույտի վրա"</item>
     <item msgid="747238414788976867">"Հատուկ"</item>
   </string-array>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 797712f..e5e63e0 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Կանխադրված"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Լեզվի ընտրությունն այս հավելվածի համար հասանելի չէ Կարգավորումներում։"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Լեզուն կարող է հավելվածում հասանելի լեզուների ցանկում չլինել։ Որոշ հավելվածներ կարող են չաջակցել այս կարգավորումը։"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Այստեղ ցուցադրված են միայն այն հավելվածները, որոնցում աջակցվում է լեզվի ընտրությունը։"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Հեռացնե՞լ ընտրված լեզուն</item>
       <item quantity="other">Հեռացնե՞լ ընտրված լեզուները</item>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 3bb1aca..73c6fc0 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Default sistem"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Pemilihan bahasa untuk aplikasi ini tidak tersedia dari Setelan."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Bahasa mungkin berbeda dari bahasa yang tersedia di aplikasi. Beberapa aplikasi mungkin tidak mendukung setelan ini."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Hanya aplikasi yang mendukung pilihan bahasa yang ditampilkan di sini."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Hapus bahasa yang dipilih?</item>
       <item quantity="one">Hapus bahasa yang dipilih?</item>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 75792a5..d490ed3 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Sjálfgildi kerfis"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Ekki er hægt að velja tungumál fyrir þetta forrit í stillingum."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Tungumál kann að vera frábrugðið tiltækum tungumálum í forritinu. Tiltekin forrit styðja hugsanlega ekki þessa stillingu."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Hér eru aðeins birt forrit sem styðja val á tungumáli."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Fjarlægja valin tungumál?</item>
       <item quantity="other">Fjarlægja valin tungumál?</item>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index cbcb0e1..21221fc 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Predefinita di sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"La selezione della lingua per questa app non è disponibile nelle Impostazioni."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"La lingua potrebbe essere diversa dalle lingue disponibili nell\'app. Alcune app potrebbero non supportare questa impostazione."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Qui vengono mostrate soltanto le app che supportano la selezione della lingua."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Rimuovere le lingue selezionate?</item>
       <item quantity="one">Rimuovere la lingua selezionata?</item>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index df97f79..023aa01 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -417,7 +417,7 @@
   </string-array>
   <string-array name="accessibility_button_location_selector_titles">
     <item msgid="6485511780196327736">"צף מעל אפליקציות אחרות"</item>
-    <item msgid="3605616699204153590">"סרגל ניווט"</item>
+    <item msgid="3605616699204153590">"סרגל הניווט"</item>
   </string-array>
   <string-array name="accessibility_button_gesture_selector_titles">
     <item msgid="2370918472773154939">"לחצן"</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 00222fe..33bf9ad 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -230,6 +230,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ברירת המחדל של המערכת"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"בחירות השפה לאפליקציה הזו לא זמינה בהגדרות."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"השפה עשויה להיות שונה מהשפות הזמינות באפליקציה. יכול להיות שחלק מהאפליקציות לא תומכות בהגדרה הזו."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"מוצגות כאן רק אפליקציות התומכות בבחירת שפה."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="two">להסיר את השפות שנבחרו?</item>
       <item quantity="many">להסיר את השפות שנבחרו?</item>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index c4b67ab..8f6f054 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"システムのデフォルト"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"このアプリの言語は [設定] から選択できません。"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"アプリで利用できない言語の可能性があります。一部のアプリはこの設定に対応していない可能性があります。"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ここには、選択した言語に対応するアプリのみが表示されます。"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">選択した言語を削除しますか?</item>
       <item quantity="one">選択した言語を削除しますか?</item>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index 2d03d67..bbc2339 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -387,8 +387,8 @@
     <item msgid="5012882784126308133">"Кішкене бас әріптер"</item>
   </string-array>
   <string-array name="captioning_font_size_selector_titles">
-    <item msgid="923916134548435468">"Өте кішкене"</item>
-    <item msgid="5738147437573674872">"Кішкене"</item>
+    <item msgid="923916134548435468">"Өте кіші"</item>
+    <item msgid="5738147437573674872">"Кіші"</item>
     <item msgid="4691660235626027304">"Орташа"</item>
     <item msgid="824386705928670045">"Үлкен"</item>
     <item msgid="2790561781512874585">"Өте үлкен"</item>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index e52fa62..ecb56a7 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Жүйенің әдепкі параметрі"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Бұл қолданба үшін \"Параметрлер\" бөлімінен тіл таңдау мүмкіндігі қолжетімсіз."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Тілдер қолданбадағы тілдерден өзгеше болуы мүмкін. Кейбір қолданба бұл параметрді қолдамауы мүмкін."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Мұнда тіл таңдау мүмкіндігі бар қолданбалар ғана көрсетілген."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Таңдалған тілдерді жою керек пе?</item>
       <item quantity="one">Таңдалған тілді жою керек пе?</item>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index d7c5041..524dfcf 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"លំនាំ​ដើម​ប្រព័ន្ធ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"មិនអាចជ្រើសរើសភាសាសម្រាប់កម្មវិធីនេះពីការកំណត់បានទេ។"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ភាសាអាចមាន​ភាពខុសគ្នាពី​ភាសាដែលមាននៅក្នុង​កម្មវិធី។ កម្មវិធីមួយចំនួន​ប្រហែលជាមិនអាចប្រើ​ការកំណត់នេះបានទេ។"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"មានតែកម្មវិធីដែលស្គាល់ការជ្រើសរើសភាសាប៉ុណ្ណោះ​ដែលបង្ហាញនៅទីនេះ។"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">លុបភាសាដែលបានជ្រើសរើសឬ?</item>
       <item quantity="one">លុបភាសាដែលបានជ្រើសរើសឬ?</item>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 99dce28..55ad7df 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ಸಿಸ್ಟಂ ಡೀಫಾಲ್ಟ್"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಮೂಲಕ ಈ ಆ್ಯಪ್‌ಗಾಗಿ ಭಾಷೆಯ ಆಯ್ಕೆಯು ಲಭ್ಯವಿಲ್ಲ."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ಆ್ಯಪ್‌ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಭಾಷೆಗಳಿಗಿಂತ ಭಾಷೆ ಭಿನ್ನವಾಗಿರಬಹುದು. ಕೆಲವು ಆ್ಯಪ್‌ಗಳು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬೆಂಬಲಿಸದಿರಬಹುದು."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ಭಾಷೆಯ ಆಯ್ಕೆಯನ್ನು ಬೆಂಬಲಿಸುವ ಆ್ಯಪ್‌ಗಳನ್ನು ಮಾತ್ರ ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">ಆಯ್ಕೆಮಾಡಿದ ಭಾಷೆಗಳನ್ನು ತೆಗೆದುಹಾಕಬೇಕೇ?</item>
       <item quantity="other">ಆಯ್ಕೆಮಾಡಿದ ಭಾಷೆಗಳನ್ನು ತೆಗೆದುಹಾಕಬೇಕೇ?</item>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 7ba3442..00c4ac4 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"시스템 기본값"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"설정에서 이 앱의 언어를 선택할 수 없습니다."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"언어가 앱에서 사용 가능한 언어와 다를 수 있습니다. 일부 앱에서는 이 설정을 지원하지 않을 수도 있습니다."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"언어 선택을 지원하는 앱만 여기에 표시됩니다."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">선택한 언어를 삭제하시겠습니까?</item>
       <item quantity="one">선택한 언어를 삭제하시겠습니까?</item>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index e7bb0e3..872d5f4 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Системанын демейки параметрлери"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Бул колдонмонун тилин Жөндөөлөрдөн тандоого болбойт."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Тил колдонмодо жеткиликтүү тилдерден айырмаланышы мүмкүн. Бул жөндөө айрым колдонмолор тарабынан колдоого алынбайт болушу мүмкүн."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Бул жерде тил тандоого мүмкүн болгон колдонмолор гана көрсөтүлөт."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Тандалган тилдерди өчүрөсүзбү?</item>
       <item quantity="one">Тандалган тилди өчүрөсүзбү?</item>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index f9efbf0..d770f56 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ຄ່າເລີ່ມຕົ້ນຂອງລະບົບ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ບໍ່ສາມາດເລືອກພາສາສຳລັບແອັບນີ້ຈາກການຕັ້ງຄ່າໄດ້."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ພາສາອາດແຕກຕ່າງໄປຈາກພາສາທີ່ສາມາດໃຊ້ໄດ້ໃນແອັບ. ບາງແອັບອາດບໍ່ຮອງຮັບການຕັ້ງຄ່ານີ້."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ມີພຽງແອັບທີ່ຮອງຮັບການເລືອກພາສາທີ່ສະແດງຢູ່ບ່ອນນີ້."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">ລຶບພາສາທີ່ເລືອກບໍ?</item>
       <item quantity="one">ລຶບພາສາທີ່ເລືອກບໍ?</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d5abba9..b96e554 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -230,6 +230,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Numatytoji sistemos vertė"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Šios programos kalbos pasirinkimas nepasiekiamas iš skilties „Nustatymai“."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Kalba gali skirtis nuo programoje pasiekiamų kalbų. Kai kuriose programose šis nustatymas gali būti nepalaikomas."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Čia rodomos tik kalbos pasirinkimą palaikančios programos."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Pašalinti pasirinktas kalbas?</item>
       <item quantity="few">Pašalinti pasirinktas kalbas?</item>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index f603fa8..6627b88 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Стандардно за системот"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Не може да се бира јазик за апликацијава од „Поставките“."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Јазикот може да се разликува од јазиците достапни во апликацијата. Некои апликации може да не ја поддржуваат оваа поставка."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Само апликациите што поддржуваат бирање јазик се прикажани овде."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Да се отстранат избраните јазици?</item>
       <item quantity="other">Да се отстранат избраните јазици?</item>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index ffb5bec..33dbd7f 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"സിസ്‌റ്റം ഡിഫോൾട്ട്"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ക്രമീകരണത്തിൽ നിന്ന് ഈ ആപ്പിനുള്ള ഭാഷ തിരഞ്ഞെടുക്കാനുള്ള ഓപ്‌ഷൻ ലഭ്യമല്ല."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ആപ്പിൽ ലഭ്യമായ ഭാഷകളിൽ നിന്ന് ഭാഷ വ്യത്യാസപ്പെട്ടേക്കാം. ചില ആപ്പുകൾ ഈ ക്രമീകരണത്തെ പിന്തുണച്ചേക്കില്ല."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ഭാഷാ സെലക്ഷൻ പിന്തുണയ്ക്കുന്ന ആപ്പുകൾ മാത്രമാണ് ഇവിടെ കാണിക്കുന്നത്."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">തിരഞ്ഞെടുത്ത ഭാഷകൾ നീക്കംചെയ്യണോ?</item>
       <item quantity="one">തിരഞ്ഞെടുത്ത ഭാഷ നീക്കംചെയ്യണോ?</item>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index b93ea98..2f86f05 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Системийн өгөгдмөл"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Энэ аппын хэлийг Тохиргоо хэсгээс сонгох боломжгүй байна."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Хэл нь аппад боломжтой хэлээс шалтгаалан харилцан адилгүй байж болно. Зарим апп энэ тохиргоог дэмждэггүй байж магадгүй."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Зөвхөн хэлний сонголтыг дэмждэг аппуудыг энд харуулав."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Сонгосон хэлийг хасах уу?</item>
       <item quantity="one">Сонгосон хэлийг хасах уу?</item>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 6ac9270..3b7ab98 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Lalai sistem"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Pemilihan bahasa untuk apl ini tidak tersedia daripada Tetapan."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Bahasa mungkin berbeza daripada bahasa yang tersedia dalam apl. Sesetengah apl mungkin tidak menyokong tetapan ini."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Hanya apl yang menyokong pemilihan bahasa dipaparkan di sini."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Alih keluar bahasa yang dipilih?</item>
       <item quantity="one">Alih keluar bahasa yang dipilih?</item>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 7870be8..3dbb787 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"စနစ်မူရင်း"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ဤအက်ပ်အတွက် ‘ဆက်တင်များ’ မှ ဘာသာစကား ရွေးချယ်မှု မရရှိနိုင်ပါ။"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ဘာသာစကားသည် အက်ပ်တွင် ရရှိနိုင်သော ဘာသာစကားများမှ ကွဲပြားနိုင်သည်။ အချို့အက်ပ်များက ဤဆက်တင်ကို မပံ့ပိုးနိုင်ပါ။"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ဘာသာစကားရွေးချယ်မှုကို ပံ့ပိုးသည့် အက်ပ်များကိုသာ ဤနေရာတွင် ပြထားသည်။"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">ရွေးထားသည့် ဘာသာစကားများကို ဖယ်ရှားမလား။</item>
       <item quantity="one">ရွေးထားသည့် ဘာသာစကားကို ဖယ်ရှားမလား။</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 5060cc9..3929410 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Systeemstandaard"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Taalselectie voor deze app is niet beschikbaar via Instellingen."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"De taal kan verschillen van de beschikbare talen in de app. Sommige apps ondersteunen deze instelling mogelijk niet."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Hier zie je alleen apps die taalselectie ondersteunen."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Geselecteerde talen verwijderen?</item>
       <item quantity="one">Geselecteerde taal verwijderen?</item>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
index 6ed8c8e..069eb48 100644
--- a/res/values-or/arrays.xml
+++ b/res/values-or/arrays.xml
@@ -485,7 +485,7 @@
     <item msgid="8186970968968646288">"କ୍ୟାଶ୍ ହୋଇଥିବା (ଖାଲି)"</item>
   </string-array>
   <string-array name="color_picker">
-    <item msgid="7216413848731287689">"ସାଇଆନ୍"</item>
+    <item msgid="7216413848731287689">"ସିଆନ୍"</item>
     <item msgid="5661027589207588703">"ନୀଳ"</item>
     <item msgid="1219738214736244749">"ସବୁଜ"</item>
     <item msgid="6331809026622602308">"ବାଇଗଣୀ"</item>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 02389dc..ed5164d 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇਸ ਐਪ ਲਈ ਭਾਸ਼ਾ ਦੀ ਚੋਣ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ਭਾਸ਼ਾ ਐਪ ਵਿਚਲੀਆਂ ਉਪਲਬਧ ਭਾਸ਼ਾਵਾਂ ਨਾਲੋਂ ਵੱਖਰੀ ਹੋ ਸਕਦੀ ਹੈ। ਕੁਝ ਐਪਾਂ ਸ਼ਾਇਦ ਇਸ ਸੈਟਿੰਗਾਂ ਦਾ ਸਮਰਥਨ ਨਾ ਕਰਨ।"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ਸਿਰਫ਼ ਉਹ ਐਪਾਂ ਹੀ ਇੱਥੇ ਦਿਖਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ ਜੋ ਭਾਸ਼ਾ ਦੀ ਚੋਣ ਦਾ ਸਮਰਥਨ ਕਰਦੀਆਂ ਹਨ।"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">ਕੀ ਚੁਣੀ ਗਈ ਭਾਸ਼ਾ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?</item>
       <item quantity="other">ਕੀ ਚੁਣੀਆਂ ਗਈਆਂ ਭਾਸ਼ਾਵਾਂ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?</item>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 494fae1..0f57759 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Padrão do sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"A seleção de idioma para este app não está disponível nas configurações."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"O idioma pode ser diferente dos disponíveis no app. Alguns apps podem não ter suporte a essa configuração."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Apenas apps que têm suporte à seleção de idioma são mostrados aqui."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Remover o idioma selecionado?</item>
       <item quantity="other">Remover idiomas selecionados?</item>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index 1dbfaeb..c61e794 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -270,7 +270,7 @@
     <item msgid="6485000384018554920">"volume do toque"</item>
     <item msgid="3378000878531336372">"volume de multimédia"</item>
     <item msgid="5272927168355895681">"volume de alarme"</item>
-    <item msgid="4422070755065530548">"volume de notificação"</item>
+    <item msgid="4422070755065530548">"volume de notificações"</item>
     <item msgid="3250654589277825306">"volume de Bluetooth"</item>
     <item msgid="4212187233638382465">"Manter ativo"</item>
     <item msgid="5099026183238335900">"monitorizar localização"</item>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 494fae1..0f57759 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Padrão do sistema"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"A seleção de idioma para este app não está disponível nas configurações."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"O idioma pode ser diferente dos disponíveis no app. Alguns apps podem não ter suporte a essa configuração."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Apenas apps que têm suporte à seleção de idioma são mostrados aqui."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Remover o idioma selecionado?</item>
       <item quantity="other">Remover idiomas selecionados?</item>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index e6409d7..cabcb09 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -387,8 +387,8 @@
     <item msgid="5012882784126308133">"Majuscule mici"</item>
   </string-array>
   <string-array name="captioning_font_size_selector_titles">
-    <item msgid="923916134548435468">"Foarte mic"</item>
-    <item msgid="5738147437573674872">"Mic"</item>
+    <item msgid="923916134548435468">"Foarte mică"</item>
+    <item msgid="5738147437573674872">"Mică"</item>
     <item msgid="4691660235626027304">"Medie"</item>
     <item msgid="824386705928670045">"Mare"</item>
     <item msgid="2790561781512874585">"Foarte mare"</item>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 69ad41e..1b3f615 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -229,6 +229,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Prestabilit de sistem"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Selectarea limbii pentru această aplicație din Setări nu este disponibilă."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Limba poate fi alta decât limbile disponibile în aplicație. Este posibil ca unele aplicații să nu accepte această setare."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Aici sunt afișate numai aplicațiile care acceptă selectarea limbii."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="few">Eliminați limbile selectate?</item>
       <item quantity="other">Eliminați limbile selectate?</item>
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
index 976b790..a8bf675 100644
--- a/res/values-si/arrays.xml
+++ b/res/values-si/arrays.xml
@@ -296,7 +296,7 @@
     <item msgid="2504191192460059817">"තිරය ක්‍රියාත්මක කිරීම"</item>
     <item msgid="7905819538788103556">"ගිණුම් ලබා ගැනීම"</item>
     <item msgid="1675025662248079254">"පසුබිමෙහි ධාවනය"</item>
-    <item msgid="2553974920157061225">"ප්‍රවේශ්‍යතා හඬ පරිමාව"</item>
+    <item msgid="2553974920157061225">"ප්‍රවේශ්‍යතා හඬ"</item>
   </string-array>
   <string-array name="app_ops_labels">
     <item msgid="7780927354556651567">"ස්ථානය"</item>
@@ -363,7 +363,7 @@
     <item msgid="4281352581602735717">"තිරය ක්‍රියාත්මක කිරීම"</item>
     <item msgid="346122795998225472">"ගිණුම් ලබා ගැනීම"</item>
     <item msgid="3756073389408535680">"පසුබිමෙහි ධාවනය"</item>
-    <item msgid="2114661179947426734">"ප්‍රවේශ්‍යතා හඬ පරිමාව"</item>
+    <item msgid="2114661179947426734">"ප්‍රවේශ්‍යතා හඬ"</item>
   </string-array>
   <string-array name="long_press_timeout_selector_titles">
     <item msgid="6926391290986427331">"කොට"</item>
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
index c39a0bc..ca80126 100644
--- a/res/values-sl/arrays.xml
+++ b/res/values-sl/arrays.xml
@@ -424,7 +424,7 @@
     <item msgid="6922258575853746220">"Poteza"</item>
   </string-array>
   <string-array name="accessibility_button_size_selector_titles">
-    <item msgid="7482952318152486459">"Majhen"</item>
+    <item msgid="7482952318152486459">"Majhna"</item>
     <item msgid="1666628329913333563">"Velik"</item>
   </string-array>
   <string-array name="vpn_types_long">
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index cd288a9..39f7092 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -230,6 +230,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Sistemsko privzeto"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"V nastavitvah ni na voljo izbire jezika za to aplikacijo."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Jezik se morda razlikuje od jezikov, ki so na voljo v aplikaciji. Nekatere aplikacije morda ne podpirajo te nastavitve."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Tukaj so prikazane samo aplikacije, ki podpirajo izbiro jezika."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Želite odstraniti izbrane jezike?</item>
       <item quantity="two">Želite odstraniti izbrane jezike?</item>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index a6df705..cd5d70b 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Parazgjedhja e sistemit"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Zgjedhja e gjuhës për këtë aplikacion nuk ofrohet nga \"Cilësimet\"."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Gjuha mund të ndryshojë nga gjuhët që ofrohen në aplikacion. Disa aplikacione mund të mos e mbështetin këtë cilësim."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Vetëm aplikacionet që mbështetin zgjedhjen e gjuhës shfaqen këtu."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Të hiqet gjuha e zgjedhur?</item>
       <item quantity="one">Të hiqet gjuha e zgjedhur?</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index b5805ae..adab5b5 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -229,6 +229,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Подразумевани системски"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Избор језика за ову апликацију није доступан из Подешавања."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Језик може да се разликује од језика доступних у апликацији. Неке апликације можда не подржавају ово подешавање."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Овде се приказују само апликације које подржавају избор језика."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Желите ли да уклоните изабране језике?</item>
       <item quantity="few">Желите ли да уклоните изабране језике?</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 5e11d62..7db27e0 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Systemets standardinställning"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Det går inte att välja språk för den här appen i Inställningar."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Alla språk kanske inte är tillgängliga i appen. Vissa appar kanske inte har stöd för denna inställning."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Endast appar som har stöd för språkval visas här."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Vill du ta bort de valda språken?</item>
       <item quantity="one">Vill du ta bort det valda språket?</item>
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
index 366c8b6..e3434d0 100644
--- a/res/values-sw/arrays.xml
+++ b/res/values-sw/arrays.xml
@@ -288,7 +288,7 @@
     <item msgid="1745447762712473288">"tumia sip"</item>
     <item msgid="2986821801246709737">"chakata simu uliyopiga"</item>
     <item msgid="2702338156976571452">"alama ya kidole"</item>
-    <item msgid="7925495329948404955">"vitambua shughuli za mwili"</item>
+    <item msgid="7925495329948404955">"vitambuzi vya shughuli za mwili"</item>
     <item msgid="8163066895749904470">"soma matangazo ya simu"</item>
     <item msgid="7621394050624063528">"eneo la jaribio"</item>
     <item msgid="37519917674959757">"soma hifadhi"</item>
@@ -355,7 +355,7 @@
     <item msgid="9143978647977300187">"Tumia sip"</item>
     <item msgid="3053060162752878562">"Chakata simu uliyopiga"</item>
     <item msgid="4480721672278100858">"Alama ya kidole"</item>
-    <item msgid="7883743426029759112">"Vitambua shughuli za mwili"</item>
+    <item msgid="7883743426029759112">"Vitambuzi vya shughuli za mwili"</item>
     <item msgid="2546206711741159825">"Soma matangazo ya simu"</item>
     <item msgid="2363460595607829243">"Eneo la jaribio"</item>
     <item msgid="3778165903878569143">"Soma hifadhi"</item>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index a11af1e..01f5116 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Chaguomsingi la mfumo"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Chaguo la lugha kwa programu hii halipatikani kwenye Mipangilio."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Huenda lugha ikatofautiana na zinazopatikana katika programu. Huenda baadhi ya programu zisiwe na uwezo wa kutumia mipangilio hii."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Programu zinazotumia chaguo la lugha ndizo zinazoonyeshwa hapa."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Ungependa kuondoa lugha zilizochaguliwa?</item>
       <item quantity="one">Ungependa kuondoa lugha iliyochaguliwa?</item>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 2f6c37a..8a24e7e 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"சிஸ்டத்தின் இயல்பு"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"அமைப்புகளில் இந்த ஆப்ஸுக்கான மொழித் தேர்வு கிடைக்கவில்லை."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ஆப்ஸில் இருக்கும் மொழிகளிலிருந்து மொழி வேறுபடலாம். சில ஆப்ஸில் இந்த அமைப்பைப் பயன்படுத்த முடியாது."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"மொழித் தேர்வை ஆதரிக்கும் ஆப்ஸ் மட்டும் இங்கே காட்டப்படும்."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">தேர்ந்தெடுத்த மொழிகளை அகற்றவா?</item>
       <item quantity="one">தேர்ந்தெடுத்த மொழியை அகற்றவா?</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 4168a67..7b3d21c 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"సిస్టమ్ ఆటోమేటిక్ సెట్టింగ్"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"ఈ యాప్ కోసం భాష ఎంపిక సెట్టింగ్‌లలో అందుబాటులో లేదు."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"యాప్‌లో అందుబాటులో ఉన్న భాషలకు భాష భిన్నంగా ఉండవచ్చు. కొన్ని యాప్‌లు ఈ సెట్టింగ్‌కు సపోర్ట్ చేయకపోవచ్చు."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"భాష ఎంపికను సపోర్ట్ చేసే యాప్‌లు మాత్రమే ఇక్కడ చూపబడతాయి."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">ఎంచుకున్న భాషలను తీసివేయాలా?</item>
       <item quantity="one">ఎంచుకున్న భాషను తీసివేయాలా?</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 5acf18a..fde49f6 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"ค่าเริ่มต้นของระบบ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"การเลือกภาษาสำหรับแอปนี้ไม่พร้อมให้ใช้งานจากการตั้งค่า"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"ภาษาอาจแตกต่างจากที่ให้บริการในแอป บางแอปอาจไม่รองรับการตั้งค่านี้"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"ส่วนนี้แสดงเฉพาะแอปที่รองรับการเลือกภาษา"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">นำภาษาที่เลือกออกไหม</item>
       <item quantity="one">นำภาษาที่เลือกออกไหม</item>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b944178..f031d15 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Default ng system"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Hindi available sa Mga Setting ang pagpili ng wika para sa app na ito."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Posibleng iba ang wika sa mga wikang available sa app. Posibleng hindi suportahan ng ilang app ang setting na ito."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Mga app lang na sumusuporta sa pagpili ng wika ang ipinapakita dito."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Alisin ang mga piniling wika?</item>
       <item quantity="other">Alisin ang mga piniling wika?</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 530d5ca..8effefe 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Sistem varsayılanı"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Ayarlar\'da bu uygulama için dil seçimi mevcut değil."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Dil, uygulamada bulunan dillerden farklı olabilir. Bazı uygulamalar bu ayarı desteklemeyebilir."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Yalnızca dil seçimini destekleyen uygulamalar burada görünür."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Seçilen diller kaldırılsın mı?</item>
       <item quantity="one">Seçilen dil kaldırılsın mı?</item>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 99ee7d4..c2ae814 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"سسٹم ڈیفالٹ"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"اس ایپ کے لیے زبان کا انتخاب ترتیبات سے دستیاب نہیں ہے۔"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"زبان ایپ میں دستیاب زبانوں سے مختلف ہو سکتی ہے۔ ہو سکتا ہے کچھ ایپس اس ترتیب کو سپورٹ نہ کریں۔"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"یہاں صرف ان ایپس کی فہرست دکھائی جاتی ہے جو زبان کے انتخاب کو سپورٹ کرتی ہیں۔"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">منتخب کردہ زبانیں ہٹائیں؟</item>
       <item quantity="one">منتخب کردہ زبان ہٹائیں؟</item>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index ad34078..5616191 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Tizim standarti"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Bu ilova uchun Sozlamalardan tilni tanlash imkonsiz"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Bu til ilovadagi tillardan farq qilishi mumkin. Ayrim ilovalarda bu sozlama ishlamaydi."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Faqat til tanlash imkoni bor ilovalar shu yerda chiqadi."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Tanlangan tillar olib tashlansinmi?</item>
       <item quantity="one">Tanlangan til olib tashlansinmi?</item>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f09096b..6a69f4d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Theo chế độ mặc định của hệ thống"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Bạn chưa thể chọn ngôn ngữ cho ứng dụng này trong phần Cài đặt."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Ngôn ngữ có thể khác với ngôn ngữ có sẵn trong ứng dụng. Một số ứng dụng có thể không hỗ trợ cài đặt này."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Chỉ những ứng dụng hỗ trợ lựa chọn ngôn ngữ mới được hiển thị."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">Xóa các ngôn ngữ đã chọn?</item>
       <item quantity="one">Xóa ngôn ngữ đã chọn?</item>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 7a23a7d..068eb8b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"系统默认设置"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"您无法从“设置”中选择此应用的语言。"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"语言可能与应用中可用的语言不同。部分应用可能不支持此设置。"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"此处仅显示支持选择语言的应用。"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">要移除所选语言吗?</item>
       <item quantity="one">要移除所选语言吗?</item>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index dc2a11d..7de398d 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"系統預設"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"「設定」中不提供此應用程式的語言選擇。"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"可用的語言可能與應用程式支援的語言不同,部分應用程式可能不支援此設定。"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"這裡只會顯示支援語言選擇的應用程式。"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">要移除選取的語言嗎?</item>
       <item quantity="one">要移除選取的語言嗎?</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 0e6a2d0..52fa6a9 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"系統預設"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"無法從「設定」選取這個應用程式的語言。"</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"可用的語言可能與應用程式支援的語言不同,某些應用程式可能不支援這項設定。"</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"只有可讓使用者選取語言的應用程式才會顯示在這裡。"</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="other">要移除所選語言嗎?</item>
       <item quantity="one">要移除所選語言嗎?</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index e033103..d6a1480 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -228,6 +228,7 @@
     <string name="preference_of_system_locale_summary" msgid="5612241394431188535">"Okuzenzakalelayo kwesistimu"</string>
     <string name="desc_no_available_supported_locale" msgid="7883271726226947273">"Ukukhetha ulimi kwale app akutholakali Kumasethingi."</string>
     <string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"Ulimi lungahluka ezilimini ezitholakala ku-app. Amanye ama-app angase angalisekeli leli sethingi."</string>
+    <string name="desc_app_locale_selection_supported" msgid="6149467826636295127">"Ama-app asekela ukukhethwa kolimi kuphela aboniswa lapha."</string>
     <plurals name="dlg_remove_locales_title" formatted="false" msgid="2845515796732609837">
       <item quantity="one">Susa izilimi ezikhethiwe?</item>
       <item quantity="other">Susa izilimi ezikhethiwe?</item>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3d616a8..b88d01d 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -152,6 +152,12 @@
     <dimen name="homepage_preference_icon_padding_start_two_pane">8dp</dimen>
     <dimen name="homepage_preference_text_padding_start">16dp</dimen>
     <dimen name="homepage_preference_text_padding_start_two_pane">24dp</dimen>
+    <dimen name="homepage_app_bar_corner_radius">32dp</dimen>
+    <dimen name="homepage_app_bar_padding_two_pane">6dp</dimen>
+    <!-- bottom: search_bar_margin - homepage_app_bar_padding_two_pane -->
+    <dimen name="homepage_app_bar_margin_bottom_two_pane">10dp</dimen>
+    <!-- horizontal: homepage_padding_horizontal_two_pane - homepage_app_bar_padding_two_pane -->
+    <dimen name="homepage_app_bar_margin_horizontal_two_pane">18dp</dimen>
 
     <!-- Dimensions for Wifi Assistant Card -->
     <dimen name="wifi_assistant_padding_top_bottom">16dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1d685ef..6a0fad2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -518,6 +518,9 @@
     <!-- Description for the disclaimer of per app language. [CHAR LIMIT=NONE]-->
     <string name="desc_app_locale_disclaimer">Language may differ from languages available in the app. Some apps may not support this setting.</string>
 
+    <!-- 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>
+
     <!-- 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>
@@ -8613,7 +8616,7 @@
     <string name="spatial_audio_wired_headphones">Wired headphones</string>
 
     <!-- Sound: Summary for the spatializer effect. [CHAR LIMIT=NONE]-->
-    <string name="spatial_audio_text">Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media.</string>
+    <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>
@@ -8624,6 +8627,12 @@
     <!-- Sound: Summary for the Spatial audio setting when it is on with two output devices enabled. [CHAR LIMIT=NONE]-->
     <string name="spatial_summary_on_two">On / <xliff:g id="output device" example="Phone speaker">%1$s</xliff:g> and <xliff:g id="output device" example="Wired headphones">%2$s</xliff:g></string>
 
+    <!-- Sound: Footer message for the Spatial audio setting. [CHAR LIMIT=NONE]-->
+    <string name="spatial_audio_footer_title">You can also turn on Spatial Audio for Bluetooth devices.</string>
+
+    <!-- Sound: Footer hyperlink text to launch the Connected devices settings page. [CHAR LIMIT=NONE]-->
+    <string name="spatial_audio_footer_learn_more_text">Connected devices settings</string>
+
     <!-- Sound: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
     <string name="zen_mode_settings_schedules_summary">
         {count, plural,
diff --git a/res/xml/bluetooth_device_details_fragment.xml b/res/xml/bluetooth_device_details_fragment.xml
index f6c0af6..f330b19 100644
--- a/res/xml/bluetooth_device_details_fragment.xml
+++ b/res/xml/bluetooth_device_details_fragment.xml
@@ -47,6 +47,11 @@
         settings:allowDividerBelow="true"/>
 
     <com.android.settings.slices.SlicePreference
+        android:key="bt_extra_control"
+        settings:controller="com.android.settings.slices.SlicePreferenceController"
+        settings:allowDividerAbove="true"/>
+
+    <com.android.settings.slices.SlicePreference
         android:key="bt_device_slice"
         settings:controller="com.android.settings.slices.BlockingSlicePrefController"
         settings:allowDividerBelow="true"
@@ -61,6 +66,18 @@
     <PreferenceCategory
         android:key="bluetooth_profiles"/>
 
+    <PreferenceCategory
+        android:key="bluetooth_related_tools"
+        android:title="@string/bluetooth_screen_related">
+        <Preference
+            android:key="live_caption"
+            android:icon="@drawable/ic_live_caption"
+            android:persistent="false"
+            android:summary="@string/live_caption_summary"
+            android:title="@string/live_caption_title"
+            settings:controller="com.android.settings.accessibility.LiveCaptionPreferenceController"/>
+    </PreferenceCategory>
+
     <com.android.settingslib.widget.FooterPreference
         android:key="device_details_footer"
         android:selectable="false"
diff --git a/res/xml/spatial_audio_settings.xml b/res/xml/spatial_audio_settings.xml
index da33986..13d3b25 100644
--- a/res/xml/spatial_audio_settings.xml
+++ b/res/xml/spatial_audio_settings.xml
@@ -34,4 +34,9 @@
         android:title="@string/spatial_audio_wired_headphones"
         settings:controller="com.android.settings.notification.SpatialAudioWiredHeadphonesController"/>
 
+    <com.android.settingslib.widget.FooterPreference
+        android:key="spatial_audio_footer"
+        android:title="@string/spatial_audio_footer_title"
+        android:selectable="false"
+        settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/src/com/android/settings/DefaultRingtonePreference.java b/src/com/android/settings/DefaultRingtonePreference.java
index 914c4b2..824a5a0 100644
--- a/src/com/android/settings/DefaultRingtonePreference.java
+++ b/src/com/android/settings/DefaultRingtonePreference.java
@@ -46,6 +46,11 @@
 
     @Override
     protected void onSaveRingtone(Uri ringtoneUri) {
+        if (ringtoneUri == null) {
+            setActualDefaultRingtoneUri(ringtoneUri);
+            return;
+        }
+
         String mimeType = getContext().getContentResolver().getType(ringtoneUri);
         if (mimeType == null) {
             Log.e(TAG, "onSaveRingtone for URI:" + ringtoneUri
diff --git a/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
index 8f0ca3e..3dde687 100644
--- a/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
@@ -38,13 +38,15 @@
 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.SubSettingLauncher;
+import com.android.settingslib.bluetooth.BluetoothCallback;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.HearingAidProfile;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
@@ -53,7 +55,7 @@
  * Controller that shows and updates the bluetooth device name
  */
 public class AccessibilityHearingAidPreferenceController extends BasePreferenceController
-        implements LifecycleObserver, OnStart, OnStop {
+        implements LifecycleObserver, OnStart, OnStop, BluetoothCallback {
     private static final String TAG = "AccessibilityHearingAidPreferenceController";
     private Preference mHearingAidPreference;
 
@@ -82,15 +84,13 @@
 
     private final LocalBluetoothManager mLocalBluetoothManager;
     private final BluetoothAdapter mBluetoothAdapter;
-    //cache value of supporting hearing aid or not
-    private boolean mHearingAidProfileSupported;
+
     private FragmentManager mFragmentManager;
 
     public AccessibilityHearingAidPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mLocalBluetoothManager = getLocalBluetoothManager();
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-        mHearingAidProfileSupported = isHearingAidProfileSupported();
     }
 
     @Override
@@ -101,29 +101,27 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return mHearingAidProfileSupported ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+        return isHearingAidProfileSupported() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     @Override
     public void onStart() {
-        if (mHearingAidProfileSupported) {
-            IntentFilter filter = new IntentFilter();
-            filter.addAction(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
-            filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
-            mContext.registerReceiver(mHearingAidChangedReceiver, filter);
-        }
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
+        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+        mContext.registerReceiver(mHearingAidChangedReceiver, filter);
+        mLocalBluetoothManager.getEventManager().registerCallback(this);
     }
 
     @Override
     public void onStop() {
-        if (mHearingAidProfileSupported) {
-            mContext.unregisterReceiver(mHearingAidChangedReceiver);
-        }
+        mContext.unregisterReceiver(mHearingAidChangedReceiver);
+        mLocalBluetoothManager.getEventManager().unregisterCallback(this);
     }
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (TextUtils.equals(preference.getKey(), getPreferenceKey())){
+        if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
             final CachedBluetoothDevice device = getConnectedHearingAidDevice();
             if (device == null) {
                 launchHearingAidInstructionDialog();
@@ -141,7 +139,38 @@
         if (device == null) {
             return mContext.getText(R.string.accessibility_hearingaid_not_connected_summary);
         }
-        return device.getName();
+
+        final int connectedNum = getConnectedHearingAidDeviceNum();
+        final CharSequence name = device.getName();
+        final int side = device.getDeviceSide();
+        final CachedBluetoothDevice subDevice = device.getSubDevice();
+        if (connectedNum > 1) {
+            return mContext.getString(R.string.accessibility_hearingaid_more_device_summary, name);
+        }
+        if (subDevice != null && subDevice.isConnected()) {
+            return mContext.getString(
+                    R.string.accessibility_hearingaid_left_and_right_side_device_summary, name);
+        }
+        if (side == HearingAidProfile.DeviceSide.SIDE_INVALID) {
+            return mContext.getString(
+                    R.string.accessibility_hearingaid_active_device_summary, name);
+        }
+        return (side == HearingAidProfile.DeviceSide.SIDE_LEFT)
+                ? mContext.getString(
+                        R.string.accessibility_hearingaid_left_side_device_summary, name)
+                : mContext.getString(
+                        R.string.accessibility_hearingaid_right_side_device_summary, name);
+    }
+
+    @Override
+    public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
+        if (activeDevice == null) {
+            return;
+        }
+
+        if (bluetoothProfile == BluetoothProfile.HEARING_AID) {
+            HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, activeDevice);
+        }
     }
 
     public void setFragmentManager(FragmentManager fragmentManager) {
@@ -150,33 +179,44 @@
 
     @VisibleForTesting
     CachedBluetoothDevice getConnectedHearingAidDevice() {
-        if (!mHearingAidProfileSupported) {
+        if (!isHearingAidProfileSupported()) {
             return null;
         }
-        if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
-            return null;
-        }
-        final List<BluetoothDevice> deviceList = mLocalBluetoothManager.getProfileManager()
-                .getHearingAidProfile().getConnectedDevices();
-        final Iterator it = deviceList.iterator();
-        while (it.hasNext()) {
-            BluetoothDevice obj = (BluetoothDevice)it.next();
-            if (!mLocalBluetoothManager.getCachedDeviceManager().isSubDevice(obj)) {
-                return mLocalBluetoothManager.getCachedDeviceManager().findDevice(obj);
+
+        final CachedBluetoothDeviceManager deviceManager =
+                mLocalBluetoothManager.getCachedDeviceManager();
+        final HearingAidProfile hearingAidProfile =
+                mLocalBluetoothManager.getProfileManager().getHearingAidProfile();
+        final List<BluetoothDevice> deviceList = hearingAidProfile.getConnectedDevices();
+        for (BluetoothDevice obj : deviceList) {
+            if (!deviceManager.isSubDevice(obj)) {
+                return deviceManager.findDevice(obj);
             }
         }
         return null;
     }
 
+    private int getConnectedHearingAidDeviceNum() {
+        if (!isHearingAidProfileSupported()) {
+            return 0;
+        }
+
+        final CachedBluetoothDeviceManager deviceManager =
+                mLocalBluetoothManager.getCachedDeviceManager();
+        final HearingAidProfile hearingAidProfile =
+                mLocalBluetoothManager.getProfileManager().getHearingAidProfile();
+        final List<BluetoothDevice> deviceList = hearingAidProfile.getConnectedDevices();
+        return (int) deviceList.stream()
+                .filter(device -> !deviceManager.isSubDevice(device))
+                .count();
+    }
+
     private boolean isHearingAidProfileSupported() {
         if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
             return false;
         }
         final List<Integer> supportedList = mBluetoothAdapter.getSupportedProfiles();
-        if (supportedList.contains(BluetoothProfile.HEARING_AID)) {
-            return true;
-        }
-        return false;
+        return supportedList.contains(BluetoothProfile.HEARING_AID);
     }
 
     private LocalBluetoothManager getLocalBluetoothManager() {
diff --git a/src/com/android/settings/accessibility/HearingAidUtils.java b/src/com/android/settings/accessibility/HearingAidUtils.java
new file mode 100644
index 0000000..a3d2c93
--- /dev/null
+++ b/src/com/android/settings/accessibility/HearingAidUtils.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.accessibility;
+
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.FragmentManager;
+
+import com.android.settings.bluetooth.HearingAidPairingDialogFragment;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+
+/** Provides utility methods related hearing aids. */
+public final class HearingAidUtils {
+    private static final String TAG = "HearingAidUtils";
+
+    private HearingAidUtils(){}
+
+    /**
+     * Launches pairing dialog when hearing aid device needs other side of hearing aid device to
+     * work.
+     *
+     * @param fragmentManager The {@link FragmentManager} used to show dialog fragment
+     * @param device The {@link CachedBluetoothDevice} need to be hearing aid device
+     */
+    public static void launchHearingAidPairingDialog(FragmentManager fragmentManager,
+            @NonNull CachedBluetoothDevice device) {
+        if (device.isConnectedHearingAidDevice()
+                && device.getDeviceMode() == HearingAidProfile.DeviceMode.MODE_BINAURAL
+                && device.getSubDevice() == null) {
+            launchHearingAidPairingDialogInternal(fragmentManager, device);
+        }
+    }
+
+    private static void launchHearingAidPairingDialogInternal(FragmentManager fragmentManager,
+            @NonNull CachedBluetoothDevice device) {
+        if (device.getDeviceSide() == HearingAidProfile.DeviceSide.SIDE_INVALID) {
+            Log.w(TAG, "Can not launch hearing aid pairing dialog for invalid side");
+            return;
+        }
+        HearingAidPairingDialogFragment.newInstance(device).show(fragmentManager,
+                HearingAidPairingDialogFragment.TAG);
+    }
+}
diff --git a/src/com/android/settings/applications/AppStateBaseBridge.java b/src/com/android/settings/applications/AppStateBaseBridge.java
index d7f253b..a4bdabf 100644
--- a/src/com/android/settings/applications/AppStateBaseBridge.java
+++ b/src/com/android/settings/applications/AppStateBaseBridge.java
@@ -52,7 +52,6 @@
 
     public void resume(boolean forceLoadAllApps) {
         mForceLoadAllApps = forceLoadAllApps;
-        mHandler.sendEmptyMessage(BackgroundHandler.MSG_LOAD_ALL);
         if (mForceLoadAllApps) {
             mAppSession.onResume();
         } else {
diff --git a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
index ef5b029..d1d286d 100644
--- a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
+++ b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
@@ -85,12 +85,27 @@
         return view;
     }
 
+    static View newHeader(ViewGroup parent, int resText) {
+        ViewGroup view = (ViewGroup) LayoutInflater.from(parent.getContext())
+                .inflate(R.layout.preference_app_header, parent, false);
+        TextView textView = view.findViewById(R.id.apps_top_intro_text);
+        textView.setText(resText);
+        return view;
+    }
+
     void setSummary(CharSequence summary) {
         mSummary.setText(summary);
+        updateSummaryVisibility();
     }
 
     void setSummary(@StringRes int summary) {
         mSummary.setText(summary);
+        updateSummaryVisibility();
+    }
+
+    private void updateSummaryVisibility() {
+        // Hide an empty summary and then title will be vertically centered.
+        mSummary.setVisibility(TextUtils.isEmpty(mSummary.getText()) ? View.GONE : View.VISIBLE);
     }
 
     void setEnabled(boolean isEnabled) {
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index a6abd10..9796454 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -824,14 +824,16 @@
         if (mApplications == null) {
             return;
         }
-        final int position = mRecyclerView.getChildAdapterPosition(view);
+        final int applicationPosition =
+                ApplicationsAdapter.getApplicationPosition(
+                        mListType, mRecyclerView.getChildAdapterPosition(view));
 
-        if (position == RecyclerView.NO_POSITION) {
+        if (applicationPosition == RecyclerView.NO_POSITION) {
             Log.w(TAG, "Cannot find position for child, skipping onClick handling");
             return;
         }
-        if (mApplications.getApplicationCount() > position) {
-            ApplicationsState.AppEntry entry = mApplications.getAppEntry(position);
+        if (mApplications.getApplicationCount() > applicationPosition) {
+            ApplicationsState.AppEntry entry = mApplications.getAppEntry(applicationPosition);
             mCurrentPkgName = entry.info.packageName;
             mCurrentUid = entry.info.uid;
             startApplicationDetailsActivity();
@@ -1058,6 +1060,7 @@
         private static final String STATE_LAST_SCROLL_INDEX = "state_last_scroll_index";
         private static final int VIEW_TYPE_APP = 0;
         private static final int VIEW_TYPE_EXTRA_VIEW = 1;
+        private static final int VIEW_TYPE_APP_HEADER = 2;
 
         private final ApplicationsState mState;
         private final ApplicationsState.Session mSession;
@@ -1229,7 +1232,11 @@
         @Override
         public ApplicationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
             final View view;
-            if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
+            if (mManageApplications.mListType == LIST_TYPE_APPS_LOCALE
+                    && viewType == VIEW_TYPE_APP_HEADER) {
+                view = ApplicationViewHolder.newHeader(parent,
+                        R.string.desc_app_locale_selection_supported);
+            } else if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
                 view = ApplicationViewHolder.newView(parent, true /* twoTarget */);
             } else {
                 view = ApplicationViewHolder.newView(parent, false /* twoTarget */);
@@ -1239,6 +1246,9 @@
 
         @Override
         public int getItemViewType(int position) {
+            if (position == 0 && mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
+                return VIEW_TYPE_APP_HEADER;
+            }
             return VIEW_TYPE_APP;
         }
 
@@ -1470,36 +1480,59 @@
             }
         }
 
+        /**
+         * Item count include all items. If UI has a header on the app list, it shall shift 1 to
+         * application count for the total item count.
+         */
         @Override
         public int getItemCount() {
-            if (mEntries == null) {
-                return 0;
+            int count = getApplicationCount();
+            if (count != 0 && mManageApplications.mListType == LIST_TYPE_APPS_LOCALE) {
+                count++;
             }
-            return mEntries.size();
+            return count;
         }
 
         public int getApplicationCount() {
             return mEntries != null ? mEntries.size() : 0;
         }
 
-        public AppEntry getAppEntry(int position) {
-            return mEntries.get(position);
+        public AppEntry getAppEntry(int applicationPosition) {
+            return mEntries.get(applicationPosition);
         }
 
+        /**
+         * Item Id follows all item on the app list. If UI has a header on the list, it shall
+         * shift 1 to the position for correct app entry.
+         */
         @Override
         public long getItemId(int position) {
-            if (position == mEntries.size()) {
+            int applicationPosition =
+                    getApplicationPosition(mManageApplications.mListType, position);
+            if (applicationPosition == mEntries.size()
+                    || applicationPosition == RecyclerView.NO_POSITION) {
                 return -1;
             }
-            return mEntries.get(position).id;
+            return mEntries.get(applicationPosition).id;
         }
 
+        /**
+         * Check item in the list shall enable or disable.
+         * @param position The item position in the list
+         */
         public boolean isEnabled(int position) {
-            if (getItemViewType(position) == VIEW_TYPE_EXTRA_VIEW
+            int itemViewType = getItemViewType(position);
+            if (itemViewType == VIEW_TYPE_EXTRA_VIEW || itemViewType == VIEW_TYPE_APP_HEADER
                     || mManageApplications.mListType != LIST_TYPE_HIGH_POWER) {
                 return true;
             }
-            ApplicationsState.AppEntry entry = mEntries.get(position);
+
+            int applicationPosition =
+                    getApplicationPosition(mManageApplications.mListType, position);
+            if (applicationPosition == RecyclerView.NO_POSITION) {
+                return true;
+            }
+            ApplicationsState.AppEntry entry = mEntries.get(applicationPosition);
 
             return !mBackend.isSysAllowlisted(entry.info.packageName)
                     && !mBackend.isDefaultActiveApp(entry.info.packageName);
@@ -1507,8 +1540,21 @@
 
         @Override
         public void onBindViewHolder(ApplicationViewHolder holder, int position) {
+            if (getItemViewType(position) == VIEW_TYPE_APP_HEADER) {
+                // It does not bind holder here, due to header view.
+                return;
+            }
+
+            int applicationPosition =
+                    getApplicationPosition(mManageApplications.mListType, position);
+            if (applicationPosition == RecyclerView.NO_POSITION) {
+                return;
+            }
             // Bind the data efficiently with the holder
-            final ApplicationsState.AppEntry entry = mEntries.get(position);
+            // If there is a header on the list, the position shall be shifted. Thus, it shall use
+            // #getApplicationPosition to get real application position for the app entry.
+            final ApplicationsState.AppEntry entry = mEntries.get(applicationPosition);
+
             synchronized (entry) {
                 mState.ensureLabelDescription(entry);
                 holder.setTitle(entry.label, entry.labelDescription);
@@ -1608,6 +1654,22 @@
             }
         }
 
+        /**
+         * Adjusts position if this list adds a header.
+         * TODO(b/232533002) Add a header view on adapter of RecyclerView may not a good idea since
+         * ManageApplication is a generic purpose. In the future, here shall look for
+         * a better way to add a header without using recyclerView or any other ways
+         * to achieve the goal.
+         */
+        public static int getApplicationPosition(int listType, int position) {
+            int applicationPosition = position;
+            // Adjust position due to header added.
+            if (listType == LIST_TYPE_APPS_LOCALE) {
+                applicationPosition = position > 0 ? position - 1 : RecyclerView.NO_POSITION;
+            }
+            return applicationPosition;
+        }
+
         public static class OnScrollListener extends RecyclerView.OnScrollListener {
             private int mScrollState = SCROLL_STATE_IDLE;
             private boolean mDelayNotifyDataChange;
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
index 272d142..e3f0f09 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
@@ -186,7 +186,7 @@
             String address, PreferenceCategory container) {
         // If the device is FastPair, remove CDM companion apps.
         final BluetoothFeatureProvider bluetoothFeatureProvider = FeatureFactory.getFactory(context)
-                .getBluetoothFeatureProvider(context);
+                .getBluetoothFeatureProvider();
         final boolean sliceEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
                 SettingsUIDeviceConfig.BT_SLICE_SETTINGS_ENABLED, true);
         final Uri settingsUri = bluetoothFeatureProvider.getBluetoothDeviceSettingsUri(
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
index 9c7aa58..06a71f0 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
@@ -75,10 +75,8 @@
         if (TextUtils.isEmpty(summaryText)) {
             // If first summary is unavailable, not to show second summary.
             mHeaderController.setSecondSummary((CharSequence)null);
-        } else {
-            // If both the hearing aids are connected, two device status should be shown.
-            mHeaderController.setSecondSummary(mDeviceManager.getSubDeviceSummary(mCachedDevice));
         }
+
         mHeaderController.setLabel(mCachedDevice.getName());
         mHeaderController.setIcon(pair.first);
         mHeaderController.setIconContentDescription(pair.second);
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsController.java
new file mode 100644
index 0000000..bfaea85
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsController.java
@@ -0,0 +1,124 @@
+/*
+ * 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.bluetooth;
+
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.accessibilityservice.AccessibilityShortcutInfo;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.UserHandle;
+import android.view.accessibility.AccessibilityManager;
+
+import androidx.annotation.NonNull;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceScreen;
+
+import com.android.net.module.util.CollectionUtils;
+import com.android.settings.accessibility.RestrictedPreferenceHelper;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * This class adds related tools preference.
+ */
+public class BluetoothDetailsRelatedToolsController extends BluetoothDetailsController{
+    private static final String KEY_RELATED_TOOLS_GROUP = "bluetooth_related_tools";
+    private static final String KEY_LIVE_CAPTION = "live_caption";
+    private static final int ORDINAL = 99;
+
+    private PreferenceCategory mPreferenceCategory;
+
+    public BluetoothDetailsRelatedToolsController(Context context,
+            PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle) {
+        super(context, fragment, device, lifecycle);
+        lifecycle.addObserver(this);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return mCachedDevice.isHearingAidDevice();
+    }
+
+    @Override
+    protected void init(PreferenceScreen screen) {
+        if (!mCachedDevice.isHearingAidDevice()) {
+            return;
+        }
+
+        mPreferenceCategory = screen.findPreference(getPreferenceKey());
+        final Preference liveCaptionPreference = screen.findPreference(KEY_LIVE_CAPTION);
+        if (!liveCaptionPreference.isVisible()) {
+            mPreferenceCategory.removePreference(liveCaptionPreference);
+        }
+
+        final List<ComponentName> relatedToolsList = FeatureFactory.getFactory(
+                mContext).getBluetoothFeatureProvider().getRelatedTools();
+        if (!CollectionUtils.isEmpty(relatedToolsList)) {
+            addAccessibilityInstalledRelatedPreference(relatedToolsList);
+        }
+
+        if (mPreferenceCategory.getPreferenceCount() == 0) {
+            screen.removePreference(mPreferenceCategory);
+        }
+    }
+
+    @Override
+    protected void refresh() {}
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_RELATED_TOOLS_GROUP;
+    }
+
+    private void addAccessibilityInstalledRelatedPreference(
+            @NonNull List<ComponentName> componentNameList) {
+        final AccessibilityManager a11yManager = AccessibilityManager.getInstance(mContext);
+        final RestrictedPreferenceHelper preferenceHelper = new RestrictedPreferenceHelper(
+                mContext);
+
+        final List<AccessibilityServiceInfo> a11yServiceInfoList =
+                a11yManager.getInstalledAccessibilityServiceList().stream()
+                        .filter(info -> componentNameList.contains(info.getComponentName()))
+                        .collect(Collectors.toList());
+        final List<AccessibilityShortcutInfo> a11yShortcutInfoList =
+                a11yManager.getInstalledAccessibilityShortcutListAsUser(mContext,
+                        UserHandle.myUserId()).stream()
+                        .filter(info -> componentNameList.contains(info.getComponentName()))
+                        .collect(Collectors.toList());
+
+        final List<RestrictedPreference> preferences = Stream.of(
+                preferenceHelper.createAccessibilityServicePreferenceList(a11yServiceInfoList),
+                preferenceHelper.createAccessibilityActivityPreferenceList(a11yShortcutInfoList))
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+
+        for (RestrictedPreference preference : preferences) {
+            preference.setOrder(ORDINAL);
+            mPreferenceCategory.addPreference(preference);
+        }
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index 6d443ee..a9ac286 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -22,12 +22,18 @@
 import android.app.settings.SettingsEnums;
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
+import android.net.Uri;
 import android.os.Bundle;
 import android.provider.DeviceConfig;
+import android.text.TextUtils;
 import android.util.Log;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -36,12 +42,14 @@
 import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.slices.BlockingSlicePrefController;
+import com.android.settings.slices.SlicePreferenceController;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import java.util.ArrayList;
+import java.util.IllegalFormatException;
 import java.util.List;
 
 public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment {
@@ -61,6 +69,7 @@
     @VisibleForTesting
     interface TestDataFactory {
         CachedBluetoothDevice getDevice(String deviceAddress);
+
         LocalBluetoothManager getManager(Context context);
     }
 
@@ -120,13 +129,56 @@
         use(LeAudioBluetoothDetailsHeaderController.class).init(mCachedDevice, mManager);
 
         final BluetoothFeatureProvider featureProvider = FeatureFactory.getFactory(
-                context).getBluetoothFeatureProvider(context);
+                context).getBluetoothFeatureProvider();
         final boolean sliceEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
                 SettingsUIDeviceConfig.BT_SLICE_SETTINGS_ENABLED, true);
 
         use(BlockingSlicePrefController.class).setSliceUri(sliceEnabled
                 ? featureProvider.getBluetoothDeviceSettingsUri(mCachedDevice.getDevice())
                 : null);
+        updateExtraControlUri(/* viewWidth */ 0);
+    }
+
+    private void updateExtraControlUri(int viewWidth) {
+        BluetoothFeatureProvider featureProvider = FeatureFactory.getFactory(
+                getContext()).getBluetoothFeatureProvider();
+        boolean sliceEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_SLICE_SETTINGS_ENABLED, true);
+        Uri controlUri = null;
+        String uri = featureProvider.getBluetoothDeviceControlUri(mCachedDevice.getDevice());
+        if (!TextUtils.isEmpty(uri)) {
+            try {
+                controlUri = Uri.parse(String.format(uri, viewWidth));
+            } catch (IllegalFormatException | NullPointerException exception) {
+                Log.d(TAG, "unable to parse uri");
+                controlUri = null;
+            }
+        }
+        use(SlicePreferenceController.class).setSliceUri(sliceEnabled ? controlUri : null);
+    }
+
+    private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener =
+            new ViewTreeObserver.OnGlobalLayoutListener() {
+                @Override
+                public void onGlobalLayout() {
+                    View view = getView();
+                    if (view == null) {
+                        return;
+                    }
+                    updateExtraControlUri(view.getWidth());
+                    view.getViewTreeObserver().removeOnGlobalLayoutListener(
+                            mOnGlobalLayoutListener);
+                }
+            };
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        View view = super.onCreateView(inflater, container, savedInstanceState);
+        if (view != null) {
+            view.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
+        }
+        return view;
     }
 
     @Override
@@ -194,6 +246,8 @@
                     mCachedDevice, lifecycle));
             controllers.add(new BluetoothDetailsMacAddressController(context, this, mCachedDevice,
                     lifecycle));
+            controllers.add(new BluetoothDetailsRelatedToolsController(context, this, mCachedDevice,
+                    lifecycle));
         }
         return controllers;
     }
diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java b/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
index 582a26c..648ca30 100644
--- a/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
+++ b/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
@@ -17,17 +17,37 @@
 package com.android.settings.bluetooth;
 
 import android.bluetooth.BluetoothDevice;
+import android.content.ComponentName;
 import android.net.Uri;
 
+import java.util.List;
+
 /**
- * Provider for bluetooth related feature
+ * Provider for bluetooth related features.
  */
 public interface BluetoothFeatureProvider {
 
     /**
-     * Get the {@link Uri} that represents extra settings for a specific bluetooth device
+     * Gets the {@link Uri} that represents extra settings for a specific bluetooth device
+     *
      * @param bluetoothDevice bluetooth device
      * @return {@link Uri} for extra settings
      */
     Uri getBluetoothDeviceSettingsUri(BluetoothDevice bluetoothDevice);
+
+    /**
+     * Gets the {@link Uri} that represents extra control for a specific bluetooth device
+     *
+     * @param bluetoothDevice bluetooth device
+     * @return {@link String} uri string for extra control
+     */
+    String getBluetoothDeviceControlUri(BluetoothDevice bluetoothDevice);
+
+    /**
+     * Gets the {@link ComponentName} of services or activities that need to be shown in related
+     * tools.
+     *
+     * @return list of {@link ComponentName}
+     */
+    List<ComponentName> getRelatedTools();
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
index cd75951..5ddf062 100644
--- a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
+++ b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
@@ -17,19 +17,20 @@
 package com.android.settings.bluetooth;
 
 import android.bluetooth.BluetoothDevice;
+import android.content.ComponentName;
 import android.content.Context;
 import android.net.Uri;
 
+import com.android.settingslib.bluetooth.BluetoothUtils;
+
+import java.util.List;
+
 /**
  * Impl of {@link BluetoothFeatureProvider}
  */
 public class BluetoothFeatureProviderImpl implements BluetoothFeatureProvider {
 
-    private Context mContext;
-
-    public BluetoothFeatureProviderImpl(Context context) {
-        mContext = context;
-    }
+    public BluetoothFeatureProviderImpl(Context context) {}
 
     @Override
     public Uri getBluetoothDeviceSettingsUri(BluetoothDevice bluetoothDevice) {
@@ -37,4 +38,14 @@
                 BluetoothDevice.METADATA_ENHANCED_SETTINGS_UI_URI);
         return uriByte == null ? null : Uri.parse(new String(uriByte));
     }
+
+    @Override
+    public String getBluetoothDeviceControlUri(BluetoothDevice bluetoothDevice) {
+        return BluetoothUtils.getControlUriMetaData(bluetoothDevice);
+    }
+
+    @Override
+    public List<ComponentName> getRelatedTools() {
+        return null;
+    }
 }
diff --git a/src/com/android/settings/bluetooth/HearingAidPairingDialogFragment.java b/src/com/android/settings/bluetooth/HearingAidPairingDialogFragment.java
new file mode 100644
index 0000000..ac48217
--- /dev/null
+++ b/src/com/android/settings/bluetooth/HearingAidPairingDialogFragment.java
@@ -0,0 +1,88 @@
+/*
+ * 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.bluetooth;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+
+import com.android.settings.R;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+
+/**
+ * Provides a dialog to pair another side of hearing aid device.
+ */
+public class HearingAidPairingDialogFragment extends InstrumentedDialogFragment {
+    public static final String TAG = "HearingAidPairingDialogFragment";
+    private static final String KEY_CACHED_DEVICE_SIDE = "cached_device_side";
+
+    /**
+     * Creates a new {@link HearingAidPairingDialogFragment} and shows pair another side of hearing
+     * aid device according to {@code CachedBluetoothDevice} side.
+     *
+     * @param device The remote Bluetooth device, that needs to be hearing aid device.
+     * @return a DialogFragment
+     */
+    public static HearingAidPairingDialogFragment newInstance(CachedBluetoothDevice device) {
+        Bundle args = new Bundle(1);
+        args.putInt(KEY_CACHED_DEVICE_SIDE, device.getDeviceSide());
+        final HearingAidPairingDialogFragment fragment = new HearingAidPairingDialogFragment();
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        // TODO(b/225117454): Need to update SettingsEnums later
+        return SettingsEnums.ACCESSIBILITY;
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+        final int deviceSide = getArguments().getInt(KEY_CACHED_DEVICE_SIDE);
+        final int titleId = R.string.bluetooth_pair_other_ear_dialog_title;
+        final int messageId = (deviceSide == HearingAidProfile.DeviceSide.SIDE_LEFT)
+                        ? R.string.bluetooth_pair_other_ear_dialog_left_ear_message
+                        : R.string.bluetooth_pair_other_ear_dialog_right_ear_message;
+        final int pairBtnId = (deviceSide == HearingAidProfile.DeviceSide.SIDE_LEFT)
+                        ? R.string.bluetooth_pair_other_ear_dialog_right_ear_positive_button
+                        : R.string.bluetooth_pair_other_ear_dialog_left_ear_positive_button;
+
+        return new AlertDialog.Builder(getActivity())
+                .setTitle(titleId)
+                .setMessage(messageId)
+                .setNegativeButton(
+                        android.R.string.cancel, /* listener= */ null)
+                .setPositiveButton(pairBtnId, (dialog, which) -> positiveButtonListener())
+                .create();
+    }
+
+    private void positiveButtonListener() {
+        new SubSettingLauncher(getActivity())
+                .setDestination(BluetoothPairingDetail.class.getName())
+                .setSourceMetricsCategory(SettingsEnums.ACCESSIBILITY)
+                .launch();
+    }
+}
diff --git a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
index ec122df..6623b97 100644
--- a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
+++ b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
@@ -17,22 +17,26 @@
 
 import static com.android.settingslib.Utils.isAudioModeOngoingCall;
 
+import android.bluetooth.BluetoothProfile;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.FragmentManager;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.accessibility.HearingAidUtils;
 import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -54,6 +58,7 @@
     @VisibleForTesting
     LocalBluetoothManager mLocalBluetoothManager;
     private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
+    private FragmentManager mFragmentManager;
 
     public AvailableMediaDeviceGroupController(Context context) {
         super(context, KEY);
@@ -124,6 +129,7 @@
     }
 
     public void init(DashboardFragment fragment) {
+        mFragmentManager = fragment.getParentFragmentManager();
         mBluetoothDeviceUpdater = new AvailableMediaBluetoothDeviceUpdater(fragment.getContext(),
                 fragment, AvailableMediaDeviceGroupController.this);
     }
@@ -138,6 +144,18 @@
         updateTitle();
     }
 
+    @Override
+    public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
+        // exclude inactive device
+        if (activeDevice == null) {
+            return;
+        }
+
+        if (bluetoothProfile == BluetoothProfile.HEARING_AID) {
+            HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, activeDevice);
+        }
+    }
+
     private void updateTitle() {
         if (isAudioModeOngoingCall(mContext)) {
             // in phone call
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 2ae2057..08692dd 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -422,6 +422,11 @@
     private void setPreferenceIcon(Preference preference, Tile tile, boolean forceRoundedIcon,
             String iconPackage, Icon icon) {
         Drawable iconDrawable = icon.loadDrawable(preference.getContext());
+        if (iconDrawable == null) {
+            Log.w(TAG, "Set null preference icon for: " + iconPackage);
+            preference.setIcon(null);
+            return;
+        }
         if (TextUtils.equals(tile.getCategory(), CategoryKey.CATEGORY_HOMEPAGE)) {
             iconDrawable.setTint(Utils.getHomepageIconColor(preference.getContext()));
         } else if (forceRoundedIcon && !TextUtils.equals(mContext.getPackageName(), iconPackage)) {
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 86b123b..c7bd3b5 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -89,7 +89,6 @@
 
     private TopLevelSettings mMainFragment;
     private View mHomepageView;
-    private View mAppBar;
     private View mSuggestionView;
     private View mTwoPaneSuggestionView;
     private CategoryMixin mCategoryMixin;
@@ -174,8 +173,7 @@
         mSplitController = SplitController.getInstance();
         mIsTwoPane = mSplitController.isActivityEmbedded(this);
 
-        mAppBar = findViewById(R.id.app_bar_container);
-        mAppBar.setMinimumHeight(getSearchBoxHeight());
+        updateAppBarMinHeight();
         initHomepageContainer();
         updateHomepageAppBar();
         updateHomepageBackground();
@@ -491,12 +489,15 @@
         if (!mIsEmbeddingActivityEnabled) {
             return;
         }
+        updateAppBarMinHeight();
         if (mIsTwoPane) {
             findViewById(R.id.homepage_app_bar_regular_phone_view).setVisibility(View.GONE);
             findViewById(R.id.homepage_app_bar_two_pane_view).setVisibility(View.VISIBLE);
+            findViewById(R.id.suggestion_container_two_pane).setVisibility(View.VISIBLE);
         } else {
             findViewById(R.id.homepage_app_bar_regular_phone_view).setVisibility(View.VISIBLE);
             findViewById(R.id.homepage_app_bar_two_pane_view).setVisibility(View.GONE);
+            findViewById(R.id.suggestion_container_two_pane).setVisibility(View.GONE);
         }
     }
 
@@ -507,19 +508,20 @@
         if (mIsTwoPane) {
             int padding = getResources().getDimensionPixelSize(
                     R.dimen.homepage_padding_horizontal_two_pane);
-            mAppBar.setPaddingRelative(padding, 0, padding, 0);
             mMainFragment.setPaddingHorizontal(padding);
         } else {
-            mAppBar.setPaddingRelative(0, 0, 0, 0);
             mMainFragment.setPaddingHorizontal(0);
         }
         mMainFragment.updatePreferencePadding(mIsTwoPane);
     }
 
-    private int getSearchBoxHeight() {
+    private void updateAppBarMinHeight() {
         final int searchBarHeight = getResources().getDimensionPixelSize(R.dimen.search_bar_height);
-        final int searchBarMargin = getResources().getDimensionPixelSize(R.dimen.search_bar_margin);
-        return searchBarHeight + searchBarMargin * 2;
+        final int margin = getResources().getDimensionPixelSize(
+                mIsEmbeddingActivityEnabled && mIsTwoPane
+                        ? R.dimen.homepage_app_bar_padding_two_pane
+                        : R.dimen.search_bar_margin);
+        findViewById(R.id.app_bar_container).setMinimumHeight(searchBarHeight + margin * 2);
     }
 
     private static class SuggestionFragCreator implements FragmentCreator {
diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
index 4216d87..61682d0 100644
--- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
@@ -95,6 +95,7 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mCategoryRecentLocationRequests = screen.findPreference(getPreferenceKey());
+        mLocationEnabler.refreshLocationMode();
         loadRecentAccesses();
     }
 
diff --git a/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
index 68cde63..2f1232b 100644
--- a/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessSeeAllButtonPreferenceController.java
@@ -39,6 +39,7 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPreference = screen.findPreference(getPreferenceKey());
+        mLocationEnabler.refreshLocationMode();
     }
 
     @Override
diff --git a/src/com/android/settings/notification/SpatialAudioSettings.java b/src/com/android/settings/notification/SpatialAudioSettings.java
index 001c617..3bdb524 100644
--- a/src/com/android/settings/notification/SpatialAudioSettings.java
+++ b/src/com/android/settings/notification/SpatialAudioSettings.java
@@ -17,11 +17,15 @@
 package com.android.settings.notification;
 
 import android.app.settings.SettingsEnums;
+import android.content.Intent;
+import android.os.Bundle;
+import android.provider.Settings;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.FooterPreference;
 
 /**
  * Spatial audio settings located in the sound menu
@@ -30,6 +34,20 @@
 public class SpatialAudioSettings extends DashboardFragment {
 
     private static final String TAG = "SpatialAudioSettings";
+    private static final String KEY_FOOTER = "spatial_audio_footer";
+
+    @Override
+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        super.onCreatePreferences(savedInstanceState, rootKey);
+
+        FooterPreference footerPreference = findPreference(KEY_FOOTER);
+        if (footerPreference != null) {
+            footerPreference.setLearnMoreText(
+                    getString(R.string.spatial_audio_footer_learn_more_text));
+            footerPreference.setLearnMoreAction(
+                    view -> startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)));
+        }
+    }
 
     @Override
     public int getMetricsCategory() {
diff --git a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java
index 166ee5d..1a703eb 100644
--- a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java
+++ b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java
@@ -98,9 +98,7 @@
             boolean isSnoozed, UiEventLogger uiEventLogger) {
         Intent appIntent = itemView.getContext().getPackageManager()
                 .getLaunchIntentForPackage(pkg);
-        boolean isPendingIntentValid = pi != null && PendingIntent.getActivity(
-                itemView.getContext(), 0, pi.getIntent(),
-                PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_NO_CREATE) != null;
+        boolean isPendingIntentValid = pi != null && pi.isActivity();
         if (isPendingIntentValid || appIntent != null) {
             itemView.setOnClickListener(v -> {
                 uiEventLogger.logWithInstanceIdAndPosition(
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 8b78882..aff7197 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -148,7 +148,10 @@
 
     public abstract ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context);
 
-    public abstract BluetoothFeatureProvider getBluetoothFeatureProvider(Context context);
+    /**
+     * Retrieves implementation for Bluetooth feature.
+     */
+    public abstract BluetoothFeatureProvider getBluetoothFeatureProvider();
 
     public abstract AwareFeatureProvider getAwareFeatureProvider();
 
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 4d8dad0..89f74de 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -280,10 +280,9 @@
     }
 
     @Override
-    public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) {
+    public BluetoothFeatureProvider getBluetoothFeatureProvider() {
         if (mBluetoothFeatureProvider == null) {
-            mBluetoothFeatureProvider = new BluetoothFeatureProviderImpl(
-                    context.getApplicationContext());
+            mBluetoothFeatureProvider = new BluetoothFeatureProviderImpl(getAppContext());
         }
         return mBluetoothFeatureProvider;
     }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
index a455648..affb28b 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
@@ -18,9 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -34,12 +33,16 @@
 import android.content.BroadcastReceiver;
 import android.content.Intent;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.bluetooth.Utils;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
 import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
+import com.android.settingslib.bluetooth.BluetoothEventManager;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.HearingAidProfile;
@@ -48,7 +51,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -62,8 +64,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+/** Tests for {@link AccessibilityHearingAidPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 @Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class})
 public class AccessibilityHearingAidPreferenceControllerTest {
     private static final String TEST_DEVICE_ADDRESS = "00:A1:A1:A1:A1:A1";
@@ -82,10 +84,14 @@
     @Mock
     private CachedBluetoothDevice mCachedBluetoothDevice;
     @Mock
+    private CachedBluetoothDevice mCachedSubBluetoothDevice;
+    @Mock
     private CachedBluetoothDeviceManager mCachedDeviceManager;
     @Mock
     private LocalBluetoothManager mLocalBluetoothManager;
     @Mock
+    private BluetoothEventManager mEventManager;
+    @Mock
     private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
     @Mock
     private HearingAidProfile mHearingAidProfile;
@@ -111,18 +117,54 @@
     }
 
     @Test
-    public void onHearingAidStateChanged_connected_updateHearingAidSummary() {
+    public void getSummary_connectedHearingAidRightSide_connectedRightSideSummary() {
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_RIGHT);
         when(mHearingAidProfile.getConnectedDevices()).thenReturn(generateHearingAidDeviceList());
         mPreferenceController.onStart();
         Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
         intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_CONNECTED);
         sendIntent(intent);
 
-        assertThat(mHearingAidPreference.getSummary()).isEqualTo(TEST_DEVICE_NAME);
+        assertThat(mHearingAidPreference.getSummary().toString().contentEquals(
+                "TEST_HEARING_AID_BT_DEVICE_NAME, right only")).isTrue();
     }
 
     @Test
-    public void onHearingAidStateChanged_disconnected_updateHearingAidSummary() {
+    public void getSummary_connectedHearingAidBothSide_connectedBothSideSummary() {
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_LEFT);
+        when(mCachedSubBluetoothDevice.isConnected()).thenReturn(true);
+        when(mCachedBluetoothDevice.getSubDevice()).thenReturn(mCachedSubBluetoothDevice);
+        when(mHearingAidProfile.getConnectedDevices()).thenReturn(generateHearingAidDeviceList());
+        mPreferenceController.onStart();
+        Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
+        intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_CONNECTED);
+        sendIntent(intent);
+
+        assertThat(mHearingAidPreference.getSummary().toString().contentEquals(
+                "TEST_HEARING_AID_BT_DEVICE_NAME, left and right")).isTrue();
+    }
+
+    @Test
+    public void getSummary_connectedMultipleHearingAids_connectedBothSideSummary() {
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_LEFT);
+        when(mCachedSubBluetoothDevice.isConnected()).thenReturn(true);
+        when(mCachedBluetoothDevice.getSubDevice()).thenReturn(mCachedSubBluetoothDevice);
+        when(mHearingAidProfile.getConnectedDevices()).thenReturn(
+                generateMultipleHearingAidDeviceList());
+        mPreferenceController.onStart();
+        Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
+        intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_CONNECTED);
+        sendIntent(intent);
+
+        assertThat(mHearingAidPreference.getSummary().toString().contentEquals(
+                "TEST_HEARING_AID_BT_DEVICE_NAME +1 more")).isTrue();
+    }
+
+    @Test
+    public void getSummary_disconnectedHearingAid_disconnectedSummary() {
         mPreferenceController.onStart();
         Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
         intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_DISCONNECTED);
@@ -133,7 +175,7 @@
     }
 
     @Test
-    public void onBluetoothStateChanged_bluetoothOff_updateHearingAidSummary() {
+    public void getSummary_bluetoothOff_disconnectedSummary() {
         mPreferenceController.onStart();
         Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
         intent.putExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF);
@@ -168,19 +210,14 @@
     }
 
     @Test
-    public void onNotSupportHearingAidProfile_doNotDoReceiverOperation() {
+    public void onNotSupportHearingAidProfile_isNotAvailable() {
         //clear bluetooth supported profile
         mShadowBluetoothAdapter.clearSupportedProfiles();
         mPreferenceController = new AccessibilityHearingAidPreferenceController(mContext,
                 HEARING_AID_PREFERENCE);
         mPreferenceController.setPreference(mHearingAidPreference);
-        //not call registerReceiver()
-        mPreferenceController.onStart();
-        verify(mContext, never()).registerReceiver(any(), any());
 
-        //not call unregisterReceiver()
-        mPreferenceController.onStop();
-        verify(mContext, never()).unregisterReceiver(any());
+        assertThat(mPreferenceController.isAvailable()).isFalse();
     }
 
     @Test
@@ -192,6 +229,24 @@
         assertThat(mPreferenceController.getConnectedHearingAidDevice()).isNull();
     }
 
+    @Test
+    @Config(shadows = ShadowAlertDialogCompat.class)
+    public void onActiveDeviceChanged_hearingAidProfile_launchHearingAidPairingDialog() {
+        final FragmentActivity mActivity = Robolectric.setupActivity(FragmentActivity.class);
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_BINAURAL);
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_LEFT);
+        mPreferenceController.setFragmentManager(mActivity.getSupportFragmentManager());
+
+        mPreferenceController.onActiveDeviceChanged(mCachedBluetoothDevice,
+                BluetoothProfile.HEARING_AID);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog.isShowing()).isTrue();
+    }
+
     private void setupBluetoothEnvironment() {
         ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
         mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
@@ -200,6 +255,7 @@
         when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
         when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
         when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile);
+        doReturn(mEventManager).when(mLocalBluetoothManager).getEventManager();
     }
 
     private void setupHearingAidEnvironment() {
@@ -210,7 +266,6 @@
         mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
         when(mCachedDeviceManager.findDevice(mBluetoothDevice)).thenReturn(mCachedBluetoothDevice);
         when(mCachedBluetoothDevice.getName()).thenReturn(TEST_DEVICE_NAME);
-        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
     }
 
     private void sendIntent(Intent intent) {
@@ -224,4 +279,11 @@
         deviceList.add(mBluetoothDevice);
         return deviceList;
     }
+
+    private List<BluetoothDevice> generateMultipleHearingAidDeviceList() {
+        final List<BluetoothDevice> deviceList = new ArrayList<>(2);
+        deviceList.add(mBluetoothDevice);
+        deviceList.add(mBluetoothDevice);
+        return deviceList;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 7c52754..891439e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -58,6 +58,7 @@
 import com.android.settings.testutils.shadow.ShadowFragment;
 import com.android.settings.testutils.shadow.ShadowUserManager;
 import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.search.SearchIndexableRaw;
 
 import org.junit.Before;
@@ -93,6 +94,7 @@
     private static final String DEFAULT_LABEL = "default label";
     private static final Boolean SERVICE_ENABLED = true;
     private static final Boolean SERVICE_DISABLED = false;
+
     @Rule
     public final MockitoRule mocks = MockitoJUnit.rule();
     @Spy
@@ -114,6 +116,8 @@
     @Mock
     private AppOpsManager mAppOpsManager;
 
+    private Lifecycle mLifecycle;
+
     @Before
     public void setup() {
         mShadowAccessibilityManager = Shadow.extract(AccessibilityManager.getInstance(mContext));
@@ -127,6 +131,8 @@
         when(mContext.getSystemService(AppOpsManager.class)).thenReturn(mAppOpsManager);
         when(mAppOpsManager.noteOpNoThrow(eq(AppOpsManager.OP_ACCESS_RESTRICTED_SETTINGS),
                 anyInt(), anyString())).thenReturn(AppOpsManager.MODE_ALLOWED);
+        mLifecycle = new Lifecycle(() -> mLifecycle);
+        when(mFragment.getSettingsLifecycle()).thenReturn(mLifecycle);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java
new file mode 100644
index 0000000..5c440d2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.bluetooth.BluetoothPairingDetail;
+import com.android.settings.bluetooth.HearingAidPairingDialogFragment;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/** Tests for {@link HearingAidPairingDialogFragment}. */
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowAlertDialogCompat.class)
+public class HearingAidPairingDialogFragmentTest {
+
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+
+    private static final String KEY_CACHED_DEVICE_SIDE = "cached_device_side";
+
+    @Mock
+    private CachedBluetoothDevice mCachedBluetoothDevice;
+    private FragmentActivity mActivity;
+    private HearingAidPairingDialogFragment mFragment;
+
+    @Before
+    public void setUp() {
+        mFragment = spy(HearingAidPairingDialogFragment.newInstance(mCachedBluetoothDevice));
+        mActivity = Robolectric.setupActivity(FragmentActivity.class);
+        when(mFragment.getActivity()).thenReturn(mActivity);
+    }
+
+    @Test
+    public void newInstance_deviceSideRight_argumentSideRight() {
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_RIGHT);
+
+        mFragment = HearingAidPairingDialogFragment.newInstance(mCachedBluetoothDevice);
+
+        final Bundle bundle = mFragment.getArguments();
+        assertThat(bundle.getInt(KEY_CACHED_DEVICE_SIDE)).isEqualTo(
+                HearingAidProfile.DeviceSide.SIDE_RIGHT);
+    }
+
+    @Test
+    public void dialogPositiveButtonClick_intentToExpectedClass() {
+        final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog(Bundle.EMPTY);
+        dialog.show();
+
+        dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+
+        final Intent intent = shadowOf(mActivity).getNextStartedActivity();
+        assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
+                .isEqualTo(BluetoothPairingDetail.class.getName());
+    }
+
+    @Test
+    public void dialogNegativeButtonClick_dismissDialog() {
+        final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog(Bundle.EMPTY);
+        dialog.show();
+
+        dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
+
+        assertThat(dialog.isShowing()).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
new file mode 100644
index 0000000..6918fb6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+/** Tests for {@link HearingAidUtils}. */
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowAlertDialogCompat.class)
+public class HearingAidUtilsTest {
+
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+
+    @Mock
+    private CachedBluetoothDevice mCachedBluetoothDevice;
+    @Mock
+    private CachedBluetoothDevice mSubCachedBluetoothDevice;
+
+    private FragmentManager mFragmentManager;
+
+    @Before
+    public void setUp() {
+        final FragmentActivity mActivity = Robolectric.setupActivity(FragmentActivity.class);
+        mFragmentManager = mActivity.getSupportFragmentManager();
+    }
+
+    @After
+    public void tearDown() {
+        ShadowAlertDialogCompat.reset();
+    }
+    @Test
+    public void launchHearingAidPairingDialog_deviceNotConnectedHearingAid_noDialog() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(false);
+
+        HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog).isNull();
+    }
+
+    @Test
+    public void launchHearingAidPairingDialog_deviceIsModeMonaural_noDialog() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_MONAURAL);
+
+        HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog).isNull();
+    }
+
+    @Test
+    public void launchHearingAidPairingDialog_deviceHasSubDevice_noDialog() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_BINAURAL);
+        when(mCachedBluetoothDevice.getSubDevice()).thenReturn(mSubCachedBluetoothDevice);
+
+        HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog).isNull();
+    }
+
+    @Test
+    public void launchHearingAidPairingDialog_deviceIsInvalidSide_noDialog() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_BINAURAL);
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_INVALID);
+
+        HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog).isNull();
+    }
+
+    @Test
+    public void launchHearingAidPairingDialog_dialogShown() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_BINAURAL);
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_LEFT);
+
+        HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog.isShowing()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsControllerTest.java
new file mode 100644
index 0000000..31d6397
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsRelatedToolsControllerTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.bluetooth;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.view.accessibility.AccessibilityManager;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowAccessibilityManager;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+
+/** Tests for {@link BluetoothDetailsRelatedToolsController}. */
+@RunWith(RobolectricTestRunner.class)
+public class BluetoothDetailsRelatedToolsControllerTest extends BluetoothDetailsControllerTestBase {
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+
+    private static final String PACKAGE_NAME = "com.android.test";
+    private static final String PACKAGE_NAME2 = "com.android.test2";
+    private static final String CLASS_NAME = PACKAGE_NAME + ".test_a11y_service";
+    private static final String KEY_RELATED_TOOLS_GROUP = "bluetooth_related_tools";
+    private static final String KEY_LIVE_CAPTION = "live_caption";
+
+
+    private BluetoothDetailsRelatedToolsController mController;
+    private BluetoothFeatureProvider mFeatureProvider;
+    private ShadowAccessibilityManager mShadowAccessibilityManager;
+    private PreferenceCategory mPreferenceCategory;
+
+    @Override
+    public void setUp() {
+        super.setUp();
+        final FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest();
+        mFeatureProvider = fakeFeatureFactory.getBluetoothFeatureProvider();
+        mShadowAccessibilityManager = Shadow.extract(AccessibilityManager.getInstance(mContext));
+        final Preference preference = new Preference(mContext);
+        preference.setKey(KEY_LIVE_CAPTION);
+        mPreferenceCategory = new PreferenceCategory(mContext);
+        mPreferenceCategory.setKey(KEY_RELATED_TOOLS_GROUP);
+        mScreen.addPreference(mPreferenceCategory);
+        mScreen.addPreference(preference);
+
+        mController = new BluetoothDetailsRelatedToolsController(mContext, mFragment, mCachedDevice,
+                mLifecycle);
+        mController.init(mScreen);
+    }
+
+    @Test
+    public void isAvailable_isHearingAidDevice_available() {
+        when(mCachedDevice.isHearingAidDevice()).thenReturn(true);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_notHearingAidDevice_notAvailable() {
+        when(mCachedDevice.isHearingAidDevice()).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_oneRelatedToolsMatchA11yService_showOnePreference() {
+        when(mCachedDevice.isHearingAidDevice()).thenReturn(true);
+        mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
+                List.of(getMockAccessibilityServiceInfo(PACKAGE_NAME, CLASS_NAME)));
+        when(mFeatureProvider.getRelatedTools()).thenReturn(
+                List.of(new ComponentName(PACKAGE_NAME, CLASS_NAME)));
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void displayPreference_oneRelatedToolsNotMatchA11yService_showNoPreference() {
+        when(mCachedDevice.isHearingAidDevice()).thenReturn(true);
+        mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
+                List.of(getMockAccessibilityServiceInfo(PACKAGE_NAME, CLASS_NAME)));
+        when(mFeatureProvider.getRelatedTools()).thenReturn(
+                List.of(new ComponentName(PACKAGE_NAME2, CLASS_NAME)));
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void displayPreference_noRelatedTools_showNoPreference() {
+        when(mCachedDevice.isHearingAidDevice()).thenReturn(true);
+        mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
+                List.of(getMockAccessibilityServiceInfo(PACKAGE_NAME, CLASS_NAME)));
+        when(mFeatureProvider.getRelatedTools()).thenReturn(null);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0);
+    }
+
+    private AccessibilityServiceInfo getMockAccessibilityServiceInfo(String packageName,
+            String className) {
+        final ApplicationInfo applicationInfo = new ApplicationInfo();
+        final ServiceInfo serviceInfo = new ServiceInfo();
+        applicationInfo.packageName = packageName;
+        serviceInfo.packageName = packageName;
+        serviceInfo.name = className;
+        serviceInfo.applicationInfo = applicationInfo;
+
+        final ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.serviceInfo = serviceInfo;
+
+        try {
+            final AccessibilityServiceInfo info = new AccessibilityServiceInfo(resolveInfo,
+                    mContext);
+            ComponentName componentName = ComponentName.unflattenFromString(
+                    packageName + "/" + className);
+            info.setComponentName(componentName);
+            return info;
+        } catch (XmlPullParserException | IOException e) {
+            // Do nothing
+        }
+
+        return null;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFeatureProviderImplTest.java
index 9ab1d87..3d40bfc 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFeatureProviderImplTest.java
@@ -33,6 +33,11 @@
 @RunWith(RobolectricTestRunner.class)
 public class BluetoothFeatureProviderImplTest {
     private static final String SETTINGS_URI = "content://test.provider/settings_uri";
+    private static final String CONTROL_METADATA =
+            "<HEARABLE_CONTROL_SLICE_WITH_WIDTH>" + SETTINGS_URI
+                    + "</HEARABLE_CONTROL_SLICE_WITH_WIDTH>";
+    private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25;
+
     private BluetoothFeatureProvider mBluetoothFeatureProvider;
 
     @Mock
@@ -54,4 +59,13 @@
         final Uri uri = mBluetoothFeatureProvider.getBluetoothDeviceSettingsUri(mBluetoothDevice);
         assertThat(uri.toString()).isEqualTo(SETTINGS_URI);
     }
+
+    @Test
+    public void getBluetoothDeviceControlUri_returnsCorrectUri() {
+        when(mBluetoothDevice.getMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS)).thenReturn(
+                CONTROL_METADATA.getBytes());
+        assertThat(
+                mBluetoothFeatureProvider.getBluetoothDeviceControlUri(mBluetoothDevice)).isEqualTo(
+                SETTINGS_URI);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
index da1c493..e1a3da6 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
@@ -27,10 +27,13 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.bluetooth.BluetoothProfile;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.media.AudioManager;
 
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceManager;
@@ -40,25 +43,31 @@
 import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowAudioManager;
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
 import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
 import com.android.settingslib.bluetooth.BluetoothCallback;
 import com.android.settingslib.bluetooth.BluetoothEventManager;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+/** Tests for {@link AvailableMediaDeviceGroupController}. */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowAudioManager.class, ShadowBluetoothUtils.class})
+@Config(shadows = {ShadowAudioManager.class, ShadowBluetoothAdapter.class,
+        ShadowBluetoothUtils.class})
 public class AvailableMediaDeviceGroupControllerTest {
 
     private static final String PREFERENCE_KEY_1 = "pref_key_1";
@@ -77,6 +86,8 @@
     private BluetoothEventManager mEventManager;
     @Mock
     private LocalBluetoothManager mLocalManager;
+    @Mock
+    private CachedBluetoothDevice mCachedBluetoothDevice;
 
     private PreferenceGroup mPreferenceGroup;
     private Context mContext;
@@ -93,27 +104,26 @@
         mPreference = new Preference(mContext);
         mPreference.setKey(PREFERENCE_KEY_1);
         mPreferenceGroup = spy(new PreferenceScreen(mContext, null));
+        final FragmentActivity mActivity = Robolectric.setupActivity(FragmentActivity.class);
         when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager);
         doReturn(mContext).when(mDashboardFragment).getContext();
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
+        when(mDashboardFragment.getParentFragmentManager()).thenReturn(
+                mActivity.getSupportFragmentManager());
 
         ShadowBluetoothUtils.sLocalBluetoothManager = mLocalManager;
         mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
         mAudioManager = mContext.getSystemService(AudioManager.class);
         doReturn(mEventManager).when(mLocalBluetoothManager).getEventManager();
 
-        mAvailableMediaDeviceGroupController = new AvailableMediaDeviceGroupController(mContext);
+        mAvailableMediaDeviceGroupController = spy(
+                new AvailableMediaDeviceGroupController(mContext));
         mAvailableMediaDeviceGroupController.
                 setBluetoothDeviceUpdater(mAvailableMediaBluetoothDeviceUpdater);
         mAvailableMediaDeviceGroupController.mPreferenceGroup = mPreferenceGroup;
     }
 
-    @After
-    public void tearDown() {
-        ShadowBluetoothUtils.reset();
-    }
-
     @Test
     public void onDeviceAdded_firstAdd_becomeVisibleAndPreferenceAdded() {
         mAvailableMediaDeviceGroupController.onDeviceAdded(mPreference);
@@ -222,4 +232,21 @@
         // Shouldn't crash
         mAvailableMediaDeviceGroupController.onStop();
     }
+
+    @Test
+    @Config(shadows = ShadowAlertDialogCompat.class)
+    public void onActiveDeviceChanged_hearingAidProfile_launchHearingAidPairingDialog() {
+        when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(true);
+        when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+                HearingAidProfile.DeviceMode.MODE_BINAURAL);
+        when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+                HearingAidProfile.DeviceSide.SIDE_LEFT);
+        mAvailableMediaDeviceGroupController.init(mDashboardFragment);
+
+        mAvailableMediaDeviceGroupController.onActiveDeviceChanged(mCachedBluetoothDevice,
+                BluetoothProfile.HEARING_AID);
+
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        assertThat(dialog.isShowing()).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index d430232..518aee9 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -239,7 +239,7 @@
     }
 
     @Override
-    public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) {
+    public BluetoothFeatureProvider getBluetoothFeatureProvider() {
         return mBluetoothFeatureProvider;
     }
 
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index e9764cb..717de79 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -225,7 +225,7 @@
     }
 
     @Override
-    public BluetoothFeatureProvider getBluetoothFeatureProvider(Context context) {
+    public BluetoothFeatureProvider getBluetoothFeatureProvider() {
         return mBluetoothFeatureProvider;
     }