Merge "[Settings] hide preferred network mode UI" into qt-r1-dev
am: 7afb9854a7

Change-Id: Idfbc3f765fc834ab3cb7e07ec340a98606ce87ad
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ff3f650..325fc8d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2594,13 +2594,6 @@
                 android:value="com.android.settings.notification.AppNotificationSettings" />
         </activity>
 
-        <!-- Show channel group-level notification settings (group passed in as extras) -->
-        <activity android:name="Settings$ChannelGroupNotificationSettingsActivity"
-                  android:exported="true">
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.notification.ChannelGroupNotificationSettings" />
-        </activity>
-
         <!-- Show channel-level notification settings (channel passed in as extras) -->
         <activity android:name="Settings$ChannelNotificationSettingsActivity"
                   android:label="@string/notification_channel_title"
@@ -2714,7 +2707,7 @@
 
         <activity
             android:name=".wifi.NetworkRequestDialogActivity"
-            android:theme="@style/Transparent"
+            android:theme="@style/Theme.AlertDialog"
             android:excludeFromRecents="true"
             android:launchMode="singleTop"
             android:taskAffinity=".wifi.NetworkRequestDialogActivity"
diff --git a/res/layout/empty_view.xml b/res/layout/empty_view.xml
new file mode 100644
index 0000000..33218f7
--- /dev/null
+++ b/res/layout/empty_view.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:visibility="gone"/>
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index d5dbb17..0a25934 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -138,8 +138,7 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
                             style="@style/wifi_item_spinner"
-                            android:prompt="@string/wifi_eap_method"
-                            android:entries="@array/wifi_eap_method" />
+                            android:prompt="@string/wifi_eap_method" />
                 </LinearLayout>
 
                 <LinearLayout android:id="@+id/l_phase2"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 550ae56..d271330 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -3136,7 +3136,7 @@
     <string name="nfc_payment_default_not_set" msgid="7485060884228447765">"لم يتم التعيين"</string>
     <string name="nfc_payment_app_and_desc" msgid="7942415346564794258">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="nfc_payment_use_default" msgid="3234730182120288495">"استخدام التلقائي"</string>
-    <string name="nfc_payment_favor_default" msgid="5743781166099608372">"دومًا"</string>
+    <string name="nfc_payment_favor_default" msgid="5743781166099608372">"دائمًا"</string>
     <string name="nfc_payment_favor_open" msgid="1923314062109977944">"إلا إذا كان هناك تطبيق دفع آخر مفتوحًا"</string>
     <string name="nfc_payment_pay_with" msgid="7524904024378144072">"عند أحد أجهزة انقر وادفع الطرفية، يمكنك الدفع باستخدام:"</string>
     <string name="nfc_how_it_works_title" msgid="1984068457698797207">"الدفع عند الجهاز الطرفي"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 80ad2fa..00027de 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -1154,7 +1154,7 @@
     <string name="sound_effects_enable_title" msgid="4429690369187229592">"আলতো চাপ দিলে শব্দ"</string>
     <string name="lock_sounds_enable_title" msgid="450098505659399520">"স্ক্রিন লক করার সাউন্ড"</string>
     <string name="audio_record_proc_title" msgid="4271091199976457534">"অপ্রয়োজনীয় আওয়াজ বাতিলকরণ"</string>
-    <string name="volume_media_description" msgid="7949355934788807863">"সঙ্গীত, ভিডিও, গেম্স, ও অন্যান্য মিডিয়া"</string>
+    <string name="volume_media_description" msgid="7949355934788807863">"মিউজিক, ভিডিও, গেম ও অন্যান্য মিডিয়া"</string>
     <string name="volume_ring_description" msgid="5936851631698298989">"রিংটোন ও বিজ্ঞপ্তি"</string>
     <string name="volume_notification_description" msgid="5810902320215328321">"বিজ্ঞপ্তি"</string>
     <string name="volume_alarm_description" msgid="8322615148532654841">"অ্যালার্মগুলি"</string>
@@ -1593,7 +1593,7 @@
     <string name="reset_dashboard_title" msgid="6254873816990678620">"রিসেটের বিকল্পগুলি"</string>
     <string name="reset_dashboard_summary" msgid="4851012632493522755">"নেটওয়ার্ক, অ্যাপ, অথবা ডিভাইস রিসেট করা যায়"</string>
     <string name="reset_network_title" msgid="6166025966016873843">"ওয়াই-ফাই, মোবাইল ও ব্লুটুথ রিসেট"</string>
-    <string name="reset_network_desc" msgid="5547979398298881406">"এগুলি সহ সমস্ত নেটওয়ার্ক সেটিংস আবার সেট করবে:\n\n"<li>"ওয়াই ফাই "</li>\n<li>"সেলুলার ডাটা "</li>\n<li>"ব্লুটুথ"</li></string>
+    <string name="reset_network_desc" msgid="5547979398298881406">"এগুলি সহ সমস্ত নেটওয়ার্ক সেটিংস আবার সেট করবে:\n\n"<li>"ওয়াই ফাই "</li>\n<li>"সেলুলার ডেটা "</li>\n<li>"ব্লুটুথ"</li></string>
     <string name="reset_esim_title" msgid="1979762943163078939">"ডাউনলোড করা সিম মুছে ফেলা"</string>
     <string name="reset_esim_desc" msgid="5940105242448544634">"পরিবর্ত সিম ডাউনলোড করতে আপনার পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন। এটি মোবাইল পরিষেবার কোনও প্ল্যান বাতিল করবে না।"</string>
     <string name="reset_network_button_text" msgid="2035676527471089853">"সেটিংস রিসেট করুন"</string>
@@ -1609,7 +1609,7 @@
     <string name="master_clear_short_title" msgid="8652450915870274285">"সবকিছু মুছুন (ফ্যাক্টরি রিসেট)"</string>
     <string name="master_clear_desc" product="tablet" msgid="2314458161059569301">"এটি আপনার ট্যাবলেটের "<b>"ইন্টারনাল স্টোরেজ"</b>", থেকে সমস্ত ডেটা মুছে দেবে, এগুলি সহ:\n\n"<li>"আপনার Google অ্যাকাউন্ট"</li>\n<li>"সিস্টেম এবং অ্যাপ ডেটা এবং সেটিংস"</li>\n<li>"ডাউনলোড করা অ্যাপ"</li></string>
     <string name="master_clear_desc" product="default" msgid="7647628092266675099">"এটি আপনার ফোনের "<b>"ইন্টারনাল স্টোরেজ"</b>", থেকে সমস্ত ডেটা মুছে দেবে, এগুলি সহ:\n\n"<li>"আপনার Google অ্যাকাউন্ট"</li>\n<li>"সিস্টেম এবং অ্যাপ ডেটা এবং সেটিংস"</li>\n<li>"ডাউনলোড করা অ্যাপ"</li></string>
-    <string name="master_clear_accounts" product="default" msgid="6412857499147999073">\n\n"আপনি বর্তমানে নিম্নলিখিত অ্যাকাউন্টে প্রবেশ করে আছেন:\n"</string>
+    <string name="master_clear_accounts" product="default" msgid="6412857499147999073">\n\n"আপনি বর্তমানে নিম্নলিখিত অ্যাকাউন্টে সাইন-ইন করে আছেন:\n"</string>
     <string name="master_clear_other_users_present" product="default" msgid="5161423070702470742">\n\n"এই ডিভাইসে অন্যান্য ব্যবহারকারীরাও রয়েছেন৷\n"</string>
     <string name="master_clear_desc_also_erases_external" msgid="1903185203791274237"><li>"সঙ্গীত"</li>\n<li>"ফটো"</li>\n<li>"অন্যান্য ব্যবহারকারী ডেটা"</li></string>
     <string name="master_clear_desc_also_erases_esim" msgid="6008213558725767177"><li>"ই-সিম"</li></string>
@@ -1871,7 +1871,7 @@
     <string name="show_background_processes" msgid="2009840211972293429">"ক্যাশে করা প্রক্রিয়াগুলি দেখান"</string>
     <string name="default_emergency_app" msgid="1951760659640369980">"জরুরি অ্যাপ্লিকেশান"</string>
     <string name="reset_app_preferences" msgid="1321050641018356925">"অ্যাপ্লিকেশানগুলির পছন্দ আবার সেট করুন"</string>
-    <string name="reset_app_preferences_title" msgid="6093179367325336662">"অ্যাপ্লিকেশানগুলির পছন্দ আবার সেট করবেন?"</string>
+    <string name="reset_app_preferences_title" msgid="6093179367325336662">"অ্যাপ পছন্দ রিসেট করবেন?"</string>
     <string name="reset_app_preferences_desc" msgid="4822447731869201512">"এটি এগুলির জন্য সমস্ত পছন্দ পরিবর্তন করবে:\n\n"<li>"বন্ধ করা অ্যাপ"</li>\n<li>"বন্ধ করা অ্যাপ বিজ্ঞপ্তি"</li>\n<li>"কাজের জন্য ডিফল্ট অ্যাপ"</li>\n<li>"অ্যাপের জন্য ব্যাকগ্রাউন্ড ডেটার সীমাবদ্ধতা"</li>\n<li>"যেকোনও অনুমতির সীমাবদ্ধতা"</li>\n\n"আপনি কোনও অ্যাপ ডেটা হারাবেন না।"</string>
     <string name="reset_app_preferences_button" msgid="2559089511841281242">"অ্যাপ রিসেট করুন"</string>
     <string name="manage_space_text" msgid="8852711522447794676">"জায়গা পরিচালনা করুন"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2e08e57..186187c 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -3101,7 +3101,7 @@
     <string name="account_dashboard_title" msgid="5895948991491438911">"Konti"</string>
     <string name="account_dashboard_default_summary" msgid="3998347400161811075">"Ingen konti er tilføjet"</string>
     <string name="app_default_dashboard_title" msgid="7342549305933047317">"Standardapps"</string>
-    <string name="system_dashboard_summary" msgid="6839969589170062254">"Sprog, bevægelser, klokkeslæt, bckup"</string>
+    <string name="system_dashboard_summary" msgid="6839969589170062254">"Sprog, bevægelser, klokkeslæt, backup"</string>
     <string name="search_results_title" msgid="1796252422574886932">"Indstillinger"</string>
     <string name="keywords_wifi" msgid="3646884600964177062">"wifi, wi-fi, netværksforbindelse, internet, trådløs, data, wi fi"</string>
     <string name="keywords_wifi_notify_open_networks" msgid="8745178424405564885">"Wi‑Fi-notifikation, wifi-notifikation"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a0cc07b..b22a3bd 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1200,7 +1200,7 @@
     <string name="brightness" msgid="8480105032417444275">"Nivel de brillo"</string>
     <string name="brightness_title" msgid="5746272622112982836">"Brillo"</string>
     <string name="brightness_summary" msgid="838917350127550703">"Ajustar el brillo de la pantalla"</string>
-    <string name="auto_brightness_title" msgid="6341042882350279391">"Brillo automático"</string>
+    <string name="auto_brightness_title" msgid="6341042882350279391">"Brillo adaptativo"</string>
     <string name="auto_brightness_summary" msgid="5652108419977937800">"Adaptar el brillo de la pantalla al entorno"</string>
     <string name="auto_brightness_summary_on" msgid="3519854265558828744">"Activado"</string>
     <string name="auto_brightness_summary_off" msgid="2802336459335410626">"Desactivado"</string>
@@ -1219,7 +1219,7 @@
     <string name="auto_brightness_off_summary" msgid="7629228736838155268">"No ajustar en función de la luz ambiental"</string>
     <string name="auto_brightness_very_high_summary" msgid="4551003097086220709">"Aumenta el uso de la batería"</string>
     <string name="auto_brightness_disclaimer" msgid="871436423746343406">"Optimiza el brillo en función de la luz ambiental. Puedes ajustarlo temporalmente aunque actives esta función."</string>
-    <string name="auto_brightness_description" msgid="7310335517128283729">"El brillo de la pantalla se ajustará automáticamente según el entorno y las actividades que hagas. Puedes mover el control deslizante para que la función de brillo adaptable reconozca tus preferencias."</string>
+    <string name="auto_brightness_description" msgid="7310335517128283729">"El brillo de la pantalla se ajustará automáticamente según el entorno y las actividades que hagas. Puedes mover el control deslizante para que la función de brillo adaptativo reconozca tus preferencias."</string>
     <string name="display_white_balance_title" msgid="4093966473741329340">"Balance de blancos de pantalla"</string>
     <string name="display_white_balance_summary" msgid="2432539678792029039"></string>
     <string name="adaptive_sleep_title" msgid="455088457232472047">"Atención a la pantalla"</string>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index cad7583..52b9675 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -485,7 +485,7 @@
     <item msgid="3863157480502955888">"Oui"</item>
   </string-array>
   <string-array name="dark_ui_mode_entries">
