Merge "Adjust layout for Slice InputRange" into rvc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dc220f2..ef38240 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -123,7 +123,8 @@
                   android:label="@string/settings_label_launcher"
                   android:theme="@style/Theme.Settings.Home"
                   android:taskAffinity="com.android.settings.root"
-                  android:launchMode="singleTask">
+                  android:launchMode="singleTask"
+                  android:configChanges="keyboard|keyboardHidden">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/layout/accessibility_edit_shortcut_magnification.xml b/res/layout/accessibility_edit_shortcut_magnification.xml
index afb1ec8..0253edf 100644
--- a/res/layout/accessibility_edit_shortcut_magnification.xml
+++ b/res/layout/accessibility_edit_shortcut_magnification.xml
@@ -44,19 +44,21 @@
             android:id="@+id/advanced_shortcut"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:minHeight="?android:attr/listPreferredItemHeightSmall"
             android:orientation="horizontal">
 
             <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:scaleType="fitCenter"
+                android:layout_gravity="center"
+                android:contentDescription="@null"
+                android:scaleType="centerCrop"
                 android:src="@drawable/ic_keyboard_arrow_down" />
 
             <TextView
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:gravity="center_vertical"
-                android:minHeight="?android:attr/listPreferredItemHeightSmall"
                 android:paddingStart="12dp"
                 android:text="@string/accessibility_shortcut_edit_dialog_title_advance"
                 android:textAppearance="?android:attr/textAppearanceListItem"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index cff89db..d2904a4 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Groep"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 toestel gekies"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> toestelle gekies"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Skakel tans oor …"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Antwoord oproep op"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Hierdie toegangspuntnaam kan nie verander word nie."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Verbeter tablet se batterylewe"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index f3293ec..18a8804 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -247,7 +247,7 @@
     <string name="roaming" msgid="3055365654530847985">"التجوال"</string>
     <string name="roaming_enable" msgid="7845716016861535340">"الاتصال بخدمات البيانات عند التجوال"</string>
     <string name="roaming_disable" msgid="729512894708689604">"الاتصال بخدمات البيانات عند التجوال"</string>
-    <string name="roaming_reenable_message" msgid="5150423860521673540">"لقد فقدت اتصال البيانات نظرًا لأنك أوقفت تشغيل تجوال البيانات بشبكتك الرئيسية."</string>
+    <string name="roaming_reenable_message" msgid="5150423860521673540">"لقد فقدت اتصال البيانات نظرًا لأنك أوقفت تفعيل تجوال البيانات بشبكتك الرئيسية."</string>
     <string name="roaming_turn_it_on_button" msgid="6999283810847157816">"تشغيل"</string>
     <string name="roaming_warning" msgid="7703647889040229013">"قد تسري رسوم تجوال."</string>
     <string name="roaming_warning_multiuser" product="tablet" msgid="5629953315019604726">"عند السماح بتجوال البيانات، قد تسري رسوم تجوال.\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي."</string>
@@ -872,8 +872,8 @@
     <string name="wifi_in_airplane_mode" msgid="1235412508135267981">"في وضع الطائرة"</string>
     <string name="wifi_notify_open_networks" msgid="3040435584744232163">"الإشعار بوجود شبكات مفتوحة"</string>
     <string name="wifi_notify_open_networks_summary" msgid="191058832201741013">"الإشعار عند توفر شبكة عامة عالية الجودة"</string>
-    <string name="wifi_wakeup" msgid="3834327315861781611">"‏تشغيل اتّصال Wi‑Fi تلقائيًا"</string>
-    <string name="wifi_wakeup_summary" msgid="5778059083790221465">"‏إعادة تشغيل اتّصال Wi‑Fi بالقرب من الشبكات المحفوظة العالية الجودة، مثل الشبكة المنزلية"</string>
+    <string name="wifi_wakeup" msgid="3834327315861781611">"‏تفعيل اتّصال Wi‑Fi تلقائيًا"</string>
+    <string name="wifi_wakeup_summary" msgid="5778059083790221465">"‏إعادة تفعيل اتّصال Wi‑Fi بالقرب من الشبكات المحفوظة العالية الجودة، مثل الشبكة المنزلية"</string>
     <string name="wifi_wakeup_summary_no_location" msgid="681323616606485096">"غير متاحة نظرًا لإيقاف خدمة الموقع. فعِّل خدمة "<annotation id="link">"الموقع"</annotation>"."</string>
     <string name="wifi_wakeup_summary_scanning_disabled" msgid="1771489741850119751">"‏غير متاح لأن ميزة \"البحث عن شبكات Wi‑Fi\" غير مفعّلة"</string>
     <string name="wifi_wakeup_summary_scoring_disabled" msgid="3615120120960539780">"لاستخدام الميزة، اختر مقدِّم خدمة تقييم شبكة"</string>
@@ -901,7 +901,7 @@
     <string name="wifi_add_network" msgid="4178564862173751181">"إضافة شبكة"</string>
     <string name="wifi_configure_settings_preference_title" msgid="2536725796700696566">"‏إعدادات Wi-Fi"</string>
     <string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="7822368955551467382">"‏ستتم إعادة تفعيل شبكة Wi‑Fi تلقائيًا"</string>
-    <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="5710203586018223864">"‏لن تتم إعادة تشغيل اتّصال Wi‑Fi تلقائيًا"</string>
+    <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="5710203586018223864">"‏لن تتم إعادة تفعيل اتّصال Wi‑Fi تلقائيًا"</string>
     <string name="wifi_access_points" msgid="5846755709207101844">"‏شبكات Wi-Fi"</string>
     <string name="wifi_menu_more_options" msgid="1236651929987819716">"مزيد من الخيارات"</string>
     <string name="wifi_menu_p2p" msgid="5234165837732940385">"‏اتصال Wi-Fi مباشر"</string>
@@ -1689,7 +1689,7 @@
     <string name="master_clear_desc_also_erases_esim" msgid="6418163562288667727">"‏"<li>"شرائح eSIM"</li></string>
     <string name="master_clear_desc_no_cancel_mobile_plan" msgid="3112614935795369143">\n\n"لن يؤدي هذا إلى إلغاء خطة خدمة الجوّال."</string>
     <string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="7088655731755912201">"‏\n\nلمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب محو "<b>"وحدة تخزين USB"</b>"."</string>
-    <string name="master_clear_desc_erase_external_storage" product="default" msgid="4145566517710675883">"‏\n\nلمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب مسح "<b>"بطاقة SD"</b>"."</string>
+    <string name="master_clear_desc_erase_external_storage" product="default" msgid="4145566517710675883">"‏\n\nلمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب محو "<b>"بطاقة SD"</b>"."</string>
     <string name="erase_external_storage" product="nosdcard" msgid="2182181846128639635">"‏محو وحدة تخزين USB"</string>
     <string name="erase_external_storage" product="default" msgid="2610056855012660451">"‏محو بطاقة SD"</string>
     <string name="erase_external_storage_description" product="nosdcard" msgid="6358699244894944843">"‏محو جميع البيانات على وحدة تخزين USB الداخلية، مثل الموسيقى أو الصور"</string>
@@ -1953,7 +1953,7 @@
     <string name="install_text" msgid="4558333621516996473">"تثبيت"</string>
     <string name="disable_text" msgid="5146002260857428005">"إيقاف"</string>
     <string name="enable_text" msgid="8570798764647110430">"تفعيل"</string>
-    <string name="clear_user_data_text" msgid="6773186434260397947">"مسح مساحة التخزين"</string>
+    <string name="clear_user_data_text" msgid="6773186434260397947">"محو مساحة التخزين"</string>
     <string name="app_factory_reset" msgid="8974044931667015201">"إزالة التحديثات"</string>
     <string name="auto_launch_enable_text" msgid="286244432074382294">"لقد اخترت تشغيل هذا التطبيق بشكل تلقائي لبعض الإجراءات."</string>
     <string name="always_allow_bind_appwidgets_text" msgid="2069415023986858324">"لقد اخترت السماح لهذا التطبيق بإنشاء الأدوات والوصول إلى بياناتها."</string>
@@ -1994,7 +1994,7 @@
     <string name="dlg_cancel" msgid="5164705061530774899">"إلغاء"</string>
     <string name="app_not_found_dlg_title" msgid="7122106240981109930"></string>
     <string name="app_not_found_dlg_text" msgid="8634675268730513704">"لم يتم العثور على التطبيق في قائمة التطبيقات المثبتة."</string>
-    <string name="clear_failed_dlg_text" msgid="6866741916836125732">"تعذّر مسح مساحة تخزين للتطبيق."</string>
+    <string name="clear_failed_dlg_text" msgid="6866741916836125732">"تعذّر محو مساحة تخزين للتطبيق."</string>
     <string name="join_two_items" msgid="7893073836681382429">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g> و<xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
     <string name="join_two_unrelated_items" msgid="5301233410730513655">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g> و<xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
     <string name="computing_size" msgid="4915310659841174866">"جارٍ الحساب..."</string>
@@ -4802,7 +4802,7 @@
     <string name="storage_size_large_alternate" msgid="7555149858858591495">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
     <string name="storage_volume_total" msgid="7102720999351050601">"مساحة التخزين المستخدمة من أصل <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
     <string name="storage_percent_full" msgid="7211888326013020857">"مستخدمة"</string>
-    <string name="clear_instant_app_data" msgid="5951258323364386357">"مسح التطبيق"</string>
+    <string name="clear_instant_app_data" msgid="5951258323364386357">"محو التطبيق"</string>
     <string name="clear_instant_app_confirmation" msgid="3964731334459209482">"هل تريد إزالة هذا التطبيق الفوري؟"</string>
     <string name="launch_instant_app" msgid="8503927414339606561">"فتح"</string>
     <string name="game_storage_settings" msgid="2521393115726178837">"الألعاب"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index ef3ccca..f1b03b2 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -4632,8 +4632,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupa"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Izabran je 1 uređaj"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Izabranih uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Menja se…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Preuzmi poziv"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Naziv pristupne tačke ne može da se menja."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Produžite trajanje baterije tableta"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 8ce6b4b..f42f4b2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Група"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 избрано устройство"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> избрани устройства"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Превключва се…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Устройство за приемане на обаждането"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Това име на точката за достъп (APN) не може да бъде променено."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Подобряване на живота на батерията на таблета"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 8b8d2e2..7bd1ead 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -4632,8 +4632,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupa"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 odabrani uređaj"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Broj odabranih uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Prebacivanje…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Primanje poziva"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Ovaj APN se ne može promijeniti."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Poboljšanje trajanja baterije tableta"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1bd0193..7161f99 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grup"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 dispositiu seleccionat"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> dispositius seleccionats"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"S\'està canviant…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Accepta la trucada a"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"No es pot canviar l\'APN."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Millora la durada de la bateria de la tauleta"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index c02268f..ec75ae3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -3079,14 +3079,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"4G-Anrufe"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"Zur Verbesserung von Sprache und Kommunikation LTE-Dienste verwenden (empfohlen)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"Zur Verbesserung von Sprache und Kommunikation 4G-Dienste verwenden (empfohlen)"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"Kontakterkennung"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"Dadurch kann dein Mobilfunkanbieter prüfen, welche Anruffunktionen deine Kontakte unterstützen."</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"Die Funktion \"Kontakterkennung\" aktivieren?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"Wenn du diese Funktion aktivierst, kann dein Mobilfunkanbieter auf die Telefonnummern in deinen Kontakten zugreifen, um zu prüfen, welche Anruffunktionen sie unterstützen."</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"Bevorzugter Netztyp"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (empfohlen)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS"</string>
