Merge "Partial revert of ag/10482633" into rvc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ef38240..12075a2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3202,6 +3202,10 @@
                     <action android:name="com.android.settings.panel.action.MEDIA_OUTPUT" />
                     <category android:name="android.intent.category.DEFAULT" />
                 </intent-filter>
+                <intent-filter>
+                    <action android:name="com.android.settings.panel.action.MEDIA_OUTPUT_GROUP" />
+                    <category android:name="android.intent.category.DEFAULT" />
+                </intent-filter>
         </activity-alias>
 
         <provider android:name=".slices.SettingsSliceProvider"
diff --git a/OWNERS b/OWNERS
index 16fc48c..47961cd 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,7 +6,6 @@
 edgarwang@google.com
 emilychuang@google.com
 millchen@google.com
-rafftsai@google.com
 stanleytfwang@google.com
 sunnyshao@google.com
 tmfang@google.com
diff --git a/res/layout/contextual_slice_sticky_tile.xml b/res/layout/contextual_slice_sticky_tile.xml
index 734697f..5991068 100644
--- a/res/layout/contextual_slice_sticky_tile.xml
+++ b/res/layout/contextual_slice_sticky_tile.xml
@@ -15,12 +15,11 @@
      limitations under the License.
 -->
 
-<LinearLayout
+<com.google.android.material.card.MaterialCardView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="vertical"
-    style="@style/StickyCardStyle">
+    style="@style/ContextualCardStyle">
 
     <androidx.slice.widget.SliceView
         android:id="@+id/slice_view"
@@ -28,9 +27,6 @@
         style="@style/ContextualCardSliceViewStyle"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="@dimen/contextual_card_vertical_margin"
         android:importantForAccessibility="no"/>
 
-    <include layout="@layout/horizontal_divider"/>
-
-</LinearLayout>
+</com.google.android.material.card.MaterialCardView>
diff --git a/res/layout/panel_slice_slider_row.xml b/res/layout/panel_slice_slider_row.xml
new file mode 100644
index 0000000..f886a85
--- /dev/null
+++ b/res/layout/panel_slice_slider_row.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2020 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <androidx.slice.widget.SliceView
+        android:id="@+id/slice_view"
+        style="@style/SliceViewSliderStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"/>
+</LinearLayout>
\ No newline at end of file
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/res/values/strings.xml b/res/values/strings.xml
index 608eac8..37badce 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3814,6 +3814,8 @@
 
     <!-- Tethering footer info [CHAR LIMIT=NONE]-->
     <string name="tethering_footer_info">Use hotspot and tethering to provide internet to other devices through your mobile data connection. Apps can also create a hotspot to share content with nearby devices.</string>
+    <!-- Tethering footer info for the device which supports Wi-Fi and Wi-Fi tethering enabled at the same time [CHAR LIMIT=NONE]-->
+    <string name="tethering_footer_info_sta_ap_concurrency">Use hotspot and tethering to provide internet to other devices through your Wi\u2011Fi or mobile data connection. Apps can also create a hotspot to share content with nearby devices.</string>
 
     <!-- Tethering help button - calls up a web view with general tethering info -->
     <string name="tethering_help_button_text">Help</string>
@@ -7143,6 +7145,8 @@
     <string name="help_url_magnification" translatable="false"></string>
     <string name="help_url_color_correction" translatable="false"></string>
     <string name="help_url_autoclick" translatable="false"></string>
+    <!-- Help URL, Accessibility caption preferences [DO NOT TRANSLATE] -->
+    <string name="help_url_caption" translatable="false"></string>
     <string name="help_url_system_dashboard" translatable="false"></string>
     <string name="help_url_double_tap_screen" translatable="false"></string>
     <string name="help_url_account_detail" translatable="false"></string>
@@ -8920,6 +8924,9 @@
     <!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
     <string name="zen_mode_bypassing_apps_title">App exceptions</string>
 
+    <!-- [CHAR LIMIT=120] Zen mode settings: No apps are bypassing DND -->
+    <string name="zen_mode_bypassing_apps_subtext_none">No apps can override Do Not Disturb</string>
+
     <!-- [CHAR LIMIT=120] Zen mode settings: Allow apps to bypass DND -->
     <plurals name="zen_mode_bypassing_apps_subtext">
         <item quantity="zero">No apps can override Do Not Disturb</item>
@@ -9310,7 +9317,10 @@
     <string name="assist_and_voice_input_title">Assist &amp; voice input</string>
 
     <!-- Title for Default Assist settings [CHAR LIMIT=30] -->
-    <string name="default_assist_title">Assist app</string>
+    <string name="default_assist_title">Digital assistant app</string>
+
+    <!-- Title for Default Assist settings [CHAR LIMIT=30] -->
+    <string name="default_digital_assistant_title">Default digital assistant app</string>
 
     <!-- [CHAR_LIMIT=45] Title of the security warning dialog for setting an assitant -->
     <string name="assistant_security_warning_title">
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 6ffd6df..848eaf1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -462,12 +462,6 @@
         <item name="rippleColor">?android:attr/colorControlHighlight</item>
     </style>
 
-    <style name="StickyCardStyle">
-        <item name="android:layout_marginBottom">@dimen/contextual_card_vertical_margin</item>
-        <item name="android:layout_marginStart">@dimen/contextual_card_side_margin</item>
-        <item name="android:layout_marginEnd">@dimen/contextual_card_side_margin</item>
-    </style>
-
     <style name="SearchBarStyle">
         <item name="android:layout_margin">@dimen/search_bar_margin</item>
         <item name="cardCornerRadius">@*android:dimen/config_dialogCornerRadius</item>
@@ -512,6 +506,17 @@
         <item name="android:background">?android:attr/colorBackgroundFloating</item>
     </style>
 
+    <style name="SliceViewSliderStyle">
+        <item name="rowStyle">@style/SliceRowSliderStyle</item>
+        <item name="android:background">?android:attr/colorBackgroundFloating</item>
+    </style>
+
+    <style name="SliceRowSliderStyle" parent="SliceRowStyle">
+        <!-- Align text with slider -->
+        <item name="titleStartPadding">12dp</item>
+        <item name="subContentStartPadding">12dp</item>
+    </style>
+
     <style name="ContextualCardSliceViewStyle" parent="SliceViewStyle">
         <item name="android:background">@color/contextual_card_background</item>
     </style>
diff --git a/res/xml/all_tether_prefs.xml b/res/xml/all_tether_prefs.xml
index f552522..294e975 100644
--- a/res/xml/all_tether_prefs.xml
+++ b/res/xml/all_tether_prefs.xml
@@ -88,7 +88,6 @@
 
     <com.android.settingslib.widget.FooterPreference
         android:key="tether_prefs_footer_2"
-        android:title="@string/tethering_footer_info"
         android:selectable="false"
         settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index ef0f696..3430c05 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -19,12 +19,12 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="manage_assist_screen"
-    android:title="@string/assist_and_voice_input_title"
+    android:title="@string/default_assist_title"
     settings:keywords="@string/keywords_assist_input">
 
     <com.android.settings.widget.GearPreference
         android:key="default_assist"
-        android:title="@string/default_assist_title"
+        android:title="@string/default_digital_assistant_title"
         android:summary="@string/summary_placeholder" />
 
     <Preference
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
index 70d55aa..abc49cc 100644
--- a/res/xml/tether_prefs.xml
+++ b/res/xml/tether_prefs.xml
@@ -46,7 +46,6 @@
 
     <com.android.settingslib.widget.FooterPreference
         android:key="tether_prefs_footer"
-        android:title="@string/tethering_footer_info"
         android:selectable="false"
         settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index ce2d132..f8a3aa5 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -43,6 +43,7 @@
         <Preference
             android:key="zen_mode_behavior_apps"
             android:title="@string/zen_category_apps"