-    <item msgid="4047603501491142527">"Sombre"</item>
+    <item msgid="4047603501491142527">"Foncé"</item>
     <item msgid="2291969684082074001">"Clair"</item>
   </string-array>
   <string-array name="autofill_logging_level_entries">
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index 98deee9..80f3100 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -239,7 +239,7 @@
     <item msgid="4600463921908905030">"मैसेज (एसएमएस) पाएं"</item>
     <item msgid="5958926493289432745">"आपातकालीन मैसेज (एसएमएस) पाएं"</item>
     <item msgid="4945269495221089540">"मल्टीमीडिया मैसेज (एमएमएस) पाएं"</item>
-    <item msgid="5570472453573929087">"WAP पुश पाएं"</item>
+    <item msgid="5570472453573929087">"WAP पुश प्राप्त करें"</item>
     <item msgid="7125408150230860501">"मैसेज (एसएमएस) भेजें"</item>
     <item msgid="7080337936612188061">"ICC मैसेज (एसएमएस) पढ़ें"</item>
     <item msgid="587124103118495063">"ICC मैसेज (एसएमएस) लिखें"</item>
@@ -263,7 +263,7 @@
     <item msgid="2029227495214047094">"सचेत रखें"</item>
     <item msgid="26109888160231211">"जगह की निगरानी करें"</item>
     <item msgid="5753382310468855812">"उच्च पावर वाली जगह की निगरानी करें"</item>
-    <item msgid="3356591542543137332">"उपयोग के आंकड़े पाएं"</item>
+    <item msgid="3356591542543137332">"उपयोग के आंकड़े प्राप्त करें"</item>
     <item msgid="3073734345226842233">"माइक्रोफ़ोन म्यूट/अनम्यूट करें"</item>
     <item msgid="2111767435887685265">"टोस्ट दिखाएं"</item>
     <item msgid="1091168669714823370">"प्रोजेक्ट मीडिया"</item>
@@ -282,7 +282,7 @@
     <item msgid="3591971310048485247">"मेमोरी पढ़ें"</item>
     <item msgid="4041187808621866119">"मेमोरी लिखें"</item>
     <item msgid="6628873315024166197">"स्क्रीन चालू करें"</item>
-    <item msgid="3253368931113490863">"खाते पाएं"</item>
+    <item msgid="3253368931113490863">"खाते प्राप्त करें"</item>
     <item msgid="780392378084812901">"पृष्ठभूमि में चलाएं"</item>
     <item msgid="2629748510881309577">"सुलभता सुविधाओं के लिए आवाज़"</item>
   </string-array>
@@ -330,7 +330,7 @@
     <item msgid="4665183401128289653">"सचेत रखें"</item>
     <item msgid="8584357129746649222">"जगह"</item>
     <item msgid="7669257279311110599">"जगह"</item>
-    <item msgid="3459320345690097795">"उपयोग के आंकड़े पाएं"</item>
+    <item msgid="3459320345690097795">"उपयोग के आंकड़े प्राप्त करें"</item>
     <item msgid="1312534577834048535">"माइक्रोफ़ोन म्यूट/अनम्यूट करें"</item>
     <item msgid="427580389823724225">"टोस्ट दिखाएं"</item>
     <item msgid="4992007785575926253">"प्रोजेक्ट मीडिया"</item>
@@ -349,7 +349,7 @@
     <item msgid="1246296877820358565">"मेमोरी पढ़ें"</item>
     <item msgid="2404067308793740341">"मेमोरी लिखें"</item>
     <item msgid="5832543806893763620">"स्क्रीन चालू करें"</item>
-    <item msgid="5258373962467495905">"खाते पाएं"</item>
+    <item msgid="5258373962467495905">"खाते प्राप्त करें"</item>
     <item msgid="334625385979270703">"पृष्ठभूमि में चलाएं"</item>
     <item msgid="9039213578110332702">"सुलभता सुविधाओं के लिए आवाज़"</item>
   </string-array>
@@ -359,7 +359,7 @@
     <item msgid="2372711992605524591">"ज़्यादा"</item>
   </string-array>
   <string-array name="captioning_typeface_selector_titles">
-    <item msgid="1319652728542138112">"डिफ़ॉल्ट"</item>
+    <item msgid="1319652728542138112">"सामान्य"</item>
     <item msgid="1016452621833735880">"Sans-serif"</item>
     <item msgid="2496277987934654454">"Sans-serif condensed"</item>
     <item msgid="7247838127505318669">"Sans-serif monospace"</item>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index 1b35ec4..3037194 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -88,7 +88,7 @@
     <item msgid="8937994881315223448">"Միացված է <xliff:g id="NETWORK_NAME">%1$s</xliff:g>-ին"</item>
     <item msgid="1330262655415760617">"Անջատված"</item>
     <item msgid="7698638434317271902">"Անջատվում է <xliff:g id="NETWORK_NAME">%1$s</xliff:g>-ից…"</item>
-    <item msgid="197508606402264311">"Անջատված է"</item>
+    <item msgid="197508606402264311">"Անջատած է"</item>
     <item msgid="8578370891960825148">"Անհաջող"</item>
     <item msgid="5660739516542454527">"Արգելափակված"</item>
     <item msgid="1805837518286731242">"Վատ ցանցից ժամանակավոր խուսափում"</item>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 0479ec4..df1446c 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -520,7 +520,7 @@
     <string name="fingerprint_delete_message" msgid="8597787803567398131">"ನೀವು ಈ ಫಿಂಗರ್‌ ಫ್ರಿಂಟ್ ಅಳಿಸಲು ಬಯಸುವಿರಾ?"</string>
     <string name="fingerprint_last_delete_message" msgid="7852321001254275878">"ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ಖರೀದಿಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮ್ಮ ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್‌ಗಳನ್ನು ಬಳಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
     <string name="fingerprint_last_delete_message_profile_challenge" msgid="6521520787746771912">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ಖರೀದಿಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಅಥವಾ ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮ್ಮ ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್‌ಗಳನ್ನು ಬಳಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
-    <string name="fingerprint_last_delete_confirm" msgid="2634726361059274289">"ಹೌದು, ತೆಗೆದುಹಾಕು"</string>
+    <string name="fingerprint_last_delete_confirm" msgid="2634726361059274289">"ಹೌದು, ತೆಗೆದುಹಾಕಿ"</string>
     <string name="crypt_keeper_settings_title" msgid="4219233835490520414">"ಎನ್‌ಕ್ರಿಪ್ಷನ್"</string>
     <string name="crypt_keeper_encrypt_title" product="tablet" msgid="1060273569887301457">"ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡು"</string>
     <string name="crypt_keeper_encrypt_title" product="default" msgid="1878996487755806122">"ಫೋನ್ ಎನ್‌ಕ್ರಿಪ್ಟ್"</string>
@@ -644,7 +644,7 @@
     <string name="unlock_disable_frp_warning_content_unknown_fingerprint_profile" msgid="4994062501123299418">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಇಲ್ಲದೆ ಪ್ರೊಫೈಲ್ ರಕ್ಷಣೆ ವೈಶಿಷ್ಟ್ಯಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ.<xliff:g id="EMPTY_LINE">
 
 </xliff:g>ಈ ಪ್ರೊಫೈಲ್‌ನಿಂದ ನಿಮ್ಮ ಉಳಿಸಲಾದ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ಗಳನ್ನು ಸಹ ತೆಗೆದುಹಾಕಲಾಗುವುದು ಮತ್ತು ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು, ಖರೀದಿಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಅಥವಾ ಅವುಗಳ ಮೂಲಕ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
-    <string name="unlock_disable_frp_warning_ok" msgid="7075138677177748705">"ಹೌದು, ತೆಗೆದುಹಾಕು"</string>
+    <string name="unlock_disable_frp_warning_ok" msgid="7075138677177748705">"ಹೌದು, ತೆಗೆದುಹಾಕಿ"</string>
     <string name="unlock_change_lock_pattern_title" msgid="2044092014872741130">"ಅನ್‌ಲಾಕ್ ನಮೂನೆಯನ್ನು ಬದಲಾಯಿಸಿ"</string>
     <string name="unlock_change_lock_pin_title" msgid="806629901095938484">"ಅನ್‌ಲಾಕ್ ಪಿನ್‌ ಬದಲಾಯಿಸಿ"</string>
     <string name="unlock_change_lock_password_title" msgid="5606298470358768865">"ಅನ್‌ಲಾಕ್ ಪಾಸ್‌ವರ್ಡ್‌ ಬದಲಾಯಿಸಿ"</string>
@@ -1294,14 +1294,14 @@
     <string name="sim_lock_settings_summary_off" msgid="8028944267104896401">"ಆಫ್"</string>
     <string name="sim_lock_settings_summary_on" msgid="39103355956342985">"ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="sim_lock_settings_title" msgid="9018585580955414596">"ಸಿಮ್‌ ಕಾರ್ಡ್‌ ಲಾಕ್"</string>
-    <string name="sim_pin_toggle" msgid="1742123478029451888">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡು"</string>
+    <string name="sim_pin_toggle" msgid="1742123478029451888">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="sim_lock_on" product="tablet" msgid="5058355081270397764">"ಟ್ಯಾಬ್ಲೆಟ್ ಬಳಸಲು ಪಿನ್‌ ಅಗತ್ಯವಿದೆ"</string>
     <string name="sim_lock_on" product="default" msgid="2503536505568814324">"ಫೋನ್ ಬಳಸಲು ಪಿನ್‌ ಅಗತ್ಯವಿದೆ"</string>
     <string name="sim_lock_off" product="tablet" msgid="2813800553917012356">"ಟ್ಯಾಬ್ಲೆಟ್ ಬಳಸಲು ಪಿನ್‌ ಅಗತ್ಯವಿದೆ"</string>
     <string name="sim_lock_off" product="default" msgid="258981978215428916">"ಫೋನ್ ಬಳಸಲು ಪಿನ್‌ ಅಗತ್ಯವಿದೆ"</string>
     <string name="sim_pin_change" msgid="6311414184279932368">"ಸಿಮ್‌ ಪಿನ್‌ ಬದಲಾಯಿಸು"</string>
     <string name="sim_enter_pin" msgid="6608715137008508432">"ಸಿಮ್‌ ಪಿನ್‌"</string>
-    <string name="sim_enable_sim_lock" msgid="4517742794997166918">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡು"</string>
+    <string name="sim_enable_sim_lock" msgid="4517742794997166918">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="sim_disable_sim_lock" msgid="7664729528754784824">"ಸಿಮ್‌ ಕಾರ್ಡ್‌ ಅನ್‌ಲಾಕ್ ಮಾಡು"</string>
     <string name="sim_enter_old" msgid="6074196344494634348">"ಹಳೆಯ ಸಿಮ್‌ ಪಿನ್‌"</string>
     <string name="sim_enter_new" msgid="8742727032729243562">"ಹೊಸ ಸಿಮ್‌ ಪಿನ್‌"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 2d1b692..b68fd30 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -1381,7 +1381,7 @@
     <string name="baseband_version" msgid="1848990160763524801">"Različica radijske programske opreme"</string>
     <string name="kernel_version" msgid="9192574954196167602">"Različica jedra"</string>
     <string name="build_number" msgid="3075795840572241758">"Delovna različica"</string>
-    <string name="module_version" msgid="7329118610303805859">"Posodobitev sistema za Google Play"</string>
+    <string name="module_version" msgid="7329118610303805859">"Posodobitev sistema prek Googla Play"</string>
     <string name="device_info_not_available" msgid="8062521887156825182">"Ni na voljo"</string>
     <string name="device_status_activity_title" msgid="1411201799384697904">"Stanje"</string>
     <string name="device_status" msgid="607405385799807324">"Stanje"</string>
@@ -1759,7 +1759,7 @@
     <string name="safety_and_regulatory_info" msgid="5103161279848427185">"Priročnik z varn. in zak. predpis. inf."</string>
     <string name="copyright_title" msgid="865906688917260647">"Avtorska pravica"</string>
     <string name="license_title" msgid="1990487604356037871">"Licenca"</string>
-    <string name="module_license_title" msgid="258743239066841860">"Licence za posodabljanje sistema Google Play"</string>
+    <string name="module_license_title" msgid="258743239066841860">"Licence za posodabljanje sistema prek Googla Play"</string>
     <string name="terms_title" msgid="7697580845616764642">"Določila in pogoji"</string>
     <string name="webview_license_title" msgid="2813507464175738967">"Licenca za WebView v sistemu"</string>
     <string name="wallpaper_attributions" msgid="3645880512943433928">"Ozadja"</string>
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
index fd1ce3e..c293c7d 100644
--- a/res/values-ta/arrays.xml
+++ b/res/values-ta/arrays.xml
@@ -372,7 +372,7 @@
   <string-array name="captioning_font_size_selector_titles">
     <item msgid="4800919809575254054">"மிகச் சிறியது"</item>
     <item msgid="6781094565687692782">"சிறியது"</item>
-    <item msgid="8222123259497646551">"சராசரி"</item>
+    <item msgid="8222123259497646551">"இயல்பானது"</item>
     <item msgid="5813217276778560466">"பெரியது"</item>
     <item msgid="9044232017390975191">"மிகப் பெரியது"</item>
   </string-array>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 5fa3fca..eeee0e8 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -58,7 +58,7 @@
     <string name="radioInfo_service_out" msgid="7999094221728929681">"సేవ అందుబాటులో లేదు"</string>
     <string name="radioInfo_service_emergency" msgid="6274434235469661525">"అత్యవసర కాల్‌లు మాత్రమే"</string>
     <string name="radioInfo_service_off" msgid="7536423790014501173">"రేడియో ఆఫ్‌లో ఉంది"</string>