@@ -4753,10 +4749,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"Du hast diese App kürzlich installiert."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"Ausgabe wechseln"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"Die Wiedergabe läuft derzeit auf <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (nicht verbunden)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"Wechseln nicht möglich. Tippe, um es nochmals zu versuchen."</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"Wichtige Informationen"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"WEITER"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"NEIN DANKE"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index d25f06b..8b0f98a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Ομάδα"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Επιλέχτηκε 1 συσκευή"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Επιλέχτηκαν <xliff:g id="COUNT">%1$d</xliff:g> συσκευές"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Εναλλαγή…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Αποδοχή κλήσης"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Δεν είναι δυνατή η αλλαγή αυτού του APN."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Βελτίωση διάρκειας ζωής μπαταρίας tablet"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ae86a3f..3144ac7 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupo"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 dispositivo seleccionado"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos seleccionados"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Cambiando…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Atender llamada en"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"No se puede cambiar este APN."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Mejorar duración de la batería del tablet"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 7fea670..d72c49f 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupp"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 seade on valitud"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> seadet on valitud"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Vahetamine …"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Vasta kõnele seadmes"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Seda APN-i ei saa muuta."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Parandage tahvelarvuti aku tööiga"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 02e451b..62182f0 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Ryhmä"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 laite valittu"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> laitetta valittu"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Vaihdetaan…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Vastaa puheluun:"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Tätä APN:ää ei voi muuttaa."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Paranna tabletin akunkestoa"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 93eff5e..d36f577 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Groupe"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 appareil sélectionné"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> appareils sélectionnés"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Changement…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Accepter l\'appel sur"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Impossible de modifier cet APN."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Améliorer autonomie de batterie de la tablette"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 471e304..bd66650 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -3078,14 +3078,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"4G કૉલિંગ"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"વૉઇસ અને અન્ય સંચારોને વધુ સારા બનાવવા માટે LTE સેવાઓનો ઉપયોગ કરો (ભલામણ કરેલ)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"વૉઇસ અને અન્ય સંચારોને વધુ સારા બનાવવા માટે 4G સેવાઓનો ઉપયોગ કરો (ભલામણ કરેલ)"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"સંપર્ક શોધી શકવાની ક્ષમતા"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"આ કૉલની કઈ સુવિધાઓને તમારા સંપર્કો સપોર્ટ આપી શકશે, જાણવાની મંજૂરી તમારા કૅરિઅરને આપે છે."</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"સંપર્ક શોધી શકવાની ક્ષમતા ચાલુ કરીએ?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"આ સુવિધાને ચાલુ કરવાથી, તમારા સંપર્કોના ફોન નંબર ઍક્સેસ કરવાની તમારા કૅરિઅરને મંજૂરી મળશે જેથી તમારા સંપર્કોના ડિવાઇસ કૉલની કઈ સુવિધાઓને સપોર્ટ કરી શકશે તે તમારા કૅરિઅર જાણી શકશે."</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"પસંદગીનો નેટવર્ક પ્રકાર"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (ભલામણ કરેલ)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS સંદેશા"</string>
@@ -4752,10 +4748,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"તમે તાજેતરમાં આ ઍપ ઇન્સ્ટૉલ કરી."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"આઉટપુટ સ્વિચ કરો"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"હાલમાં <xliff:g id="DEVICE_NAME">%1$s</xliff:g> પર ચલાવી રહ્યાં છે"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (ડિસ્કનેક્ટ થયેલું)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"સ્વિચ કરી શકાતું નથી. ફરી કરવા ટૅપ કરો."</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"મહત્ત્વપૂર્ણ માહિતી"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"ચાલુ રાખો"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"ના, આભાર"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 2b32cd9..c9fa872 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -4632,8 +4632,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupa"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Odabran je jedan uređaj"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Odabrano uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Prebacivanje…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Preuzmi poziv na uređaju"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Ovaj se APN ne može promijeniti."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Poboljšajte trajanje baterije tableta"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8dd7fe1..3e7e488 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grup"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 perangkat dipilih"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> perangkat dipilih"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Beralih…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Jawab panggilan di"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"APN ini tidak dapat diubah."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Tingkatkan masa pakai baterai tablet"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index d2bcd19..7714422 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Hópur"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 tæki valið"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> tæki valin"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Skiptir…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Taka við símtali í"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Ekki er hægt að breyta þessum aðgangsstað."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Auktu rafhlöðuendingu spjaldtölvunnar"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index d29eb4d..c65a26c 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Gruppo"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 dispositivo selezionato"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivi selezionati"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Passaggio…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Rispondi alle chiamate su"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Questo APN non può essere modificato."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Fai durare di più la batteria del tablet"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index cf7bec6..29562c4 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -3168,14 +3168,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"‏שיחות 4G"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"‏שימוש בשירותי LTE כדי לשפר את הקול ודרכי תקשורת אחרות (מומלץ)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"‏שימוש בשירותי 4G משפר את התקשורת הקולית ותקשורת אחרת (מומלץ)"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"גילוי אנשי קשר"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"תכונה זו מאפשרת לספק לגלות אילו תכונות התקשרות נתמכות על ידי אנשי הקשר שלך."</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"להפעיל את הגילוי של אנשי הקשר?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"הפעלת התכונה הזו תעניק לספק גישה למספרי הטלפון ששמורים באנשי הקשר שלך כדי לגלות באילו תכונות התקשרות הם תומכים."</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"סוג רשת מועדף"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"‏LTE (מומלץ)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"‏הודעות MMS"</string>
@@ -4930,10 +4926,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"התקנת לאחרונה את האפליקציה הזו."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"החלפת פלט"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"בהפעלה כרגע ב-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (מנותק)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"לא ניתן להחליף. יש להקיש כדי לנסות שוב."</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"מידע חשוב"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"המשך"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"לא, תודה"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index e3fac3b..4ea8599 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"グループ"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 台のデバイスを選択しました"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"選択したデバイス: <xliff:g id="COUNT">%1$d</xliff:g> 台"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"切り替えています…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"通話するデバイス"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"この APN は変更できません。"</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"タブレットの電池寿命の改善"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a50aa2c..716ac50 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -4716,8 +4716,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupė"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Pasirinktas 1 įrenginys"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Pasirinkta įrenginių: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Perjungiama…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Gauti skambučius"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Negalima pakeisti šio APN."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Pailginkite planš. komp. akum. veikimo laiką"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 9f383ed..16b80bc 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -4632,8 +4632,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupa"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Atlasīta viena ierīce"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Atlasītas <xliff:g id="COUNT">%1$d</xliff:g> ierīces"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Notiek pārslēgšana…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Atbildēt uz zvanu, izmantojot:"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"APN nevar mainīt."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Planšetdatora akum. darb. ilguma uzlabošana"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 6995bbb..b6b9c87 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -3078,6 +3078,14 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"Повици преку 4G"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"Користете ги LTE-услугите за да ја подобрите гласовната и другите видови комуникација (препорачано)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"Користете ги услугите 4G за да ја подобрите гласовната и другите видови комуникација (препорачано)"</string>
+    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
+    <skip />
+    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
+    <skip />
+    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
+    <skip />
+    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
+    <skip />
     <string name="preferred_network_type_title" msgid="812509938714590857">"Претпочитан тип мрежа"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (препорачано)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS-пораки"</string>
@@ -4513,6 +4521,7 @@
     <string name="graphics_driver_app_preference_system" msgid="3754748149113184126">"Системски драјвер за графика"</string>
     <!-- no translation found for graphics_driver_all_apps_preference_values:0 (8039644515855740879) -->
     <!-- no translation found for graphics_driver_all_apps_preference_values:1 (157748136905839375) -->
+    <!-- no translation found for graphics_driver_all_apps_preference_values:2 (8104576549429294026) -->
     <!-- no translation found for graphics_driver_app_preference_values:0 (6403705826179314116) -->
     <!-- no translation found for graphics_driver_app_preference_values:1 (485288770206606512) -->
     <!-- no translation found for graphics_driver_app_preference_values:2 (5391218026495225599) -->
@@ -4543,6 +4552,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Група"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Избран е 1 уред"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Избрани се <xliff:g id="COUNT">%1$d</xliff:g> уреди"</string>
+    <string name="media_output_switching" msgid="7488216595474868546">"Префрлање…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Прифатете повик на"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Ова APN не може да се промени."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Подобрете го траењето на батеријата"</string>
@@ -4660,10 +4670,6 @@
     <string name="mobile_network_esim_swap_confirm_body" msgid="8168680839542031781">"Само една од преземените SIM-картички може да биде активна.\n\nАко се префрлите на <xliff:g id="CARRIER1">%1$s</xliff:g>, тоа нема да ја откаже вашата услуга на <xliff:g id="CARRIER2">%2$s</xliff:g>."</string>
     <string name="mobile_network_esim_swap_confirm_ok" msgid="8695772737522378095">"Префрли на <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
     <string name="mobile_network_erase_sim" msgid="4629071168032714930">"Избриши ја SIM-картичката"</string>
-    <string name="mobile_network_erase_sim_dialog_title" msgid="2751887197002033678">"Да се избрише преземената SIM-картичка?"</string>
-    <string name="mobile_network_erase_sim_dialog_body" msgid="2452781115336285731">"Ако ја избришете SIM-картичкава, услугата на <xliff:g id="CARRIER_0">%1$s</xliff:g> ќе се отстрани од уредов.\n\nУслугата за <xliff:g id="CARRIER_1">%2$s</xliff:g> нема да се откаже."</string>
-    <string name="mobile_network_erase_sim_dialog_ok" msgid="3421196386773625314">"Избриши"</string>
-    <string name="mobile_network_erase_sim_dialog_progress" msgid="27667157639219658">"Се брише SIM…"</string>
     <string name="mobile_network_erase_sim_error_dialog_title" msgid="6680959559589234726">"Не може да се избрише SIM-картичката"</string>
     <string name="mobile_network_erase_sim_error_dialog_body" msgid="6401922869095572710">"Оваа SIM-картичка не може да се избрише поради грешка.\n\nРестартирајте го уредот и обидете се повторно."</string>
     <string name="preferred_network_mode_title" msgid="3083431168988535628">"Претпочитан тип мрежа"</string>
@@ -4745,6 +4751,10 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"Неодамна ја инсталиравте апликацијава."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"Сменете го излезот"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"Моментално се пушта на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
+    <skip />
+    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
+    <skip />
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"Важни информации"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"ПРОДОЛЖИ"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"НЕ, ФАЛА"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 305e002..5986339 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -3078,14 +3078,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"4G കോളിംഗ്"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"വോയ്‌സ്, മറ്റ് ആശയവിനിമയങ്ങൾ (നിർദ്ദേശിതം) എന്നിവ മികച്ചതാക്കുന്നതിന് LTE സേവനങ്ങൾ ഉപയോഗിക്കുക"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"വോയ്‌സ്, മറ്റ് ആശയവിനിമയങ്ങൾ (നിർദ്ദേശിതം) എന്നിവ മികച്ചതാക്കുന്നതിന് 4G സേവനങ്ങൾ ഉപയോഗിക്കുക"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"കോൺടാക്റ്റ് കണ്ടെത്തൽ"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"കോൺടാക്‌റ്റുകൾ ഏതെല്ലാം കോളിംഗ് ഫീച്ചറുകളെ പിന്തുണയ്‌ക്കുന്നുവെന്ന് കണ്ടെത്താൻ സേവനദാതാവിനെ അനുവദിക്കുന്നു."</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"കോൺടാക്റ്റ് കണ്ടെത്തൽ പ്രവർത്തനക്ഷമമാക്കണോ?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"ഈ ഫീച്ചർ പ്രവർത്തനക്ഷമമാക്കുന്നത്, കോൺടാക്‌റ്റുകളിലെ ഫോൺ നമ്പറുകൾ ആക്‌സസ് ചെയ്യാൻ നിങ്ങളുടെ സേവനദാതാവിനെ അനുവദിക്കും, കോൺടാക്‌റ്റുകൾ ഏതെല്ലാം കോളിംഗ് ഫീച്ചറുകളെ പിന്തുണയ്‌ക്കുന്നുവെന്ന് കണ്ടെത്തുന്നതിനാണിത്."</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"തിരഞ്ഞെടുത്ത നെറ്റ്‌വർക്ക് തരം"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (ശുപാർശചെയ്‌തത്)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS സന്ദേശങ്ങൾ"</string>
@@ -4752,10 +4748,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"നിങ്ങൾ ഈ ആപ്പ് സമീപകാലത്ത് ഇൻസ്‌റ്റാൾ ചെയ്‌തതാണ്."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"ഔട്ട്പുട്ട് മാറുക"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"നിലവിൽ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്ന ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നു"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (വിച്ഛേദിച്ചു)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"മാറാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യൂ."</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"പ്രധാനപ്പെട്ട വിവരങ്ങൾ"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"തുടരുക"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"വേണ്ട"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 2b520d3..d7c82df 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -4546,8 +4546,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Бүлэг"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 төхөөрөмжийг сонгосон"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> төхөөрөмжийг сонгосон"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Сэлгэж байна…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Дуудлага авах"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Энэ APN-г өөрчлөх боломжгүй."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Таблетын батарейн ажиллах хугацааг нэмэгдүүлэх"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 216bf66..99d29fb 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -3079,14 +3079,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"4G कॉलिंग"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"व्‍हॉइस आणि इतर संवादांमध्ये सुधारणा करण्‍यासाठी LTE सेवा वापरा (शिफारस केलेले)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"व्‍हॉइस आणि इतर संवादांमध्ये सुधारणा करण्‍यासाठी 4G सेवा वापरा (शिफारस केलेले)"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"संपर्क शोधणे"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"तुमचे संपर्क कोणती कॉलिंग वैशिष्ट्ये सपोर्ट करतात हे जाणून घेण्याची तुमच्या वाहकाला अनुमती देते."</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"संपर्क शोधणे सुरू करायचे आहे का?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"हे वैशिष्ट्य सुरू केल्याने तुमच्या वाहकाला तुमच्या संपर्कांमधील फोन नंबरचा अ‍ॅक्सेस करण्याची अनुमती मिळेल जेणेकरून ते कोणत्या कॉलिंग वैशिष्ट्यांना सपोर्ट करतात हे जाणून घेता येईल."</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"प्राधान्‍य असलेला नेटवर्क प्रकार"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (शिफारस केलेले)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS मेसेज"</string>
@@ -4753,10 +4749,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"तुम्ही हे अ‍ॅप नुकतेच इंस्टॉल केले."</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"आउटपुट स्विच करा"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"सध्या <xliff:g id="DEVICE_NAME">%1$s</xliff:g> वर प्ले करत आहे"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (डिस्कनेक्ट केलेले)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"स्विच करता आले नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"महत्त्वाची माहिती"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"सुरू ठेवा"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"नाही नको"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index f295c3c..d251165 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"အုပ်စု"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"စက်ပစ္စည်း ၁ ခုကို ရွေးချယ်ထားသည်"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"စက်ပစ္စည်း <xliff:g id="COUNT">%1$d</xliff:g> ခုကို ရွေးချယ်ထားသည်"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"ပြောင်းနေသည်…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"အောက်ပါတွင် ခေါ်ဆိုမှု လက်ခံရန်"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"ဤ APN ကို ပြောင်း၍မရပါ။"</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"တက်ဘလက်၏ ဘက်ထရီသက်တမ်းကို ပိုကောင်းအောင်လုပ်ပါ"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 71f931c..ae86a7d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Groep"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Eén apparaat geselecteerd"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> apparaten geselecteerd"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Overschakelen…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Opnemen op"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Deze APN kan niet worden gewijzigd."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"De batterijduur van de tablet verbeteren"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 0157f0c..8b71bcc 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -3078,14 +3078,10 @@
     <string name="enhanced_4g_lte_mode_title_4g_calling" msgid="7445853566718786195">"4G କଲିଂ"</string>
     <string name="enhanced_4g_lte_mode_summary" msgid="6776190202179584104">"ଭଏସ୍ ଓ ଅନ୍ୟ ଯୋଗାଯୋଗକୁ ଉନ୍ନତ କରିବା ପାଇଁ LTE ସେବା ବ୍ୟବହାର କରନ୍ତୁ (ସୁପାରିଶ୍ କରାଯାଇଛି)"</string>
     <string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="7814006095552641136">"ଭଏସ୍ ଓ ଅନ୍ୟ ଯୋଗାଯୋଗ (ସୁପାରିଶ କରିଯାଇଥିବା)କୁ ଉନ୍ନତ କରିବା ପାଇଁ 4G ସେବା ବ୍ୟବହାର କରନ୍ତୁ"</string>