+            settings:controller="com.android.settings.notification.zen.ZenModeBypassingAppsPreferenceController"
             android:fragment="com.android.settings.notification.zen.ZenModeBypassingAppsSettings" />
 
         <!-- All sounds -->
diff --git a/src/com/android/settings/AllInOneTetherSettings.java b/src/com/android/settings/AllInOneTetherSettings.java
index a15ad1f..251d135 100644
--- a/src/com/android/settings/AllInOneTetherSettings.java
+++ b/src/com/android/settings/AllInOneTetherSettings.java
@@ -56,6 +56,7 @@
 import com.android.settings.wifi.tether.WifiTetherApBandPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherAutoOffPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherBasePreferenceController;
+import com.android.settings.wifi.tether.WifiTetherFooterPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherPasswordPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherSSIDPreferenceController;
 import com.android.settings.wifi.tether.WifiTetherSecurityPreferenceController;
@@ -71,7 +72,7 @@
  * Displays preferences for all Tethering options.
  */
 @SearchIndexable
-public final class AllInOneTetherSettings extends RestrictedDashboardFragment
+public class AllInOneTetherSettings extends RestrictedDashboardFragment
         implements DataSaverBackend.Listener,
         WifiTetherBasePreferenceController.OnTetherConfigUpdateListener,
         SharedPreferences.OnSharedPreferenceChangeListener {
@@ -304,6 +305,8 @@
                 new WifiTetherSecurityPreferenceController(context, listener));
         controllers.add(
                 new WifiTetherAutoOffPreferenceController(context, KEY_WIFI_TETHER_AUTO_OFF));
+        controllers.add(
+                new WifiTetherFooterPreferenceController(context));
 
         return controllers;
     }
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index a29ec95..cce2010 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -31,6 +31,7 @@
 import android.content.pm.PackageManager;
 import android.hardware.usb.UsbManager;
 import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -71,6 +72,8 @@
     @VisibleForTesting
     static final String KEY_ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering";
     private static final String KEY_DATA_SAVER_FOOTER = "disabled_on_data_saver";
+    @VisibleForTesting
+    static final String KEY_TETHER_PREFS_FOOTER = "tether_prefs_footer";
 
     private static final String TAG = "TetheringSettings";
 
@@ -141,6 +144,7 @@
 
         mUsbTether = (SwitchPreference) findPreference(KEY_USB_TETHER_SETTINGS);
         mBluetoothTether = (SwitchPreference) findPreference(KEY_ENABLE_BLUETOOTH_TETHERING);
+        setFooterPreferenceTitle();
 
         mDataSaverBackend.addListener(this);
 
@@ -201,6 +205,18 @@
     public void onBlacklistStatusChanged(int uid, boolean isBlacklisted)  {
     }
 
+    @VisibleForTesting
+    void setFooterPreferenceTitle() {
+        final Preference footerPreference = findPreference(KEY_TETHER_PREFS_FOOTER);
+        final WifiManager wifiManager =
+                (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
+        if (wifiManager.isStaApConcurrencySupported()) {
+            footerPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+        } else {
+            footerPreference.setTitle(R.string.tethering_footer_info);
+        }
+    }
+
     private class TetherChangeReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context content, Intent intent) {
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
index d31465e..394f50a 100644
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
@@ -407,6 +407,11 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_appearance);
 }
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
index a785424..8e5c003 100644
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
@@ -83,6 +83,11 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_more_options);
 }
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 0034fe6..8a4efbb 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -98,6 +98,11 @@
         return true;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_caption;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.captioning_settings);
 }
diff --git a/src/com/android/settings/bluetooth/OWNERS b/src/com/android/settings/bluetooth/OWNERS
index 2c8d8b7..5e716e1 100644
--- a/src/com/android/settings/bluetooth/OWNERS
+++ b/src/com/android/settings/bluetooth/OWNERS
@@ -1,8 +1,6 @@
 # Default reviewers for this and subdirectories.
-asargent@google.com
-eisenbach@google.com
-jackqdyulei@google.com
-pavlin@google.com
+hughchen@google.com
+timhypeng@google.com
 siyuanh@google.com
 
 # Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/core/instrumentation/StatsLogWriter.java b/src/com/android/settings/core/instrumentation/StatsLogWriter.java
index aa5a60e..14e5d21 100644
--- a/src/com/android/settings/core/instrumentation/StatsLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/StatsLogWriter.java
@@ -30,7 +30,7 @@
                 attribution, /* from pageId */
                 SettingsEnums.PAGE_VISIBLE /* action */,
                 pageId, /* target pageId */
-                null /* changedPreferenceKey */,
+                "" /* changedPreferenceKey */,
                 latency /* changedPreferenceIntValue */);
     }
 
@@ -40,7 +40,7 @@
                 SettingsEnums.PAGE_UNKNOWN /* attribution */,
                 SettingsEnums.PAGE_HIDE /* action */,
                 pageId,
-                null /* changedPreferenceKey */,
+                "" /* changedPreferenceKey */,
                 visibleTime /* changedPreferenceIntValue */);
     }
 
diff --git a/src/com/android/settings/development/OWNERS b/src/com/android/settings/development/OWNERS
deleted file mode 100644
index ecdc4df..0000000
--- a/src/com/android/settings/development/OWNERS
+++ /dev/null
@@ -1,9 +0,0 @@
-# Default reviewers for this and subdirectories.
-edgarwang@google.com
-emilychuang@google.com
-rafftsai@google.com
-tmfang@google.com
-
-
-# Emergency approvers in case the above are not available
-zhfan@google.com
diff --git a/src/com/android/settings/fuelgauge/OWNERS b/src/com/android/settings/fuelgauge/OWNERS
index 5b26c46..4e5ee0e 100644
--- a/src/com/android/settings/fuelgauge/OWNERS
+++ b/src/com/android/settings/fuelgauge/OWNERS
@@ -1,6 +1,3 @@
 # Default reviewers for this and subdirectories.