-    <string name="radioInfo_roaming_in" msgid="9045363884600341051">"రోమింగ్‌లో ఉంది"</string>
+    <string name="radioInfo_roaming_in" msgid="9045363884600341051">"రోమింగ్"</string>
     <string name="radioInfo_roaming_not" msgid="4849214885629672819">"రోమింగ్‌లో లేదు"</string>
     <string name="radioInfo_phone_idle" msgid="7489244938838742820">"నిష్క్రియంగా ఉంది"</string>
     <string name="radioInfo_phone_ringing" msgid="4883724645684297895">"రింగ్ వస్తోంది"</string>
@@ -326,8 +326,8 @@
     <string name="date_and_time_settings_title" msgid="3350640463596716780">"తేదీ &amp; సమయం"</string>
     <string name="date_and_time_settings_title_setup_wizard" msgid="2391530758339384324">"తేదీ మరియు సమయాన్ని సెట్ చేయండి"</string>
     <string name="date_and_time_settings_summary" msgid="7095318986757583584">"తేదీ, సమయం, సమయ మండలి &amp; ఆకృతులను సెట్ చేయి"</string>
-    <string name="date_time_auto" msgid="4290527098376721491">"నెట్‌వర్క్ సమయాన్ని ఉపయోగించండి"</string>
-    <string name="zone_auto_title" msgid="3217703906014135437">"నెట్‌వర్క్ అందించిన సమయ మండలిని ఉపయోగించు"</string>
+    <string name="date_time_auto" msgid="4290527098376721491">"నెట్‌వర్క్-అందించిన సమయాన్ని ఉపయోగిస్తుంది"</string>
+    <string name="zone_auto_title" msgid="3217703906014135437">"నెట్‌వర్క్ అందించిన సమయ మండలిని ఉపయోగిస్తుంది"</string>
     <string name="date_time_24hour_auto" msgid="6276269188890332084">"ఆ భాష‌లో వాడే ఫార్మాట్‌ను ఉప‌యోగించు"</string>
     <string name="date_time_24hour_title" msgid="3203537578602803850">"24‑గంటల ఆకృతి"</string>
     <string name="date_time_24hour" msgid="1193032284921000063">"24-గంటల ఫార్మాట్‌ను ఉప‌యోగించు"</string>
@@ -575,7 +575,7 @@
     <string name="setup_lock_settings_options_dialog_title" msgid="5058207955455973917">"స్క్రీన్ లాక్ ఎంపికలు"</string>
     <string name="unlock_set_unlock_launch_picker_title" msgid="2084576942666016993">"స్క్రీన్ లాక్"</string>
     <string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5967714169972542586">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / నిద్రావస్థలోకి వెళ్లిన వెంటనే"</string>
-    <string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="4696710373399258413">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / నిద్రావస్థలోకి వెళ్లిన <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> తర్వాత"</string>
+    <string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="4696710373399258413">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / స్లీప్ మోడ్‌లోకి వెళ్లిన <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> తర్వాత"</string>
     <string name="unlock_set_unlock_launch_picker_title_profile" msgid="124176557311393483">"కార్యాలయ ప్రొఫైల్ లాక్"</string>
     <string name="unlock_set_unlock_launch_picker_change_title" msgid="5045866882028324941">"లాక్ స్క్రీన్ మార్చండి"</string>
     <string name="unlock_set_unlock_launch_picker_change_summary" msgid="2790960639554590668">"ఆకృతి, పిన్‌ లేదా పాస్‌వర్డ్ భద్రతను మార్చండి లేదా నిలిపివేయండి"</string>
@@ -616,7 +616,7 @@
     <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="2986105377420905314">"డివైజ్ సంరక్షణ ఫీచర్‌లు మీ ఆకృతి లేకుండా పని చేయవు.<xliff:g id="EMPTY_LINE">
 
 </xliff:g>అలాగే మీ సేవ్ చేయబడిన వేలిముద్రలు ఈ డివైజ్ నుండి తీసివేయబడతాయి, ఆపై మీరు వాటితో మీ ఫోన్‌ను అన్‌లాక్ చేయలేరు, కొనుగోళ్లను ప్రామాణీకరించలేరు లేదా యాప్‌లకు సైన్ ఇన్ చేయలేరు."</string>
-    <string name="unlock_disable_frp_warning_content_pin" msgid="586996206210265131">"డివైజ్ సంరక్షణ ఫీచర్‌లు మీ పిన్ లేకుండా పని చేయవు."</string>
+    <string name="unlock_disable_frp_warning_content_pin" msgid="586996206210265131">"పరికర సంరక్షణ ఫీచర్‌లు మీ పిన్ లేకుండా పని చేయవు."</string>
     <string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="3370462835533123695">"డివైజ్ సంరక్షణ ఫీచర్‌లు మీ పిన్ లేకుండా పని చేయవు.<xliff:g id="EMPTY_LINE">
 
 </xliff:g>అలాగే మీ సేవ్ చేయబడిన వేలిముద్రలు ఈ డివైజ్ నుండి తీసివేయబడతాయి, ఆపై మీరు వాటితో మీ ఫోన్‌ను అన్‌లాక్ చేయలేరు, కొనుగోళ్లను ప్రామాణీకరించలేరు లేదా యాప్‌లకు సైన్ ఇన్ చేయలేరు."</string>
@@ -1301,7 +1301,7 @@
     <string name="sim_lock_off" product="default" msgid="258981978215428916">"ఫోన్‌ను ఉపయోగించడానికి పిన్‌ అవసరం"</string>
     <string name="sim_pin_change" msgid="6311414184279932368">"సిమ్ పిన్‌ను మార్చు"</string>
     <string name="sim_enter_pin" msgid="6608715137008508432">"సిమ్ పిన్"</string>
-    <string name="sim_enable_sim_lock" msgid="4517742794997166918">"సిమ్ కార్డుని లాక్ చేయి"</string>
+    <string name="sim_enable_sim_lock" msgid="4517742794997166918">"సిమ్ కార్డును లాక్ చేయండి"</string>
     <string name="sim_disable_sim_lock" msgid="7664729528754784824">"సిమ్ కార్డుని అన్‌లాక్ చేయి"</string>
     <string name="sim_enter_old" msgid="6074196344494634348">"పాత సిమ్ పిన్"</string>
     <string name="sim_enter_new" msgid="8742727032729243562">"కొత్త సిమ్ పిన్"</string>
@@ -1332,7 +1332,7 @@
     <string name="system_update_settings_list_item_title" msgid="3342887311059985961">"సిస్టమ్ అప్‌డేట్‌లు"</string>
     <string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
     <string name="firmware_version" msgid="4801135784886859972">"Android వెర్షన్"</string>
-    <string name="security_patch" msgid="8438384045870296634">"Android భద్రతా అతికింపు స్థాయి"</string>
+    <string name="security_patch" msgid="8438384045870296634">"Android భద్రతా ప్యాచ్ స్థాయి"</string>
     <string name="model_info" msgid="1952009518045740889">"మోడల్"</string>
     <string name="model_summary" msgid="8306235877567782987">"మోడల్: %1$s"</string>
     <string name="hardware_info" msgid="2605080746512527805">"మోడల్ &amp; హార్డ్‌వేర్"</string>
@@ -1670,7 +1670,7 @@
     <string name="mobile_connect_to_internet" msgid="1733894125065249639">"దయచేసి ఇంటర్నెట్‌కు కనెక్ట్ చేయండి"</string>
     <string name="location_category_recent_location_requests" msgid="1938721350424447421">"ఇటీవలి స్థాన అభ్యర్థనలు"</string>
     <string name="location_recent_location_requests_see_all" msgid="9063541547120162593">"అన్నీ చూడండి"</string>
-    <string name="location_category_location_services" msgid="7437150886946685979">"స్థానం సేవలు"</string>
+    <string name="location_category_location_services" msgid="7437150886946685979">"స్థాన సేవలు"</string>
     <string name="location_title" msgid="1029961368397484576">"నా స్థానం"</string>
     <string name="managed_profile_location_switch_title" msgid="6712332547063039683">"కార్యాలయ ప్రొఫైల్ యొక్క స్థానం"</string>
     <string name="location_app_level_permissions" msgid="2777033567595680764">"యాప్ అనుమతి"</string>
@@ -1706,7 +1706,7 @@
     <string name="location_access_summary" msgid="69031404093194341">"మీ స్థాన సమాచారాన్ని ఉపయోగించడానికి మీ అనుమతిని అడిగిన అనువర్తనాలను అనుమతించండి"</string>
     <string name="location_sources_heading" msgid="1278732419851088319">"స్థానం మూలాలు"</string>
     <string name="about_settings" product="tablet" msgid="593457295516533765">"టాబ్లెట్ పరిచయం"</string>
-    <string name="about_settings" product="default" msgid="1743378368185371685">"ఫోన్ గురించి"</string>
+    <string name="about_settings" product="default" msgid="1743378368185371685">"ఫోన్ వివరాలు"</string>
     <string name="about_settings" product="device" msgid="6717640957897546887">"పరికరం గురించి"</string>
     <string name="about_settings" product="emulator" msgid="221313099578564438">"పునరుత్పాదిత పరికరం గురించి"</string>
     <string name="about_settings_summary" msgid="3371517697156165959">"చట్టపరమైన సమాచారం, స్థితి, సాఫ్ట్‌వేర్ సంస్కరణను వీక్షించండి"</string>
@@ -1911,8 +1911,8 @@
     <string name="invalid_location" msgid="4354595459063675191">"ఇన్‌స్టాల్ స్థానం చెల్లదు."</string>
     <string name="system_package" msgid="1352722848400644991">"సిస్టమ్ అప్‌డేట్‌లను బాహ్య మీడియాలో ఇన్‌స్టాల్ చేయడం సాధ్యపడదు."</string>
     <string name="move_error_device_admin" msgid="8673026002690505763">"పరికర నిర్వాహకుల అనువర్తనాన్ని బాహ్య మీడియాలో ఇన్‌స్టాల్ చేయలేరు"</string>
-    <string name="force_stop_dlg_title" msgid="977530651470711366">"నిర్బంధంగా ఆపివేయాలా?"</string>
-    <string name="force_stop_dlg_text" msgid="7208364204467835578">"మీరు అనువర్తనాన్ని నిర్బంధంగా ఆపివేస్తే, అది సరిగ్గా పని చేయకపోవచ్చు."</string>
+    <string name="force_stop_dlg_title" msgid="977530651470711366">"ఫోర్స్ స్టాప్ చేయాలా?"</string>
+    <string name="force_stop_dlg_text" msgid="7208364204467835578">"ఏదైనా యాప్‌ను మీరు ఫోర్స్ స్టాప్ చేస్తే, అది సరిగ్గా పని చేయకపోవచ్చు."</string>
     <string name="app_install_location_title" msgid="2068975150026852168">"ప్రాధాన్య ఇన్‌స్టాల్ స్థానం"</string>
     <string name="app_install_location_summary" msgid="5155453752692959098">"కొత్త అనువర్తనాల కోసం ప్రాధాన్య ఇన్‌స్టాలేషన్ స్థానాన్ని మార్చండి"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"అనువర్తనాన్ని నిలిపివేయి"</string>
@@ -2539,7 +2539,7 @@
     <string name="menu_duration_6h" msgid="1940846763432184132">"6 గంటలు"</string>
     <string name="menu_duration_12h" msgid="7890465404584356294">"12 గంటలు"</string>
     <string name="menu_duration_1d" msgid="3393631127622285458">"1 రోజు"</string>
-    <string name="menu_show_system" msgid="8864603400415567635">"సిస్టమ్‌ను చూపు"</string>
+    <string name="menu_show_system" msgid="8864603400415567635">"సిస్టమ్ ప్రాసెస్‌లను చూపు"</string>
     <string name="menu_hide_system" msgid="4106826741703745733">"సిస్టమ్‌ను దాచు"</string>
     <string name="menu_show_percentage" msgid="4717204046118199806">"శాతాలను చూపు"</string>
     <string name="menu_use_uss" msgid="467765290771543089">"Ussను ఉపయోగించు"</string>
@@ -2574,13 +2574,13 @@
     <string name="credentials_install" product="nosdcard" msgid="466093273825150847">"నిల్వ నుండి ఇన్‌స్టాల్ చేయండి"</string>
     <string name="credentials_install" product="default" msgid="953914549998062317">"SD కార్డు నుండి ఇన్‌స్టాల్ చేయండి"</string>
     <string name="credentials_install_summary" product="nosdcard" msgid="4220422806818210676">"నిల్వ నుండి స‌ర్టిఫికెట్‌ల‌ను ఇన్‌స్టాల్ చేయండి"</string>