-    <!-- no translation found for contact_discovery_opt_in_title (4076990635900099116) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_summary (4104310593310967300) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_title (6278407286820554079) -->
-    <skip />
-    <!-- no translation found for contact_discovery_opt_in_dialog_message (5787751513924920435) -->
-    <skip />
+    <string name="contact_discovery_opt_in_title" msgid="4076990635900099116">"କଣ୍ଟାକ୍ଟ ଡିସ୍କଭରୀ"</string>
+    <string name="contact_discovery_opt_in_summary" msgid="4104310593310967300">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ କେଉଁ କଲିଂ ଫିଚର୍ ସମର୍ଥନ କରେ, ତାହା ଡିସ୍କଭର୍ କରିବାକୁ ମୋବାଇଲ୍ କମ୍ପାନୀକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+    <string name="contact_discovery_opt_in_dialog_title" msgid="6278407286820554079">"କଣ୍ଟାକ୍ଟ ଡିସ୍କଭର୍ ସକ୍ଷମ କରିବେ?"</string>
+    <string name="contact_discovery_opt_in_dialog_message" msgid="5787751513924920435">"ଏହି ଫିଚରକୁ ସକ୍ଷମ କରିବା ଦ୍ୱାରା, ଆପଣଙ୍କ ଯୋଗାଯୋଗରେ ଥିବା ଫୋନ୍ ନମ୍ବର କେଉଁ କଲିଂ ଫିଚର୍ ସମର୍ଥନ କରେ, ତାହା ଡିସ୍କଭର କରିବାକୁ ଆପଣଙ୍କ ମୋବାଇଲ୍ କମ୍ପାନୀ ସେମାନଙ୍କୁ ଆକ୍ସେସ୍ କରିବ।"</string>
     <string name="preferred_network_type_title" msgid="812509938714590857">"ନିଜ ପସନ୍ଦର ନେଟ୍‌ୱର୍କ ପ୍ରକାର"</string>
     <string name="preferred_network_type_summary" msgid="8786291927331323061">"LTE (ପ୍ରସ୍ତାବିତ)"</string>
     <string name="mms_message_title" msgid="6624505196063391964">"MMS ମେସେଜ୍‌ଗୁଡ଼ିକ"</string>
@@ -4752,10 +4748,8 @@
     <string name="recently_installed_app" msgid="2899861390925377564">"ଆପଣ ସମ୍ପ୍ରତ୍ତି ଏହି ଆପ୍‌କୁ ଇନ୍‌ଷ୍ଟଲ୍ କରିଛନ୍ତି।"</string>
     <string name="media_output_panel_title" msgid="5920946795078065159">"ଆଉଟ୍‌ପୁଟ୍ ସ୍ବିଚ୍ କରନ୍ତୁ"</string>
     <string name="media_output_panel_summary_of_playing_device" msgid="6998758947764222915">"ବର୍ତ୍ତମାନ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ରେ ଚାଲୁଛି"</string>
-    <!-- no translation found for media_output_disconnected_status (5567111639832431865) -->
-    <skip />
-    <!-- no translation found for media_output_switch_error_text (603563475910236831) -->
-    <skip />
+    <string name="media_output_disconnected_status" msgid="5567111639832431865">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> (ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି)"</string>
+    <string name="media_output_switch_error_text" msgid="603563475910236831">"ସ୍ୱିଚ୍ ହେବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରିବାକୁ ଟାପ୍ କର।"</string>
     <string name="wfc_disclaimer_title_text" msgid="4617195934203523503">"ଗୁରୁତ୍ବପୂର୍ଣ୍ଣ ସୂଚନା"</string>
     <string name="wfc_disclaimer_agree_button_text" msgid="4082872292910770344">"ଜାରି ରଖନ୍ତୁ"</string>
     <string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"ନାହିଁ, ଥାଉ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b0a2d9a..bbd897a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4716,8 +4716,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupa"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Wybrano jedno urządzenie"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Wybrane urządzenia: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Przełączam…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Odbierz połączenie przez:"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Tego parametru APN nie można zmienić."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Wydłuż czas pracy tabletu na baterii"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index d6f5d30..66ed3cd 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupo"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 dispositivo selecionado"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos selecionados"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Alternando…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Atender chamada"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Esse APN não pode ser alterado."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Melhorar a duração da bateria do tablet"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d6f5d30..66ed3cd 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -4548,8 +4548,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Grupo"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 dispositivo selecionado"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos selecionados"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Alternando…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Atender chamada"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Esse APN não pode ser alterado."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Melhorar a duração da bateria do tablet"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1397d2c..9fa94f9 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -4716,8 +4716,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Группа"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Выбрано 1 устройство"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Выбрано устройств: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Подождите…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Ответить с помощью"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Изменить параметры этой точки доступа невозможно"</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Продлите время работы от батареи"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 21afd65..08f7802 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -4716,8 +4716,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Skupina"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 vybrané zariadenie"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Počet vybraných zariadení: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Prepína sa…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Prijať hovor v zariadení"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Tento názov prístupového bodu sa nedá zmeniť."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Predĺženie výdrže batérie tabletu"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index e469607..b8e4424 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -4716,8 +4716,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Skupina"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Izbrana je ena naprava"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Izbranih je toliko naprav: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Preklapljanje …"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Sprejemanje klicev je vklopljeno"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Tega APN-ja ni mogoče spremeniti."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Izboljšajte čas delovanja akumulatorja tablice"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ef20de8..a9feb22 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -4632,8 +4632,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Група"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"Изабран је 1 уређај"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"Изабраних уређаја: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Мења се…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Преузми позив"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Назив приступне тачке не може да се мења."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Продужите трајање батерије таблета"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 92b4eb1..38516e2 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -4562,8 +4562,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Guruh"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 ta qurilma tanlandi"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> ta qurilma tanlandi"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Almashtirilmoqda…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Chaqiruv qabul qilish"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Bu APN parametrlarini almashtirish imkonsiz."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Batareya quvvatini uzoqroq vaqtga yetkazing"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 554b22e..ead2243 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -4549,8 +4549,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"群組"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"已選取 1 部裝置"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 部裝置"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"正在切換…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"接聽來電時使用的裝置"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"無法變更此 APN。"</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"延長平板電腦的電池壽命"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index dc55db8..c6ed1e2 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -4549,8 +4549,7 @@
     <string name="media_output_group" msgid="7918231774595274396">"Iqembu"</string>
     <string name="media_output_group_panel_single_device_summary" msgid="5027884071572180516">"1 idivayisi ekhethiwe"</string>
     <string name="media_output_group_panel_multiple_devices_summary" msgid="4838305763151455248">"<xliff:g id="COUNT">%1$d</xliff:g> amadivayisi akhethiwe"</string>
-    <!-- no translation found for media_output_switching (7488216595474868546) -->
-    <skip />
+    <string name="media_output_switching" msgid="7488216595474868546">"Iyashintsha…"</string>
     <string name="take_call_on_title" msgid="1159417893879946757">"Thatha ikholi ku-"</string>
     <string name="cannot_change_apn_toast" msgid="296540724089240405">"Le APN ayikwazi ukuguqulwa."</string>
     <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Thuthukisa impilo yebhethri lethebulethi"</string>
diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java
index 76fb3ff..ce0b5fb 100644
--- a/src/com/android/settings/accessibility/AccessibilityUtil.java
+++ b/src/com/android/settings/accessibility/AccessibilityUtil.java
@@ -73,7 +73,7 @@
     /**
      * Annotation for different user shortcut type UI type.
      *
-     * {@code DEFAULT} for displaying default value.
+     * {@code EMPTY} for displaying default value.
      * {@code SOFTWARE} for displaying specifying the accessibility services or features which
      * choose accessibility button in the navigation bar as preferred shortcut.
      * {@code HARDWARE} for displaying specifying the accessibility services or features which
@@ -83,7 +83,7 @@
      */
     @Retention(RetentionPolicy.SOURCE)
     @IntDef({
-            UserShortcutType.DEFAULT,
+            UserShortcutType.EMPTY,
             UserShortcutType.SOFTWARE,
             UserShortcutType.HARDWARE,
             UserShortcutType.TRIPLETAP,
@@ -91,7 +91,7 @@
 
     /** Denotes the user shortcut type. */
     public @interface UserShortcutType {
-        int DEFAULT = 0;
+        int EMPTY = 0;
         int SOFTWARE = 1; // 1 << 0
         int HARDWARE = 2; // 1 << 1
         int TRIPLETAP = 4; // 1 << 2
@@ -323,7 +323,7 @@
      */
     static int getUserShortcutTypesFromSettings(Context context,
             @NonNull ComponentName componentName) {
-        int shortcutTypes = UserShortcutType.DEFAULT;
+        int shortcutTypes = UserShortcutType.EMPTY;
         if (hasValuesInSettings(context, UserShortcutType.SOFTWARE, componentName)) {
             shortcutTypes |= UserShortcutType.SOFTWARE;
         }
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index d61be67..08be8b3 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -417,6 +417,8 @@
         AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), shortcutTypes, mComponentName);
 
         mDialog.dismiss();
+
+        mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
     }
 
     private void onDenyButtonFromShortcutToggleClicked() {
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 0b8353e..ec2617a 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -90,9 +90,9 @@
     private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
     private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type";
     private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
-    private int mUserShortcutType = UserShortcutType.DEFAULT;
+    private int mUserShortcutType = UserShortcutType.EMPTY;
     // Used to restore the edit dialog status.
-    private int mUserShortcutTypeCache = UserShortcutType.DEFAULT;
+    private int mUserShortcutTypeCache = UserShortcutType.EMPTY;
     private CheckBox mSoftwareTypeCheckBox;
     private CheckBox mHardwareTypeCheckBox;
 
@@ -413,18 +413,18 @@
                 new TextUtils.SimpleStringSplitter(COMPONENT_NAME_SEPARATOR);
 
         private String mComponentName;
-        private int mUserShortcutType;
+        private int mType;
 
-        AccessibilityUserShortcutType(String componentName, int userShortcutType) {
+        AccessibilityUserShortcutType(String componentName, int type) {
             this.mComponentName = componentName;
-            this.mUserShortcutType = userShortcutType;
+            this.mType = type;
         }
 
         AccessibilityUserShortcutType(String flattenedString) {
             sStringColonSplitter.setString(flattenedString);
             if (sStringColonSplitter.hasNext()) {
                 this.mComponentName = sStringColonSplitter.next();
-                this.mUserShortcutType = Integer.parseInt(sStringColonSplitter.next());
+                this.mType = Integer.parseInt(sStringColonSplitter.next());
             }
         }
 
@@ -436,18 +436,18 @@
             this.mComponentName = componentName;
         }
 
-        int getUserShortcutType() {
-            return mUserShortcutType;
+        int getType() {
+            return mType;
         }
 
-        void setUserShortcutType(int userShortcutType) {
-            this.mUserShortcutType = userShortcutType;
+        void setType(int type) {
+            this.mType = type;
         }
 
         String flattenToString() {
             final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR));
             joiner.add(mComponentName);
-            joiner.add(String.valueOf(mUserShortcutType));
+            joiner.add(String.valueOf(mType));
             return joiner.toString();
         }
     }
@@ -459,7 +459,6 @@
         final View dialogHardwareView = dialog.findViewById(R.id.hardware_shortcut);
         mHardwareTypeCheckBox = dialogHardwareView.findViewById(R.id.checkbox);
         updateAlertDialogCheckState();
-        updateAlertDialogEnableState();
     }
 
     private void updateAlertDialogCheckState() {
@@ -467,36 +466,28 @@
         updateCheckStatus(mHardwareTypeCheckBox, UserShortcutType.HARDWARE);
     }
 