-dehboxturtle@google.com
-jackqdyulei@google.com
-
-# Emergency approvers in case the above are not available
-asapperstein@google.com
\ No newline at end of file
+millchen@google.com
+tmfang@google.com
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 05531d6..5f1e955 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -120,6 +120,11 @@
             swipeBackground.setVisibility(View.GONE);
         }
         sliceLiveData.observe(mLifecycleOwner, slice -> {
+            if (slice == null) {
+                // The logic handling this case is in OnErrorListener. Adding this check is to
+                // prevent from NPE when it calls .hasHint().
+                return;
+            }
             if (slice.hasHint(HINT_ERROR)) {
                 Log.w(TAG, "Slice has HINT_ERROR, skipping rendering. uri=" + slice.getUri());
                 mSliceLiveDataMap.get(slice.getUri()).removeObservers(mLifecycleOwner);
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
index f634d43..3f35fb5 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.homepage.contextualcards.slices;
 
-import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_STICKY;
-
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.view.View;
@@ -77,9 +75,7 @@
         // Customize slice view for Settings
         cardHolder.sliceView.setShowTitleItems(true);
         if (card.isLargeCard()) {
-            if (holder.getItemViewType() != VIEW_TYPE_STICKY) {
-                cardHolder.sliceView.setShowHeaderDivider(true);
-            }
+            cardHolder.sliceView.setShowHeaderDivider(true);
             cardHolder.sliceView.setShowActionDividers(true);
         }
     }
diff --git a/src/com/android/settings/media/MediaOutputGroupSlice.java b/src/com/android/settings/media/MediaOutputGroupSlice.java
index 521b605..d60ae22 100644
--- a/src/com/android/settings/media/MediaOutputGroupSlice.java
+++ b/src/com/android/settings/media/MediaOutputGroupSlice.java
@@ -118,8 +118,7 @@
         return listBuilder.build();
     }
 
-    private void addRow(ListBuilder listBuilder, List<MediaDevice> mediaDevices,
-            boolean selected) {
+    private void addRow(ListBuilder listBuilder, List<MediaDevice> mediaDevices, boolean selected) {
         for (MediaDevice device : mediaDevices) {
             final int maxVolume = device.getMaxVolume();
             final IconCompat titleIcon = Utils.createIconWithDrawable(device.getIcon());
diff --git a/src/com/android/settings/media/MediaOutputSlice.java b/src/com/android/settings/media/MediaOutputSlice.java
index eff838d..318a50d 100644
--- a/src/com/android/settings/media/MediaOutputSlice.java
+++ b/src/com/android/settings/media/MediaOutputSlice.java
@@ -24,7 +24,6 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.text.SpannableString;
@@ -44,6 +43,7 @@
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settings.slices.SliceBroadcastReceiver;
 import com.android.settingslib.media.MediaDevice;
+import com.android.settingslib.media.MediaOutputSliceConstants;
 
 import java.util.Collection;
 
@@ -54,6 +54,8 @@
 
     private static final String TAG = "MediaOutputSlice";
     private static final String MEDIA_DEVICE_ID = "media_device_id";
+    private static final String MEDIA_GROUP_DEVICE = "media_group_device";
+    private static final String MEDIA_GROUP_REQUEST = "media_group_request";
     private static final int NON_SLIDER_VALUE = -1;
 
     public static final String MEDIA_PACKAGE_NAME = "media_package_name";
@@ -86,52 +88,94 @@
 
         final Collection<MediaDevice> devices = getMediaDevices();
         final MediaDeviceUpdateWorker worker = getWorker();
-        final MediaDevice connectedDevice = worker.getCurrentConnectedMediaDevice();
-        final boolean isTouched = worker.getIsTouched();
-        // Fix the last top device when user press device to transfer.
-        final MediaDevice topDevice = isTouched ? worker.getTopDevice() : connectedDevice;
 
-        if (topDevice != null) {
-            addRow(topDevice, connectedDevice, listBuilder);
-            worker.setTopDevice(topDevice);
-        }
+        if (worker.getSelectedMediaDevice().size() > 1) {
+            // Insert group item to the first when it is available
+            listBuilder.addInputRange(getGroupRow());
+            // Add all other devices
+            for (MediaDevice device : devices) {
+                addRow(device, null /* connectedDevice */, listBuilder);
+            }
+        } else {
+            final MediaDevice connectedDevice = worker.getCurrentConnectedMediaDevice();
+            final boolean isTouched = worker.getIsTouched();
+            // Fix the last top device when user press device to transfer.
+            final MediaDevice topDevice = isTouched ? worker.getTopDevice() : connectedDevice;
 
-        for (MediaDevice device : devices) {
-            if (topDevice == null
-                    || !TextUtils.equals(topDevice.getId(), device.getId())) {
-                addRow(device, connectedDevice, listBuilder);
+            if (topDevice != null) {
+                addRow(topDevice, connectedDevice, listBuilder);
+                worker.setTopDevice(topDevice);
+            }
+
+            for (MediaDevice device : devices) {
+                if (topDevice == null || !TextUtils.equals(topDevice.getId(), device.getId())) {
+                    addRow(device, connectedDevice, listBuilder);
+                }
             }
         }
-
         return listBuilder.build();
     }
 
-    private void addRow(MediaDevice device, MediaDevice connectedDevice, ListBuilder listBuilder) {
-        if (connectedDevice != null && TextUtils.equals(device.getId(), connectedDevice.getId())) {
-            listBuilder.addInputRange(getActiveDeviceHeaderRow(device));
-        } else {
-            listBuilder.addRow(getMediaDeviceRow(device));
-        }
-    }
-
-    private ListBuilder.InputRangeBuilder getActiveDeviceHeaderRow(MediaDevice device) {
-        final String title = device.getName();
-        final IconCompat icon = getDeviceIconCompat(device);
-
+    private ListBuilder.InputRangeBuilder getGroupRow() {
+        final IconCompat icon = IconCompat.createWithResource(mContext,
+                R.drawable.ic_speaker_group_black_24dp);
+        final CharSequence sessionName = getWorker().getSessionName();
+        final CharSequence title = TextUtils.isEmpty(sessionName)
+                ? mContext.getString(R.string.media_output_group) : sessionName;
         final PendingIntent broadcastAction =
-                getBroadcastIntent(mContext, device.getId(), device.hashCode());
+                getBroadcastIntent(mContext, MEDIA_GROUP_DEVICE, MEDIA_GROUP_DEVICE.hashCode());
         final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
                 ListBuilder.ICON_IMAGE, title);
         final ListBuilder.InputRangeBuilder builder = new ListBuilder.InputRangeBuilder()
                 .setTitleItem(icon, ListBuilder.ICON_IMAGE)
                 .setTitle(title)
                 .setPrimaryAction(primarySliceAction)
-                .setInputAction(getSliderInputAction(device.hashCode(), device.getId()))
-                .setMax(device.getMaxVolume())
-                .setValue(device.getCurrentVolume());
+                .setInputAction(getSliderInputAction(MEDIA_GROUP_DEVICE.hashCode(),
+                        MEDIA_GROUP_DEVICE))
+                .setMax(getWorker().getSessionVolumeMax())
+                .setValue(getWorker().getSessionVolume())
+                .addEndItem(getEndItemSliceAction());
         return builder;
     }
 
+    private void addRow(MediaDevice device, MediaDevice connectedDevice, ListBuilder listBuilder) {
+        if (connectedDevice != null && TextUtils.equals(device.getId(), connectedDevice.getId())) {
+            final String title = device.getName();
+            final IconCompat icon = getDeviceIconCompat(device);
+
+            final PendingIntent broadcastAction =
+                    getBroadcastIntent(mContext, device.getId(), device.hashCode());
+            final SliceAction primarySliceAction = SliceAction.createDeeplink(broadcastAction, icon,
+                    ListBuilder.ICON_IMAGE, title);
+
+            if (device.getMaxVolume() > 0) {
+                final ListBuilder.InputRangeBuilder builder = new ListBuilder.InputRangeBuilder()
+                        .setTitleItem(icon, ListBuilder.ICON_IMAGE)
+                        .setTitle(title)
+                        .setPrimaryAction(primarySliceAction)
+                        .setInputAction(getSliderInputAction(device.hashCode(), device.getId()))
+                        .setMax(device.getMaxVolume())
+                        .setValue(device.getCurrentVolume());
+                // Check end item visibility
+                if (device.getDeviceType() == MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE
+                        && !getWorker().getSelectableMediaDevice().isEmpty()) {
+                    builder.addEndItem(getEndItemSliceAction());
+                }
+                listBuilder.addInputRange(builder);
+            } else {
+                final ListBuilder.RowBuilder builder = getMediaDeviceRow(device);
+                // Check end item visibility
+                if (device.getDeviceType() == MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE
+                        && !getWorker().getSelectableMediaDevice().isEmpty()) {
+                    builder.addEndItem(getEndItemSliceAction());
+                }
+                listBuilder.addRow(builder);
+            }
+        } else {
+            listBuilder.addRow(getMediaDeviceRow(device));
+        }
+    }
+
     private PendingIntent getSliderInputAction(int requestCode, String id) {
         final Intent intent = new Intent(getUri().toString())
                 .setData(getUri())
@@ -141,6 +185,20 @@
         return PendingIntent.getBroadcast(mContext, requestCode, intent, 0);
     }
 
+    private SliceAction getEndItemSliceAction() {
+        final Intent intent = new Intent()
+                .setAction(MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT_GROUP)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+                .putExtra(MediaOutputSliceConstants.EXTRA_PACKAGE_NAME,
+                        getWorker().getPackageName());
+
+        return SliceAction.createDeeplink(
+                PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */),
+                IconCompat.createWithResource(mContext, R.drawable.ic_add_blue_24dp),
+                ListBuilder.ICON_IMAGE,
+                mContext.getText(R.string.add));
+    }
+
     private IconCompat getDeviceIconCompat(MediaDevice device) {
         Drawable drawable = device.getIcon();
         if (drawable == null) {
@@ -169,17 +227,17 @@
         final PendingIntent broadcastAction =
                 getBroadcastIntent(mContext, device.getId(), device.hashCode());
         final IconCompat deviceIcon = getDeviceIconCompat(device);
-
         final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder()
-                .setTitleItem(deviceIcon, ListBuilder.ICON_IMAGE)
-                .setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
-                        ListBuilder.ICON_IMAGE, deviceName));
-        // Append status to tile only for the disconnected Bluetooth device.
+                .setTitleItem(deviceIcon, ListBuilder.ICON_IMAGE);
+
         if (device.getDeviceType() == MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE
                 && !device.isConnected()) {
+            // Append status to title only for the disconnected Bluetooth device.
             final SpannableString spannableTitle = new SpannableString(
                     mContext.getString(R.string.media_output_disconnected_status, deviceName));
-            spannableTitle.setSpan(new ForegroundColorSpan(Color.GRAY), deviceName.length(),
+            spannableTitle.setSpan(new ForegroundColorSpan(
+                    Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorSecondary)),
+                    deviceName.length(),
                     spannableTitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
             rowBuilder.setTitle(spannableTitle);
             rowBuilder.setPrimaryAction(SliceAction.create(broadcastAction, deviceIcon,
@@ -214,19 +272,27 @@
         if (TextUtils.isEmpty(id)) {
             return;
         }
-        final MediaDevice device = worker.getMediaDeviceById(id);
-        if (device == null) {
-            return;
-        }
+
         final int newPosition = intent.getIntExtra(EXTRA_RANGE_VALUE, NON_SLIDER_VALUE);
-        if (newPosition == NON_SLIDER_VALUE) {
-            // Intent for device connection
-            Log.d(TAG, "onNotifyChange() device name : " + device.getName());
-            worker.setIsTouched(true);
-            worker.connectDevice(device);
+        if (TextUtils.equals(id, MEDIA_GROUP_DEVICE)) {
+            // Session volume adjustment
+            worker.adjustSessionVolume(newPosition);
         } else {
-            // Intent for volume adjustment
-            worker.adjustVolume(device, newPosition);
+            final MediaDevice device = worker.getMediaDeviceById(id);
+            if (device == null) {
+                Log.d(TAG, "onNotifyChange: Unable to get device " + id);
+                return;
+            }
+
+            if (newPosition == NON_SLIDER_VALUE) {
+                // Intent for device connection
+                Log.d(TAG, "onNotifyChange: Switch to " + device.getName());
+                worker.setIsTouched(true);
+                worker.connectDevice(device);
+            } else {
+                // Single device volume adjustment
+                worker.adjustVolume(device, newPosition);
+            }
         }
     }
 
diff --git a/src/com/android/settings/network/telephony/NetworkScanHelper.java b/src/com/android/settings/network/telephony/NetworkScanHelper.java
index 6d3cdbb..fe5b9e1 100644
--- a/src/com/android/settings/network/telephony/NetworkScanHelper.java
+++ b/src/com/android/settings/network/telephony/NetworkScanHelper.java
@@ -113,12 +113,19 @@
             radioAccessSpecifiers.add(
                     new RadioAccessSpecifier(AccessNetworkType.EUTRAN, null, null));
         }
-        if (networkTypeBitmap3gpp == 0
-                || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_5G) != 0) {
-            radioAccessSpecifiers.add(
-                    new RadioAccessSpecifier(AccessNetworkType.NGRAN, null, null));
-        }
-
+        // If a device supports 5G stand-alone then the code below should be re-enabled; however
+        // a device supporting only non-standalone mode cannot perform PLMN selection and camp on
+        // a 5G network, which means that it shouldn't scan for 5G at the expense of battery as
+        // part of the manual network selection process.
+        //
+        // FIXME(b/151119451): re-enable this code once there is a way to distinguish SA from NSA
+        // support in the modem.
+        //
+        // if (networkTypeBitmap3gpp == 0
+        //        || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_5G) != 0) {
+        //    radioAccessSpecifiers.add(
+        //            new RadioAccessSpecifier(AccessNetworkType.NGRAN, null, null));
+        // }
 
         return new NetworkScanRequest(
                 NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
diff --git a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
index b3630a0..9484a09 100644
--- a/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeAllBypassingAppsPreferenceController.java
@@ -105,9 +105,7 @@
         ApplicationsState.AppFilter filter = ApplicationsState.FILTER_ALL_ENABLED;
         List<ApplicationsState.AppEntry> apps = mAppSession.rebuild(filter,
                 ApplicationsState.ALPHA_COMPARATOR);
-        if (apps != null) {
-            updateNotificationChannelList(apps);
-        }
+        updateNotificationChannelList(apps);
     }
 
     @VisibleForTesting
@@ -116,6 +114,8 @@
             return;
         }
 
+        boolean showEmptyState = true;
+
         List<Preference> channelsBypassingDnd = new ArrayList<>();
         for (ApplicationsState.AppEntry entry : apps) {
             String pkg = entry.info.packageName;
@@ -148,6 +148,7 @@
                     return true;
                 });
                 channelsBypassingDnd.add(pref);
+                showEmptyState = false;
             }
 
             mPreferenceScreen.removeAll();
@@ -156,6 +157,11 @@
                     mPreferenceScreen.addPreference(prefToAdd);
                 }
             }
+            if (showEmptyState) {
+                Preference pref = new Preference(mPrefContext);
+                pref.setTitle(R.string.zen_mode_bypassing_apps_subtext_none);
+                mPreferenceScreen.addPreference(pref);
+            }
         }
     }
 