-    <string name="credentials_install_summary" product="default" msgid="5737658257407822713">"SD కార్డు నుండి ప్రమాణపత్రాలను ఇన్‌స్టాల్ చేయండి"</string>
+    <string name="credentials_install_summary" product="default" msgid="5737658257407822713">"SD కార్డు నుండి సర్టిఫికెట్‌లను ఇన్‌స్టాల్ చేయండి"</string>
     <string name="credentials_reset" msgid="3239382277144980418">"ఆధారాలను క్లియర్ చేయండి"</string>
     <string name="credentials_reset_summary" msgid="3369361230171260282">"అన్ని స‌ర్టిఫికెట్‌ల‌ను తీసివేయండి"</string>
     <string name="trusted_credentials" msgid="4266945289534242402">"విశ్వసనీయ ఆధారాలు"</string>
     <string name="trusted_credentials_summary" msgid="6735221351155686632">"విశ్వసనీయ CA స‌ర్టిఫికెట్‌ల‌ను ప్రదర్శించు"</string>
     <string name="user_credentials" msgid="3719013347787187083">"వినియోగదారు ఆధారాలు"</string>
-    <string name="user_credentials_summary" msgid="7271228342106080167">"నిల్వ చేసిన ఆధారాలను వీక్షించండి మరియు సవరించండి"</string>
+    <string name="user_credentials_summary" msgid="7271228342106080167">"నిల్వ ఉన్న ఆధారాలను చూడండి, వాటిని సవరించండి"</string>
     <string name="advanced_security_title" msgid="2434776238010578865">"అధునాతనం"</string>
     <string name="credential_storage_type" msgid="8629968543494001364">"నిల్వ రకం"</string>
     <string name="credential_storage_type_hardware" msgid="6077193544333904427">"హార్డ్‌వేర్ మద్దతు"</string>
@@ -3106,7 +3106,7 @@
     <string name="keywords_wifi" msgid="3646884600964177062">"wifi, wi-fi, నెట్‌వర్క్ కనెక్షన్, ఇంటర్నెట్, వైర్‌లెస్, డేటా, wi fi"</string>
     <string name="keywords_wifi_notify_open_networks" msgid="8745178424405564885">"Wi‑Fi నోటిఫికేషన్, wifi నోటిఫికేషన్"</string>
     <string name="keywords_vibrate_on_touch" msgid="1494239633254176598">"వైబ్రేషన్ ఆపివేయి, నొక్కడం, కీబోర్డ్"</string>
-    <string name="keywords_time_format" msgid="5581515674151927461">"24-గంటల ఫార్మాట్‌ని ఉపయోగించు"</string>
+    <string name="keywords_time_format" msgid="5581515674151927461">"24-గంటల ఫార్మాట్‌ను ఉపయోగించు"</string>
     <string name="keywords_storage_files" msgid="7075933058850826819">"డౌన్‌లోడ్ చేయి"</string>
     <string name="keywords_app_default" msgid="5822717006354487071">"దీనితో తెరువు"</string>
     <string name="keywords_applications_settings" msgid="1268353611121497450">"అప్లికేషన్‌లు"</string>
@@ -3488,7 +3488,7 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> వర్గం</item>
     </plurals>
     <string name="no_channels" msgid="3077375508177744586">"ఈ యాప్ ఏ నోటిఫికేషన్‌లను పోస్ట్ చేయలేదు"</string>
-    <string name="app_settings_link" msgid="8894946007543660906">"యాప్‌లో అదనపు సెట్టింగ్‌లు"</string>
+    <string name="app_settings_link" msgid="8894946007543660906">"యాప్‌లోని అదనపు సెట్టింగ్‌లు"</string>
     <string name="app_notification_listing_summary_zero" msgid="8046168435207424440">"అన్ని యాప్‌లలో ఆన్ చేయబడ్డాయి"</string>
     <plurals name="app_notification_listing_summary_others" formatted="false" msgid="6709582776823665660">
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> యాప్‌లలో ఆఫ్ చేయబడింది</item>
@@ -3855,7 +3855,7 @@
     <string name="memory_usage" msgid="1781358557214390033">"మెమరీ వినియోగం"</string>
     <string name="app_list_memory_use" msgid="6987417883876419338">"యాప్‌ వినియోగం"</string>
     <string name="memory_details" msgid="5943436005716991782">"వివరాలు"</string>
-    <string name="memory_use_summary" msgid="5608257211903075754">"గత 3 గంటల్లో <xliff:g id="SIZE">%1$s</xliff:g> సగటు మెమరీ వినియోగించబడింది"</string>
+    <string name="memory_use_summary" msgid="5608257211903075754">"గత 3 గంటల్లో సగటున <xliff:g id="SIZE">%1$s</xliff:g> మెమరీ వినియోగించబడింది"</string>
     <string name="no_memory_use_summary" msgid="2016900536806235588">"గత 3 గంటల్లో మెమరీ ఏదీ వినియోగించలేదు"</string>
     <string name="sort_avg_use" msgid="3998036180505143129">"సగటు వినియోగం ఆధారంగా క్రమబద్ధీకరించు"</string>
     <string name="sort_max_use" msgid="4629247978290075124">"గరిష్ట వినియోగం ఆధారంగా క్రమబద్ధీకరించు"</string>
@@ -3953,7 +3953,7 @@
     <string name="users_summary" msgid="1674864467098487328">"<xliff:g id="USER_NAME">%1$s</xliff:g>గా సైన్ ఇన్ చేసారు"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> డిఫాల్ట్‌గా ఉంది"</string>
     <string name="backup_disabled" msgid="485189128759595412">"బ్యాకప్ నిలిపివేయబడింది"</string>
-    <string name="android_version_summary" msgid="2935995161657697278">"Android <xliff:g id="VERSION">%1$s</xliff:g>కి అప్‌డేట్ చేయబడింది"</string>
+    <string name="android_version_summary" msgid="2935995161657697278">"Android <xliff:g id="VERSION">%1$s</xliff:g>కు అప్‌డేట్ చేయబడింది"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"అప్‌డేట్ అందుబాటులో ఉంది"</string>
     <string name="disabled_by_policy_title" msgid="627023216027648534">"చర్య అనుమతించబడదు"</string>
     <string name="disabled_by_policy_title_adjust_volume" msgid="3208724801293696486">"వాల్యూమ్‌ని మార్చలేరు"</string>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index fedd3cc..7330f8d 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -30,6 +30,11 @@
         android:key="block_desc" />
 
     <!-- Channels/Channel groups added here -->
+    <PreferenceCategory
+        android:key="channels"
+        android:layout="@layout/empty_view"
+        settings:allowDividerAbove="false"
+        settings:allowDividerBelow="false" />
 
     <!-- Importance toggle -->
     <com.android.settingslib.RestrictedSwitchPreference
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 5a81e71..384f262 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -106,7 +106,6 @@
 import com.android.settings.nfc.PaymentSettings;
 import com.android.settings.notification.AppBubbleNotificationSettings;
 import com.android.settings.notification.AppNotificationSettings;
-import com.android.settings.notification.ChannelGroupNotificationSettings;
 import com.android.settings.notification.ChannelNotificationSettings;
 import com.android.settings.notification.ConfigureNotificationSettings;
 import com.android.settings.notification.NotificationAccessSettings;
@@ -238,7 +237,6 @@
             AppNotificationSettings.class.getName(),
             NotificationAssistantPicker.class.getName(),
             ChannelNotificationSettings.class.getName(),
-            ChannelGroupNotificationSettings.class.getName(),
             ApnSettings.class.getName(),
             ApnEditor.class.getName(),
             WifiCallingSettings.class.getName(),
diff --git a/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java b/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
index 3da5763..c477abc 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.provider.Settings;
 
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.slice.Slice;
@@ -72,11 +73,12 @@
             return null;
         }
 
-        // Display the contextual card only if all the following 3 conditions hold:
-        // 1. The Screen Attention is enabled in Settings.
+        // Display the contextual card only if all the following 4 conditions hold:
+        // 1. The Screen Attention is available in Settings.
         // 2. The device is not recently set up.
         // 3. Current user hasn't opened Screen Attention's settings page before.
-        if (isSettingsAvailable() && !isUserInteracted() && !isRecentlySetup()) {
+        // 4. Screen Attention is off.
+        if (isSettingsAvailable() && !isUserInteracted() && !isRecentlySetup() && !isTurnedOn()) {
             final IconCompat icon = IconCompat.createWithResource(mContext,
                     R.drawable.ic_settings_adaptive_sleep);
             final CharSequence title = mContext.getText(R.string.adaptive_sleep_title);
@@ -123,6 +125,14 @@
     }
 
     /**
+     * @return {@code true} if the feature is turned on for the device, otherwise {@code false}
+     */
+    private boolean isTurnedOn() {
+        return Settings.System.getInt(
+                mContext.getContentResolver(), Settings.System.ADAPTIVE_SLEEP, 0) != 0;
+    }
+
+    /**
      * @return {@code true} if the current user has opened the Screen Attention settings page
      * before, otherwise {@code false}.
      */
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
index ccccd39..ff76779 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
@@ -20,7 +20,7 @@
 import static android.app.NotificationManager.IMPORTANCE_NONE;
 import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
 
-import static com.android.settings.notification.NotificationSettingsBase.ARG_FROM_SETTINGS;
+import static com.android.settings.notification.ChannelListPreferenceController.ARG_FROM_SETTINGS;
 
 import android.app.Application;
 import android.app.NotificationChannel;
@@ -110,7 +110,7 @@
      *
      * Note:
      * When the sent count of notification channels is the same, follow the sorting mechanism from
-     * {@link com.android.settings.notification.NotificationSettingsBase#mChannelComparator}.
+     * {@link com.android.settings.notification.ChannelListPreferenceController}.
      * Since slice view only shows displayable notification channels, so those deleted ones are
      * excluded from the comparison here.
      */
@@ -257,7 +257,6 @@
         channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
         channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPackageName);
         channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
-        channelArgs.putBoolean(ARG_FROM_SETTINGS, true);
 
         final Intent channelIntent = new SubSettingLauncher(mContext)
                 .setDestination(ChannelNotificationSettings.class.getName())
diff --git a/src/com/android/settings/network/ApnEditor.java b/src/com/android/settings/network/ApnEditor.java
index 542a869..1451a40 100644
--- a/src/com/android/settings/network/ApnEditor.java
+++ b/src/com/android/settings/network/ApnEditor.java
@@ -135,7 +135,10 @@
     private int mBearerInitialVal = 0;
     private String mMvnoTypeStr;
     private String mMvnoMatchDataStr;
-    private String[] mReadOnlyApnTypes;
+    @VisibleForTesting
+    String[] mReadOnlyApnTypes;
+    @VisibleForTesting
+    String[] mDefaultApnTypes;
     private String[] mReadOnlyApnFields;
     private boolean mReadOnlyApn;
     private Uri mCarrierUri;
@@ -189,7 +192,8 @@
     private static final int MMSPROXY_INDEX = 12;
     private static final int MMSPORT_INDEX = 13;
     private static final int AUTH_TYPE_INDEX = 14;
-    private static final int TYPE_INDEX = 15;
+    @VisibleForTesting
+    static final int TYPE_INDEX = 15;
     private static final int PROTOCOL_INDEX = 16;
     @VisibleForTesting
     static final int CARRIER_ENABLED_INDEX = 17;
@@ -250,12 +254,17 @@
                 mReadOnlyApnTypes = b.getStringArray(
                         CarrierConfigManager.KEY_READ_ONLY_APN_TYPES_STRING_ARRAY);
                 if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)) {
-                    for (String apnType : mReadOnlyApnTypes) {
-                        Log.d(TAG, "onCreate: read only APN type: " + apnType);
-                    }
+                    Log.d(TAG,
+                            "onCreate: read only APN type: " + Arrays.toString(mReadOnlyApnTypes));
                 }
                 mReadOnlyApnFields = b.getStringArray(
                         CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY);
+
+                mDefaultApnTypes = b.getStringArray(
+                        CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY);
+                if (!ArrayUtils.isEmpty(mDefaultApnTypes)) {
+                    Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes));
+                }
             }
         }
 
@@ -1150,17 +1159,24 @@
         return sNotSet.equals(value) ? null : value;
     }
 