-    private void updateAlertDialogEnableState() {
-        if (!mSoftwareTypeCheckBox.isChecked()) {
-            mHardwareTypeCheckBox.setEnabled(false);
-        } else if (!mHardwareTypeCheckBox.isChecked()) {
-            mSoftwareTypeCheckBox.setEnabled(false);
-        } else {
-            mSoftwareTypeCheckBox.setEnabled(true);
-            mHardwareTypeCheckBox.setEnabled(true);
-        }
-    }
-
     private void updateCheckStatus(CheckBox checkBox, @UserShortcutType int type) {
         checkBox.setChecked((mUserShortcutTypeCache & type) == type);
         checkBox.setOnClickListener(v -> {
             updateUserShortcutType(/* saveChanges= */ false);
-            updateAlertDialogEnableState();
         });
     }
 
     private void updateUserShortcutType(boolean saveChanges) {
-        mUserShortcutTypeCache = UserShortcutType.DEFAULT;
+        mUserShortcutTypeCache = UserShortcutType.EMPTY;
         if (mSoftwareTypeCheckBox.isChecked()) {
             mUserShortcutTypeCache |= UserShortcutType.SOFTWARE;
         }
         if (mHardwareTypeCheckBox.isChecked()) {
             mUserShortcutTypeCache |= UserShortcutType.HARDWARE;
         }
+
         if (saveChanges) {
+            final boolean isChanged = (mUserShortcutTypeCache != UserShortcutType.EMPTY);
+            if (isChanged) {
+                setUserShortcutType(getPrefContext(), mUserShortcutTypeCache);
+            }
             mUserShortcutType = mUserShortcutTypeCache;
-            setUserShortcutType(getPrefContext(), mUserShortcutType);
         }
     }
 
@@ -573,7 +564,7 @@
 
         final String str = (String) filtered.toArray()[0];
         final AccessibilityUserShortcutType shortcut = new AccessibilityUserShortcutType(str);
-        return shortcut.getUserShortcutType();
+        return shortcut.getType();
     }
 
     private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) {
@@ -582,13 +573,11 @@
         }
 
         updateUserShortcutType(/* saveChanges= */ true);
-        if (mShortcutPreference.isChecked()) {
-            AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), mUserShortcutType,
-                    mComponentName);
-            AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), ~mUserShortcutType,
-                    mComponentName);
-        }
-        mShortcutPreference.setChecked(true);
+        AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), mUserShortcutType,
+                mComponentName);
+        AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), ~mUserShortcutType,
+                mComponentName);
+        mShortcutPreference.setChecked(mUserShortcutType != UserShortcutType.EMPTY);
         mShortcutPreference.setSummary(
                 getShortcutTypeSummary(getPrefContext()));
     }
@@ -601,7 +590,7 @@
         // Get the user shortcut type from settings provider.
         mUserShortcutType = AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(),
                 mComponentName);
-        if (mUserShortcutType != UserShortcutType.DEFAULT) {
+        if (mUserShortcutType != UserShortcutType.EMPTY) {
             setUserShortcutType(getPrefContext(), mUserShortcutType);
         } else {
             //  Get the user shortcut type from shared_prefs if cannot get from settings provider.
@@ -613,7 +602,7 @@
         // Restore the user shortcut type.
         if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_SHORTCUT_TYPE)) {
             mUserShortcutTypeCache = savedInstanceState.getInt(EXTRA_SHORTCUT_TYPE,
-                    UserShortcutType.DEFAULT);
+                    UserShortcutType.EMPTY);
         }
 
         // Initial the shortcut preference.
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 6716234..292e931 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -70,9 +70,9 @@
     private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type";
     private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
     private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
-    private int mUserShortcutType = UserShortcutType.DEFAULT;
+    private int mUserShortcutType = UserShortcutType.EMPTY;
     // Used to restore the edit dialog status.
-    private int mUserShortcutTypeCache = UserShortcutType.DEFAULT;
+    private int mUserShortcutTypeCache = UserShortcutType.EMPTY;
     private CheckBox mSoftwareTypeCheckBox;
     private CheckBox mHardwareTypeCheckBox;
     private CheckBox mTripleTapTypeCheckBox;
@@ -255,7 +255,6 @@
         mTripleTapTypeCheckBox = dialogTripleTapView.findViewById(R.id.checkbox);
         final View advancedView = dialog.findViewById(R.id.advanced_shortcut);
         updateAlertDialogCheckState();
-        updateAlertDialogEnableState();
 
         // Window magnification mode doesn't support advancedView.
         if (isWindowMagnification(getPrefContext())) {
@@ -275,30 +274,15 @@
         updateCheckStatus(mTripleTapTypeCheckBox, UserShortcutType.TRIPLETAP);
     }
 
-    private void updateAlertDialogEnableState() {
-        if (!mSoftwareTypeCheckBox.isChecked() && !mTripleTapTypeCheckBox.isChecked()) {
-            mHardwareTypeCheckBox.setEnabled(false);
-        } else if (!mHardwareTypeCheckBox.isChecked() && !mTripleTapTypeCheckBox.isChecked()) {
-            mSoftwareTypeCheckBox.setEnabled(false);
-        } else if (!mSoftwareTypeCheckBox.isChecked() && !mHardwareTypeCheckBox.isChecked()) {
-            mTripleTapTypeCheckBox.setEnabled(false);
-        } else {
-            mSoftwareTypeCheckBox.setEnabled(true);
-            mHardwareTypeCheckBox.setEnabled(true);
-            mTripleTapTypeCheckBox.setEnabled(true);
-        }
-    }
-
     private void updateCheckStatus(CheckBox checkBox, @UserShortcutType int type) {
         checkBox.setChecked((mUserShortcutTypeCache & type) == type);
         checkBox.setOnClickListener(v -> {
             updateUserShortcutType(/* saveChanges= */ false);
-            updateAlertDialogEnableState();
         });
     }
 
     private void updateUserShortcutType(boolean saveChanges) {
-        mUserShortcutTypeCache = UserShortcutType.DEFAULT;
+        mUserShortcutTypeCache = UserShortcutType.EMPTY;
         if (mSoftwareTypeCheckBox.isChecked()) {
             mUserShortcutTypeCache |= UserShortcutType.SOFTWARE;
         }
@@ -308,9 +292,13 @@
         if (mTripleTapTypeCheckBox.isChecked()) {
             mUserShortcutTypeCache |= UserShortcutType.TRIPLETAP;
         }
+
         if (saveChanges) {
+            final boolean isChanged = (mUserShortcutTypeCache != UserShortcutType.EMPTY);
+            if (isChanged) {
+                setUserShortcutType(getPrefContext(), mUserShortcutTypeCache);
+            }
             mUserShortcutType = mUserShortcutTypeCache;
-            setUserShortcutType(getPrefContext(), mUserShortcutType);
         }
     }
 
@@ -336,7 +324,7 @@
             return context.getText(R.string.switch_off_text);
         }
 
-        final int shortcutType = getUserShortcutType(context, UserShortcutType.DEFAULT);
+        final int shortcutType = getUserShortcutType(context, UserShortcutType.EMPTY);
         int resId = R.string.accessibility_shortcut_edit_summary_software;
         if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
             resId = AccessibilityUtil.isTouchExploreEnabled(context)
@@ -381,16 +369,14 @@
 
         final String str = (String) filtered.toArray()[0];
         final AccessibilityUserShortcutType shortcut = new AccessibilityUserShortcutType(str);
-        return shortcut.getUserShortcutType();
+        return shortcut.getType();
     }
 
     private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) {
         updateUserShortcutType(/* saveChanges= */ true);
-        if (mShortcutPreference.isChecked()) {
-            optInAllMagnificationValuesToSettings(getPrefContext(), mUserShortcutType);
-            optOutAllMagnificationValuesFromSettings(getPrefContext(), ~mUserShortcutType);
-        }
-        mShortcutPreference.setChecked(true);
+        optInAllMagnificationValuesToSettings(getPrefContext(), mUserShortcutType);
+        optOutAllMagnificationValuesFromSettings(getPrefContext(), ~mUserShortcutType);
+        mShortcutPreference.setChecked(mUserShortcutType != UserShortcutType.EMPTY);
         mShortcutPreference.setSummary(
                 getShortcutTypeSummary(getPrefContext()));
     }