diff --git a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
index 9ef9380..a93fa1b 100644
--- a/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeBypassingAppsPreferenceController.java
@@ -9,7 +9,7 @@
 
 public class ZenModeBypassingAppsPreferenceController extends AbstractZenModePreferenceController {
 
-    protected static final String KEY = "zen_mode_bypassing_apps";
+    protected static final String KEY = "zen_mode_behavior_apps";
     private NotificationBackend mNotificationBackend = new NotificationBackend();
 
     public ZenModeBypassingAppsPreferenceController(Context context, Lifecycle lifecycle) {
@@ -18,13 +18,16 @@
 
     @Override
     public boolean isAvailable() {
-        return mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId()) != 0;
+        return true;
     }
 
     @Override
     public String getSummary() {
         final int channelsBypassing =
                 mNotificationBackend.getNumAppsBypassingDnd(UserHandle.getCallingUserId());
+        if (channelsBypassing == 0) {
+            return mContext.getResources().getString(R.string.zen_mode_bypassing_apps_subtext_none);
+        }
         return mContext.getResources().getQuantityString(R.plurals.zen_mode_bypassing_apps_subtext,
                 channelsBypassing, channelsBypassing);
     }
diff --git a/src/com/android/settings/panel/MediaOutputGroupPanel.java b/src/com/android/settings/panel/MediaOutputGroupPanel.java
index fdac4e7..4a37c52 100644
--- a/src/com/android/settings/panel/MediaOutputGroupPanel.java
+++ b/src/com/android/settings/panel/MediaOutputGroupPanel.java
@@ -156,4 +156,9 @@
     public int getMetricsCategory() {
         return SettingsEnums.PANEL_MEDIA_OUTPUT_GROUP;
     }
+
+    @Override
+    public int getViewType() {
+        return PanelContent.VIEW_TYPE_SLIDER;
+    }
 }
diff --git a/src/com/android/settings/panel/MediaOutputPanel.java b/src/com/android/settings/panel/MediaOutputPanel.java
index 0bb1430..1145c42 100644
--- a/src/com/android/settings/panel/MediaOutputPanel.java
+++ b/src/com/android/settings/panel/MediaOutputPanel.java
@@ -240,4 +240,9 @@
         mLocalMediaManager.unregisterCallback(this);
         mLocalMediaManager.stopScan();
     }