-    private String getUserEnteredApnType() {
+    @VisibleForTesting
+    String getUserEnteredApnType() {
         // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY"
+        // but if user enter empty type, map it just for default
         String userEnteredApnType = mApnType.getText();
         if (userEnteredApnType != null) userEnteredApnType = userEnteredApnType.trim();
         if ((TextUtils.isEmpty(userEnteredApnType)
                 || PhoneConstants.APN_TYPE_ALL.equals(userEnteredApnType))
                 && !ArrayUtils.isEmpty(mReadOnlyApnTypes)) {
+            String[] apnTypeList = PhoneConstants.APN_TYPES;
+            if (TextUtils.isEmpty(userEnteredApnType) && !ArrayUtils.isEmpty(mDefaultApnTypes)) {
+                apnTypeList = mDefaultApnTypes;
+            }
+
             StringBuilder editableApnTypes = new StringBuilder();
             List<String> readOnlyApnTypes = Arrays.asList(mReadOnlyApnTypes);
             boolean first = true;
-            for (String apnType : PhoneConstants.APN_TYPES) {
+            for (String apnType : apnTypeList) {
                 // add APN type if it is not read-only and is not wild-cardable
                 if (!readOnlyApnTypes.contains(apnType)
                         && !apnType.equals(PhoneConstants.APN_TYPE_IA)
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 531d8fa..dc06f47 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -16,46 +16,34 @@
 
 package com.android.settings.notification;
 
-import android.app.NotificationChannel;
-import android.app.NotificationChannelGroup;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.R;
-import com.android.settings.widget.MasterSwitchPreference;
-import com.android.settingslib.RestrictedSwitchPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+
 /** These settings are per app, so should not be returned in global search results. */
 public class AppNotificationSettings extends NotificationSettingsBase {
     private static final String TAG = "AppNotificationSettings";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    private static String KEY_GENERAL_CATEGORY = "categories";
     private static String KEY_ADVANCED_CATEGORY = "app_advanced";
     private static String KEY_BADGE = "badge";
     private static String KEY_APP_LINK = "app_link";
     private static String KEY_BUBBLE = "bubble_link_pref";
     private static String[] LEGACY_NON_ADVANCED_KEYS = {KEY_BADGE, KEY_APP_LINK, KEY_BUBBLE};
 
-    private List<NotificationChannelGroup> mChannelGroupList;
-
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.NOTIFICATION_APP_NOTIFICATION;
@@ -91,26 +79,6 @@
             return;
         }
 
-        if (!mShowLegacyChannelConfig) {
-            // Load channel settings
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... unused) {
-                    mChannelGroupList = mBackend.getGroups(mPkg, mUid).getList();
-                    Collections.sort(mChannelGroupList, mChannelGroupComparator);
-                    return null;
-                }
-
-                @Override
-                protected void onPostExecute(Void unused) {
-                    if (getHost() == null) {
-                        return;
-                    }
-                    populateList();
-                }
-            }.execute();
-        }
-
         for (NotificationPreferenceController controller : mControllers) {
             controller.onResume(mAppRow, mChannel, mChannelGroup, mSuspendedAppsAdmin);
             controller.displayPreference(getPreferenceScreen());
@@ -154,125 +122,7 @@
         mControllers.add(new NotificationsOffPreferenceController(context));
         mControllers.add(new DeletedChannelsPreferenceController(context, mBackend));
         mControllers.add(new BubbleSummaryPreferenceController(context, mBackend));
+        mControllers.add(new ChannelListPreferenceController(context, mBackend));
         return new ArrayList<>(mControllers);
     }
-
-    private void populateList() {
-        if (!mDynamicPreferences.isEmpty()) {
-            for (Preference p : mDynamicPreferences) {
-                getPreferenceScreen().removePreference(p);
-            }
-            mDynamicPreferences.clear();
-        }
-        if (mChannelGroupList.isEmpty()) {
-            PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
-            groupCategory.setTitle(R.string.notification_channels);
-            groupCategory.setKey(KEY_GENERAL_CATEGORY);
-            getPreferenceScreen().addPreference(groupCategory);
-            mDynamicPreferences.add(groupCategory);
-
-            Preference empty = new Preference(getPrefContext());
-            empty.setTitle(R.string.no_channels);
-            empty.setEnabled(false);
-            groupCategory.addPreference(empty);
-        } else {
-            populateGroupList();
-            mImportanceListener.onImportanceChanged();
-        }
-    }
-
-    private void populateGroupList() {
-        for (NotificationChannelGroup group : mChannelGroupList) {
-            PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
-            groupCategory.setOrderingAsAdded(true);
-            getPreferenceScreen().addPreference(groupCategory);
-            mDynamicPreferences.add(groupCategory);
-            if (group.getId() == null) {
-                if (mChannelGroupList.size() > 1) {
-                    groupCategory.setTitle(R.string.notification_channels_other);
-                }
-                groupCategory.setKey(KEY_GENERAL_CATEGORY);
-            } else {
-                groupCategory.setTitle(group.getName());
-                groupCategory.setKey(group.getId());
-                populateGroupToggle(groupCategory, group);
-            }
-            if (!group.isBlocked()) {
-                final List<NotificationChannel> channels = group.getChannels();
-                Collections.sort(channels, mChannelComparator);
-                int N = channels.size();
-                for (int i = 0; i < N; i++) {
-                    final NotificationChannel channel = channels.get(i);
-                    populateSingleChannelPrefs(groupCategory, channel, group.isBlocked());
-                }
-            }
-        }
-    }
-
-    protected void populateGroupToggle(final PreferenceGroup parent,
-            NotificationChannelGroup group) {
-        RestrictedSwitchPreference preference = new RestrictedSwitchPreference(getPrefContext());
-        preference.setTitle(R.string.notification_switch_label);
-        preference.setEnabled(mSuspendedAppsAdmin == null
-                && isChannelGroupBlockable(group));
-        preference.setChecked(!group.isBlocked());
-        preference.setOnPreferenceClickListener(preference1 -> {
-            final boolean allowGroup = ((SwitchPreference) preference1).isChecked();
-            group.setBlocked(!allowGroup);
-            mBackend.updateChannelGroup(mAppRow.pkg, mAppRow.uid, group);
-
-            onGroupBlockStateChanged(group);
-            return true;
-        });
-
-        parent.addPreference(preference);
-    }
-
-    private Comparator<NotificationChannelGroup> mChannelGroupComparator =
-            new Comparator<NotificationChannelGroup>() {
-
-                @Override
-                public int compare(NotificationChannelGroup left, NotificationChannelGroup right) {
-                    // Non-grouped channels (in placeholder group with a null id) come last
-                    if (left.getId() == null && right.getId() != null) {
-                        return 1;
-                    } else if (right.getId() == null && left.getId() != null) {
-                        return -1;
-                    }
-                    return left.getId().compareTo(right.getId());
-                }
-            };
-
-    protected void onGroupBlockStateChanged(NotificationChannelGroup group) {
-        if (group == null) {
-            return;
-        }
-        PreferenceGroup groupGroup = (
-                PreferenceGroup) getPreferenceScreen().findPreference(group.getId());
-
-        if (groupGroup != null) {
-            if (group.isBlocked()) {
-                List<Preference> toRemove = new ArrayList<>();
-                int childCount = groupGroup.getPreferenceCount();
-                for (int i = 0; i < childCount; i++) {
-                    Preference pref = groupGroup.getPreference(i);
-                    if (pref instanceof MasterSwitchPreference) {
-                        toRemove.add(pref);
-                    }
-                }
-                for (Preference pref : toRemove) {
-                    groupGroup.removePreference(pref);
-                }
-            } else {
-                final List<NotificationChannel> channels = group.getChannels();
-                Collections.sort(channels, mChannelComparator);
-                int N = channels.size();
-                for (int i = 0; i < N; i++) {
-                    final NotificationChannel channel = channels.get(i);
-                    populateSingleChannelPrefs(groupGroup, channel, group.isBlocked());
-                }
-            }
-        }
-    }
-
 }
diff --git a/src/com/android/settings/notification/ChannelGroupNotificationSettings.java b/src/com/android/settings/notification/ChannelGroupNotificationSettings.java
deleted file mode 100644
index 1f8b1c3..0000000
--- a/src/com/android/settings/notification/ChannelGroupNotificationSettings.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2017 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.notification;
-
-import android.app.NotificationChannel;
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.util.Log;
-
-import androidx.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class ChannelGroupNotificationSettings extends NotificationSettingsBase {
-    private static final String TAG = "ChannelGroupSettings";
-
-    @Override
-    public int getMetricsCategory() {
-        return SettingsEnums.NOTIFICATION_CHANNEL_GROUP;
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mAppRow == null || mChannelGroup == null) {
-            Log.w(TAG, "Missing package or uid or packageinfo or group");
-            finish();
-            return;
-        }
-
-        populateChannelList();
-        for (NotificationPreferenceController controller : mControllers) {
-            controller.onResume(mAppRow, mChannel, mChannelGroup, mSuspendedAppsAdmin);
-            controller.displayPreference(getPreferenceScreen());
-        }
-        updatePreferenceStates();
-    }
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.notification_group_settings;
-    }
-
-    @Override
-    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
-        mControllers = new ArrayList<>();
-        mControllers.add(new HeaderPreferenceController(context, this));
-        mControllers.add(new BlockPreferenceController(context, mImportanceListener, mBackend));
-        mControllers.add(new AppLinkPreferenceController(context));
-        mControllers.add(new NotificationsOffPreferenceController(context));
-        mControllers.add(new DescriptionPreferenceController(context));
-        return new ArrayList<>(mControllers);
-    }
-
-    private void populateChannelList() {
-        if (!mDynamicPreferences.isEmpty()) {
-            // If there's anything in mDynamicPreferences, we've called populateChannelList twice.
-            // Clear out existing channels and log.
-            Log.w(TAG, "Notification channel group posted twice to settings - old size " +
-                    mDynamicPreferences.size() + ", new size " + mDynamicPreferences.size());
-            for (Preference p : mDynamicPreferences) {
-                getPreferenceScreen().removePreference(p);
-            }
-        }
-        if (mChannelGroup.getChannels().isEmpty()) {
-            Preference empty = new Preference(getPrefContext());
-            empty.setTitle(R.string.no_channels);
-            empty.setEnabled(false);
-            getPreferenceScreen().addPreference(empty);
-            mDynamicPreferences.add(empty);
-
-        } else {
-            final List<NotificationChannel> channels = mChannelGroup.getChannels();
-            Collections.sort(channels, mChannelComparator);
-            for (NotificationChannel channel : channels) {
-                mDynamicPreferences.add(populateSingleChannelPrefs(
-                        getPreferenceScreen(), channel, mChannelGroup.isBlocked()));
-            }
-
-        }
-    }
-}
diff --git a/src/com/android/settings/notification/ChannelListPreferenceController.java b/src/com/android/settings/notification/ChannelListPreferenceController.java
new file mode 100644
index 0000000..7ff407c
--- /dev/null
+++ b/src/com/android/settings/notification/ChannelListPreferenceController.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_LOW;
+import static android.app.NotificationManager.IMPORTANCE_NONE;
+
+import android.app.NotificationChannel;
+import android.app.NotificationChannelGroup;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.graphics.BlendMode;
+import android.graphics.BlendModeColorFilter;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.LayerDrawable;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.applications.AppInfoBase;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.widget.MasterSwitchPreference;
+import com.android.settingslib.RestrictedSwitchPreference;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.SwitchPreference;
+
+public class ChannelListPreferenceController extends NotificationPreferenceController {
+
+    private static final String KEY = "channels";
+    private static String KEY_GENERAL_CATEGORY = "categories";
+    public static final String ARG_FROM_SETTINGS = "fromSettings";
+
+    private List<NotificationChannelGroup> mChannelGroupList;
+    private PreferenceCategory mPreference;
+
+    public ChannelListPreferenceController(Context context, NotificationBackend backend) {
+        super(context, backend);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        if (mAppRow == null) {
+            return false;
+        }
+        if (mAppRow.banned) {
+            return false;
+        }
+        if (mChannel != null) {
+            if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid)
+                    || NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mPreference = (PreferenceCategory) preference;
+        // Load channel settings
+        new AsyncTask<Void, Void, Void>() {
+            @Override
+            protected Void doInBackground(Void... unused) {
+                mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
+                Collections.sort(mChannelGroupList, mChannelGroupComparator);
+                return null;
+            }
+
+            @Override
+            protected void onPostExecute(Void unused) {
+                if (mContext == null) {
+                    return;
+                }
+                populateList();
+            }
+        }.execute();
+    }
+
+    private void populateList() {
+        // TODO: if preference has children, compare with newly loaded list
+        mPreference.removeAll();
+
+        if (mChannelGroupList.isEmpty()) {
+            PreferenceCategory groupCategory = new PreferenceCategory(mContext);
+            groupCategory.setTitle(R.string.notification_channels);
+            groupCategory.setKey(KEY_GENERAL_CATEGORY);
+            mPreference.addPreference(groupCategory);
+
+            Preference empty = new Preference(mContext);
+            empty.setTitle(R.string.no_channels);
+            empty.setEnabled(false);
+            groupCategory.addPreference(empty);
+        } else {
+            populateGroupList();
+        }
+    }
+
+    private void populateGroupList() {
+        for (NotificationChannelGroup group : mChannelGroupList) {
+            PreferenceCategory groupCategory = new PreferenceCategory(mContext);
+            groupCategory.setOrderingAsAdded(true);
+            mPreference.addPreference(groupCategory);
+            if (group.getId() == null) {
+                if (mChannelGroupList.size() > 1) {
+                    groupCategory.setTitle(R.string.notification_channels_other);
+                }
+                groupCategory.setKey(KEY_GENERAL_CATEGORY);
+            } else {
+                groupCategory.setTitle(group.getName());
+                groupCategory.setKey(group.getId());
+                populateGroupToggle(groupCategory, group);
+            }
+            if (!group.isBlocked()) {
+                final List<NotificationChannel> channels = group.getChannels();
+                Collections.sort(channels, mChannelComparator);
+                int N = channels.size();
+                for (int i = 0; i < N; i++) {
+                    final NotificationChannel channel = channels.get(i);
+                    populateSingleChannelPrefs(groupCategory, channel, group.isBlocked());
+                }
+            }
+        }
+    }
+
+    protected void populateGroupToggle(final PreferenceGroup parent,
+            NotificationChannelGroup group) {
+        RestrictedSwitchPreference preference =
+                new RestrictedSwitchPreference(mContext);
+        preference.setTitle(R.string.notification_switch_label);
+        preference.setEnabled(mAdmin == null
+                && isChannelGroupBlockable(group));
+        preference.setChecked(!group.isBlocked());
+        preference.setOnPreferenceClickListener(preference1 -> {
+            final boolean allowGroup = ((SwitchPreference) preference1).isChecked();
+            group.setBlocked(!allowGroup);
+            mBackend.updateChannelGroup(mAppRow.pkg, mAppRow.uid, group);
+
+            onGroupBlockStateChanged(group);
+            return true;
+        });
+
+        parent.addPreference(preference);
+    }
+
+    protected Preference populateSingleChannelPrefs(PreferenceGroup parent,
+            final NotificationChannel channel, final boolean groupBlocked) {
+        MasterSwitchPreference channelPref = new MasterSwitchPreference(mContext);
+        channelPref.setSwitchEnabled(mAdmin == null
+                && isChannelBlockable(channel)
+                && isChannelConfigurable(channel)
+                && !groupBlocked);
+        channelPref.setIcon(null);
+        if (channel.getImportance() > IMPORTANCE_LOW) {
+            channelPref.setIcon(getAlertingIcon());
+        }
+        channelPref.setIconSize(MasterSwitchPreference.ICON_SIZE_SMALL);
+        channelPref.setKey(channel.getId());
+        channelPref.setTitle(channel.getName());
+        channelPref.setSummary(NotificationBackend.getSentSummary(
+                mContext, mAppRow.sentByChannel.get(channel.getId()), false));
+        channelPref.setChecked(channel.getImportance() != IMPORTANCE_NONE);
+        Bundle channelArgs = new Bundle();
+        channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mAppRow.uid);
+        channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mAppRow.pkg);
+        channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
+        channelArgs.putBoolean(ARG_FROM_SETTINGS, true);
+        channelPref.setIntent(new SubSettingLauncher(mContext)
+                .setDestination(ChannelNotificationSettings.class.getName())
+                .setArguments(channelArgs)
+                .setTitleRes(R.string.notification_channel_title)
+                .setSourceMetricsCategory(SettingsEnums.NOTIFICATION_APP_NOTIFICATION)
+                .toIntent());
+
+        channelPref.setOnPreferenceChangeListener(
+                (preference, o) -> {
+                    boolean value = (Boolean) o;
+                    int importance = value ? IMPORTANCE_LOW : IMPORTANCE_NONE;
+                    channel.setImportance(importance);
+                    channel.lockFields(
+                            NotificationChannel.USER_LOCKED_IMPORTANCE);
+                    MasterSwitchPreference channelPref1 = (MasterSwitchPreference) preference;
+                    channelPref1.setIcon(null);
+                    if (channel.getImportance() > IMPORTANCE_LOW) {
+                        channelPref1.setIcon(getAlertingIcon());
+                    }
+                    toggleBehaviorIconState(channelPref1.getIcon(),
+                            importance != IMPORTANCE_NONE);
+                    mBackend.updateChannel(mAppRow.pkg, mAppRow.uid, channel);
+
+                    return true;
+                });
+        if (parent.findPreference(channelPref.getKey()) == null) {
+            parent.addPreference(channelPref);
+        }
+        return channelPref;
+    }
+
+    private Drawable getAlertingIcon() {
+        Drawable icon = mContext.getDrawable(R.drawable.ic_notifications_alert);
+        icon.setTintList(Utils.getColorAccent(mContext));
+        return icon;
+    }
+
+    private void toggleBehaviorIconState(Drawable icon, boolean enabled) {
+        if (icon == null) return;
+
+        LayerDrawable layerDrawable = (LayerDrawable) icon;
+        GradientDrawable background =
+                (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.back);
+
+        if (background == null) return;
+
+        if (enabled) {
+            background.clearColorFilter();
+        } else {
+            background.setColorFilter(new BlendModeColorFilter(
+                    mContext.getColor(R.color.material_grey_300),
+                    BlendMode.SRC_IN));
+        }
+    }
+
+    protected void onGroupBlockStateChanged(NotificationChannelGroup group) {
+        if (group == null) {
+            return;
+        }
+        PreferenceGroup groupGroup = mPreference.findPreference(group.getId());
+
+        if (groupGroup != null) {
+            if (group.isBlocked()) {
+                List<Preference> toRemove = new ArrayList<>();
+                int childCount = groupGroup.getPreferenceCount();
+                for (int i = 0; i < childCount; i++) {
+                    Preference pref = groupGroup.getPreference(i);
+                    if (pref instanceof MasterSwitchPreference) {
+                        toRemove.add(pref);
+                    }
+                }
+                for (Preference pref : toRemove) {
+                    groupGroup.removePreference(pref);
+                }
+            } else {
+                final List<NotificationChannel> channels = group.getChannels();
+                Collections.sort(channels, mChannelComparator);
+                int N = channels.size();
+                for (int i = 0; i < N; i++) {
+                    final NotificationChannel channel = channels.get(i);
+                    populateSingleChannelPrefs(groupGroup, channel, group.isBlocked());
+                }
+            }
+        }
+    }
+
+    private Comparator<NotificationChannelGroup> mChannelGroupComparator =
+            new Comparator<NotificationChannelGroup>() {
+
+                @Override
+                public int compare(NotificationChannelGroup left, NotificationChannelGroup right) {
+                    // Non-grouped channels (in placeholder group with a null id) come last
+                    if (left.getId() == null && right.getId() != null) {
+                        return 1;
+                    } else if (right.getId() == null && left.getId() != null) {
+                        return -1;
+                    }
+                    return left.getId().compareTo(right.getId());
+                }
+            };
+
+    protected Comparator<NotificationChannel> mChannelComparator =
+            (left, right) -> {
+                if (left.isDeleted() != right.isDeleted()) {
+                    return Boolean.compare(left.isDeleted(), right.isDeleted());
+                } else if (left.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) {
+                    // Uncategorized/miscellaneous legacy channel goes last
+                    return 1;
+                } else if (right.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) {
+                    return -1;
+                }
+
+                return left.getId().compareTo(right.getId());
+            };
+}
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index 8399a49..09bf0e2 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.notification;
 