@@ -467,7 +453,7 @@
     private void updateShortcutPreferenceData() {
         // Get the user shortcut type from settings provider.
         mUserShortcutType = getUserShortcutTypeFromSettings(getPrefContext());
-        if (mUserShortcutType != UserShortcutType.DEFAULT) {
+        if (mUserShortcutType != UserShortcutType.EMPTY) {
             setUserShortcutType(getPrefContext(), mUserShortcutType);
         } else {
             //  Get the user shortcut type from shared_prefs if cannot get from settings provider.
@@ -626,7 +612,7 @@
     }
 
     private static int getUserShortcutTypeFromSettings(Context context) {
-        int shortcutTypes = UserShortcutType.DEFAULT;
+        int shortcutTypes = UserShortcutType.EMPTY;
         if (hasMagnificationValuesInSettings(context, UserShortcutType.SOFTWARE)) {
             shortcutTypes |= UserShortcutType.SOFTWARE;
         }
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
index 3778862..21312a5 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -69,18 +69,17 @@
 
     public BluetoothDeviceUpdater(Context context, DashboardFragment fragment,
             DevicePreferenceCallback devicePreferenceCallback) {
-        this(fragment, devicePreferenceCallback, Utils.getLocalBtManager(context));
+        this(context, fragment, devicePreferenceCallback, Utils.getLocalBtManager(context));
     }
 
     @VisibleForTesting
-    BluetoothDeviceUpdater(DashboardFragment fragment,
+    BluetoothDeviceUpdater(Context context, DashboardFragment fragment,
             DevicePreferenceCallback devicePreferenceCallback, LocalBluetoothManager localManager) {
         mFragment = fragment;
         mDevicePreferenceCallback = devicePreferenceCallback;
         mPreferenceMap = new HashMap<>();
         mLocalManager = localManager;
-        mMetricsFeatureProvider = FeatureFactory.getFactory(mFragment.getContext())
-                .getMetricsFeatureProvider();
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     /**
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
index 53782e5..14a93b8 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
@@ -39,8 +39,10 @@
 import com.android.settings.R;
 import com.android.settings.SubSettings;
 import com.android.settings.Utils;
+import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
 import com.android.settings.bluetooth.BluetoothPairingDetail;
+import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.slices.CustomSliceRegistry;
@@ -78,9 +80,15 @@
     private static final String TAG = "BluetoothDevicesSlice";
 
     private final Context mContext;
+    private final AvailableMediaBluetoothDeviceUpdater mAvailableMediaBtDeviceUpdater;
+    private final SavedBluetoothDeviceUpdater mSavedBtDeviceUpdater;
 
     public BluetoothDevicesSlice(Context context) {
         mContext = context;
+        mAvailableMediaBtDeviceUpdater = new AvailableMediaBluetoothDeviceUpdater(mContext,
+                null /* fragment */, null /* devicePreferenceCallback */);
+        mSavedBtDeviceUpdater = new SavedBluetoothDeviceUpdater(mContext,
+                null /* fragment */, null /* devicePreferenceCallback */);
     }
 
     @Override
@@ -123,10 +131,10 @@
         final List<ListBuilder.RowBuilder> rows = getBluetoothRowBuilder();
 
         // Get displayable device count.
-        final int deviceCount = Math.min(rows.size(), DEFAULT_EXPANDED_ROW_COUNT);
+        final int displayableCount = Math.min(rows.size(), DEFAULT_EXPANDED_ROW_COUNT);
 
         // According to the displayable device count to add bluetooth device rows.
-        for (int i = 0; i < deviceCount; i++) {
+        for (int i = 0; i < displayableCount; i++) {
             listBuilder.addRow(rows.get(i));
         }
 
@@ -148,11 +156,14 @@
 
     @Override
     public void onNotifyChange(Intent intent) {
-        // Activate available media device.
         final int bluetoothDeviceHashCode = intent.getIntExtra(BLUETOOTH_DEVICE_HASH_CODE, -1);
-        for (CachedBluetoothDevice cachedBluetoothDevice : getConnectedBluetoothDevices()) {
-            if (cachedBluetoothDevice.hashCode() == bluetoothDeviceHashCode) {
-                cachedBluetoothDevice.setActive();
+        for (CachedBluetoothDevice device : getPairedBluetoothDevices()) {
+            if (device.hashCode() == bluetoothDeviceHashCode) {
+                if (device.isConnected()) {
+                    device.setActive();
+                } else if (!device.isBusy()) {
+                    device.connect();
+                }
                 return;
             }
         }
@@ -164,7 +175,7 @@
     }
 
     @VisibleForTesting
-    List<CachedBluetoothDevice> getConnectedBluetoothDevices() {
+    List<CachedBluetoothDevice> getPairedBluetoothDevices() {
         final List<CachedBluetoothDevice> bluetoothDeviceList = new ArrayList<>();
 
         // If Bluetooth is disable, skip to get the Bluetooth devices.
@@ -174,19 +185,18 @@
         }
 
         // Get the Bluetooth devices from LocalBluetoothManager.
-        final LocalBluetoothManager bluetoothManager =
+        final LocalBluetoothManager localBtManager =
                 com.android.settings.bluetooth.Utils.getLocalBtManager(mContext);
-        if (bluetoothManager == null) {
+        if (localBtManager == null) {
             Log.i(TAG, "Cannot get Bluetooth devices, Bluetooth is unsupported.");
             return bluetoothDeviceList;
         }
         final Collection<CachedBluetoothDevice> cachedDevices =
-                bluetoothManager.getCachedDeviceManager().getCachedDevicesCopy();
+                localBtManager.getCachedDeviceManager().getCachedDevicesCopy();
 
-        // Get all connected devices and sort them.
+        // Get all paired devices and sort them.
         return cachedDevices.stream()
-                .filter(device -> device.getDevice().getBondState() == BluetoothDevice.BOND_BONDED
-                        && device.getDevice().isConnected())
+                .filter(device -> device.getDevice().getBondState() == BluetoothDevice.BOND_BONDED)
                 .sorted(COMPARATOR).collect(Collectors.toList());
     }
 
@@ -242,21 +252,21 @@
     private List<ListBuilder.RowBuilder> getBluetoothRowBuilder() {
         // According to Bluetooth devices to create row builders.
         final List<ListBuilder.RowBuilder> bluetoothRows = new ArrayList<>();
-        final List<CachedBluetoothDevice> bluetoothDevices = getConnectedBluetoothDevices();
-        for (CachedBluetoothDevice bluetoothDevice : bluetoothDevices) {
+        for (CachedBluetoothDevice device : getPairedBluetoothDevices()) {
             final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
-                    .setTitleItem(getBluetoothDeviceIcon(bluetoothDevice), ListBuilder.ICON_IMAGE)
-                    .setTitle(bluetoothDevice.getName())
-                    .setSubtitle(bluetoothDevice.getConnectionSummary());
+                    .setTitleItem(getBluetoothDeviceIcon(device), ListBuilder.ICON_IMAGE)
+                    .setTitle(device.getName())
+                    .setSubtitle(device.getConnectionSummary());
 
-            if (bluetoothDevice.isConnectedA2dpDevice()) {
-                // For available media devices, the primary action is to activate audio stream and
-                // add setting icon to the end to link detail page.
-                rowBuilder.setPrimaryAction(buildMediaBluetoothAction(bluetoothDevice));
-                rowBuilder.addEndItem(buildBluetoothDetailDeepLinkAction(bluetoothDevice));
+            if (mAvailableMediaBtDeviceUpdater.isFilterMatched(device)
+                    || mSavedBtDeviceUpdater.isFilterMatched(device)) {
+                // For all available media devices and previously connected devices, the primary
+                // action is to activate or connect, and the end gear icon links to detail page.
+                rowBuilder.setPrimaryAction(buildPrimaryBluetoothAction(device));
+                rowBuilder.addEndItem(buildBluetoothDetailDeepLinkAction(device));
             } else {
-                // For other devices, the primary action is to link detail page.
-                rowBuilder.setPrimaryAction(buildBluetoothDetailDeepLinkAction(bluetoothDevice));
+                // For other devices, the primary action is to link to detail page.
+                rowBuilder.setPrimaryAction(buildBluetoothDetailDeepLinkAction(device));
             }
 
             bluetoothRows.add(rowBuilder);
@@ -266,8 +276,7 @@
     }
 
     @VisibleForTesting
-    SliceAction buildMediaBluetoothAction(CachedBluetoothDevice bluetoothDevice) {
-        // Send broadcast to activate available media device.
+    SliceAction buildPrimaryBluetoothAction(CachedBluetoothDevice bluetoothDevice) {
         final Intent intent = new Intent(getUri().toString())
                 .setClass(mContext, SliceBroadcastReceiver.class)
                 .putExtra(BLUETOOTH_DEVICE_HASH_CODE, bluetoothDevice.hashCode());
diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
index de2f85f..860a933 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
@@ -20,51 +20,33 @@
 
 import android.annotation.ColorInt;
 import android.app.PendingIntent;
-import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.media.session.MediaController;
 import android.net.Uri;
-import android.util.Log;
 
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.slice.Slice;
 import androidx.slice.builders.ListBuilder;
 import androidx.slice.builders.SliceAction;
 
-import com.android.internal.util.CollectionUtils;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.slices.CustomSliceable;
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settings.slices.SliceBroadcastReceiver;
-import com.android.settingslib.bluetooth.A2dpProfile;
-import com.android.settingslib.bluetooth.HearingAidProfile;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
 import com.android.settingslib.media.MediaOutputSliceConstants;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class MediaOutputIndicatorSlice implements CustomSliceable {
 
-    private static final String TAG = "MediaOutputIndicatorSlice";
+    private static final String TAG = "MediaOutputIndSlice";
 
     private Context mContext;
-    private LocalBluetoothManager mLocalBluetoothManager;
-    private LocalBluetoothProfileManager mProfileManager;
     private MediaOutputIndicatorWorker mWorker;
 
     public MediaOutputIndicatorSlice(Context context) {
         mContext = context;
-        mLocalBluetoothManager = com.android.settings.bluetooth.Utils.getLocalBtManager(context);
-        if (mLocalBluetoothManager == null) {
-            Log.e(TAG, "Bluetooth is not supported on this device");
-            return;
-        }
-        mProfileManager = mLocalBluetoothManager.getProfileManager();
     }
 
     @Override
@@ -86,7 +68,7 @@
                 .addRow(new ListBuilder.RowBuilder()
                         .setTitle(title)
                         .setTitleItem(createEmptyIcon(), ListBuilder.ICON_IMAGE)
-                        .setSubtitle(findActiveDeviceName())
+                        .setSubtitle(getWorker().getCurrentConnectedMediaDevice().getName())
                         .setPrimaryAction(primarySliceAction));
         return listBuilder.build();
     }
@@ -146,63 +128,10 @@
         // To decide Slice's visibility.
         // Return true if
         // 1. AudioMode is not in on-going call
-        // 2. Bluetooth device is connected
-        return (!CollectionUtils.isEmpty(getConnectedA2dpDevices())
-                || !CollectionUtils.isEmpty(getConnectedHearingAidDevices()))
-                && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext);
-    }
-
-    private List<BluetoothDevice> getConnectedA2dpDevices() {
-        // Get A2dp devices on states
-        // (STATE_CONNECTING, STATE_CONNECTED,  STATE_DISCONNECTING)
-        final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
-        if (a2dpProfile == null) {
-            return new ArrayList<>();
-        }
-        return a2dpProfile.getConnectedDevices();
-    }
-
-    private List<BluetoothDevice> getConnectedHearingAidDevices() {
-        // Get hearing aid profile devices on states
-        // (STATE_CONNECTING, STATE_CONNECTED,  STATE_DISCONNECTING)
-        final HearingAidProfile hapProfile = mProfileManager.getHearingAidProfile();
-        if (hapProfile == null) {
-            return new ArrayList<>();
-        }
-
-        return hapProfile.getConnectedDevices();
-    }
-
-    private CharSequence findActiveDeviceName() {
-        // Return Hearing Aid device name if it is active
-        BluetoothDevice activeDevice = findActiveHearingAidDevice();
-        if (activeDevice != null) {
-            return activeDevice.getAlias();
-        }
-        // Return A2DP device name if it is active
-        final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
-        if (a2dpProfile != null) {
-            activeDevice = a2dpProfile.getActiveDevice();
-            if (activeDevice != null) {
-                return activeDevice.getAlias();
-            }
-        }
-        // No active device, return default summary
-        return mContext.getText(R.string.media_output_default_summary);
-    }
-
-    private BluetoothDevice findActiveHearingAidDevice() {
-        final HearingAidProfile hearingAidProfile = mProfileManager.getHearingAidProfile();
-        if (hearingAidProfile == null) {
-            return null;
-        }
-
-        final List<BluetoothDevice> activeDevices = hearingAidProfile.getActiveDevices();
-        for (BluetoothDevice btDevice : activeDevices) {
-            if (btDevice != null) {
-                return btDevice;
-            }
-        }
-        return null;
+        // 2. worker is not null
+        // 3. Available devices are more than 1
+        return getWorker() != null
+                && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
+                && getWorker().getMediaDevices().size() > 1;
     }
 }
diff --git a/src/com/android/settings/media/MediaOutputIndicatorWorker.java b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
index 4ceeade..6daa745 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorWorker.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorWorker.java
@@ -18,7 +18,6 @@
 
 import static android.media.AudioManager.STREAM_DEVICES_CHANGED_ACTION;
 
-import android.bluetooth.BluetoothProfile;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -36,21 +35,33 @@
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settingslib.bluetooth.BluetoothCallback;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.media.LocalMediaManager;
+import com.android.settingslib.media.MediaDevice;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * Listener for background change from {@code BluetoothCallback} to update media output indicator.
  */
-public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements BluetoothCallback {
+public class MediaOutputIndicatorWorker extends SliceBackgroundWorker implements BluetoothCallback,
+        LocalMediaManager.DeviceCallback {
 
-    private static final String TAG = "MediaOutputIndicatorWorker";
+    private static final String TAG = "MediaOutputIndWorker";
 
     private final DevicesChangedBroadcastReceiver mReceiver;
     private final Context mContext;
+    private final Collection<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
 
     private LocalBluetoothManager mLocalBluetoothManager;
 
+    @VisibleForTesting
+    LocalMediaManager mLocalMediaManager;
+
     public MediaOutputIndicatorWorker(Context context, Uri uri) {
         super(context, uri);
         mReceiver = new DevicesChangedBroadcastReceiver();
@@ -59,6 +70,7 @@
 
     @Override
     protected void onSlicePinned() {
+        mMediaDevices.clear();
         mLocalBluetoothManager = Utils.getLocalBtManager(getContext());
         if (mLocalBluetoothManager == null) {
             Log.e(TAG, "Bluetooth is not supported on this device");
@@ -67,10 +79,25 @@
         final IntentFilter intentFilter = new IntentFilter(STREAM_DEVICES_CHANGED_ACTION);
         mContext.registerReceiver(mReceiver, intentFilter);
         mLocalBluetoothManager.getEventManager().registerCallback(this);
+
+        if (mLocalMediaManager == null) {
+            final MediaController controller = getActiveLocalMediaController();
+            String packageName = null;
+            if (controller != null) {
+                packageName = controller.getPackageName();
+            }
+            mLocalMediaManager = new LocalMediaManager(mContext, packageName, null);
+        }
+
+        mLocalMediaManager.registerCallback(this);
+        mLocalMediaManager.startScan();
     }
 
     @Override
     protected void onSliceUnpinned() {
+        mLocalMediaManager.unregisterCallback(this);
+        mLocalMediaManager.stopScan();
+
         if (mLocalBluetoothManager == null) {
             Log.e(TAG, "Bluetooth is not supported on this device");
             return;
@@ -82,20 +109,7 @@
     @Override
     public void close() {
         mLocalBluetoothManager = null;
-    }
-
-    @Override
-    public void onBluetoothStateChanged(int bluetoothState) {
-        // To handle the case that Bluetooth on and no connected devices
-        notifySliceChange();
-    }
-
-    @Override
-    public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
-        if (bluetoothProfile == BluetoothProfile.A2DP ||
-                bluetoothProfile == BluetoothProfile.HEARING_AID) {
-            notifySliceChange();
-        }
+        mLocalMediaManager = null;
     }
 
     @Override
@@ -124,6 +138,36 @@
         }
         return null;
     }
+
+    @Override
+    public void onDeviceListUpdate(List<MediaDevice> devices) {
+        buildMediaDevices(devices);
+        notifySliceChange();
+    }
+
+    private void buildMediaDevices(List<MediaDevice> devices) {
+        mMediaDevices.clear();
+        mMediaDevices.addAll(devices);
+    }
+
+    @Override
+    public void onSelectedDeviceStateChanged(MediaDevice device, int state) {
+        notifySliceChange();
+    }
+
+    @Override
+    public void onDeviceAttributesChanged() {
+        notifySliceChange();
+    }
+
+    Collection<MediaDevice> getMediaDevices() {
+        return mMediaDevices;
+    }
+
+    MediaDevice getCurrentConnectedMediaDevice() {
+        return mLocalMediaManager.getCurrentConnectedDevice();
+    }
+
     private class DevicesChangedBroadcastReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java
index 92fa843..eff838d 100644
--- a/src/com/android/settings/media/MediaOutputSlice.java
+++ b/src/com/android/settings/media/MediaOutputSlice.java
@@ -22,7 +22,6 @@
 import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI;
 
 import android.app.PendingIntent;
-import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
@@ -246,11 +245,10 @@
         // Return true if
         // 1. AudioMode is not in on-going call
         // 2. worker is not null
-        // 3. Bluetooth is enabled
-        final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-
-        return adapter.isEnabled()
+        // 3. Available devices are more than 1
+        return getWorker() != null
                 && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
-                && getWorker() != null;
+                && getWorker().getMediaDevices().size() > 1;
+
     }
 }
diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
index efbbbf8..d3fb437 100644
--- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java
@@ -48,8 +48,6 @@
 
     @VisibleForTesting
     Preference mPreference;
-    private CarrierConfigManager mCarrierConfigManager;
-    private PersistableBundle mCarrierConfig;
     private PhoneCallStateListener mPhoneStateListener;
     @VisibleForTesting
     Integer mCallState;
@@ -63,21 +61,23 @@
 
     public Enhanced4gBasePreferenceController(Context context, String key) {
         super(context, key);
-        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
         m4gLteListeners = new ArrayList<>();
         mPhoneStateListener = new PhoneCallStateListener();
     }
 
     public Enhanced4gBasePreferenceController init(int subId) {
-        if (SubscriptionManager.isValidSubscriptionId(mSubId) && mSubId == subId) {
+        if (mSubId == subId) {
             return this;
         }
         mSubId = subId;
-        mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+        final PersistableBundle carrierConfig = getCarrierConfigForSubId(subId);
+        if (carrierConfig == null) {
+            return this;
+        }
 
-        final boolean show4GForLTE = mCarrierConfig.getBoolean(
+        final boolean show4GForLTE = carrierConfig.getBoolean(
                 CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
-        m4gCurrentMode = mCarrierConfig.getInt(
+        m4gCurrentMode = carrierConfig.getInt(
                 CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT);
         if (m4gCurrentMode != MODE_ADVANCED_CALL) {
             m4gCurrentMode = show4GForLTE ? MODE_4G_CALLING : MODE_VOLTE;
@@ -91,10 +91,7 @@
         if (!isModeMatched()) {
             return CONDITIONALLY_UNAVAILABLE;
         }
-        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
-            return CONDITIONALLY_UNAVAILABLE;
-        }
-        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
+        final PersistableBundle carrierConfig = getCarrierConfigForSubId(subId);
         if ((carrierConfig == null)
                 || carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) {
             return CONDITIONALLY_UNAVAILABLE;
@@ -103,7 +100,7 @@
         if (!queryState.isReadyToVoLte()) {
             return CONDITIONALLY_UNAVAILABLE;
         }
-        return (isUserControlAllowed() && queryState.isAllowUserControl())
+        return (isUserControlAllowed(carrierConfig) && queryState.isAllowUserControl())
                 ? AVAILABLE : AVAILABLE_UNSEARCHABLE;
     }
 
@@ -129,7 +126,7 @@
         final SwitchPreference switchPreference = (SwitchPreference) preference;
 
         final VolteQueryImsState queryState = queryImsState(mSubId);
-        switchPreference.setEnabled(isUserControlAllowed()
+        switchPreference.setEnabled(isUserControlAllowed(getCarrierConfigForSubId(mSubId))
                 && queryState.isAllowUserControl());
         switchPreference.setChecked(queryState.isEnabledByUser()
                 && queryState.isAllowUserControl());
@@ -180,9 +177,10 @@
         return new VolteQueryImsState(mContext, subId);
     }
 
-    private boolean isUserControlAllowed() {
+    private boolean isUserControlAllowed(final PersistableBundle carrierConfig) {
         return (mCallState != null) && (mCallState == TelephonyManager.CALL_STATE_IDLE)
-                && mCarrierConfig.getBoolean(
+                && (carrierConfig != null)
+                && carrierConfig.getBoolean(
                 CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
     }
 
diff --git a/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java b/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
index e4ff5c4..241dc5d 100644
--- a/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/TelephonyBasePreferenceController.java
@@ -17,6 +17,8 @@
 package com.android.settings.network.telephony;
 
 import android.content.Context;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
 
 import com.android.settings.core.BasePreferenceController;
@@ -37,4 +39,20 @@
     public int getAvailabilityStatus() {
         return MobileNetworkUtils.getAvailability(mContext, mSubId, this::getAvailabilityStatus);
     }
+
+    /**
+     * Get carrier config based on specific subscription id.
+     *
+     * @param subId is the subscription id
+     * @return {@link PersistableBundle} of carrier config, or {@code null} when carrier config
+     * is not available.
+     */
+    public PersistableBundle getCarrierConfigForSubId(int subId) {
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+            return null;
+        }
+        final CarrierConfigManager carrierConfigMgr =
+                mContext.getSystemService(CarrierConfigManager.class);
+        return carrierConfigMgr.getConfigForSubId(subId);
+    }
 }
diff --git a/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java b/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
index 71efc57..fc30030 100644
--- a/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
+++ b/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
@@ -17,6 +17,8 @@
 package com.android.settings.network.telephony;
 
 import android.content.Context;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
 
 import com.android.settings.core.TogglePreferenceController;
@@ -37,4 +39,20 @@
     public int getAvailabilityStatus() {
         return MobileNetworkUtils.getAvailability(mContext, mSubId, this::getAvailabilityStatus);
     }
+
+    /**
+     * Get carrier config based on specific subscription id.
+     *
+     * @param subId is the subscription id
+     * @return {@link PersistableBundle} of carrier config, or {@code null} when carrier config
+     * is not available.
+     */
+    public PersistableBundle getCarrierConfigForSubId(int subId) {
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+            return null;
+        }
+        final CarrierConfigManager carrierConfigMgr =
+                mContext.getSystemService(CarrierConfigManager.class);
+        return carrierConfigMgr.getConfigForSubId(subId);
+    }
 }
diff --git a/src/com/android/settings/support/SupportDashboardActivity.java b/src/com/android/settings/support/SupportDashboardActivity.java
index 8bc538e..b8a22b9 100644
--- a/src/com/android/settings/support/SupportDashboardActivity.java
+++ b/src/com/android/settings/support/SupportDashboardActivity.java
@@ -25,8 +25,8 @@
 import com.android.settings.overlay.SupportFeatureProvider;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.Indexable;
-import com.android.settingslib.search.SearchIndexableRaw;
 import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.search.SearchIndexableRaw;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -45,8 +45,8 @@
 
         // try to launch support if we have the feature provider
         if (supportFeatureProvider != null) {
-          supportFeatureProvider.startSupport(this);
-          finish();
+            supportFeatureProvider.startSupport(this);
+            finish();
         }
     }
 
@@ -66,7 +66,7 @@
                     // Add the activity title
                     SearchIndexableRaw data = new SearchIndexableRaw(context);
                     data.title = context.getString(R.string.page_tab_title_support);
-                    data.screenTitle = context.getString(R.string.settings_label);
+                    data.screenTitle = context.getString(R.string.page_tab_title_support);
                     data.summaryOn = context.getString(R.string.support_summary);
                     data.intentTargetPackage = context.getPackageName();
                     data.intentTargetClass = SupportDashboardActivity.class.getName();
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 5264e10..54026a5 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -28,8 +28,6 @@
 import android.net.StaticIpConfiguration;
 import android.net.Uri;
 import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiConfiguration.AuthAlgorithm;
-import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiEnterpriseConfig.Phase2;
@@ -638,13 +636,11 @@
 
         switch (mAccessPointSecurity) {
             case AccessPoint.SECURITY_NONE:
-                config.allowedKeyManagement.set(KeyMgmt.NONE);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
                 break;
 
             case AccessPoint.SECURITY_WEP:
-                config.allowedKeyManagement.set(KeyMgmt.NONE);
-                config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
-                config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
                 if (mPasswordView.length() != 0) {
                     int length = mPasswordView.length();
                     String password = mPasswordView.getText().toString();
@@ -659,7 +655,7 @@
                 break;
 
             case AccessPoint.SECURITY_PSK:
-                config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
                 if (mPasswordView.length() != 0) {
                     String password = mPasswordView.getText().toString();
                     if (password.matches("[0-9A-Fa-f]{64}")) {
@@ -672,16 +668,11 @@
 
             case AccessPoint.SECURITY_EAP:
             case AccessPoint.SECURITY_EAP_SUITE_B:
-                config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
-                config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
                 if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) {
-                    config.allowedKeyManagement.set(KeyMgmt.SUITE_B_192);
-                    config.requirePmf = true;
-                    config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256);
-                    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
-                    config.allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher
-                            .BIP_GMAC_256);
                     // allowedSuiteBCiphers will be set according to certificate type
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
+                } else {
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
                 }
                 config.enterpriseConfig = new WifiEnterpriseConfig();
                 int eapMethod = mEapMethodSpinner.getSelectedItemPosition();
@@ -815,8 +806,7 @@
                 }
                 break;
             case AccessPoint.SECURITY_SAE:
-                config.allowedKeyManagement.set(KeyMgmt.SAE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                 if (mPasswordView.length() != 0) {
                     String password = mPasswordView.getText().toString();
                     config.preSharedKey = '"' + password + '"';
@@ -824,8 +814,7 @@
                 break;
 
             case AccessPoint.SECURITY_OWE:
-                config.allowedKeyManagement.set(KeyMgmt.OWE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
                 break;
 
             default:
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index 830f061..4df0dfd 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -27,8 +27,6 @@
 import android.net.StaticIpConfiguration;
 import android.net.Uri;
 import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiConfiguration.AuthAlgorithm;
-import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiEnterpriseConfig;
 import android.net.wifi.WifiEnterpriseConfig.Eap;
 import android.net.wifi.WifiEnterpriseConfig.Phase2;
@@ -633,13 +631,11 @@
 
         switch (mWifiEntrySecurity) {
             case WifiEntry.SECURITY_NONE:
-                config.allowedKeyManagement.set(KeyMgmt.NONE);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
                 break;
 
             case WifiEntry.SECURITY_WEP:
-                config.allowedKeyManagement.set(KeyMgmt.NONE);
-                config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
-                config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
                 if (mPasswordView.length() != 0) {
                     int length = mPasswordView.length();
                     String password = mPasswordView.getText().toString();
@@ -654,7 +650,7 @@
                 break;
 
             case WifiEntry.SECURITY_PSK:
-                config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
                 if (mPasswordView.length() != 0) {
                     String password = mPasswordView.getText().toString();
                     if (password.matches("[0-9A-Fa-f]{64}")) {
@@ -667,16 +663,11 @@
 
             case WifiEntry.SECURITY_EAP:
             case WifiEntry.SECURITY_EAP_SUITE_B:
-                config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
-                config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
                 if (mWifiEntrySecurity == WifiEntry.SECURITY_EAP_SUITE_B) {
-                    config.allowedKeyManagement.set(KeyMgmt.SUITE_B_192);
-                    config.requirePmf = true;
-                    config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256);
-                    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
-                    config.allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher
-                            .BIP_GMAC_256);
                     // allowedSuiteBCiphers will be set according to certificate type
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
+                } else {
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
                 }
                 config.enterpriseConfig = new WifiEnterpriseConfig();
                 int eapMethod = mEapMethodSpinner.getSelectedItemPosition();
@@ -809,8 +800,7 @@
                 }
                 break;
             case WifiEntry.SECURITY_SAE:
-                config.allowedKeyManagement.set(KeyMgmt.SAE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                 if (mPasswordView.length() != 0) {
                     String password = mPasswordView.getText().toString();
                     config.preSharedKey = '"' + password + '"';
@@ -818,8 +808,7 @@
                 break;
 
             case WifiEntry.SECURITY_OWE:
-                config.allowedKeyManagement.set(KeyMgmt.OWE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
                 break;
 
             default:
diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java
index 08ba441..c73e6a2 100644
--- a/src/com/android/settings/wifi/WifiUtils.java
+++ b/src/com/android/settings/wifi/WifiUtils.java
@@ -157,13 +157,11 @@
 
         switch (security) {
             case AccessPoint.SECURITY_NONE:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
                 break;
 
             case AccessPoint.SECURITY_WEP:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
-                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
-                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
                 if (!TextUtils.isEmpty(password)) {
                     int length = password.length();
                     // WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
@@ -177,7 +175,7 @@
                 break;
 
             case AccessPoint.SECURITY_PSK:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
                 if (!TextUtils.isEmpty(password)) {
                     if (password.matches("[0-9A-Fa-f]{64}")) {
                         config.preSharedKey = password;
@@ -189,16 +187,11 @@
 
             case AccessPoint.SECURITY_EAP:
             case AccessPoint.SECURITY_EAP_SUITE_B:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
                 if (security == AccessPoint.SECURITY_EAP_SUITE_B) {
-                    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
-                    config.requirePmf = true;
-                    config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256);
-                    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
-                    config.allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher
-                            .BIP_GMAC_256);
                     // allowedSuiteBCiphers will be set according to certificate type
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_SUITE_B);
+                } else {
+                    config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
                 }
 
                 if (!TextUtils.isEmpty(password)) {
@@ -206,16 +199,14 @@
                 }
                 break;
             case AccessPoint.SECURITY_SAE:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
                 if (!TextUtils.isEmpty(password)) {
                     config.preSharedKey = '"' + password + '"';
                 }
                 break;
 
             case AccessPoint.SECURITY_OWE:
-                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE);
-                config.requirePmf = true;
+                config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
                 break;
 
             default:
diff --git a/src/com/android/settings/wifi/dpp/WifiNetworkConfig.java b/src/com/android/settings/wifi/dpp/WifiNetworkConfig.java
index fdd0bbe..e6195d1 100644
--- a/src/com/android/settings/wifi/dpp/WifiNetworkConfig.java
+++ b/src/com/android/settings/wifi/dpp/WifiNetworkConfig.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiConfiguration.AuthAlgorithm;
 import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiManager;
 import android.text.TextUtils;
@@ -252,17 +251,15 @@
 
             final WifiConfiguration enhancedOpenNetworkWifiConfiguration =
                     getBasicWifiConfiguration();
-            enhancedOpenNetworkWifiConfiguration.allowedKeyManagement.set(KeyMgmt.OWE);
-            enhancedOpenNetworkWifiConfiguration.requirePmf = true;
+            enhancedOpenNetworkWifiConfiguration
+                    .setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
             wifiConfigurations.add(enhancedOpenNetworkWifiConfiguration);
             return wifiConfigurations;
         }
 
         final WifiConfiguration wifiConfiguration = getBasicWifiConfiguration();
         if (mSecurity.startsWith(SECURITY_WEP)) {
-            wifiConfiguration.allowedKeyManagement.set(KeyMgmt.NONE);
-            wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
-            wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
+            wifiConfiguration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
 
             // WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
             final int length = mPreSharedKey.length();
@@ -273,7 +270,7 @@
                 wifiConfiguration.wepKeys[0] = addQuotationIfNeeded(mPreSharedKey);
             }
         } else if (mSecurity.startsWith(SECURITY_WPA_PSK)) {
-            wifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+            wifiConfiguration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
 
             if (mPreSharedKey.matches("[0-9A-Fa-f]{64}")) {
                 wifiConfiguration.preSharedKey = mPreSharedKey;
@@ -281,8 +278,7 @@
                 wifiConfiguration.preSharedKey = addQuotationIfNeeded(mPreSharedKey);
             }
         } else if (mSecurity.startsWith(SECURITY_SAE)) {
-            wifiConfiguration.allowedKeyManagement.set(KeyMgmt.SAE);
-            wifiConfiguration.requirePmf = true;
+            wifiConfiguration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
             if (mPreSharedKey.length() != 0) {
                 wifiConfiguration.preSharedKey = addQuotationIfNeeded(mPreSharedKey);
             }
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
index 35a2d19..e476c21 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
@@ -60,7 +60,7 @@
                 TEST_SERVICE_KEY_1);
 
         assertThat(shortcut.getComponentName()).isEqualTo(TEST_SERVICE_NAME_1);
-        assertThat(shortcut.getUserShortcutType()).isEqualTo(TEST_SERVICE_VALUE_1);
+        assertThat(shortcut.getType()).isEqualTo(TEST_SERVICE_VALUE_1);
     }
 
     @Test
@@ -69,7 +69,7 @@
                 TEST_SERVICE_KEY_2);
 
         shortcut.setComponentName(TEST_SERVICE_NAME_1);
-        shortcut.setUserShortcutType(TEST_SERVICE_VALUE_1);
+        shortcut.setType(TEST_SERVICE_VALUE_1);
 
         assertThat(shortcut.flattenToString()).isEqualTo(TEST_SERVICE_KEY_1);
     }
@@ -103,7 +103,7 @@
 
         final String str = (String) filtered.toArray()[0];
         final AccessibilityUserShortcutType shortcut = new AccessibilityUserShortcutType(str);
-        final int type = shortcut.getUserShortcutType();
+        final int type = shortcut.getType();
         assertThat(type).isEqualTo(TEST_SERVICE_VALUE_1);
     }
 
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
index 260fc41..fcc7f51 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
@@ -102,7 +102,7 @@
         mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
                 false, BluetoothDevicePreference.SortType.TYPE_DEFAULT);
         mBluetoothDeviceUpdater =
-            new BluetoothDeviceUpdater(mDashboardFragment, mDevicePreferenceCallback,
+            new BluetoothDeviceUpdater(mContext, mDashboardFragment, mDevicePreferenceCallback,
                     mLocalManager) {
                 @Override
                 public boolean isFilterMatched(CachedBluetoothDevice cachedBluetoothDevice) {
diff --git a/tests/robotests/src/com/android/settings/development/WirelessDebuggingEnablerTest.java b/tests/robotests/src/com/android/settings/development/WirelessDebuggingEnablerTest.java
index 7f4f530..56e898f 100644
--- a/tests/robotests/src/com/android/settings/development/WirelessDebuggingEnablerTest.java
+++ b/tests/robotests/src/com/android/settings/development/WirelessDebuggingEnablerTest.java
@@ -27,7 +27,6 @@
 
 import androidx.lifecycle.LifecycleOwner;
 
-import com.android.settings.SettingsActivity;
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settings.widget.SwitchBar;
 import com.android.settings.widget.SwitchBarController;
@@ -48,8 +47,6 @@
 public class WirelessDebuggingEnablerTest {
 
     @Mock
-    private SettingsActivity mActivity;
-    @Mock
     private SwitchBar mSwitchBar;
     @Mock
     private WirelessDebuggingEnabler.OnEnabledListener mListener;
@@ -133,8 +130,6 @@
 
         mWirelessDebuggingEnabler.onSwitchToggled(true);
 
-        verify(mSwitchBar).setChecked(true);
-        verify(mListener).onEnabled(true);
         assertThat(Global.getInt(mContext.getContentResolver(),
                 Global.ADB_WIFI_ENABLED, -1)).isEqualTo(1);
         // Should also get a callback
@@ -151,8 +146,6 @@
 
         mWirelessDebuggingEnabler.onSwitchToggled(false);
 
-        verify(mSwitchBar).setChecked(false);
-        verify(mListener).onEnabled(false);
         assertThat(Global.getInt(mContext.getContentResolver(),
             Global.ADB_WIFI_ENABLED, -1)).isEqualTo(0);
         // Should also get a callback
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSliceTest.java
index cec3bee..a0b2141 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSliceTest.java
@@ -23,12 +23,15 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.PendingIntent;
 import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
 
@@ -62,6 +65,7 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowBluetoothAdapter.class)
 public class BluetoothDevicesSliceTest {
 
     private static final String BLUETOOTH_MOCK_ADDRESS = "00:11:00:11:00:11";
@@ -96,6 +100,13 @@
 
         // Initial Bluetooth device list.
         mBluetoothDeviceList = new ArrayList<>();
+
+        final BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
+        if (defaultAdapter != null) {
+            final ShadowBluetoothAdapter shadowBluetoothAdapter = Shadow.extract(defaultAdapter);
+            shadowBluetoothAdapter.setEnabled(true);
+            shadowBluetoothAdapter.setState(BluetoothAdapter.STATE_ON);
+        }
     }
 
     @After
@@ -114,7 +125,6 @@
     }
 
     @Test
-    @Config(shadows = ShadowBluetoothAdapter.class)
     public void getSlice_hasBluetoothHardware_shouldHaveBluetoothDevicesTitleAndPairNewDevice() {
         final Slice slice = mBluetoothDevicesSlice.getSlice();
 
@@ -127,12 +137,9 @@
     }
 
     @Test
-    @Config(shadows = ShadowBluetoothAdapter.class)
     public void getSlice_hasBluetoothDevices_shouldMatchBluetoothMockTitle() {
-        final ShadowBluetoothAdapter adapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
-        adapter.setState(BluetoothAdapter.STATE_ON);
         mockBluetoothDeviceList(1);
-        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getConnectedBluetoothDevices();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
 
         final Slice slice = mBluetoothDevicesSlice.getSlice();
 
@@ -141,39 +148,43 @@
     }
 
     @Test
-    @Config(shadows = ShadowBluetoothAdapter.class)
-    public void getSlice_hasMediaBluetoothDevice_shouldBuildMediaBluetoothAction() {
-        final ShadowBluetoothAdapter adapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
-        adapter.setState(BluetoothAdapter.STATE_ON);
-        mockBluetoothDeviceList(1 /* deviceCount */);
-        doReturn(true).when(mBluetoothDeviceList.get(0)).isConnectedA2dpDevice();
-        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getConnectedBluetoothDevices();
+    public void getSlice_hasAvailableMediaDevice_shouldBuildPrimaryBluetoothAction() {
+        mockBluetoothDeviceList(1);
+        when(mBluetoothDeviceList.get(0).getDevice().isConnected()).thenReturn(true);
+        doReturn(true).when(mBluetoothDeviceList.get(0)).isConnectedHearingAidDevice();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
 
         mBluetoothDevicesSlice.getSlice();
 
-        verify(mBluetoothDevicesSlice).buildMediaBluetoothAction(any());
+        verify(mBluetoothDevicesSlice).buildPrimaryBluetoothAction(any());
     }
 
     @Test
-    @Config(shadows = ShadowBluetoothAdapter.class)
-    public void getSlice_noMediaBluetoothDevice_shouldNotBuildMediaBluetoothAction() {
-        final ShadowBluetoothAdapter adapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
-        adapter.setState(BluetoothAdapter.STATE_ON);
-        mockBluetoothDeviceList(1 /* deviceCount */);
-        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getConnectedBluetoothDevices();
+    public void getSlice_hasPreviouslyConnectedDevice_shouldBuildPrimaryBluetoothAction() {
+        mockBluetoothDeviceList(1);
+        when(mBluetoothDeviceList.get(0).getDevice().isConnected()).thenReturn(false);
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
 
         mBluetoothDevicesSlice.getSlice();
 
-        verify(mBluetoothDevicesSlice, never()).buildMediaBluetoothAction(any());
+        verify(mBluetoothDevicesSlice).buildPrimaryBluetoothAction(any());
     }
 
     @Test
-    @Config(shadows = ShadowBluetoothAdapter.class)
+    public void getSlice_hasNonMediaDeviceConnected_shouldNotBuildPrimaryBluetoothAction() {
+        mockBluetoothDeviceList(1);
+        when(mBluetoothDeviceList.get(0).getDevice().isConnected()).thenReturn(true);
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
+
+        mBluetoothDevicesSlice.getSlice();
+
+        verify(mBluetoothDevicesSlice, never()).buildPrimaryBluetoothAction(any());
+    }
+
+    @Test
     public void getSlice_exceedDefaultRowCount_shouldOnlyShowDefaultRows() {
-        final ShadowBluetoothAdapter adapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
-        adapter.setState(BluetoothAdapter.STATE_ON);
         mockBluetoothDeviceList(BluetoothDevicesSlice.DEFAULT_EXPANDED_ROW_COUNT + 1);
-        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getConnectedBluetoothDevices();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
 
         final Slice slice = mBluetoothDevicesSlice.getSlice();
 
@@ -183,9 +194,10 @@
     }
 
     @Test
-    public void onNotifyChange_mediaDevice_shouldActivateDevice() {
+    public void onNotifyChange_connectedDevice_shouldActivateDevice() {
         mockBluetoothDeviceList(1);
-        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getConnectedBluetoothDevices();
+        doReturn(true).when(mBluetoothDeviceList.get(0)).isConnected();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
         final Intent intent = new Intent().putExtra(
                 BluetoothDevicesSlice.BLUETOOTH_DEVICE_HASH_CODE,
                 mCachedBluetoothDevice.hashCode());
@@ -195,7 +207,41 @@
         verify(mCachedBluetoothDevice).setActive();
     }
 
+    @Test
+    public void onNotifyChange_availableDisconnectedDevice_shouldConnectToDevice() {
+        mockBluetoothDeviceList(1);
+        doReturn(false).when(mBluetoothDeviceList.get(0)).isConnected();
+        doReturn(false).when(mBluetoothDeviceList.get(0)).isBusy();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
+        final Intent intent = new Intent().putExtra(
+                BluetoothDevicesSlice.BLUETOOTH_DEVICE_HASH_CODE,
+                mCachedBluetoothDevice.hashCode());
+
+        mBluetoothDevicesSlice.onNotifyChange(intent);
+
+        verify(mCachedBluetoothDevice).connect();
+    }
+
+    @Test
+    public void onNotifyChange_busyDisconnectedDevice_shouldDoNothing() {
+        mockBluetoothDeviceList(1);
+        doReturn(false).when(mBluetoothDeviceList.get(0)).isConnected();
+        doReturn(true).when(mBluetoothDeviceList.get(0)).isBusy();
+        doReturn(mBluetoothDeviceList).when(mBluetoothDevicesSlice).getPairedBluetoothDevices();
+        final Intent intent = new Intent().putExtra(
+                BluetoothDevicesSlice.BLUETOOTH_DEVICE_HASH_CODE,
+                mCachedBluetoothDevice.hashCode());
+
+        mBluetoothDevicesSlice.onNotifyChange(intent);
+
+        verify(mCachedBluetoothDevice, never()).setActive();
+        verify(mCachedBluetoothDevice, never()).connect();
+    }
+
     private void mockBluetoothDeviceList(int deviceCount) {
+        final BluetoothDevice device = mock(BluetoothDevice.class);
+        doReturn(BluetoothDevice.BOND_BONDED).when(device).getBondState();
+        doReturn(device).when(mCachedBluetoothDevice).getDevice();
         doReturn(BLUETOOTH_MOCK_TITLE).when(mCachedBluetoothDevice).getName();
         doReturn(BLUETOOTH_MOCK_SUMMARY).when(mCachedBluetoothDevice).getConnectionSummary();
         doReturn(BLUETOOTH_MOCK_ADDRESS).when(mCachedBluetoothDevice).getAddress();
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
index 7097889..cc4a870 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
@@ -26,11 +26,9 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothManager;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.media.session.MediaController;
 import android.media.session.MediaSession;
@@ -46,14 +44,12 @@
 import com.android.settings.R;
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
-import com.android.settingslib.bluetooth.A2dpProfile;
-import com.android.settingslib.bluetooth.HearingAidProfile;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+import com.android.settingslib.media.LocalMediaManager;
+import com.android.settingslib.media.MediaDevice;
 import com.android.settingslib.media.MediaOutputSliceConstants;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -73,31 +69,28 @@
         MediaOutputIndicatorSliceTest.ShadowSliceBackgroundWorker.class})
 public class MediaOutputIndicatorSliceTest {
 
-    private static final String TEST_A2DP_DEVICE_NAME = "Test_A2DP_BT_Device_NAME";
-    private static final String TEST_HAP_DEVICE_NAME = "Test_HAP_BT_Device_NAME";
-    private static final String TEST_A2DP_DEVICE_ADDRESS = "00:A1:A1:A1:A1:A1";
-    private static final String TEST_HAP_DEVICE_ADDRESS = "00:B2:B2:B2:B2:B2";
+    private static final String TEST_DEVICE_1_NAME = "test_device_1_name";
+    private static final String TEST_DEVICE_2_NAME = "test_device_2_name";
     private static final String TEST_PACKAGE_NAME = "com.test";
 
     private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker;
 
-    @Mock
-    private A2dpProfile mA2dpProfile;
-    @Mock
-    private HearingAidProfile mHearingAidProfile;
+    private final List<MediaDevice> mDevices = new ArrayList<>();
+
     @Mock
     private LocalBluetoothManager mLocalBluetoothManager;
     @Mock
-    private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
-    @Mock
     private MediaController mMediaController;
+    @Mock
+    private LocalMediaManager mLocalMediaManager;
+    @Mock
+    private MediaDevice mDevice1;
+    @Mock
+    private MediaDevice mDevice2;
+    @Mock
+    private Drawable mTestDrawable;
 
-    private BluetoothAdapter mBluetoothAdapter;
-    private BluetoothDevice mA2dpDevice;
-    private BluetoothDevice mHapDevice;
-    private BluetoothManager mBluetoothManager;
     private Context mContext;
-    private List<BluetoothDevice> mDevicesList;
     private MediaOutputIndicatorSlice mMediaOutputIndicatorSlice;
     private AudioManager mAudioManager;
     private MediaSession.Token mToken;
@@ -107,7 +100,6 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-        mAudioManager.setMode(AudioManager.MODE_NORMAL);
         sMediaOutputIndicatorWorker = spy(new MediaOutputIndicatorWorker(mContext,
                 MEDIA_OUTPUT_INDICATOR_SLICE_URI));
         mToken = new MediaSession.Token(Process.myUid(), null);
@@ -115,109 +107,86 @@
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
         // Setup Bluetooth environment
         ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
-        mBluetoothManager = new BluetoothManager(mContext);
-        mBluetoothAdapter = mBluetoothManager.getAdapter();
-        when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
-        when(mLocalBluetoothProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
-        when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile);
-
-        // Setup A2dp device
-        mA2dpDevice = spy(mBluetoothAdapter.getRemoteDevice(TEST_A2DP_DEVICE_ADDRESS));
-        when(mA2dpDevice.getName()).thenReturn(TEST_A2DP_DEVICE_NAME);
-        when(mA2dpDevice.isConnected()).thenReturn(true);
-        // Setup HearingAid device
-        mHapDevice = spy(mBluetoothAdapter.getRemoteDevice(TEST_HAP_DEVICE_ADDRESS));
-        when(mHapDevice.getName()).thenReturn(TEST_HAP_DEVICE_NAME);
-        when(mHapDevice.isConnected()).thenReturn(true);
+        // Setup mock devices
+        when(mDevice1.getName()).thenReturn(TEST_DEVICE_1_NAME);
+        when(mDevice1.getIcon()).thenReturn(mTestDrawable);
+        when(mDevice1.getMaxVolume()).thenReturn(100);
+        when(mDevice1.isConnected()).thenReturn(true);
+        when(mDevice2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(mDevice2.getIcon()).thenReturn(mTestDrawable);
+        when(mDevice2.getMaxVolume()).thenReturn(100);
+        when(mDevice2.isConnected()).thenReturn(false);
 
         mMediaOutputIndicatorSlice = new MediaOutputIndicatorSlice(mContext);
-        mDevicesList = new ArrayList<>();
+    }
+
+    @Test
+    public void getSlice_withConnectedDevice_verifyMetadata() {
+        mDevices.add(mDevice1);
+        mDevices.add(mDevice2);
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+
+        final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
+        final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
+
+        assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title));
+        assertThat(metadata.getSubtitle()).isEqualTo(TEST_DEVICE_1_NAME);
+        assertThat(metadata.isErrorSlice()).isFalse();
     }
 
     @Test
     public void getSlice_noConnectedDevice_returnErrorSlice() {
-        mDevicesList.clear();
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mDevices.clear();
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
 
         final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
         final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
+
         assertThat(metadata.isErrorSlice()).isTrue();
     }
 
     @Test
-    public void getSlice_noActiveDevice_verifyDefaultName() {
-        mDevicesList.add(mA2dpDevice);
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
-        when(mA2dpProfile.getActiveDevice()).thenReturn(null);
-
-        // Verify slice title and subtitle
-        final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
-        assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title));
-        assertThat(metadata.getSubtitle()).isEqualTo(mContext.getText(
-                R.string.media_output_default_summary));
-        assertThat(metadata.isErrorSlice()).isFalse();
-    }
-
-    @Test
-    @Ignore
-    public void getSlice_A2dpDeviceActive_verifyName() {
-        mDevicesList.add(mA2dpDevice);
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
-        when(mA2dpProfile.getActiveDevice()).thenReturn(mA2dpDevice);
-
-        final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
-        assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title));
-        assertThat(metadata.getSubtitle()).isEqualTo(TEST_A2DP_DEVICE_NAME);
-        assertThat(metadata.isErrorSlice()).isFalse();
-    }
-
-    @Test
-    @Ignore
-    public void getSlice_HADeviceActive_verifyName() {
-        mDevicesList.add(mHapDevice);
-        when(mHearingAidProfile.getConnectedDevices()).thenReturn(mDevicesList);
-        when(mHearingAidProfile.getActiveDevices()).thenReturn(mDevicesList);
-
-        // Verify slice title and subtitle
-        final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
-        assertThat(metadata.getTitle()).isEqualTo(mContext.getText(R.string.media_output_title));
-        assertThat(metadata.getSubtitle()).isEqualTo(TEST_HAP_DEVICE_NAME);
-        assertThat(metadata.isErrorSlice()).isFalse();
-    }
-
-    @Test
     public void getSlice_audioModeIsInCommunication_returnErrorSlice() {
-        mDevicesList.add(mA2dpDevice);
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mDevices.add(mDevice1);
+        mDevices.add(mDevice2);
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
 
         final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
         final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
+
         assertThat(metadata.isErrorSlice()).isTrue();
     }
 
     @Test
     public void getSlice_audioModeIsRingtone_returnErrorSlice() {
-        mDevicesList.add(mA2dpDevice);
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mDevices.add(mDevice1);
+        mDevices.add(mDevice2);
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         mAudioManager.setMode(AudioManager.MODE_RINGTONE);
 
         final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
         final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
+
         assertThat(metadata.isErrorSlice()).isTrue();
     }
 
     @Test
     public void getSlice_audioModeIsInCall_returnErrorSlice() {
-        mDevicesList.add(mA2dpDevice);
-        when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList);
+        mDevices.add(mDevice1);
+        mDevices.add(mDevice2);
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         mAudioManager.setMode(AudioManager.MODE_IN_CALL);
 
         final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice();
         final SliceMetadata metadata = SliceMetadata.from(mContext, mediaSlice);
+
         assertThat(metadata.isErrorSlice()).isTrue();
     }
 
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
index b6231a3..d96541d 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorWorkerTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -38,9 +39,11 @@
 import android.media.session.PlaybackState;
 import android.net.Uri;
 
+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.LocalBluetoothManager;
+import com.android.settingslib.media.LocalMediaManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -56,7 +59,7 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothUtils.class})
+@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class})
 public class MediaOutputIndicatorWorkerTest {
     private static final Uri URI = Uri.parse("content://com.android.settings.slices/test");
 
@@ -68,6 +71,8 @@
     private MediaSessionManager mMediaSessionManager;
     @Mock
     private MediaController mMediaController;
+    @Mock
+    private LocalMediaManager mLocalMediaManager;
 
     private Context mContext;
     private MediaOutputIndicatorWorker mMediaOutputIndicatorWorker;
@@ -95,29 +100,40 @@
 
     @Test
     public void onSlicePinned_registerCallback() {
+        mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager;
         mMediaOutputIndicatorWorker.onSlicePinned();
+
         verify(mBluetoothEventManager).registerCallback(mMediaOutputIndicatorWorker);
         verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
+        verify(mLocalMediaManager).registerCallback(mMediaOutputIndicatorWorker);
+        verify(mLocalMediaManager).startScan();
     }
 
     @Test
     public void onSliceUnpinned_unRegisterCallback() {
+        mMediaOutputIndicatorWorker.mLocalMediaManager = mLocalMediaManager;
         mMediaOutputIndicatorWorker.onSlicePinned();
         mMediaOutputIndicatorWorker.onSliceUnpinned();
+
         verify(mBluetoothEventManager).unregisterCallback(mMediaOutputIndicatorWorker);
         verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
+        verify(mLocalMediaManager).unregisterCallback(mMediaOutputIndicatorWorker);
+        verify(mLocalMediaManager).stopScan();
     }
 
     @Test
     public void onReceive_shouldNotifyChange() {
         mMediaOutputIndicatorWorker.onSlicePinned();
+        // onSlicePinned will registerCallback() and get first callback. Callback triggers this at
+        // the first time.
+        verify(mResolver, times(1)).notifyChange(URI, null);
 
         final Intent intent = new Intent(AudioManager.STREAM_DEVICES_CHANGED_ACTION);
         for (BroadcastReceiver receiver : mShadowApplication.getReceiversForIntent(intent)) {
             receiver.onReceive(mContext, intent);
         }
-
-        verify(mResolver).notifyChange(URI, null);
+        // Intent receiver triggers notifyChange() again
+        verify(mResolver, times(2)).notifyChange(URI, null /* observer */);
     }
 
     @Test