+
+    @Override
+    public int getViewType() {
+        return PanelContent.VIEW_TYPE_SLIDER;
+    }
 }
diff --git a/src/com/android/settings/panel/PanelContent.java b/src/com/android/settings/panel/PanelContent.java
index 0f60e29..2e8d709 100644
--- a/src/com/android/settings/panel/PanelContent.java
+++ b/src/com/android/settings/panel/PanelContent.java
@@ -30,6 +30,8 @@
  */
 public interface PanelContent extends Instrumentable {
 
+    int VIEW_TYPE_SLIDER = 1;
+
     /**
      * @return a icon for the title of the Panel.
      */
@@ -101,4 +103,11 @@
      * @param callback the callback to add.
      */
     default void registerCallback(PanelContentCallback callback) {}
+
+    /**
+     * @return a view type to customized it. 0 for default layout.
+     */
+    default int getViewType() {
+        return 0;
+    }
 }
diff --git a/src/com/android/settings/panel/PanelFeatureProviderImpl.java b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
index 04d3095..93c6025 100644
--- a/src/com/android/settings/panel/PanelFeatureProviderImpl.java
+++ b/src/com/android/settings/panel/PanelFeatureProviderImpl.java
@@ -17,6 +17,7 @@
 package com.android.settings.panel;
 
 import static com.android.settingslib.media.MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT;
+import static com.android.settingslib.media.MediaOutputSliceConstants.ACTION_MEDIA_OUTPUT_GROUP;
 
 import android.content.Context;
 import android.os.Bundle;
@@ -46,6 +47,8 @@
                 return WifiPanel.create(context);
             case Settings.Panel.ACTION_VOLUME:
                 return VolumePanel.create(context);
+            case ACTION_MEDIA_OUTPUT_GROUP:
+                return MediaOutputGroupPanel.create(context, mediaPackageName);
         }
 
         throw new IllegalStateException("No matching panel for: "  + panelType);
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index 0e41421..30cc2a8 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -411,6 +411,10 @@
         };
     }
 
+    int getPanelViewType() {
+        return mPanel.getViewType();
+    }
+
     class LocalPanelCallback implements PanelContentCallback {
 
         @Override
diff --git a/src/com/android/settings/panel/PanelSlicesAdapter.java b/src/com/android/settings/panel/PanelSlicesAdapter.java
index 779c582..1b69cc2 100644
--- a/src/com/android/settings/panel/PanelSlicesAdapter.java
+++ b/src/com/android/settings/panel/PanelSlicesAdapter.java
@@ -69,7 +69,12 @@
     public SliceRowViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
         final Context context = viewGroup.getContext();
         final LayoutInflater inflater = LayoutInflater.from(context);
-        final View view = inflater.inflate(R.layout.panel_slice_row, viewGroup, false);
+        View view;
+        if (viewType == PanelContent.VIEW_TYPE_SLIDER) {
+            view = inflater.inflate(R.layout.panel_slice_slider_row, viewGroup, false);
+        } else {
+            view = inflater.inflate(R.layout.panel_slice_row, viewGroup, false);
+        }
 
         return new SliceRowViewHolder(view);
     }
@@ -87,6 +92,11 @@
         return Math.min(mSliceLiveData.size(), MAX_NUM_OF_SLICES);
     }
 