+import static com.android.settings.notification.ChannelListPreferenceController.ARG_FROM_SETTINGS;
+
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
diff --git a/src/com/android/settings/notification/NotificationPreferenceController.java b/src/com/android/settings/notification/NotificationPreferenceController.java
index 2ae7019..b5acd2d 100644
--- a/src/com/android/settings/notification/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationPreferenceController.java
@@ -113,25 +113,40 @@
     }
 
     protected boolean isChannelBlockable() {
-        if (mChannel != null && mAppRow != null) {
-            if (mChannel.isImportanceLockedByCriticalDeviceFunction()
-                    || mChannel.isImportanceLockedByOEM()) {
-                return mChannel.getImportance() == IMPORTANCE_NONE;
+        return isChannelBlockable(mChannel);
+    }
+
+    protected boolean isChannelBlockable(NotificationChannel channel) {
+        if (channel != null && mAppRow != null) {
+            if (channel.isImportanceLockedByCriticalDeviceFunction()
+                    || channel.isImportanceLockedByOEM()) {
+                return channel.getImportance() == IMPORTANCE_NONE;
             }
 
-            return mChannel.isBlockableSystem() || !mAppRow.systemApp
-                    || mChannel.getImportance() == IMPORTANCE_NONE;
+            return channel.isBlockableSystem() || !mAppRow.systemApp
+                    || channel.getImportance() == IMPORTANCE_NONE;
+        }
+        return false;
+    }
+
+    protected boolean isChannelConfigurable(NotificationChannel channel) {
+        if (channel != null && mAppRow != null) {
+            return !channel.isImportanceLockedByOEM();
         }
         return false;
     }
 
     protected boolean isChannelGroupBlockable() {
-        if (mChannelGroup != null && mAppRow != null) {
+        return isChannelGroupBlockable(mChannelGroup);
+    }
+
+    protected boolean isChannelGroupBlockable(NotificationChannelGroup group) {
+        if (group != null && mAppRow != null) {
             if (!mAppRow.systemApp) {
                 return true;
             }
 
-            return mChannelGroup.isBlocked();
+            return group.isBlocked();
         }
         return false;
     }
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 2a728c5..27a2de0 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -67,7 +67,6 @@
 abstract public class NotificationSettingsBase extends DashboardFragment {
     private static final String TAG = "NotifiSettingsBase";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-    public static final String ARG_FROM_SETTINGS = "fromSettings";
 
     protected PackageManager mPm;
     protected NotificationBackend mBackend = new NotificationBackend();
@@ -88,7 +87,6 @@
     protected boolean mListeningToPackageRemove;
 
     protected List<NotificationPreferenceController> mControllers = new ArrayList<>();
-    protected List<Preference> mDynamicPreferences = new ArrayList<>();
     protected ImportanceListener mImportanceListener = new ImportanceListener();
 
     protected Intent mIntent;
@@ -126,7 +124,6 @@
             mSuspendedAppsAdmin = RestrictedLockUtilsInternal.checkIfApplicationIsSuspended(
                     mContext, mPkg, mUserId);
 
-
             loadChannel();
             loadAppRow();
             loadChannelGroup();
@@ -280,135 +277,6 @@
         return null;
     }
 
-    private Drawable getAlertingIcon() {
-        Drawable icon = getContext().getDrawable(R.drawable.ic_notifications_alert);
-        icon.setTintList(Utils.getColorAccent(getContext()));
-        return icon;
-    }
-
-    protected Preference populateSingleChannelPrefs(PreferenceGroup parent,
-            final NotificationChannel channel, final boolean groupBlocked) {
-        MasterSwitchPreference channelPref = new MasterSwitchPreference(getPrefContext());
-        channelPref.setSwitchEnabled(mSuspendedAppsAdmin == null
-                && isChannelBlockable(channel)
-                && isChannelConfigurable(channel)
-                && !groupBlocked);
-        channelPref.setIcon(null);
-        if (channel.getImportance() > IMPORTANCE_LOW) {
-            channelPref.setIcon(getAlertingIcon());
-        }
-        channelPref.setIconSize(MasterSwitchPreference.ICON_SIZE_SMALL);
-        channelPref.setKey(channel.getId());
-        channelPref.setTitle(channel.getName());
-        channelPref.setSummary(NotificationBackend.getSentSummary(
-                mContext, mAppRow.sentByChannel.get(channel.getId()), false));
-        channelPref.setChecked(channel.getImportance() != IMPORTANCE_NONE);
-        Bundle channelArgs = new Bundle();
-        channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
-        channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
-        channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
-        channelArgs.putBoolean(ARG_FROM_SETTINGS, true);
-        channelPref.setIntent(new SubSettingLauncher(getActivity())
-                .setDestination(ChannelNotificationSettings.class.getName())
-                .setArguments(channelArgs)
-                .setTitleRes(R.string.notification_channel_title)
-                .setSourceMetricsCategory(getMetricsCategory())
-                .toIntent());
-
-        channelPref.setOnPreferenceChangeListener(
-                (preference, o) -> {
-                    boolean value = (Boolean) o;
-                    int importance = value ? IMPORTANCE_LOW : IMPORTANCE_NONE;
-                    channel.setImportance(importance);
-                    channel.lockFields(
-                            NotificationChannel.USER_LOCKED_IMPORTANCE);
-                    MasterSwitchPreference channelPref1 = (MasterSwitchPreference) preference;
-                    channelPref1.setIcon(null);
-                    if (channel.getImportance() > IMPORTANCE_LOW) {
-                        channelPref1.setIcon(getAlertingIcon());
-                    }
-                    toggleBehaviorIconState(channelPref1.getIcon(),
-                            importance != IMPORTANCE_NONE);
-                    mBackend.updateChannel(mPkg, mUid, channel);
-
-                    return true;
-                });
-        if (parent.findPreference(channelPref.getKey()) == null) {
-            parent.addPreference(channelPref);
-        }
-        return channelPref;
-    }
-
-    private void toggleBehaviorIconState(Drawable icon, boolean enabled) {
-        if (icon == null) return;
-
-        LayerDrawable layerDrawable = (LayerDrawable) icon;
-        GradientDrawable background =
-                (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.back);
-
-        if (background == null) return;
-
-        if (enabled) {
-            background.clearColorFilter();
-        } else {
-            background.setColorFilter(new BlendModeColorFilter(
-                    mContext.getColor(R.color.material_grey_300),
-                    BlendMode.SRC_IN));
-        }
-    }
-
-    protected boolean isChannelConfigurable(NotificationChannel channel) {
-        if (channel != null && mAppRow != null) {
-            return !channel.isImportanceLockedByOEM();
-        }
-        return false;
-    }
-
-    protected boolean isChannelBlockable(NotificationChannel channel) {
-        if (channel != null && mAppRow != null) {
-            if (!mAppRow.systemApp) {
-                return true;
-            }
-
-            if (channel.isImportanceLockedByCriticalDeviceFunction()) {
-                return false;
-            }
-
-            if (channel.isImportanceLockedByOEM()) {
-                return false;
-            }
-
-            return channel.isBlockableSystem()
-                    || channel.getImportance() == NotificationManager.IMPORTANCE_NONE;
-        }
-        return false;
-    }
-
-    protected boolean isChannelGroupBlockable(NotificationChannelGroup group) {
-        if (group != null && mAppRow != null) {
-            if (!mAppRow.systemApp) {
-                return true;
-            }
-
-            return group.isBlocked();
-        }
-        return false;
-    }
-
-    protected void setVisible(Preference p, boolean visible) {
-        setVisible(getPreferenceScreen(), p, visible);
-    }
-
-    protected void setVisible(PreferenceGroup parent, Preference p, boolean visible) {
-        final boolean isVisible = parent.findPreference(p.getKey()) != null;
-        if (isVisible == visible) return;
-        if (visible) {
-            parent.addPreference(p);
-        } else {
-            parent.removePreference(p);
-        }
-    }
-
     protected void startListeningToPackageRemove() {
         if (mListeningToPackageRemove) {
             return;
@@ -445,20 +313,6 @@
         }
     };
 
-    protected Comparator<NotificationChannel> mChannelComparator =
-            (left, right) -> {
-                if (left.isDeleted() != right.isDeleted()) {
-                    return Boolean.compare(left.isDeleted(), right.isDeleted());
-                } else if (left.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) {
-                    // Uncategorized/miscellaneous legacy channel goes last
-                    return 1;
-                } else if (right.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) {
-                    return -1;
-                }
-
-                return left.getId().compareTo(right.getId());
-            };
-
     protected class ImportanceListener {
         protected void onImportanceChanged() {
             final PreferenceScreen screen = getPreferenceScreen();
@@ -466,20 +320,6 @@
                 controller.displayPreference(screen);
             }
             updatePreferenceStates();
-
-            boolean hideDynamicFields = false;
-            if (mAppRow == null || mAppRow.banned) {
-                hideDynamicFields = true;
-            } else {
-                if (mChannel != null) {
-                    hideDynamicFields = mChannel.getImportance() == IMPORTANCE_NONE;
-                } else if (mChannelGroup != null) {
-                    hideDynamicFields = mChannelGroup.isBlocked();
-                }
-            }
-            for (Preference preference : mDynamicPreferences) {
-                setVisible(getPreferenceScreen(), preference, !hideDynamicFields);
-            }
         }
     }
 }
diff --git a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
index 8b5b761..9b20e7a 100644
--- a/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
+++ b/src/com/android/settings/notification/RecentNotifyingAppsPreferenceController.java
@@ -266,14 +266,17 @@
             Bundle args = new Bundle();
             args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkgName);
             args.putInt(AppInfoBase.ARG_PACKAGE_UID, appEntry.info.uid);