+    @Override
+    public int getItemViewType(int position) {
+        return mPanelFragment.getPanelViewType();
+    }
+
     /**
      * Return the available data from the adapter. If the number of Slices over the max number
      * allowed, the list will only have the first MAX_NUM_OF_SLICES of slices.
diff --git a/src/com/android/settings/panel/VolumePanel.java b/src/com/android/settings/panel/VolumePanel.java
index dd9b53c..d45bfd1 100644
--- a/src/com/android/settings/panel/VolumePanel.java
+++ b/src/com/android/settings/panel/VolumePanel.java
@@ -73,4 +73,9 @@
     public int getMetricsCategory() {
         return SettingsEnums.PANEL_VOLUME;
     }
+
+    @Override
+    public int getViewType() {
+        return PanelContent.VIEW_TYPE_SLIDER;
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index c0f7e1f..4843736 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -32,6 +32,7 @@
 import android.graphics.drawable.Icon;
 import android.graphics.drawable.LayerDrawable;
 import android.net.ConnectivityManager;
+import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
@@ -45,6 +46,8 @@
 
 import com.android.settings.R;
 import com.android.settings.Settings.TetherSettingsActivity;
+import com.android.settings.Settings.WifiSettings2Activity;
+import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -187,6 +190,15 @@
                 Log.d(TAG, "Skipping non-system app: " + info.activityInfo);
                 continue;
             }
+            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                if (info.activityInfo.name.endsWith(WifiSettingsActivity.class.getSimpleName())) {
+                    continue;
+                }
+            } else {
+                if (info.activityInfo.name.endsWith(WifiSettings2Activity.class.getSimpleName())) {
+                    continue;
+                }
+            }
             shortcuts.add(info);
         }
         Collections.sort(shortcuts, SHORTCUT_COMPARATOR);
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/users/OWNERS b/src/com/android/settings/users/OWNERS
deleted file mode 100644
index 59096be..0000000
--- a/src/com/android/settings/users/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Default reviewers for this and subdirectories.
-dling@google.com
-yamasani@google.com
-zhfan@google.com
-
-# Emergency approvers in case the above are not available
\ No newline at end of file
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/WifiConnectionPreferenceController.java b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
index 2c6feac..12a6d14 100644
--- a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
@@ -34,6 +34,7 @@
 import com.android.settingslib.wifi.WifiTracker;
 import com.android.settingslib.wifi.WifiTrackerFactory;
 
+// TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
 /**
  * This places a preference into a PreferenceGroup owned by some parent
  * controller class when there is a wifi connection present.
diff --git a/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java b/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
index 2f57249..1e18c59 100644
--- a/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
@@ -32,6 +32,7 @@
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
+// TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
 public class WifiMasterSwitchPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, SummaryUpdater.OnSummaryChangeListener,
         LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
diff --git a/src/com/android/settings/wifi/WifiScanningRequiredFragment.java b/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
index 0f81edb..954a5de 100644
--- a/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
+++ b/src/com/android/settings/wifi/WifiScanningRequiredFragment.java
@@ -99,7 +99,7 @@
         Intent intent = getHelpIntent(getContext());
         if (intent != null) {
             try {
-                startActivity(intent);
+                getActivity().startActivityForResult(intent, 0);
             } catch (ActivityNotFoundException e) {
                 Log.e(TAG, "Activity was not found for intent, " + intent.toString());
             }
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/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 4acfee1..70567ac 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -101,6 +101,7 @@
 import java.util.StringJoiner;
 import java.util.stream.Collectors;
 
+// TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
 /**
  * Controller for logic pertaining to displaying Wifi information for the
  * {@link WifiNetworkDetailsFragment}.
@@ -596,7 +597,8 @@
     }
 
     private void refreshTxSpeed() {
-        if (mWifiInfo == null) {
+        if (mWifiInfo == null
+                || mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED) {
             mTxLinkSpeedPref.setVisible(false);
             return;
         }
@@ -608,7 +610,8 @@
     }
 
     private void refreshRxSpeed() {
-        if (mWifiInfo == null) {
+        if (mWifiInfo == null
+                || mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED) {
             mRxLinkSpeedPref.setVisible(false);
             return;
         }
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/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index fe1da73..db9725b 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -38,7 +38,6 @@
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
@@ -55,10 +54,8 @@
 import com.android.settings.slices.SliceBuilderUtils;
 import com.android.settings.wifi.WifiDialogActivity;
 import com.android.settings.wifi.WifiSettings;
-import com.android.settings.wifi.WifiSettings2;
 import com.android.settings.wifi.WifiUtils;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
-import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
 import com.android.settingslib.wifi.AccessPoint;
 
 import java.util.Arrays;
@@ -253,16 +250,13 @@
         accessPoint.saveWifiState(extras);
 
         if (accessPoint.isActive()) {
-            final SubSettingLauncher launcher = new SubSettingLauncher(mContext)
+            final Intent intent = new SubSettingLauncher(mContext)
                     .setTitleRes(R.string.pref_title_network_details)
+                    .setDestination(WifiNetworkDetailsFragment.class.getName())
                     .setArguments(extras)
-                    .setSourceMetricsCategory(SettingsEnums.WIFI);
-            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
-                launcher.setDestination(WifiNetworkDetailsFragment2.class.getName());
-            } else {
-                launcher.setDestination(WifiNetworkDetailsFragment.class.getName());
-            }
-            return getActivityAction(requestCode, launcher.toIntent(), icon, title);
+                    .setSourceMetricsCategory(SettingsEnums.WIFI)
+                    .toIntent();
+            return getActivityAction(requestCode, intent, icon, title);
         } else if (WifiUtils.getConnectingType(accessPoint) != WifiUtils.CONNECT_TYPE_OTHERS) {
             final Intent intent = new Intent(mContext, ConnectToWifiHandler.class)
                     .putExtra(WifiDialogActivity.KEY_ACCESS_POINT_STATE, extras);
@@ -326,21 +320,11 @@
     public Intent getIntent() {
         final String screenTitle = mContext.getText(R.string.wifi_settings).toString();
         final Uri contentUri = new Uri.Builder().appendPath(KEY_WIFI).build();
-
-        Intent intent;
-        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
-            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
-                WifiSettings2.class.getName(), KEY_WIFI, screenTitle,
-                SettingsEnums.DIALOG_WIFI_AP_EDIT)
-                .setClassName(mContext.getPackageName(), SubSettings.class.getName())
-                .setData(contentUri);
-        } else {
-            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
+        final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 WifiSettings.class.getName(), KEY_WIFI, screenTitle,
                 SettingsEnums.DIALOG_WIFI_AP_EDIT)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
-        }
 
         return intent;
     }
diff --git a/src/com/android/settings/wifi/tether/WifiTetherBasePreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherBasePreferenceController.java
index 2a5dea9..7ba0216 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherBasePreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherBasePreferenceController.java
@@ -26,6 +26,7 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.AbstractPreferenceController;
 
+// TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
 public abstract class WifiTetherBasePreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
 
diff --git a/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceController.java
new file mode 100644
index 0000000..c6a0a9f
--- /dev/null
+++ b/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceController.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.tether;
+
+import android.content.Context;
+
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+
+/**
+ * Shows hotspot footer information.
+ */
+public class WifiTetherFooterPreferenceController extends WifiTetherBasePreferenceController {
+
+    private static final String PREF_KEY = "tether_prefs_footer_2";
+
+    public WifiTetherFooterPreferenceController(Context context) {
+        super(context, null /* listener */);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return PREF_KEY;
+    }
+
+    @Override
+    public void updateDisplay() {
+        if (mWifiManager.isStaApConcurrencySupported()) {
+            mPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+        } else {
+            mPreference.setTitle(R.string.tethering_footer_info);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        return true;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index e69bd07..3c38c51d 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -19,13 +19,22 @@
 import static com.google.common.truth.Truth.assertThat;
 
 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.content.Context;
 import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.FeatureFlagUtils;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.FeatureFlags;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -66,6 +75,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         // To let TetherUtil.isTetherAvailable return true, select one of the combinations
         setupIsTetherAvailable(true);
 
@@ -100,6 +110,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_usbAvailable_usbKeyNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         // We can ignore the condition of Utils.isMonkeyRunning()
         // In normal case, monkey and robotest should not execute at the same time
         when(mConnectivityManager.getTetherableUsbRegexs()).thenReturn(new String[]{"dummyRegex"});
@@ -122,6 +133,7 @@
 
     @Test
     public void testTetherNonIndexableKeys_bluetoothAvailable_bluetoothKeyNotReturned() {
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
         when(mConnectivityManager.getTetherableBluetoothRegexs())
                 .thenReturn(new String[]{"dummyRegex"});
 
@@ -131,6 +143,23 @@
         assertThat(niks).doesNotContain(TetherSettings.KEY_ENABLE_BLUETOOTH_TETHERING);
     }
 
+    @Test
+    public void testSetFooterPreferenceTitle_isStaApConcurrencySupported_showStaApString() {
+        final TetherSettings spyTetherSettings = spy(new TetherSettings());
+        when(spyTetherSettings.getContext()).thenReturn(mContext);
+        final Preference mockPreference = mock(Preference.class);
+        when(spyTetherSettings.findPreference(TetherSettings.KEY_TETHER_PREFS_FOOTER))
+            .thenReturn(mockPreference);
+        final WifiManager mockWifiManager = mock(WifiManager.class);
+        when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mockWifiManager);
+        when(mockWifiManager.isStaApConcurrencySupported()).thenReturn(true);
+
+        spyTetherSettings.setFooterPreferenceTitle();
+
+        verify(mockPreference, never()).setTitle(R.string.tethering_footer_info);
+        verify(mockPreference).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+    }
+
     private void setupIsTetherAvailable(boolean returnValue) {
         when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
 
diff --git a/tests/robotests/src/com/android/settings/display/DarkUIPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/DarkUIPreferenceControllerTest.java
index 0738fe0..9924cb4 100644
--- a/tests/robotests/src/com/android/settings/display/DarkUIPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/DarkUIPreferenceControllerTest.java
@@ -16,19 +16,10 @@
 
 package com.android.settings.display;
 
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-
 import android.content.Context;
-
 import androidx.fragment.app.Fragment;
-
 import com.android.settings.display.darkmode.DarkModePreference;
-
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -36,8 +27,11 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class DarkUIPreferenceControllerTest {
 
     private DarkUIPreferenceController mController;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index cda5f96..63e8a80 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -50,7 +50,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -63,7 +62,6 @@
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = ShadowEntityHeaderController.class)
-@Ignore
 public class BatteryHeaderPreferenceControllerTest {
 
     private static final String PREF_KEY = "battery_header";
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
index b9f4e06..55020e2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/LowBatteryDetectorTest.java
@@ -28,7 +28,6 @@
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -42,7 +41,6 @@
 import java.util.concurrent.TimeUnit;
 
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class LowBatteryDetectorTest {
 
     @Mock
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/BatterySaverConditionControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/BatterySaverConditionControllerTest.java
index 20bc1bb..e4ca6c0 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/BatterySaverConditionControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/BatterySaverConditionControllerTest.java
@@ -29,7 +29,6 @@
 import com.android.settings.fuelgauge.BatterySaverReceiver;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -40,7 +39,6 @@
 import org.robolectric.shadows.ShadowPowerManager;
 
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class BatterySaverConditionControllerTest {
     @Mock
     private ConditionManager mConditionManager;
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
index c01c9b0..03d85b2 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputSliceTest.java
@@ -36,6 +36,7 @@
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
+import android.text.TextUtils;
 
 import androidx.slice.Slice;
 import androidx.slice.SliceMetadata;
@@ -67,7 +68,9 @@
 public class MediaOutputSliceTest {
 
     private static final String TEST_DEVICE_1_ID = "test_device_1_id";
+    private static final String TEST_DEVICE_2_ID = "test_device_2_id";
     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 int TEST_DEVICE_1_ICON =
             com.android.internal.R.drawable.ic_bt_headphones_a2dp;
 
@@ -98,7 +101,8 @@
         mShadowBluetoothAdapter.setEnabled(true);
 
         mMediaOutputSlice = new MediaOutputSlice(mContext);
-        mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, MEDIA_OUTPUT_SLICE_URI);
+        mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext,
+                MEDIA_OUTPUT_SLICE_URI);
         mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
         mMediaDeviceUpdateWorker.mLocalMediaManager = mLocalMediaManager;
         mMediaOutputSlice.init(mMediaDeviceUpdateWorker);
@@ -147,6 +151,19 @@
         when(device.getName()).thenReturn(TEST_DEVICE_1_NAME);
         when(device.getIcon()).thenReturn(mTestDrawable);
         when(device.getMaxVolume()).thenReturn(100);
+        when(device.isConnected()).thenReturn(true);
+        when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(device2.getIcon()).thenReturn(mTestDrawable);
+        when(device2.getMaxVolume()).thenReturn(100);
+        when(device2.isConnected()).thenReturn(false);
+        when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device2.getId()).thenReturn(TEST_DEVICE_2_ID);
+        mDevices.add(device);
+        mDevices.add(device2);
+        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
         when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);
 
         final Slice mediaSlice = mMediaOutputSlice.getSlice();
@@ -165,8 +182,16 @@
         when(device.getMaxVolume()).thenReturn(100);
         when(device.isConnected()).thenReturn(false);
         when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
-
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(device2.getIcon()).thenReturn(mTestDrawable);
+        when(device2.getMaxVolume()).thenReturn(100);
+        when(device2.isConnected()).thenReturn(false);
+        when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
+        when(device2.getId()).thenReturn(TEST_DEVICE_2_ID);
         mDevices.add(device);
+        mDevices.add(device2);
         mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
 
         final Slice mediaSlice = mMediaOutputSlice.getSlice();
@@ -178,6 +203,139 @@
     }
 
     @Test
+    public void getSlice_inGroupState_checkSliceSize() {
+        final List<MediaDevice> mSelectedDevices = new ArrayList<>();
+        final List<MediaDevice> mSelectableDevices = new ArrayList<>();
+        mDevices.clear();
+        final MediaDevice device = mock(MediaDevice.class);
+        when(device.getName()).thenReturn(TEST_DEVICE_1_NAME);
+        when(device.getIcon()).thenReturn(mTestDrawable);
+        when(device.getMaxVolume()).thenReturn(100);
+        when(device.isConnected()).thenReturn(true);
+        when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(device2.getIcon()).thenReturn(mTestDrawable);
+        when(device2.getMaxVolume()).thenReturn(100);
+        when(device2.isConnected()).thenReturn(true);
+        when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device2.getId()).thenReturn(TEST_DEVICE_2_ID);
+        mSelectedDevices.add(device);
+        mSelectedDevices.add(device2);
+        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);
+        mDevices.add(device);
+        mDevices.add(device2);
+        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mSelectedDevices);
+        when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(mSelectableDevices);
+        when(mMediaDeviceUpdateWorker.getSessionVolumeMax()).thenReturn(100);
+        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
+
+        final Slice mediaSlice = mMediaOutputSlice.getSlice();
+
+        assertThat(SliceQuery.findAll(mediaSlice, FORMAT_SLICE, HINT_LIST_ITEM, null).size())
+                .isEqualTo(mDevices.size() + 1);
+    }
+
+    @Test
+    public void getSlice_notInGroupState_checkSliceSize() {
+        final List<MediaDevice> mSelectedDevices = new ArrayList<>();
+        final List<MediaDevice> mSelectableDevices = new ArrayList<>();
+        mDevices.clear();
+        final MediaDevice device = mock(MediaDevice.class);
+        when(device.getName()).thenReturn(TEST_DEVICE_1_NAME);
+        when(device.getIcon()).thenReturn(mTestDrawable);
+        when(device.getMaxVolume()).thenReturn(100);
+        when(device.isConnected()).thenReturn(true);
+        when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(device2.getIcon()).thenReturn(mTestDrawable);
+        when(device2.getMaxVolume()).thenReturn(100);
+        when(device2.isConnected()).thenReturn(true);
+        when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device2.getId()).thenReturn(TEST_DEVICE_2_ID);
+        mSelectedDevices.add(device);
+        mSelectableDevices.add(device2);
+        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);
+        mDevices.add(device);
+        mDevices.add(device2);
+        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mSelectedDevices);
+        when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(mSelectableDevices);
+        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
+
+        final Slice mediaSlice = mMediaOutputSlice.getSlice();
+
+        assertThat(SliceQuery.findAll(mediaSlice, FORMAT_SLICE, HINT_LIST_ITEM, null).size())
+                .isEqualTo(mDevices.size());
+    }
+
+    @Test
+    public void getSlice_singleCastDevice_notContainGroupIconText() {
+        final List<MediaDevice> mSelectedDevices = new ArrayList<>();
+        final List<MediaDevice> mSelectableDevices = new ArrayList<>();
+        mDevices.clear();
+        final MediaDevice device = mock(MediaDevice.class);
+        when(device.getName()).thenReturn(TEST_DEVICE_1_NAME);
+        when(device.getIcon()).thenReturn(mTestDrawable);
+        when(device.getMaxVolume()).thenReturn(100);
+        when(device.isConnected()).thenReturn(true);
+        when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mDevices);
+        when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(null);
+        mSelectedDevices.add(device);
+        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);
+        mDevices.add(device);
+        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mSelectedDevices);
+        when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(mSelectableDevices);
+        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
+
+        final Slice mediaSlice = mMediaOutputSlice.getSlice();
+
+        final String sliceInfo = SliceQuery.findAll(mediaSlice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null).toString();
+
+        assertThat(TextUtils.indexOf(sliceInfo, mContext.getText(R.string.add))).isEqualTo(-1);
+    }
+
+    @Test
+    public void getSlice_multipleCastDevices_containGroupIconText() {
+        final List<MediaDevice> mSelectedDevices = new ArrayList<>();
+        final List<MediaDevice> mSelectableDevices = new ArrayList<>();
+        mDevices.clear();
+        final MediaDevice device = mock(MediaDevice.class);
+        when(device.getName()).thenReturn(TEST_DEVICE_1_NAME);
+        when(device.getIcon()).thenReturn(mTestDrawable);
+        when(device.getMaxVolume()).thenReturn(100);
+        when(device.isConnected()).thenReturn(true);
+        when(device.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device.getId()).thenReturn(TEST_DEVICE_1_ID);
+        final MediaDevice device2 = mock(MediaDevice.class);
+        when(device2.getName()).thenReturn(TEST_DEVICE_2_NAME);
+        when(device2.getIcon()).thenReturn(mTestDrawable);
+        when(device2.getMaxVolume()).thenReturn(100);
+        when(device2.isConnected()).thenReturn(true);
+        when(device2.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
+        when(device2.getId()).thenReturn(TEST_DEVICE_2_ID);
+        mSelectedDevices.add(device);
+        mSelectableDevices.add(device2);
+        when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(device);
+        mDevices.add(device);
+        mDevices.add(device2);
+        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mSelectedDevices);
+        when(mLocalMediaManager.getSelectableMediaDevice()).thenReturn(mSelectableDevices);
+        mMediaDeviceUpdateWorker.onDeviceListUpdate(mDevices);
+
+        final Slice mediaSlice = mMediaOutputSlice.getSlice();
+        String sliceInfo = SliceQuery.findAll(mediaSlice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null).toString();
+
+        assertThat(TextUtils.indexOf(sliceInfo, mContext.getText(R.string.add))).isNotEqualTo(-1);
+    }
+
+    @Test
     public void onNotifyChange_foundMediaDevice_connect() {
         mDevices.clear();
         final MediaDevice device = mock(MediaDevice.class);
diff --git a/tests/robotests/src/com/android/settings/panel/FakePanelContent.java b/tests/robotests/src/com/android/settings/panel/FakePanelContent.java
index 8888093..4d91f52 100644
--- a/tests/robotests/src/com/android/settings/panel/FakePanelContent.java
+++ b/tests/robotests/src/com/android/settings/panel/FakePanelContent.java
@@ -44,6 +44,7 @@
 
     private CharSequence mSubTitle;
     private IconCompat mIcon;
+    private int mViewType;
 
     @Override
     public IconCompat getIcon() {
@@ -82,4 +83,13 @@
     public int getMetricsCategory() {
         return SettingsEnums.TESTING;
     }
+
+    public void setViewType(int viewType) {
+        mViewType = viewType;
+    }
+
+    @Override
+    public int getViewType() {
+        return mViewType;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
index 37036c4..9e96d0f 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
@@ -16,19 +16,23 @@
 
 package com.android.settings.panel;
 
+import static com.android.settings.panel.PanelContent.VIEW_TYPE_SLIDER;
 import static com.android.settings.panel.PanelSlicesAdapter.MAX_NUM_OF_SLICES;
 import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
 
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.net.Uri;
+import android.view.LayoutInflater;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
@@ -36,23 +40,31 @@
 import androidx.slice.Slice;
 
 import com.android.settings.R;
+import com.android.settings.panel.PanelSlicesAdapter.SliceRowViewHolder;
 import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.android.controller.ActivityController;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = PanelSlicesAdapterTest.ShadowLayoutInflater.class)
 public class PanelSlicesAdapterTest {
 
+    private static LayoutInflater sLayoutInflater;
+
     private Context mContext;
     private PanelFragment mPanelFragment;
     private PanelFeatureProvider mPanelFeatureProvider;
@@ -104,7 +116,7 @@
         final PanelSlicesAdapter adapter =
                 new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
         final ViewGroup view = new FrameLayout(mContext);
-        final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
+        final SliceRowViewHolder viewHolder =
                 adapter.onCreateViewHolder(view, 0);
 
         assertThat(adapter.getItemCount()).isEqualTo(MAX_NUM_OF_SLICES);
@@ -119,11 +131,52 @@
                 new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
         final int position = 0;
         final ViewGroup view = new FrameLayout(mContext);
-        final PanelSlicesAdapter.SliceRowViewHolder viewHolder =
+        final SliceRowViewHolder viewHolder =
                 adapter.onCreateViewHolder(view, 0 /* view type*/);
 
         adapter.onBindViewHolder(viewHolder, position);
 
         assertThat(viewHolder.isDividerAllowedAbove()).isFalse();
     }
+
+    @Test
+    public void onCreateViewHolder_viewTypeSlider_verifyLayout() {
+        final PanelSlicesAdapter adapter =
+                new PanelSlicesAdapter(mPanelFragment, mData, 0);
+        final ViewGroup view = new FrameLayout(mContext);
+        final ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
+
+        adapter.onCreateViewHolder(view, VIEW_TYPE_SLIDER);
+
+        verify(sLayoutInflater).inflate(intArgumentCaptor.capture(), eq(view), eq(false));
+        assertThat(intArgumentCaptor.getValue()).isEqualTo(R.layout.panel_slice_slider_row);
+    }
+
+    @Test
+    public void onCreateViewHolder_viewTypeDefault_verifyLayout() {
+        final PanelSlicesAdapter adapter =
+                new PanelSlicesAdapter(mPanelFragment, mData, 0);
+        final ViewGroup view = new FrameLayout(mContext);
+        final ArgumentCaptor<Integer> intArgumentCaptor = ArgumentCaptor.forClass(Integer.class);
+
+        adapter.onCreateViewHolder(view, 0);
+
+        verify(sLayoutInflater).inflate(intArgumentCaptor.capture(), eq(view), eq(false));
+        assertThat(intArgumentCaptor.getValue()).isEqualTo(R.layout.panel_slice_row);
+    }
+
+    @Implements(LayoutInflater.class)
+    public static class ShadowLayoutInflater {
+
+        @Implementation
+        public static LayoutInflater from(Context context) {
+            final LayoutInflater inflater =
+                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            if (inflater == null) {
+                throw new AssertionError("LayoutInflater not found.");
+            }
+            sLayoutInflater = spy(inflater);
+            return sLayoutInflater;
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
index e5c730f..6969e14 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiScanningRequiredFragmentTest.java
@@ -15,12 +15,12 @@
  */
 package com.android.settings.wifi;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -30,11 +30,13 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.net.wifi.WifiManager;
 import android.provider.Settings;
 
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 
 import com.android.settings.R;
 
@@ -58,6 +60,8 @@
     private Fragment mCallbackFragment;
     @Mock
     private AlertDialog.Builder mBuilder;
+    @Mock
+    private FragmentActivity mActivity;
 
     @Before
     public void setUp() {
@@ -66,6 +70,7 @@
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
         mResolver = mContext.getContentResolver();
+        doReturn(mActivity).when(mFragment).getActivity();
 
         doReturn(mContext).when(mFragment).getContext();
         mFragment.setTargetFragment(mCallbackFragment, 1000);
@@ -77,7 +82,7 @@
             throws Settings.SettingNotFoundException {
         mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
 
-        verify(mWifiManager).setScanAlwaysAvailable(false);
+        verify(mWifiManager).setScanAlwaysAvailable(true);
     }
 
     @Test
@@ -89,16 +94,24 @@
 
     @Test
     public void learnMore_launchesHelpWhenIntentFound() {
-        Context context = mock(Context.class);
-        doReturn(context).when(mFragment).getContext();
-        doReturn("").when(context).getString(eq(R.string.help_uri_wifi_scanning_required));
+        doReturn("").when(mContext).getString(eq(R.string.help_uri_wifi_scanning_required));
         mFragment.addButtonIfNeeded(mBuilder);
         verify(mBuilder, never())
                 .setNeutralButton(anyInt(), nullable(DialogInterface.OnClickListener.class));
 
-        doReturn("help").when(context).getString(eq(R.string.help_uri_wifi_scanning_required));
+        doReturn("help").when(mContext).getString(eq(R.string.help_uri_wifi_scanning_required));
         mFragment.addButtonIfNeeded(mBuilder);
         verify(mBuilder, times(1))
                 .setNeutralButton(anyInt(), nullable(DialogInterface.OnClickListener.class));
     }
+
+    @Test
+    public void learnMore_launchesHelp_shouldStartActivityForResult() {
+        doReturn(new Intent()).when(mFragment).getHelpIntent(mContext);
+        mFragment.addButtonIfNeeded(mBuilder);
+
+        mFragment.onClick(null, DialogInterface.BUTTON_NEUTRAL);
+
+        verify(mActivity, times(1)).startActivityForResult(any(), anyInt());
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceControllerTest.java
new file mode 100644
index 0000000..b0ed862
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherFooterPreferenceControllerTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.tether;
+
+import static org.mockito.ArgumentMatchers.anyString;;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settingslib.widget.FooterPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiTetherFooterPreferenceControllerTest {
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private ConnectivityManager mConnectivityManager;
+    @Mock
+    private WifiManager mWifiManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private FooterPreference mPreference;
+
+    private WifiTetherFooterPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
+        when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
+                .thenReturn(mConnectivityManager);
+        when(mConnectivityManager.getTetherableWifiRegexs()).thenReturn(new String[]{"1", "2"});
+        mController = new WifiTetherFooterPreferenceController(mContext);
+        when(mScreen.findPreference(anyString())).thenReturn(mPreference);
+    }
+
+    @Test
+    public void displayPreference_supportStaAp_showConcurrentInfo() {
+        when(mWifiManager.isStaApConcurrencySupported()).thenReturn(true);
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference, never()).setTitle(R.string.tethering_footer_info);
+        verify(mPreference).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+    }
+
+    @Test
+    public void displayPreference_notSupportStaAp_showNotConcurrentInfo() {
+        when(mWifiManager.isStaApConcurrencySupported()).thenReturn(false);
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setTitle(R.string.tethering_footer_info);
+        verify(mPreference, never()).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+    }
+}