-            pref.setIntent(new SubSettingLauncher(mHost.getActivity())
-                    .setDestination(AppNotificationSettings.class.getName())
-                    .setTitleRes(R.string.notifications_title)
-                    .setArguments(args)
-                    .setUserHandle(new UserHandle(UserHandle.getUserId(appEntry.info.uid)))
-                    .setSourceMetricsCategory(
-                            SettingsEnums.MANAGE_APPLICATIONS_NOTIFICATIONS)
-                    .toIntent());
+            pref.setOnPreferenceClickListener(preference -> {
+                new SubSettingLauncher(mHost.getActivity())
+                        .setDestination(AppNotificationSettings.class.getName())
+                        .setTitleRes(R.string.notifications_title)
+                        .setArguments(args)
+                        .setUserHandle(new UserHandle(UserHandle.getUserId(appEntry.info.uid)))
+                        .setSourceMetricsCategory(
+                                SettingsEnums.MANAGE_APPLICATIONS_NOTIFICATIONS)
+                        .launch();
+                return true;
+            });
             pref.setSwitchEnabled(mNotificationBackend.isBlockable(mContext, appEntry.info));
             pref.setOnPreferenceChangeListener((preference, newValue) -> {
                 boolean blocked = !(Boolean) newValue;
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 0be7c2b..8e0da6b 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -179,7 +179,9 @@
     private TextView mSsidView;
 
     private Context mContext;
-    private Integer mSecurityInPosition[];
+
+    @VisibleForTesting
+    Integer mSecurityInPosition[];
 
     private final WifiManager mWifiManager;
 
@@ -325,7 +327,7 @@
             if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive()
                     && !mAccessPoint.isPasspointConfig())
                     || mMode != WifiConfigUiBase.MODE_VIEW) {
-                showSecurityFields();
+                showSecurityFields(true /* refreshEapMethods */, true /* refreshCertificates */);
                 showIpConfigFields();
                 showProxyFields();
                 final CheckBox advancedTogglebox =
@@ -956,7 +958,7 @@
         return 0;
     }
 
-    private void showSecurityFields() {
+    private void showSecurityFields(boolean refreshEapMethods, boolean refreshCertificates) {
         if (mAccessPointSecurity == AccessPoint.SECURITY_NONE ||
                 mAccessPointSecurity == AccessPoint.SECURITY_OWE ||
                 mAccessPointSecurity == AccessPoint.SECURITY_OWE_TRANSITION) {
@@ -988,16 +990,6 @@
         if (mEapMethodSpinner == null) {
             mEapMethodSpinner = (Spinner) mView.findViewById(R.id.method);
             mEapMethodSpinner.setOnItemSelectedListener(this);
-            if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
-                    com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
-                String[] eapMethods = mContext.getResources().getStringArray(
-                        R.array.eap_method_without_sim_auth);
-                ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(mContext,
-                        android.R.layout.simple_spinner_item, eapMethods);
-                spinnerAdapter.setDropDownViewResource(
-                        android.R.layout.simple_spinner_dropdown_item);
-                mEapMethodSpinner.setAdapter(spinnerAdapter);
-            }
             mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
             mPhase2Spinner.setOnItemSelectedListener(this);
             mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
@@ -1008,11 +1000,36 @@
             mEapUserCertSpinner.setOnItemSelectedListener(this);
             mEapIdentityView = (TextView) mView.findViewById(R.id.identity);
             mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous);
+        }
 
-            if (mAccessPoint != null && mAccessPoint.isCarrierAp()) {
-                mEapMethodSpinner.setSelection(mAccessPoint.getCarrierApEapType());
+        if (refreshEapMethods) {
+            ArrayAdapter<CharSequence> eapMethodSpinnerAdapter;
+            if (mAccessPointSecurity == AccessPoint.SECURITY_EAP_SUITE_B) {
+                eapMethodSpinnerAdapter = getSpinnerAdapter(R.array.wifi_eap_method);
+                mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter);
+                // WAP3-Enterprise 192-bit only allows EAP method TLS
+                mEapMethodSpinner.setSelection(Eap.TLS);
+                mEapMethodSpinner.setEnabled(false);
+            } else if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
+                    com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
+                eapMethodSpinnerAdapter = getSpinnerAdapter(
+                        R.array.eap_method_without_sim_auth);
+                mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter);
+                mEapMethodSpinner.setEnabled(true);
+            } else {
+                eapMethodSpinnerAdapter = getSpinnerAdapter(R.array.wifi_eap_method);
+                mEapMethodSpinner.setAdapter(eapMethodSpinnerAdapter);
+                mEapMethodSpinner.setEnabled(true);
             }
+        }
 
+        if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B
+                && mAccessPoint != null
+                && mAccessPoint.isCarrierAp()) {
+            mEapMethodSpinner.setSelection(mAccessPoint.getCarrierApEapType());
+        }
+
+        if (refreshCertificates) {
             loadCertificates(
                     mEapCaCertSpinner,
                     Credentials.CA_CERTIFICATE,
@@ -1025,76 +1042,73 @@
                     mDoNotProvideEapUserCertString,
                     false,
                     false);
+        }
 
-            // Modifying an existing network
-            if (mAccessPoint != null && mAccessPoint.isSaved()) {
-                WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig;
-                int eapMethod = enterpriseConfig.getEapMethod();
-                int phase2Method = enterpriseConfig.getPhase2Method();
-                mEapMethodSpinner.setSelection(eapMethod);
-                showEapFieldsByMethod(eapMethod);
-                switch (eapMethod) {
-                    case Eap.PEAP:
-                        switch (phase2Method) {
-                            case Phase2.NONE:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE);
-                                break;
-                            case Phase2.MSCHAPV2:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2);
-                                break;
-                            case Phase2.GTC:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
-                                break;
-                            case Phase2.SIM:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_SIM);
-                                break;
-                            case Phase2.AKA:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA);
-                                break;
-                            case Phase2.AKA_PRIME:
-                                mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA_PRIME);
-                                break;
-                            default:
-                                Log.e(TAG, "Invalid phase 2 method " + phase2Method);
-                                break;
-                        }
-                        break;
-                    default:
-                        mPhase2Spinner.setSelection(phase2Method);
-                        break;
-                }
-                if (!TextUtils.isEmpty(enterpriseConfig.getCaPath())) {
-                    setSelection(mEapCaCertSpinner, mUseSystemCertsString);
-                } else {
-                    String[] caCerts = enterpriseConfig.getCaCertificateAliases();
-                    if (caCerts == null) {
-                        setSelection(mEapCaCertSpinner, mDoNotValidateEapServerString);
-                    } else if (caCerts.length == 1) {
-                        setSelection(mEapCaCertSpinner, caCerts[0]);
-                    } else {
-                        // Reload the cert spinner with an extra "multiple certificates added" item.
-                        loadCertificates(
-                                mEapCaCertSpinner,
-                                Credentials.CA_CERTIFICATE,
-                                mDoNotValidateEapServerString,
-                                true,
-                                true);
-                        setSelection(mEapCaCertSpinner, mMultipleCertSetString);
+        // Modifying an existing network
+        if (mAccessPoint != null && mAccessPoint.isSaved()) {
+            final WifiEnterpriseConfig enterpriseConfig = mAccessPoint.getConfig().enterpriseConfig;
+            final int eapMethod = enterpriseConfig.getEapMethod();
+            final int phase2Method = enterpriseConfig.getPhase2Method();
+            mEapMethodSpinner.setSelection(eapMethod);
+            showEapFieldsByMethod(eapMethod);
+            switch (eapMethod) {
+                case Eap.PEAP:
+                    switch (phase2Method) {
+                        case Phase2.NONE:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE);
+                            break;
+                        case Phase2.MSCHAPV2:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2);
+                            break;
+                        case Phase2.GTC:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
+                            break;
+                        case Phase2.SIM:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_SIM);
+                            break;
+                        case Phase2.AKA:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA);
+                            break;
+                        case Phase2.AKA_PRIME:
+                            mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA_PRIME);
+                            break;
+                        default:
+                            Log.e(TAG, "Invalid phase 2 method " + phase2Method);
+                            break;
                     }
-                }
-                mEapDomainView.setText(enterpriseConfig.getDomainSuffixMatch());
-                String userCert = enterpriseConfig.getClientCertificateAlias();
-                if (TextUtils.isEmpty(userCert)) {
-                    setSelection(mEapUserCertSpinner, mDoNotProvideEapUserCertString);
-                } else {
-                    setSelection(mEapUserCertSpinner, userCert);
-                }
-                mEapIdentityView.setText(enterpriseConfig.getIdentity());
-                mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
-            } else {
-                mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
-                showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
+                    break;
+                default:
+                    mPhase2Spinner.setSelection(phase2Method);
+                    break;
             }
+            if (!TextUtils.isEmpty(enterpriseConfig.getCaPath())) {
+                setSelection(mEapCaCertSpinner, mUseSystemCertsString);
+            } else {
+                final String[] caCerts = enterpriseConfig.getCaCertificateAliases();
+                if (caCerts == null) {
+                    setSelection(mEapCaCertSpinner, mDoNotValidateEapServerString);
+                } else if (caCerts.length == 1) {
+                    setSelection(mEapCaCertSpinner, caCerts[0]);
+                } else {
+                    // Reload the cert spinner with an extra "multiple certificates added" item.
+                    loadCertificates(
+                            mEapCaCertSpinner,
+                            Credentials.CA_CERTIFICATE,
+                            mDoNotValidateEapServerString,
+                            true,
+                            true);
+                    setSelection(mEapCaCertSpinner, mMultipleCertSetString);
+                }
+            }
+            mEapDomainView.setText(enterpriseConfig.getDomainSuffixMatch());
+            final String userCert = enterpriseConfig.getClientCertificateAlias();
+            if (TextUtils.isEmpty(userCert)) {
+                setSelection(mEapUserCertSpinner, mDoNotProvideEapUserCertString);
+            } else {
+                setSelection(mEapUserCertSpinner, userCert);
+            }
+            mEapIdentityView.setText(enterpriseConfig.getIdentity());
+            mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
         } else {
             showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
         }
@@ -1389,7 +1403,18 @@
         } catch (Exception e) {
             Log.e(TAG, "can't get the certificate list from KeyStore");
         }
-        certs.add(noCertificateString);
+
+        if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B) {
+            certs.add(noCertificateString);
+        }
+
+        // If there are only mUnspecifiedCertString and one item to select, only shows the item
+        if (certs.size() == 2) {
+            certs.remove(mUnspecifiedCertString);
+            spinner.setEnabled(false);
+        } else {
+            spinner.setEnabled(true);
+        }
 
         final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                 context, android.R.layout.simple_spinner_item,
@@ -1486,15 +1511,17 @@
         if (parent == mSecuritySpinner) {
             // Convert menu position to actual Wi-Fi security type
             mAccessPointSecurity = mSecurityInPosition[position];
-            showSecurityFields();
+            showSecurityFields(true /* refreshEapMethods */, true /* refreshCertificates */);
 
             if (WifiDppUtils.isSupportEnrolleeQrCodeScanner(mContext, mAccessPointSecurity)) {
                 mSsidScanButton.setVisibility(View.VISIBLE);
             } else {
                 mSsidScanButton.setVisibility(View.GONE);
             }
-        } else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) {
-            showSecurityFields();
+        } else if (parent == mEapMethodSpinner) {
+            showSecurityFields(false /* refreshEapMethods */, true /* refreshCertificates */);
+        } else if (parent == mEapCaCertSpinner) {
+            showSecurityFields(false /* refreshEapMethods */, false /* refreshCertificates */);
         } else if (parent == mPhase2Spinner
                 && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) {
             showPeapFields();
@@ -1585,4 +1612,15 @@
         ((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox))
                 .setOnCheckedChangeListener(this);
     }
+
+    private ArrayAdapter<CharSequence> getSpinnerAdapter(
+            int contentStringArrayResId) {
+        final String[] eapMethods = mContext.getResources().getStringArray(
+                contentStringArrayResId);
+        final ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<>(mContext,
+                android.R.layout.simple_spinner_item, eapMethods);
+        spinnerAdapter.setDropDownViewResource(
+                android.R.layout.simple_spinner_dropdown_item);
+        return spinnerAdapter;
+    }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
index 5dfcc25..cc80b0c 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
@@ -390,7 +390,7 @@
                     WifiDppUtils.getSecurityString(wifiConfiguration),
                     wifiConfiguration.getPrintableSsid(),
                     wifiConfiguration.preSharedKey,
-                    /* hiddenSsid */ false,
+                    wifiConfiguration.hiddenSSID,
                     wifiConfiguration.networkId,
                     /* isHotspot */ false);
             }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index d595f79..c37bdc0a 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -172,22 +172,25 @@
 
                     // Adds all Wi-Fi networks in QR code to the set of configured networks and
                     // connects to it if it's reachable.
-                    boolean hasReachableWifiNetwork = false;
+                    boolean hasHiddenOrReachableWifiNetwork = false;
                     for (WifiConfiguration qrCodeWifiConfiguration : qrCodeWifiConfigurations) {
                         final int id = wifiManager.addNetwork(qrCodeWifiConfiguration);
                         if (id == -1) {
                             continue;
                         }
                         wifiManager.enableNetwork(id, /* attemptConnect */ false);
-                        if (isReachableWifiNetwork(qrCodeWifiConfiguration)) {
-                            hasReachableWifiNetwork = true;
+                        // WifiTracker only contains a hidden SSID Wi-Fi network if it's saved.
+                        // We can't check if a hidden SSID Wi-Fi network is reachable in advance.
+                        if (qrCodeWifiConfiguration.hiddenSSID ||
+                                isReachableWifiNetwork(qrCodeWifiConfiguration)) {
+                            hasHiddenOrReachableWifiNetwork = true;
                             mEnrolleeWifiConfiguration = qrCodeWifiConfiguration;
                             wifiManager.connect(id,
                                     /* listener */ WifiDppQrCodeScannerFragment.this);
                         }
                     }
 
-                    if (hasReachableWifiNetwork == false) {
+                    if (!hasHiddenOrReachableWifiNetwork) {
                         showErrorMessageAndRestartCamera(
                                 R.string.wifi_dpp_check_connection_try_again);
                         return;
diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index 7e15064..2a958e8 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -296,6 +296,7 @@
         if (!TextUtils.isEmpty(preSharedKey)) {
             intent.putExtra(EXTRA_WIFI_PRE_SHARED_KEY, preSharedKey);
         }
+        intent.putExtra(EXTRA_WIFI_HIDDEN_SSID, wifiConfiguration.hiddenSSID);
     }
 
     /**
diff --git a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
index fa2dc99..372bc44 100644
--- a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
@@ -220,7 +220,7 @@
             }
             final WifiNetworkConfig networkConfig = WifiNetworkConfig.getValidConfigOrNull(
                     selectedAccessPoint.getSecurityString(/* concise */ true),
-                    wifiConfig.getPrintableSsid(), wifiConfig.preSharedKey, /* hiddenSsid */ false,
+                    wifiConfig.getPrintableSsid(), wifiConfig.preSharedKey, wifiConfig.hiddenSSID,
                     wifiConfig.networkId, /* isHotspot */ false);
             if (mOnChooseNetworkListener != null) {
                 mOnChooseNetworkListener.onChooseNetwork(networkConfig);
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 061a81e..5d4abad 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -51,7 +51,6 @@
 com.android.settings.network.ApnSettings
 com.android.settings.network.telephony.NetworkSelectSettings
 com.android.settings.notification.AppNotificationSettings
-com.android.settings.notification.ChannelGroupNotificationSettings
 com.android.settings.notification.ChannelNotificationSettings
 com.android.settings.notification.NotificationStation
 com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSliceTest.java
index 54fb2c3..ff60aab 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSliceTest.java
@@ -32,6 +32,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.provider.Settings;
 
 import androidx.slice.Slice;
 import androidx.slice.SliceProvider;
@@ -65,6 +66,7 @@
         mContext = spy(RuntimeEnvironment.application);
         mContextualAdaptiveSleepSlice = spy(new ContextualAdaptiveSleepSlice(mContext));
 
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.ADAPTIVE_SLEEP, 0);
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(mSharedPreferences).when(mContext).getSharedPreferences(eq(PREF), anyInt());
         doReturn(true).when(mContextualAdaptiveSleepSlice).isSettingsAvailable();
@@ -112,4 +114,20 @@
 
         assertThat(slice).isNull();
     }
+
+    @Test
+    public void getSlice_ShowIfNotTurnedOn() {
+        final Slice slice = mContextualAdaptiveSleepSlice.getSlice();
+
+        assertThat(slice).isNotNull();
+    }
+
+    @Test
+    public void getSlice_DoNotShowIfTurnedOn() {
+        Settings.System.putInt(mContext.getContentResolver(), Settings.System.ADAPTIVE_SLEEP, 1);
+
+        final Slice slice = mContextualAdaptiveSleepSlice.getSlice();
+
+        assertThat(slice).isNull();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
index 8624eb9..dc14418 100644
--- a/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
+++ b/tests/robotests/src/com/android/settings/network/ApnEditorTest.java
@@ -463,6 +463,43 @@
         verify(mApnEditorUT).finish();
     }
 
+    @Test
+    public void getUserEnteredApnType_emptyApnType_shouldReturnDefault() {
+        // case 1
+        // GIVEN read only APN types with DUN
+        String[] readOnlyApnTypes = {"dun"};
+        mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypes;
+        // GIVEN read specificApnTypeForEmptyInput with DEFAULT,DUN
+        String[] defaultApnTypes = {"default", "dun"};
+        mApnEditorUT.mDefaultApnTypes = defaultApnTypes;
+
+        // Input empty in TYPE
+        final FakeApnData apnData = new FakeApnData(APN_DATA);
+        apnData.mData[ApnEditor.TYPE_INDEX] = "";
+        mApnEditorUT.mApnData = apnData;
+        mApnEditorUT.fillUI(true /* firstTime */);
+
+        // THEN APN type should be default
+        assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default");
+
+        // case 2
+        // GIVEN read only APN types with DUN
+        String[] readOnlyApnTypesCase2 = {"dun"};
+        mApnEditorUT.mReadOnlyApnTypes = readOnlyApnTypesCase2;
+        // GIVEN read specificApnTypeForEmptyInput with DEFAULT
+        String[] defaultApnTypesCase2 = {"default"};
+        mApnEditorUT.mDefaultApnTypes = defaultApnTypesCase2;
+
+        // Input empty in TYPE
+        final FakeApnData apnDataCase2 = new FakeApnData(APN_DATA);
+        apnDataCase2.mData[ApnEditor.TYPE_INDEX] = "";
+        mApnEditorUT.mApnData = apnDataCase2;
+        mApnEditorUT.fillUI(true /* firstTime */);
+
+        // THEN APN type should be default
+        assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default");
+    }
+
     private void initCursor() {
         doReturn(2).when(mCursor).getColumnCount();
         doReturn(2).when(mCursor).getInt(CURSOR_INTEGER_INDEX);
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
index 107da79..4c7d02d 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
@@ -26,6 +26,7 @@
 import com.android.settingslib.wifi.WifiTracker;
 import com.android.settingslib.wifi.WifiTrackerFactory;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
@@ -36,15 +37,18 @@
 @Config(shadows = ShadowAlertDialogCompat.class)
 public class NetworkRequestDialogActivityTest {
 
-    @Test
-    public void LaunchActivity_shouldShowNetworkRequestDialog() {
+    @Before
+    public void setUp() {
         // Mocks fake WifiTracker, in case of exception in NetworkRequestDialogFragment.onResume().
         WifiTracker wifiTracker = mock(WifiTracker.class);
         WifiTrackerFactory.setTestingWifiTracker(wifiTracker);
+    }
 
+    @Test
+    public void launchActivity_shouldShowNetworkRequestDialog() {
         Robolectric.setupActivity(NetworkRequestDialogActivity.class);
 
-        AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
 
         assertThat(alertDialog.isShowing()).isTrue();
     }
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index b16d900..dd7ecde 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -445,4 +445,28 @@
         WifiConfiguration config = mController.getConfig();
         assertThat(config.macRandomizationSetting).isEqualTo(WifiConfiguration.RANDOMIZATION_NONE);
     }
+
+    @Test
+    public void selectSecurity_wpa3Eap192bit_eapMethodTls() {
+        final WifiManager wifiManager = mock(WifiManager.class);
+        when(wifiManager.isWpa3SuiteBSupported()).thenReturn(true);
+        mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */,
+                WifiConfigUiBase.MODE_MODIFY, wifiManager);
+        final Spinner securitySpinner = mView.findViewById(R.id.security);
+        final Spinner eapMethodSpinner = mView.findViewById(R.id.method);
+        int wpa3Eap192bitPosition = -1;
+        final int securityCount = mController.mSecurityInPosition.length;
+        for (int i = 0; i < securityCount; i++) {
+            if (mController.mSecurityInPosition[i] != null &&
+                    mController.mSecurityInPosition[i] == AccessPoint.SECURITY_EAP_SUITE_B) {
+                wpa3Eap192bitPosition = i;
+            }
+        }
+
+        mController.onItemSelected(securitySpinner, null /* view */, wpa3Eap192bitPosition,
+                0 /* id */);
+
+        final int selectedItemPosition = eapMethodSpinner.getSelectedItemPosition();
+        assertThat(eapMethodSpinner.getSelectedItem().toString()).isEqualTo("TLS");
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java
new file mode 100644
index 0000000..694088a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.dpp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.KeyMgmt;
+import android.net.wifi.WifiManager;
+
+import com.android.settingslib.wifi.AccessPoint;
+
+import java.util.BitSet;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowApplication;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiDppUtilsTest {
+
+    @Mock
+    private WifiManager mWifiManager;
+
+    @Mock
+    private AccessPoint mAccessPoint;
+
+    @Mock
+    private WifiConfiguration mWifiConfiguration;
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = spy(RuntimeEnvironment.application);
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        shadowApplication.setSystemService(Context.WIFI_SERVICE, mWifiManager);
+    }
+
+    @Test
+    public void getConfiguratorQrCodeScannerIntentOrNull_hiddenSsidNetwork_hasHiddenSsidExtra() {
+        when(mWifiManager.isEasyConnectSupported()).thenReturn(true);
+        when(mAccessPoint.isPasspoint()).thenReturn(false);
+        when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_PSK);
+        when(mAccessPoint.getConfig()).thenReturn(mWifiConfiguration);
+        mWifiConfiguration.SSID = "GuestNetwork";
+        mWifiConfiguration.allowedKeyManagement = new BitSet();
+        mWifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
+        mWifiConfiguration.hiddenSSID = true;
+
+        Intent intent = WifiDppUtils
+                .getConfiguratorQrCodeScannerIntentOrNull(mContext, mWifiManager, mAccessPoint);
+
+        assertThat(intent.getBooleanExtra(WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID, false))
+                .isEqualTo(true);
+    }
+}