diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 09704ee..8407d1c 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Maak die teks op die skerm kleiner of groter."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Maak kleiner"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Maak groter"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Voorbeeldteks"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Die Wonderlike Towenaar van Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Hoofstuk 11: Die Wonderlike Smaragstad van Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Onbeskibaar tydens vliegtuigmodus"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Dwangrekenaarmodus"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Verplig eksperimentele rekenaarmodus op sekondêre skerms"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Ignoreer gedwonge donkermodus"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ignoreer die gedwonge donkermoduskenmerk om altyd aan te wees"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privaatheid"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index dff62d6..8cb1cac 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"በማያ ገጽ ላይ ያለውን ጽሑፍ ያሳንሱ ወይም ያተልቁ።"</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"አነስ አድርግ"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"ተለቅ አድርግ"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"የናሙና ጽሑፍ"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"አስደናቂው የኦዝ ምትሃተኛ"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"ምዕራፍ 11፦ ኦዝ፣ አስደናቂዋ የኤምራልድ ከተማ"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"በአይሮፕላን ሁነታ ወቅት የማይገኝ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"የዴስክቶፕ ሁነታን አስገድድ"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"በሁለተኛ ማሳያዎች ላይ የሙከራ ዴስክቶፕ ሁነታን አስገድድ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"አስገዳጅ ጨለማን ሻር"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"አስገዳጅ ጨለማ ባህሪን ሁልጊዜ እንዲበራ የተቀመጠውን ደንብ ይሽራል"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ግላዊነት"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index aed540a..92ac06f 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -4855,6 +4855,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"غير متاح أثناء وضع الطائرة"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"فرض وضع سطح المكتب"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"فرض وضع سطح المكتب التجريبي على شاشات العرض الثانوية"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"إلغاء ميزة فرض تعتيم الشاشة"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"لإلغاء ميزة فرض تعتيم الشاشة بحيث يتم تفعيلها دائمًا"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"الخصوصية"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 9bc505e..be912be 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"এয়াৰপ্লেইন ম’ড অন থাকিলে উপলব্ধ নহয়"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"বলপূৰ্বক ডেস্কটপ ম’ড"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"দ্বিতীয় ডিছপ্লে’ত পৰীক্ষামূলক ডেস্কটপ ম’ড বলপূৰ্বকভাৱে প্ৰয়োগ কৰক"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"বলপূর্বকভাৱে গাঢ় ৰঙৰ থীম ব্যৱহাৰ কৰা সুবিধাটো অ\'ভাৰৰাইড কৰক"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"বলপূর্বকভাৱে গাঢ় ৰঙৰ থীম ব্যৱহাৰ কৰা সুবিধাটো সদায় অন হৈ থাকিবলৈ অ\'ভাৰৰাইড কৰে"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"গোপনীয়তা"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 59e1a07..126b2ba 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Təyyarə rejimində əlçatan deyil"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Masaüstü rejiminə keçin"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"İkinci displeylərdə eksperimental masaüstü rejimə keçin"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Qaranlıq rejimini ləğv edir"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Qaranlıq rejiminin həmişə aktiv olmasını ləğv edir"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Məxfilik"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 1bca73a..7ccddab 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -52,8 +52,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Omogućava da tekst na ekranu bude manji ili veći."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Umanji"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Uvećaj"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Primer teksta"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Poglavlje 11: Čudesni Smaragdni grad Oza"</string>
@@ -4605,6 +4604,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nedostupno tokom režima rada u avionu"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Nametni režim računara"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Nametni eksperimentalni režim računara na sekundarnim ekranima"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Zameni funkciju nametanja tamne teme"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Menja funkciju nametanja tamne teme tako da bude uvek uključena"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatnost"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 96c5924..449b0df 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -4691,6 +4691,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Недаступна ў рэжыме палёту"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Прымусова ўключаць рэжым працоўнага стала"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Прымусова ўключаць эксперыментальны рэжым працоўнага стала на дадатковых экранах"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Перавызначэнне ўключэння цёмнай тэмы"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Змяняе наладу прымусовага ўключэння цёмнай тэмы на \"Заўсёды ўключана\""</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Прыватнасць"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index e7d5d9a..3497e3b 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Намаляване или уголемяване на текста на екрана."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Намаляване на размера"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Увеличаване на размера"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Примерен текст"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Вълшебникът от Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Глава 11: Удивителният изумруден град на Оз"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Не е налице в самолетен режим"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Принудително задаване на настолен режим"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Принудително задаване на експерименталния настолен режим на алтернативни дисплеи"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Отмяна на налагането на тъмен режим"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Отменя постоянното включено състояние на функцията за налагане на тъмен режим"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Поверителност"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 0e41c1a..045c03e 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"বিমান মোডে উপলভ্য নয়"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ফোর্স ডেস্কটপ মোড"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"সেকেন্ডারি ডিসপ্লেতে ফোর্স এক্সপেরিমেন্টাল ডেস্কটপ মোড চালু করা আছে"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ফোর্স-ডার্ক ফিচার ওভাররাইড করুন"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ফোর্স-ডার্ক ফিচার চালু রাখার জন্য ওভাররাইড করা হয়"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"গোপনীয়তা"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index ecf7a55..c10f39a 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -52,8 +52,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Smanjite ili povećajte tekst na ekranu."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Napravi manji"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Napravi veći"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Uzorak teksta"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Poglavlje 11: Smaragdni grad Oz"</string>
@@ -4605,6 +4604,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nije dostupno dok je aktiviran način rada u avionu"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Nametni način rada na računaru"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Nametanje eksperimentalnog načina rada na računaru na sekundarnim ekranima"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Nadjačaj nametanje tamne teme"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Nadjačava funkciju nametanja tamne teme tako da je uvijek uključena"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatnost"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 70fdb0f..4b62add 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"No disponible en mode d\'avió"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Força el mode d\'escriptori"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Força el mode d\'escriptori experimental en pantalles secundàries"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Substitueix forçar el mode fosc"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Substitueix la funció forçar el mode fosc perquè estigui sempre activada"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privadesa"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 24ee782..8f28ae8 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -53,8 +53,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Umožňuje zvětšit nebo zmenšit text na obrazovce."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Zmenšit"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Zvětšit"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Příliš žluťoučký kůň úpěl ďábelské ódy."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Ukázkový text"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Čaroděj ze země Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Kapitola 11: Smaragdové město v zemi Oz"</string>
@@ -4688,6 +4687,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"V režimu Letadlo nedostupné"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Vynutit režim počítače"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Vynutit na sekundárních displejích experimentální režim počítače"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Přepsat vynucení tmavého režimu"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Přepíše vynucení stálého zapnutí tmavého režimu"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Ochrana soukromí"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 4a29a76..014e5ef 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Gør teksten på skærmen mindre eller større."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Formindsk"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Forstør"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Eksempeltekst"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Den vidunderlige troldmand fra Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Kapitel 11: Den vidunderlige smaragdby i Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Der er ingen forbindelse i flytilstand"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Gennemtving skrivebordstilstand"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Gennemtving eksperimentel skrivebordstilstand på sekundære skærme"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Tilsidesæt force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Tilsidesætter funktionen force-dark og anvender Altid aktiveret"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatliv"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f897477..fb0fad9 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Im Flugmodus nicht verfügbar"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Desktop-Modus erzwingen"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Experiementellen Desktop-Modus auf sekundären Bildschirmen erzwingen"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Erzwingen des dunklen Modus außer Kraft setzen"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Apps werden nicht gezwungen, den dunklen Modus zu verwenden"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Datenschutz"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 54c7d9a..3988bb1 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Κάντε το κείμενο στην οθόνη μικρότερο ή μεγαλύτερο."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Να γίνουν μικρότερα"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Να γίνουν μεγαλύτερα"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Δείγμα κειμένου"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Ο Θαυμάσιος Μάγος του Οζ"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Κεφάλαιο 11: Η Θαυμάσια Πόλη Έμεραλντ του Οζ"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Μη διαθέσιμο κατά τη λειτουργία πτήσης"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Αναγκαστική λειτουργία επιτραπέζιου υπολογιστή"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Αναγκαστική πειραματική λειτουργία επιτραπέζιου υπολογιστή σε δευτερεύουσες οθόνες"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Παράκαμψη αναγκ. χρήσης σκούρου θέματος"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Παρακάμπτει τη λειτουργία σκούρου θέματος προκειμένου να είναι πάντα ενεργή"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Απόρρητο"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 53ae032..5afc364 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Make the text on screen smaller or larger."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Make smaller"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Make larger"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Sample text"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -4522,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Unavailable during airplane mode"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Force desktop mode"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Force experimental desktop mode on secondary displays"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Enable free-form sizecompat"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Allows sizecompat apps to be in free form"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Override force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overrides the force-dark feature to be always on"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 333e928..331a256 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Make the text on screen smaller or larger."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Make smaller"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Make larger"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Sample text"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -4522,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Unavailable during airplane mode"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Force desktop mode"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Force experimental desktop mode on secondary displays"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Enable free-form sizecompat"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Allows sizecompat apps to be in free form"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Override force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overrides the force-dark feature to be always on"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 53ae032..5afc364 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Make the text on screen smaller or larger."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Make smaller"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Make larger"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Sample text"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -4522,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Unavailable during airplane mode"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Force desktop mode"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Force experimental desktop mode on secondary displays"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Enable free-form sizecompat"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Allows sizecompat apps to be in free form"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Override force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overrides the force-dark feature to be always on"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index afdfd62..47df8c6 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Make the text on screen smaller or larger."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Make smaller"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Make larger"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Sample text"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -4522,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Unavailable during airplane mode"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Force desktop mode"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Force experimental desktop mode on secondary displays"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Enable free-form sizecompat"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Allows sizecompat apps to be in free form"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Override force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overrides the force-dark feature to be always on"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 3ea5d85..19683ed 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -4521,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎Unavailable during airplane mode‎‏‎‎‏‎"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎Force desktop mode‎‏‎‎‏‎"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎Force experimental desktop mode on secondary displays‎‏‎‎‏‎"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎Enable freeform sizecompat‎‏‎‎‏‎"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎Allows sizecompat apps to be in freeform‎‏‎‎‏‎"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎Override force-dark‎‏‎‎‏‎"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎Overrides the force-dark feature to be always-on‎‏‎‎‏‎"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎Privacy‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 6f4983d..62343e3 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Aumenta o reduce el tamaño del texto en pantalla."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Reducir el tamaño"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Aumentar el tamaño"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Texto de muestra"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"El maravilloso mago de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
@@ -4520,6 +4519,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"No disponible en modo de avión"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forzar modo de escritorio"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forzar el modo de escritorio experimental en pantallas secundarias"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Anular forzar el modo oscuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Anula la función forzar el modo oscuro para que esté siempre activo"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidad"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3bdda5d..5fc8723 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Aumenta o disminuye el tamaño del texto de la pantalla."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Reducir el tamaño"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Aumentar el tamaño"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Texto de ejemplo"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"El maravilloso mago de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"No están disponibles en modo avión"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forzar modo de escritorio"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forzar el modo de escritorio experimental en pantallas secundarias"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Forzar el modo oscuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Forzar el modo oscuro para que esté siempre activo"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidad"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index c1dfec3..5eed16d 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Muutke ekraanil kuvatavat tekst suuremaks või väiksemaks."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Vähendamine"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Suurendamine"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Näidistekst"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Võlur Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. peatükk: Ozi imeline smaragdlinn"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ei ole lennukirežiimis saadaval"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Töölauarežiimi jõustamine"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Katselise töölauarežiimi jõustamine teisestel ekraanidel"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Funktsiooni Sunnitud tume alistamine"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Alistab funktsiooni Sunnitud tume ja lülitab selle alaliselt sisse"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privaatsus"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index c6420e2..06e33c7 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Handitu edo txikitu pantailako testua."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Txikitu"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Handitu"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Testu-lagina"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Ozeko azti miragarria"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. kapitulua: Esmeraldazko Oz hiri harrigarria"</string>
@@ -3397,8 +3396,7 @@
     <string name="notification_assistant_title" msgid="6983941403582134437">"Jakinarazpen doigarriak"</string>
     <string name="no_notification_assistant" msgid="2533323397091834096">"Bat ere ez"</string>
     <string name="no_notification_listeners" msgid="2839354157349636000">"Ez dago jakinarazpenetarako sarbidea eskatu duen aplikaziorik."</string>
-    <!-- no translation found for notification_access_detail_switch (46386786409608330) -->
-    <skip />
+    <string name="notification_access_detail_switch" msgid="46386786409608330">"Eman jakinarazpenak atzitzeko baimena"</string>
     <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"<xliff:g id="SERVICE">%1$s</xliff:g> zerbitzuari jakinarazpenetarako sarbidea eman nahi diozu?"</string>
     <string name="notification_assistant_security_warning_summary" msgid="3119843404577399036">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> aplikazioak jakinarazpen guztiak irakurri ahalko ditu eta, haien barnean, informazio pertsonala egon daiteke (adibidez, kontaktuen izenak eta jasotzen dituzun testu-mezuak). Gainera, jakinarazpen horiek aldatu edo baztertu egin ahal izango ditu, baita haietako ekintza-botoiak sakatu ere. \n\nHorrez gain, ez molestatzeko modua aktibatzeko eta desaktibatzeko aukera izango du aplikazioak, baita harekin erlazionatutako ezarpenak aldatzekoa ere."</string>
     <string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Jakinarazpenak atzitzeko baimena eman nahi diozu <xliff:g id="SERVICE">%1$s</xliff:g> zerbitzuari?"</string>
@@ -4523,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ez dago erabilgarri hegaldi moduan"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Behartu mahaigainerako modua erabiltzera"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Behartu mahaigainerako modu esperimentala erabiltzera bigarren mailako pantailetan"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Ez aplikatu gai iluna"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Gai iluna beti aktibatuta egoteko eskakizuna gainidazten du"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Pribatutasuna"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d5600bd..3ca42f6 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"نوشتار روی صفحه‌نمایش را بزرگ‌تر یا کوچک‌تر کنید."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"کوچک‌تر کردن"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"بزرگ‌تر کردن"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"برای این آقا آبجو و کیوی سرو کنید."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"نوشتار نمونه"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"جادوگر شهر اوز"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"فصل ۱۱: شهر زمردی شگفت‌انگیز اوز"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"عدم‌دسترسی در حالت هواپیما"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"اجرای اجباری حالت دسک‌‌تاپ"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"اجرای اجباری حالت دسک‌تاپ آزمایشی در نمایشگرهای ثانوی"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"لغو اجبار حالت تاریک"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ویژگی اجبار حالت تاریک را برای همیشه روشن بودن لغو می‌کند"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"حریم خصوصی"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index e1507a0..6a29a74 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Suurenna tai pienennä tekstiä näytöllä."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Pienennä"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Suurenna"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Esimerkkiteksti"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Ihmemaa Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Luku 11: Ozin ihastuttava smaragdikaupunki"</string>
@@ -3397,8 +3396,7 @@
     <string name="notification_assistant_title" msgid="6983941403582134437">"Mukautuvat ilmoitukset"</string>
     <string name="no_notification_assistant" msgid="2533323397091834096">"–"</string>
     <string name="no_notification_listeners" msgid="2839354157349636000">"Yksikään asennettu sovellus ei ole pyytänyt ilmoituksien käyttöoikeutta."</string>
-    <!-- no translation found for notification_access_detail_switch (46386786409608330) -->
-    <skip />
+    <string name="notification_access_detail_switch" msgid="46386786409608330">"Salli pääsy ilmoituksiin"</string>
     <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Saako <xliff:g id="SERVICE">%1$s</xliff:g> ilmoitusten käyttöoikeuden?"</string>
     <string name="notification_assistant_security_warning_summary" msgid="3119843404577399036">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> voi lukea kaikki ilmoitukset ja niiden sisältämät henkilökohtaiset tiedot, kuten yhteystietojen nimet ja saamiesi viestien sisällön. Se voi myös ohittaa ilmoitukset, muokata niitä tai käyttää niiden toimintopainikkeita. \n\nTämä antaa sovellukselle myös oikeuden ottaa Älä häiritse ‑tilan käyttöön, poistaa sen käytöstä ja muokata siihen liittyviä asetuksia."</string>
     <string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Saako <xliff:g id="SERVICE">%1$s</xliff:g> ilmoituksien käyttöoikeuden?"</string>
@@ -4523,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ei käytettävissä lentokonetilassa"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Pakota työpöytätila"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Pakota kokeellinen työpöytätila toissijaisille näytöille."</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Ohita SmartDarkin pakottaminen päälle"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ohittaa toiminnon, joka pakottaa SmartDark-ominaisuuden aina päälle"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Tietosuoja"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 8727516..2eaee73 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Données cellulaires non accessibles en mode Vol"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forcer le mode bureau"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forcer le mode bureau expérimental sur les écrans secondaires"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Forcer l\'activation de SmartDark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Forcer la fonctionnalité SmartDark à rester active"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Confidentialité"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8a3feaa..ddb64d5 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Agrandissez ou réduisez la taille du texte affiché."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Réduire"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Agrandir"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Exemple de texte"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Le Magicien d\'Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Chapitre 11 : La merveilleuse cité d\'émeraude"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Non disponibles en mode Avion"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forcer l\'activation du mode bureau"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forcer l\'activation du mode bureau expérimental sur les écrans secondaires"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Forcer l\'activation de Smart Dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Force la fonctionnalité Smart Dark à être toujours activée"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Confidentialité"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 93b2203..c12fbe3 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Non dispoñibles no modo avión"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forzar modo de escritorio"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forza o modo de escritorio experimental en pantallas secundarias"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Anular Forzar modo escuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Anula a función Forzar modo escuro para que estea sempre activo"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidade"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 8810653..2ebf342 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"એરપ્લેન મોડ દરમિયાન ઉપલબ્ધ નથી"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ફરજિયાત ડેસ્કટૉપ મોડ ચાલુ કરો"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ગૌણ ડિસ્પ્લે પર ફરજિયાત પ્રયોગાત્મક ડેસ્કટૉપ મોડ ચાલુ કરો"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ફરજિયાત ઘેરા મોડની સુવિધાને ઓવરરાઇડ કરો"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"હંમેશાં ચાલુ રાખવા માટે ફરજિયાત ઘેરા મોડની સુવિધાને ઓવરરાઇડ કરે છે"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"પ્રાઇવસી"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index b950b90..b128309 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"हवाई जहाज़ मोड के दौरान उपलब्ध नहीं"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"डेस्कटॉप मोड चालू करें"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"दूसरी स्क्रीन पर प्रयोग के लिए डेस्कटॉप मोड चालू करें"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"फ़ोर्स-डार्क सुविधा को ओवरराइड करें"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"फ़ोर्स-डार्क सुविधा को हमेशा चालू रहने के लिए ओवरराइड करती है"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"निजता"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 7261b6f..5a8c1fc 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -52,8 +52,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Smanjite ili povećajte tekst na zaslonu."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Smanji"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Povećaj"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Primjer teksta"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. poglavlje: Čudesni Smaragdni Grad čarobnjaka Oza"</string>
@@ -4605,6 +4604,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nije dostupno u načinu rada u zrakoplovu"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Nametni način rada na računalu"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Nametanje eksperimentalnog načina rada na računalu na sekundarnim zaslonima"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Nadjačaj nametanje tamne teme"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Nadjačava značajku nametanja tamne teme tako da je uvijek uključena"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatnost"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index c0b6ddd..a3c60c4 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Kicsinyítheti vagy nagyíthatja a képernyőn megjelenő szöveget."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Kisebb"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Nagyobb"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Árvíztűrő tükörfúrógép"</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Mintaszöveg"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Óz, a csodák csodája"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. fejezet: A csodálatos Smaragdváros"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Repülős üzemmódban nem áll rendelkezésre"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Asztali mód kényszerítése"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Kísérleti asztali mód kényszerítése a másodlagos kijelzőkön"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"A kényszerített sötétítés felülírása"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"A kényszerített sötétítés funkció felülírása mindig bekapcsolt állapotra"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Adatvédelem"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 380cf04..0f49c13 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Փոփոխեք տեքստի չափը։"</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Փոքրացնել"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Մեծացնել"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Տեքստի նմուշ"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Օզի կախարդը"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Գլուխ 11. Օզի հրաշալի Զմրուխտե քաղաքը"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Անհասանելի է ավիառեժիմում"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Աշխատասեղանի ռեժիմի հարկադրված միացում"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Աշխատասեղանի փորձնական ռեժիմի հարկադրված միացում լրացուցիչ էկրանների վրա"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Չեղարկել մուգ ռեժիմի պարտադիր միացումը"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Չեղարկում է մուգ ռեժիմի պարտադիր միացման գործառույթը"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Գաղտնիություն"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b9d7bb2..c26af80 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Buat teks di layar jadi lebih kecil atau lebih besar."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Buat lebih kecil"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Buat lebih besar"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Teks contoh"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Penyihir Oz yang Menakjubkan"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Bab 11: Oz, Kota Zamrud yang Menakjubkan"</string>
@@ -4522,6 +4521,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Tidak tersedia selama mode pesawat"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Paksa mode desktop"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Paksa mode desktop eksperimental di tampilan sekunder"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Aktifkan sizecompat format bebas"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Mengizinkan aplikasi sizecompat dalam format bebas"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Aktifkan paksa SmartDark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Memaksa fitur SmartDark agar selalu aktif"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privasi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 0ff3fd5..ba79b9f 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Stækkaðu eða minnkaðu texta á skjá."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Minnka"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Stækka"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Textadæmi"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Galdrakarlinn í Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. kafli: Smaragðsborgin dásamlega í Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ekki tiltækt í flugstillingu"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Þvinga skjáborðsstillingu"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Þvinga tilraunaskjáborðsstillingu á öðrum skjá"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Hnekkja dökku"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Kemur í veg fyrir að alltaf sé kveikt á dökkum eiginleika"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Persónuvernd"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8f866ea..d7bf5b7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Ingrandisci o riduci il testo sullo schermo."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Rimpicciolisci"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Ingrandisci"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Testo di esempio"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Il meraviglioso mago di Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capitolo 11: La splendida Città di smeraldo di Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Non disponibili in modalità aereo"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forza la modalità desktop"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forza la modalità desktop sperimentale su display secondari"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Esegui override modalità Buio forzata"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Esegue l\'override della funzionalità di modalità Buio forzata in modo che sia sempre attiva"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 429d4af..a31cc4e 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -4691,6 +4691,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"לא זמין במצב טיסה"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"אילוץ מצב שולחן עבודה"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"אילוץ מצב שולחן עבודה ניסיוני במסכים משניים"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"‏שינוי התכונה SmartDark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"‏התכונה SmartDark תפעל כל הזמן"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"פרטיות"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index e7acffb..947a6e5 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"機内モードの間は使用できません"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"デスクトップ モードに強制的に切り替え"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"セカンダリ ディスプレイで試験運用版デスクトップ モードに強制的に切り替えます"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"フォースダークのオーバーライド"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"フォースダーク機能をオーバーライドして常に ON にする"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"プライバシー"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 5febb94..2468aee 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"თვითმფრინავის რეჟიმში მიუწვდომელია"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"დესკტოპის რეჟიმის იძულებით გააქტიურება"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"დესკტოპის ექსპერიმენტული რეჟიმის იძულებით გააქტიურება მეორეულ ეკრანებზე"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"გამუქების იძულების უგულებელყოფა"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"უგულებელყოფს გამუქების ყოველთვის იძულების ფუნქციას"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"კონფიდენციალურობა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index eae4aca..a754715 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ұшақ режимінде қолжетімді емес."</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Жұмыс үстелінің режимін мәжбүрлі қосу"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Қосымша дисплейлерде эксперименттік жұмыс үстелі режимін мәжбүрлі қосу"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Қараңғылауға жол бермеу"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Қараңғы тақырыпты мәжбүрлеп қойғанда, \"Әрдайым қосулы\" мәніне өзгертеді"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Құпиялылық"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index e7561d0..3ba1ac4 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"មិន​អាច​ប្រើបាន​ទេ ពេលប្រើ​មុខងារ​ពេល​ជិះ​យន្តហោះ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"បង្ខំ​មុខងារ​អេក្រង់ដើម"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"បង្ខំ​មុខងារ​អេក្រង់​ដើម​សាកល្បង​នៅលើ​អេក្រង់​ទី​ពីរ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"លុបពីលើ​មុខងារបង្ខំ​ឱ្យងងឹត"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"លុបពីលើ​មុខងារ​បង្ខំឱ្យងងឹត​ឱ្យបើកជានិច្ច"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ឯកជនភាព"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 6744ee2..b941add 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿರುವಾಗ ಲಭ್ಯವಿರುವುದಿಲ್ಲ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ಡೆಸ್ಕ್‌ಟಾಪ್ ಮೋಡ್ ಅನ್ನು ಒತ್ತಾಯ ಮಾಡಿ"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ಸೆಕೆಂಡರಿ ಡಿಸ್‌ಪ್ಲೇಗಳಲ್ಲಿ ಪ್ರಾಯೋಗಿಕ ಡೆಸ್ಕ್‌ಟಾಪ್ ಮೋಡ್ ಅನ್ನು ಒತ್ತಾಯ ಮಾಡಿ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ಫೋರ್ಸ್-ಡಾರ್ಕ್ ವೈಶಿಷ್ಟ್ಯ ಬಲಗೊಳಿಸಲು ಸೆಟ್ಟಿಂಗ್ ಅತಿಕ್ರಮಿಸಿ"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ಫೋರ್ಸ್-ಡಾರ್ಕ್ ವೈಶಿಷ್ಟ್ಯವು ಆನ್ ಆಗಿರುವಂತೆ ಒತ್ತಾಯಿಸುತ್ತದೆ"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ಗೌಪ್ಯತೆ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9d3d37f..1876905 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"비행기 모드에서는 사용할 수 없음"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"데스크톱 모드 강제 사용"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"보조 디스플레이에서 실험적 데스크톱 모드 강제 사용"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"강제로 어둡게 재정의"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"강제로 어둡게 기능을 항상 사용하도록 재정의"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"개인정보 보호"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index c6e2038..f49f2f2 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Учак режиминде жеткиликсиз"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Иш такта режимин күйгүзүү"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Тажрыйбалык иш такта режимин көмөкчү экрандарда иштетүү"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Түнкү режимди мажбурлап иштетүү функциясын өзгөртүп коюу"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Түнкү режимди мажбурлап иштетүү функциясы ар дайым күйүк болгондой кылып өзгөртүп коёт"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Купуялык"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 9c6c832..4c3c4e1 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ບໍ່ສາມາດໃຊ້ໄດ້ໃນໂໝດຢູ່ໃນຍົນ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ບັງຄັບໂໝດເດັສທັອບ"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ບັງຄັບໂໝດເດັສທັອບແບບທົດລອງໃຊ້ຢູ່ໜ້າຈໍທີສອງ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ຍົກເລີກການບັງຄັບໃຫ້ໃຊ້ແບບມືດ"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ຍົກເລີກຄຸນສົມບັດການບັງຄັບໃຫ້ໃຊ້ແບບມືດຕະຫຼອດ"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ຄວາມເປັນສ່ວນຕົວ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d8db1ae..fdd6131 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -4688,6 +4688,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nepasiekiama lėktuvo režimu"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Priverstinai įjungti darbalaukio režimą"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Priverstinai įjungti eksperimentinį darbalaukio režimą antriniuose ekranuose"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Nepaisyti priverst. tamsaus rež. įgalin."</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Nepaisoma priverstinio tamsaus režimo funkcijos įgalinimo, kad ji visada būtų įjungta"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatumas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index f7eae5e..01b857a 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -4606,6 +4606,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nav pieejami lidojuma režīmā"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Veikt piespiedu darbvirsmas režīma atvēršanu"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Veikt piespiedu eksperimentālā darbvirsmas režīma atvēršanu sekundārajos displejos"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Tumšā režīma piespiedu ieslēgšanas ignorēšana"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ignorē tumšā režīma iestatījumu Vienmēr ieslēgts"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Konfidencialitāte"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index fd97993..62ecfbe 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Намалете го или зголемете го текстот на екранот."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Намали"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Зголеми"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Примерок на текст"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Чудесниот волшебник од Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Поглавје 11: Чудесниот смарагден град Оз"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Недостапен во авионски режим"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Наметни режим на работна површина"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Наметнете го експерименталниот режим на работна површина на секундарните екрани"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Отфрли го наметнувањето темен режим"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ја отфрла функцијата за наметнување темен режим за да биде постојано вклучена"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Приватност"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index aac60c2..084178f 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ഫ്ലൈറ്റ് മോഡിൽ ലഭ്യമല്ല"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ഡെസ്ക്ടോപ്പ് മോഡിലേക്ക് നിർബന്ധിച്ച് വരുത്തുക"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ദ്വിതീയ ഡിസ്‌പ്ലേകളിൽ, പരീക്ഷണാത്മക ഡെസ്ക്ടോപ്പ് മോഡിലേക്ക് നിർബന്ധിച്ച് വരുത്തുക"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"നിർബന്ധിത ഇരുണ്ട മോഡ് അസാധുവാക്കുക"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"എപ്പോഴും ഓണാക്കിയിരിക്കുന്ന നിർബന്ധിത ഇരുണ്ട മോഡ് ഫീച്ചർ അസാധുവാക്കുക"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"സ്വകാര്യത"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 22554ca..9b8f4ee 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Дэлгэц дээрх текстийг томруулах, жижигрүүлэх."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Жижигрүүлэх"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Томруулах"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Жишээ текст"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Озын Гайхамшигт шидтэн"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Бүлэг 11: Озын Гайхамшигт Маргад эрдэнийн хот"</string>
@@ -4520,6 +4519,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Нислэгийн горимд боломжгүй"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Дэлгэцийн горимыг хүчлэх"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Дэлгэцийн туршилтын горимыг хоёрдогч дэлгэцэд хүчлэх"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Хүчээр бүдгэрүүлэхийг дарах"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Хүчээр бүдэгрүүлэх онцлогийг байнга асаалттай байхаар дардаг"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Нууцлал"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index b62f799..66c85ef 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"विमान मोड सुरू असताना उपलब्ध नाही"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"डेस्कटॉप मोडची सक्ती करा"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"दुसऱ्या डिस्प्लेवर प्रायोगिक डेस्कटॉप मोडला सक्ती करा"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"फोर्स डार्क ओव्हरराइड करते"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"फोर्स डार्क वैशिष्ट्य नेहमी सुरू ठेवण्यास ओव्हरराइड करते"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"गोपनीयता"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 52c5a42..aca3cff 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Tidak tersedia semasa dalam mod pesawat"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Paksa mod desktop"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Paksa mod desktop percubaan pada paparan kedua"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Batalkan paksa gelap"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Membatalkan ciri paksa gelap supaya sentiasa hidup"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privasi"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 6744af6..1681486 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"လေယာဉ်ပျံမုဒ် ပြုလုပ်ထားစဉ် သုံး၍မရပါ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ဒက်စ်တော့ပုံစံ မဖြစ်မနေ ပြောင်းခြင်း"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ဒုတိယ မျက်နှာပြင်ပြသမှုများတွင် ဒက်စ်တော့ပုံစံ မဖြစ်မနေ စမ်းသပ်ရန်"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"မဖြစ်မနေအမှောင်ချခြင်းကို အစားထိုးခြင်း"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"မဖြစ်မနေအမှောင်ချခြင်း ဝန်ဆောင်မှု အမြဲဖွင့်ရန် အစားထိုးထားသည်"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ကန့်သတ်ဆက်တင်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 8e91992..12adea2 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Utilgjengelig i flymodus"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Tvungen skrivebordsmodus"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Tvungen eksperimentell skrivebordsmodus på sekundære skjermer"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Overstyr tving mørk"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overstyrer tving mørk-funksjonen til å være alltid på"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Personvern"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index e7c8cab..5dec65f 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"हवाइजहाज मोडमा हुँदा मोबाइल डेटा उपलब्ध हुँदैन"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"डेस्कटप मोडमा बल गर्नुहोस्"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"सहायक प्रदर्शनहरूमा प्रयोगात्मक डेस्कटप मोडमा जोड दिनुहोस्‌"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"force-dark ओभरराइड गर्नुहोस्"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"force-dark सुविधा सधैँ सक्रिय हुन बल गर्छ"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"गोपनीयता"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 942d66c..7f2240f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Maak de tekst op het scherm kleiner of groter."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Verkleinen"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Vergroten"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Voorbeeldtekst"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"De tovenaar van Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Hoofdstuk 11: De prachtige Smaragden Stad van Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Niet beschikbaar in de vliegtuigmodus"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Desktopmodus afdwingen"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Experimentele desktopmodus afdwingen op secundaire displays"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Gedwongen donker maken negeren"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Overschrijft de functie voor gedwongen donker maken zodat deze altijd aan is"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 8bf5559..01a5376 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ଏୟାରପ୍ଲେନ୍‌ ମୋଡ୍‌ ସମୟରେ ଉପଲବ୍ଧ ନୁହେଁ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ଫୋର୍ସ ଡେସ୍କଟପ୍‍ ମୋଡ୍‍"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ଦ୍ବିତୀୟ ପ୍ରଦର୍ଶନରେ ଫୋର୍ସ ପରୀକ୍ଷାମୂଳକ ମୋଡ୍‍"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ଫୋର୍ସ୍-ଡାର୍କ୍ ଓଭର୍‍ରାଇଡ୍ କରନ୍ତୁ"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ଫୋର୍ସ-ଡାର୍କ ଫିଚର୍‍ ସଦାବେଳେ ଚାଲୁ ରହିବା ଓଭର୍‍ରାଇଡ୍ କରିଥାଏ"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ଗୋପନୀୟତା"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index f373100..e3cbb41 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਦੀ ਲਿਖਤ ਨੂੰ ਛੋਟਾ ਜਾਂ ਵੱਡਾ ਕਰੋ।"</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"ਛੋਟਾ ਕਰੋ"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"ਵੱਡਾ ਕਰੋ"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"ਨਮੂਨਾ ਲਿਖਤ"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"ਔਜ਼ ਦਾ ਨਿਰਾਲਾ ਵਿਜ਼ਾਰਡ"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"ਪਾਠ 11: ਔਜ਼ ਦਾ ਹੀਰਿਆਂ-ਪੰਨਿਆਂ ਵਾਲਾ ਨਿਰਾਲਾ ਸ਼ਹਿਰ"</string>
@@ -3376,8 +3375,7 @@
     <string name="notification_channel_summary_low" msgid="4842529455460294865">"ਤੁਹਾਨੂੰ ਬਿਨਾਂ ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਦੇ ਫੋਕਸ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ"</string>
     <string name="notification_channel_summary_default" msgid="2919219975379032181">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ ਨਾਲ ਤੁਹਾਡਾ ਧਿਆਨ ਖਿੱਚਦੀ ਹੈ"</string>
     <string name="notification_channel_summary_high" msgid="3411637309360617621">"ਡੀਵਾਈਸ ਅਣਲਾਕ ਕਰਨ \'ਤੇ, ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ \'ਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਬੈਨਰ ਵਜੋਂ ਦਿਖਾਓ"</string>
-    <!-- no translation found for notification_switch_label (6022236996552304892) -->
-    <skip />
+    <string name="notification_switch_label" msgid="6022236996552304892">"ਸਾਰੀਆਂ <xliff:g id="APP_NAME">%1$s</xliff:g> ਸੂਚਨਾਵਾਂ"</string>
     <string name="default_notification_assistant" msgid="243718059890346442">"ਅਨੁਕੂਲ ਸੂਚਨਾਵਾਂ"</string>
     <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
       <item quantity="one">ਹਰ ਰੋਜ਼ ~<xliff:g id="NUMBER_1">%d</xliff:g> ਸੂਚਨਾ</item>
@@ -3398,8 +3396,7 @@
     <string name="notification_assistant_title" msgid="6983941403582134437">"ਅਨੁਕੂਲ ਸੂਚਨਾਵਾਂ"</string>
     <string name="no_notification_assistant" msgid="2533323397091834096">"ਕੋਈ ਨਹੀਂ"</string>
     <string name="no_notification_listeners" msgid="2839354157349636000">"ਕਿਸੇ ਵੀ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਨੇ ਸੂਚਨਾ ਪਹੁੰਚ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ।"</string>
-    <!-- no translation found for notification_access_detail_switch (46386786409608330) -->
-    <skip />
+    <string name="notification_access_detail_switch" msgid="46386786409608330">"ਸੂਚਨਾ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿਓ"</string>
     <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"ਕੀ <xliff:g id="SERVICE">%1$s</xliff:g> ਨੂੰ ਸੂਚਨਾ ਪਹੁੰਚ ਦੇਣੀ ਹੈ?"</string>
     <string name="notification_assistant_security_warning_summary" msgid="3119843404577399036">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਪੜ੍ਹ ਸਕੇਗੀ ਜਿਸ ਵਿੱਚ ਸੰਪਰਕ ਨਾਮ ਅਤੇ ਤੁਹਾਨੂੰ ਪ੍ਰਾਪਤ ਹੋਣ ਵਾਲੇ ਲਿਖਤ ਸੁਨੇਹਿਆਂ ਵਰਗੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ। ਇਹ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਣ ਜਾਂ ਖਾਰਜ ਕਰਨ ਜਾਂ ਉਸ ਵਿੱਚ ਸ਼ਾਮਲ ਕਾਰਵਾਈ ਬਟਨਾਂ ਨੂੰ ਟ੍ਰਿਗਰ ਵੀ ਕਰ ਸਕੇਗੀ। \n\nਇਹ ਐਪ ਨੂੰ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਬੰਦ ਜਾਂ ਚਾਲੂ ਕਰਨ ਅਤੇ ਸੰਬੰਧਿਤ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲਣ ਦੀ ਸਮਰੱਥਾ ਵੀ ਦੇਵੇਗੀ।"</string>
     <string name="notification_listener_security_warning_title" msgid="5791700876622858363">"ਕੀ <xliff:g id="SERVICE">%1$s</xliff:g> ਲਈ ਸੂਚਨਾ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
@@ -4524,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਚਾਲੂ ਹੋਣ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ਜ਼ਬਰਦਸਤੀ ਡੈਸਕਟਾਪ ਮੋਡ ਵਿੱਚ ਲਿਆਓ"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ਸੈਕੰਡਰੀ ਡਿਸਪਲੇਆਂ \'ਤੇ ਜ਼ਬਰਦਸਤੀ ਪ੍ਰਯੋਗਮਈ ਡੈਸਕਟਾਪ ਮੋਡ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ਜ਼ਬਰਦਸਤੀ ਗੂੜ੍ਹਾ ਮੋਡ ਓਵਰਰਾਈਡ ਕਰੋ"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ਜ਼ਬਰਦਸਤੀ ਨਾਲ ਗੂੜ੍ਹਾ ਮੋਡ ਲਾਗੂ ਕਰਨ ਵਾਲੀ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਹਮੇਸ਼ਾਂ-ਚਾਲੂ ਰੱਖਣ ਲਈ ਓਵਰਰਾਈਡ ਕਰਦੀ ਹੈ"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ਪਰਦੇਦਾਰੀ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 54e72e2..c096adf3 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4689,6 +4689,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Niedostępne w trybie samolotowym"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Wymuś tryb pulpitu"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Wymuś eksperymentalny tryb pulpitu na dodatkowych ekranach"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Zastąp wymuszanie trybu ciemnego"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Zastępuje ustawienie zawsze włączonej funkcji wymuszania trybu ciemnego"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Prywatność"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index d445f84..581023b 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Tornar o texto na tela menor ou maior."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Tornar menor"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Tornar maior"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Texto de amostra"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"O Mágico de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capítulo 11: A maravilhosa Cidade das Esmeraldas de Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Indisponível no modo avião"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forçar modo de área de trabalho"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forçar o modo de área de trabalho experimental em telas secundárias"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Modificar o recurso forçar modo escuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Modificar o recurso de forçar modo escuro para que fique sempre ativado"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidade"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e134799..3e136ae 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Aumente ou diminua o texto no ecrã."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Diminuir"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Aumentar"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Exemplo de texto"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"O Maravilhoso Feiticeiro de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capítulo 11: A Maravilhosa Cidade Esmeralda de Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Não disponível durante o modo de avião"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forçar modo de ambiente de trabalho"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forçar modo de ambiente de trabalho experimental em ecrãs secundários"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Substituir forçar o modo escuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Substitui a funcionalidade de forçar a ativação permanente do modo escuro"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidade"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d445f84..581023b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Tornar o texto na tela menor ou maior."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Tornar menor"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Tornar maior"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Texto de amostra"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"O Mágico de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Capítulo 11: A maravilhosa Cidade das Esmeraldas de Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Indisponível no modo avião"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forçar modo de área de trabalho"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forçar o modo de área de trabalho experimental em telas secundárias"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Modificar o recurso forçar modo escuro"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Modificar o recurso de forçar modo escuro para que fique sempre ativado"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacidade"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index e33896e..2162c15 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -4606,6 +4606,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nu sunt disponibile în modul Avion"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Forțați modul desktop"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Forțați modul desktop experimental pe ecrane secundare"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Modificați funcția Force-Dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Modifică funcția Force-Dark să fie activată mereu"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Confidențialitate"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 82c1da1..32d79c2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -4688,6 +4688,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Мобильный Интернет недоступен в режиме полета."</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Принудительное включение режима рабочего стола"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Принудительное включение экспериментального режима рабочего стола на дополнительных экранах"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Переопределение включения тёмной темы"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Изменение настройки принудительного включения тёмной темы на \"Всегда включено\""</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Конфиденциальность"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 5d81082..4e15d24 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"තිරය මත පෙළ වඩාත් කුඩා හෝ විශාල කරන්න."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"වඩා කුඩා කරන්න"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"වඩා විශාල කරන්න"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"ආදර්ශ පෙළ"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11වන පරිච්ඡේදය: The Wonderful Emerald City of Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ගුවන් යානා ප්‍රකාරයේදී නොලැබේ"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"වැඩතල ප්‍රකාරය බල කරන්න"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ද්විතීයික සංදර්ශන කෙරෙහි අත්හදා බැලීමේ වැඩතල ප්‍රකාරය බල කරන්න"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"force-dark ප්‍රතික්ෂේප කරන්න"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"force-dark විශේෂාංගය සැම විට ක්‍රියාත්මකව තිබීමට ප්‍රතික්ෂේප කරයි"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"රහස්‍යතාව"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index be992ca..130168a 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -4688,6 +4688,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nedostupné v režime v lietadle"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Vynútiť režim pracovnej plochy"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Vynútenie experimentálneho režimu pracovnej plochy na sekundárnych obrazovkách"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Presadiť tmavý režim"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Presadí, aby bol tmavý režim vždy zapnutý"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Ochrana súkromia"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 460ab3d..867ff6d 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -53,8 +53,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Pomanjšava ali povečava besedila na zaslonu"</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Pomanjšanje"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Povečanje"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Vzorčno besedilo"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Čudoviti čarovnik iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11. poglavje: Čudovito Smaragdno mesto"</string>
@@ -4688,6 +4687,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ni na voljo v načinu za letalo"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Vsili namizni način"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Vsili poskusni namizni način na sekundarnih zaslonih"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Preglasi vsiljenje temnega načina"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Preglasi vsiljenje vedno vklopljenega temnega načina"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Zasebnost"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 283a918..d2239bb 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Bëje tekstin në ekran më të vogël ose më të madh."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Zvogëlo"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Zmadho"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Teksti shembull"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Magjistari i mrekullueshëm i Ozit"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Kapitulli 11: Qyteti i mrekullueshëm i smeraldtë i Ozit"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Nuk ofrohen në modalitetin e aeroplanit"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Detyro \"modalitetin e desktopit\""</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Detyro \"modalitetin e desktopit\" eksperimental në ekrane dytësore"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Anulo detyrimin e errësimit"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Anulon funksionin e detyrimit të errësimit që të jetë gjithmonë aktiv"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privatësia"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 2b42b2d..7ecb8fa 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -52,8 +52,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Омогућава да текст на екрану буде мањи или већи."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Умањи"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Увећај"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Пример текста"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Чаробњак из Оза"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Поглавље 11: Чудесни Смарагдни град Оза"</string>
@@ -4605,6 +4604,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Недоступно током режима рада у авиону"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Наметни режим рачунара"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Наметни експериментални режим рачунара на секундарним екранима"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Замени функцију наметања тамне теме"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Мења функцију наметања тамне теме тако да буде увек укључена"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Приватност"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index f6d73bd..68870f0 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Gör texten på skärmen större eller mindre."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Förminska"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Förstora"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Exempeltext"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Den fantastiska trollkarlen från Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Kapitel 11: Den underbara Smaragdstaden i Oz"</string>
@@ -4522,6 +4521,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ej tillgängligt i flygplansläge"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Tvinga fram skrivbordsläge"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Tvinga fram experimentellt skrivbordsläge på sekundära skärmar"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Åsidosätter tvingat mörkt läge"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Åsidosätter funktionen som tvingar mörkt läge att alltid vara aktiverat"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Sekretess"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 7572ec9..42f145c 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Haipatikani ukitumia hali ya ndegeni"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Lazimisha hali ya eneo-kazi"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Lazimisha hali ya jaribio la eneo-kazi kwenye maonyesho yasiyo ya msingi"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Badilisha ulazimishaji wa mandhari meusi"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Hubatilisha mipangilio ya kipengele cha kulazimisha mandhari meusi ili kiwake kila wakati"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Faragha"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index c255a66..eb3a91a 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"விமானப் பயன்முறையின்போது கிடைக்காது"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"கட்டாய டெஸ்க்டாப் பயன்முறை"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"இரண்டாம்நிலை திரைகளில் \'கட்டாயப் பரிசோதனை டெஸ்க்டாப்\' பயன்முறை"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"force-dark அம்சத்தை மேலெழுதுதல்"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"எப்போதும் இயக்கத்தில் இருக்குமாறு force-dark அம்சத்தை மேலெழுதுகிறது"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"தனியுரிமை"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 5f763d6..6cc86be 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -4526,6 +4526,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"విమానం మోడ్‌లో సేవ అందుబాటులో ఉండదు"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ఫోర్స్ డెస్క్‌టాప్ మోడ్"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ద్వితీయ ప్రదర్శనల్లో ఫోర్స్ ప్రయోగాత్మక డెస్క్‌టాప్ మోడ్"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ఫోర్స్‌-డార్క్‌ను అధిగ‌మించ‌డం"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ఫోర్స్‌-డార్క్ ఫీచ‌ర్‌ను అధిగ‌మించ‌డం ఎల్ల‌ప్పుడూ ఆన్‌లో ఉండాలి"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"గోప్యత"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 7a5938e..1b63234 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ใช้ขณะที่เปิดโหมดบนเครื่องบินไม่ได้"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"บังคับใช้โหมดเดสก์ท็อป"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"บังคับใช้โหมดเดสก์ท็อปแบบทดลองในจอแสดงผลรอง"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"ลบล้างฟีเจอร์บังคับใช้โหมดมืด"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"ลบล้างฟีเจอร์บังคับใช้โหมดมืดให้เปิดตลอดเวลา"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"ความเป็นส่วนตัว"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c116359..61df992 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Hindi available sa airplane mode"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Force desktop mode"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Force experimental desktop mode sa mga pangalawang display"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"I-override ang force-dark"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ino-override ang force-dark feature para maging palaging naka-on"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Privacy"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ffe1a88..fc02800 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Uçak modunda kullanılamaz"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Masaüstü modunu zorunlu kıl"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"İkincil ekranlarda deneysel masaüstü modunu zorunlu kıl"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Zorunlu koyu rengi geçersiz kıl"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Zorunlu koyu renk özelliğini geçersiz kılma her zaman açık"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Gizlilik"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 6e57214..cbe50c8 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -53,8 +53,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Збільшуйте або зменшуйте текст на екрані."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Зменшити"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Збільшити"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Зразок тексту"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Чарівник країни Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Глава 11. Дивовижне Смарагдове місто країни Оз"</string>
@@ -3495,8 +3494,7 @@
     <string name="notification_assistant_title" msgid="6983941403582134437">"Адаптивні сповіщення"</string>
     <string name="no_notification_assistant" msgid="2533323397091834096">"Немає"</string>
     <string name="no_notification_listeners" msgid="2839354157349636000">"Установлені додатки не запитували доступу до сповіщень."</string>
-    <!-- no translation found for notification_access_detail_switch (46386786409608330) -->
-    <skip />
+    <string name="notification_access_detail_switch" msgid="46386786409608330">"Надати доступ до сповіщень"</string>
     <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Надати додатку <xliff:g id="SERVICE">%1$s</xliff:g> доступ до сповіщень?"</string>
     <string name="notification_assistant_security_warning_summary" msgid="3119843404577399036">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> зможе переглядати всі сповіщення, зокрема з особистою інформацією, як-от іменами контактів і текстами отриманих повідомлень. Він також зможе змінювати й відхиляти сповіщення та активувати в них командні кнопки. \n\nДодаток зможе вмикати й вимикати режим \"Не турбувати\" та змінювати пов’язані з ним налаштування."</string>
     <string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Надати додатку <xliff:g id="SERVICE">%1$s</xliff:g> доступ для сповіщень?"</string>
@@ -4689,6 +4687,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Недоступно, коли ввімкнено режим польоту"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Примусово застосувати режим робочого столу"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Примусово застосувати експериментальний режим робочого столу на додаткових екранах"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Замінити примусовий темний режим"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Не дозволяє постійний примусовий темний режим"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Конфіденційність"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 918dda8..b357042 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"ہوائی جہاز وضع کے دوران غیر دستیاب"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"ڈیسک ٹاپ موڈ فورس کریں"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"ثانوی ڈسپلیز پر تجرباتی ڈیسک ٹاپ موڈ فورس کریں"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"‏force-dark کو اوور رائیڈ کریں"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"‏force-dark کی خصوصیت کو ہمیشہ زبردستی آن رکھنے کے لیے اوور رائیڈ کرتی ہے"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"رازداری"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index f6862c6..ad2b2c6 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Ekrandagi matnni kattalashtirish yoki kichiklashtirish."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Kichiklashtirish"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Kattalashtirish"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Namunaviy matn"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"Oz mamlakati sehrgari"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"11-bob: Oz mamlakatining zumrad shahri"</string>
@@ -4536,6 +4535,8 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Parvoz rejimida ishlamaydi"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Desktop rejimini majburiy ochish"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Ikkilamchi displeylarda tajribaviy desktop rejimini majburiy ochish"</string>
+    <string name="enable_sizecompat_freeform" msgid="3799755160777404309">"Oʻzgarmas hajmli ilovalarning erkin shakl olishi"</string>
+    <string name="enable_sizecompat_freeform_summary" msgid="1484050174538201499">"Oʻzgarmas hajmli ilovalarning erkin shaklda ochilishiga ruxsat beradi"</string>
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Tungi mavzuni yoqish ustidan yozadi"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Tungi mavzuni majburiy yoqish sozlamasini “Doimo yoniq” sifatida sozlaydi."</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Maxfiylik"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 7354940..4d3a549 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -4522,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Không sử dụng được khi ở chế độ trên máy bay"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Buộc chạy chế độ máy tính"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Buộc chạy chế độ máy tính thử nghiệm trên màn hình phụ"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Ghi đè tính năng buộc tối"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ghi đè tính năng buộc tối để luôn bật"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Quyền riêng tư"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index b20670d..0558544 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"在飞行模式下不可用"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"强制使用桌面模式"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"在辅助显示屏上强制使用实验桌面模式"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"覆盖“强制启用 SmartDark 功能”的设置"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"覆盖“强制 SmartDark 功能始终开启”的设置"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"隐私权"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 3062134..944e461 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -4524,6 +4524,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"飛行模式啟用期間無法使用"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"強制執行桌面模式"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"在次要顯示屏強制執行實驗版桌面模式"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"蓋過強制深色模式"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"蓋過永遠啟用強制深色模式的設定"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"私隱"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index d7df3ef..656d202 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -4523,6 +4523,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"飛航模式開啟時無法使用"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"強制使用桌面模式"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"在次要顯示器上強制使用桌面模式實驗性功能"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"覆寫強制使用深色模式的功能"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"覆寫強制使用深色模式的功能，讓系統一律開啟這個模式"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"隱私"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 3e48c99..567440a 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -51,8 +51,7 @@
     <string name="font_size_summary" msgid="1296835853522566260">"Yenza umbhalo okusikrini ube mncane noma mkhulu."</string>
     <string name="font_size_make_smaller_desc" msgid="4978038055549590140">"Yenza kube kuncane"</string>
     <string name="font_size_make_larger_desc" msgid="5583046033381722247">"Yenza kube kukhulu"</string>
-    <!-- no translation found for font_size_preview_text (5578792111916168343) -->
-    <skip />
+    <string name="font_size_preview_text" msgid="5578792111916168343">"Servez à ce monsieur une bière et des kiwis."</string>
     <string name="font_size_preview_text_headline" msgid="1173103737980511652">"Isampuli yombhalo"</string>
     <string name="font_size_preview_text_title" msgid="6363561029914452382">"I-The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="5806349524325544614">"Isahluko 11: The Wonderful Emerald City of Oz"</string>
@@ -3398,8 +3397,7 @@
     <string name="notification_assistant_title" msgid="6983941403582134437">"Izaziso eziguqukayo"</string>
     <string name="no_notification_assistant" msgid="2533323397091834096">"Lutho"</string>
     <string name="no_notification_listeners" msgid="2839354157349636000">"Azikho izinhlelo zokusebenza ezicele ukufinyelela kwesaziso."</string>
-    <!-- no translation found for notification_access_detail_switch (46386786409608330) -->
-    <skip />
+    <string name="notification_access_detail_switch" msgid="46386786409608330">"Vumela ukufinyelela kwesaziso"</string>
     <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Vumela ukufinyelela kwesaziso kwe-<xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
     <string name="notification_assistant_security_warning_summary" msgid="3119843404577399036">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> uzokwazi ukufunda zonke izaziso, kufaka phakathi ulwazi lomuntu siqu njengamagama okuxhumana nemibhalo yemilayezo oyitholayo. Futhi izokwazi ukushintsha noma ukulahla izaziso noma ukucupha izinkinobho zesenzo eziqukethwe. \n\nLokhu kuzonika uhlelo lokusebenza amandla okuvula nokuvala okuthi ungaphazamisi futhi kushintshe izilungiselelo eziphathelene."</string>
     <string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Vumela ukufinyelela kwe-<xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
@@ -4524,6 +4522,10 @@
     <string name="mobile_data_ap_mode_disabled" msgid="6067959496888990983">"Ayitholakali ngesikhathi semodi yendiza"</string>
     <string name="force_desktop_mode" msgid="1336913605091334238">"Phoqelela imodi yedeskithophu"</string>
     <string name="force_desktop_mode_summary" msgid="4587416867846930479">"Phoqelela imodi yedeskithophu yokuhlola esibukisweni sesibili"</string>
+    <!-- no translation found for enable_sizecompat_freeform (3799755160777404309) -->
+    <skip />
+    <!-- no translation found for enable_sizecompat_freeform_summary (1484050174538201499) -->
+    <skip />
     <string name="hwui_force_dark_title" msgid="4256904905631994219">"Bhala ngaphezulu isici sokuphoqelela okumnyama"</string>
     <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Ibhala ngaphezulu isici sokuphoqelela okumnyama ukuthi ihlale sivulekile"</string>
     <string name="privacy_dashboard_title" msgid="6845403825611829558">"Ubumfihlo"</string>
diff --git a/res/xml/wifi_display_saved_access_points2.xml b/res/xml/wifi_display_saved_access_points2.xml
new file mode 100644
index 0000000..02c732a
--- /dev/null
+++ b/res/xml/wifi_display_saved_access_points2.xml
@@ -0,0 +1,33 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="saved_access_points"
+    android:title="@string/wifi_saved_access_points_label">
+
+    <PreferenceCategory
+        android:key="subscribed_access_points_category"
+        android:title="@string/wifi_subscribed_access_points_tab"
+        settings:controller="com.android.settings.wifi.savedaccesspoints2.SubscribedAccessPointsPreferenceController2"/>
+
+    <PreferenceCategory
+        android:key="saved_access_points_category"
+        android:title="@string/wifi_saved_access_points_tab"
+        settings:controller="com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsPreferenceController2"/>
+
+</PreferenceScreen>
diff --git a/res/xml/wifi_settings2.xml b/res/xml/wifi_settings2.xml
new file mode 100644
index 0000000..8cd3857
--- /dev/null
+++ b/res/xml/wifi_settings2.xml
@@ -0,0 +1,48 @@
+<?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.
+-->
+
+<PreferenceScreen
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res-auto"
+        android:title="@string/wifi_settings"
+        settings:keywords="@string/keywords_wifi">
+
+    <com.android.settings.wifi.LinkablePreference
+        android:key="wifi_status_message"/>
+
+    <PreferenceCategory
+        android:key="connected_access_point"
+        android:layout="@layout/preference_category_no_label"/>
+
+    <PreferenceCategory
+        android:key="access_points"
+        android:layout="@layout/preference_category_no_label"/>
+
+    <Preference
+        android:key="configure_settings"
+        android:title="@string/wifi_configure_settings_preference_title"
+        settings:allowDividerAbove="true"
+        android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
+
+    <Preference
+        android:key="saved_networks"
+        android:title="@string/wifi_saved_access_points_label"
+        android:fragment="com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2"/>
+
+    <com.android.settings.datausage.DataUsagePreference
+        android:key="wifi_data_usage"
+        android:title="@string/wifi_data_usage"/>
+</PreferenceScreen>
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 0934ba9..98c6b87 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -146,6 +146,7 @@
 import com.android.settings.wifi.calling.WifiCallingSettings;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
 import com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings;
+import com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2;
 import com.android.settings.wifi.tether.WifiTetherSettings;
 
 public class SettingsGateway {
@@ -161,6 +162,7 @@
             WifiSettings2.class.getName(),
             ConfigureWifiSettings.class.getName(),
             SavedAccessPointsWifiSettings.class.getName(),
+            SavedAccessPointsWifiSettings2.class.getName(),
             TetherSettings.class.getName(),
             WifiP2pSettings.class.getName(),
             WifiTetherSettings.class.getName(),
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
index d1051fe..3cd4ca3 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
@@ -201,7 +201,8 @@
     }
 
     @WorkerThread
-    private static List<BatteryTip> refreshBatteryTips(Context context) {
+    @VisibleForTesting
+    static List<BatteryTip> refreshBatteryTips(Context context) {
         final BatteryStatsHelperLoader statsLoader = new BatteryStatsHelperLoader(context);
         final BatteryStatsHelper statsHelper = statsLoader.loadInBackground();
         final BatteryTipLoader loader = new BatteryTipLoader(context, statsHelper);
diff --git a/src/com/android/settings/panel/WifiPanel.java b/src/com/android/settings/panel/WifiPanel.java
index 36ee117..0efa804 100644
--- a/src/com/android/settings/panel/WifiPanel.java
+++ b/src/com/android/settings/panel/WifiPanel.java
@@ -20,12 +20,14 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.util.FeatureFlagUtils;
 
 import com.android.settings.R;
 import com.android.settings.SubSettings;
 import com.android.settings.slices.CustomSliceRegistry;
 import com.android.settings.slices.SliceBuilderUtils;
 import com.android.settings.wifi.WifiSettings;
+import com.android.settings.wifi.WifiSettings2;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -61,11 +63,20 @@
     public Intent getSeeMoreIntent() {
         final String screenTitle =
                 mContext.getText(R.string.wifi_settings).toString();
-        final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
-                WifiSettings.class.getName(),
-                null /* key */,
-                screenTitle,
-                SettingsEnums.WIFI);
+        Intent intent;
+        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
+                    WifiSettings2.class.getName(),
+                    null /* key */,
+                    screenTitle,
+                    SettingsEnums.WIFI);
+        } else {
+            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
+                    WifiSettings.class.getName(),
+                    null /* key */,
+                    screenTitle,
+                    SettingsEnums.WIFI);
+        }
         intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         return intent;
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 0ba2a94..a3435e6 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -44,6 +44,7 @@
 import android.text.SpannableString;
 import android.text.TextUtils;
 import android.text.TextWatcher;
+import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
@@ -70,6 +71,7 @@
 import com.android.settings.ProxySelector;
 import com.android.settings.R;
 import com.android.settings.wifi.details.WifiPrivacyPreferenceController;
+import com.android.settings.wifi.details2.WifiPrivacyPreferenceController2;
 import com.android.settings.wifi.dpp.WifiDppUtils;
 import com.android.settingslib.Utils;
 import com.android.settingslib.utils.ThreadUtils;
@@ -289,9 +291,14 @@
                         ? HIDDEN_NETWORK
                         : NOT_HIDDEN_NETWORK);
 
-                final int prefMacValue =
-                        WifiPrivacyPreferenceController.translateMacRandomizedValueToPrefValue(
-                                config.macRandomizationSetting);
+                int prefMacValue;
+                if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                    prefMacValue = WifiPrivacyPreferenceController2
+                            .translateMacRandomizedValueToPrefValue(config.macRandomizationSetting);
+                } else {
+                    prefMacValue = WifiPrivacyPreferenceController
+                            .translateMacRandomizedValueToPrefValue(config.macRandomizationSetting);
+                }
                 mPrivacySettingsSpinner.setSelection(prefMacValue);
 
                 if (config.getIpAssignment() == IpAssignment.STATIC) {
@@ -843,9 +850,14 @@
         }
 
         if (mPrivacySettingsSpinner != null) {
-            final int macValue =
-                    WifiPrivacyPreferenceController.translatePrefValueToMacRandomizedValue(
-                            mPrivacySettingsSpinner.getSelectedItemPosition());
+            int macValue;
+            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                macValue = WifiPrivacyPreferenceController2.translatePrefValueToMacRandomizedValue(
+                        mPrivacySettingsSpinner.getSelectedItemPosition());
+            } else {
+                macValue = WifiPrivacyPreferenceController.translatePrefValueToMacRandomizedValue(
+                        mPrivacySettingsSpinner.getSelectedItemPosition());
+            }
             config.macRandomizationSetting = macValue;
         }
 
diff --git a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
index 36c4455..2c6feac 100644
--- a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.os.Bundle;
+import android.util.FeatureFlagUtils;
 
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
@@ -25,6 +26,7 @@
 import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.wifi.AccessPoint;
@@ -128,17 +130,31 @@
             mPreference.refresh();
             mPreference.setOrder(order);
 
-            mPreference.setOnPreferenceClickListener(pref -> {
-                Bundle args = new Bundle();
-                mPreference.getAccessPoint().saveWifiState(args);
-                new SubSettingLauncher(mPrefContext)
-                        .setTitleRes(R.string.pref_title_network_details)
-                        .setDestination(WifiNetworkDetailsFragment.class.getName())
-                        .setArguments(args)
-                        .setSourceMetricsCategory(mMetricsCategory)
-                        .launch();
-                return true;
-            });
+            if (FeatureFlagUtils.isEnabled(mPrefContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                mPreference.setOnPreferenceClickListener(pref -> {
+                    Bundle args = new Bundle();
+                    mPreference.getAccessPoint().saveWifiState(args);
+                    new SubSettingLauncher(mPrefContext)
+                            .setTitleRes(R.string.pref_title_network_details)
+                            .setDestination(WifiNetworkDetailsFragment2.class.getName())
+                            .setArguments(args)
+                            .setSourceMetricsCategory(mMetricsCategory)
+                            .launch();
+                    return true;
+                });
+            } else {
+                mPreference.setOnPreferenceClickListener(pref -> {
+                    Bundle args = new Bundle();
+                    mPreference.getAccessPoint().saveWifiState(args);
+                    new SubSettingLauncher(mPrefContext)
+                            .setTitleRes(R.string.pref_title_network_details)
+                            .setDestination(WifiNetworkDetailsFragment.class.getName())
+                            .setArguments(args)
+                            .setSourceMetricsCategory(mMetricsCategory)
+                            .launch();
+                    return true;
+                });
+            }
             mPreferenceGroup.addPreference(mPreference);
         }
     }
diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java
index a590a0f..adfc7ec 100644
--- a/src/com/android/settings/wifi/WifiPickerActivity.java
+++ b/src/com/android/settings/wifi/WifiPickerActivity.java
@@ -16,6 +16,7 @@
 package com.android.settings.wifi;
 
 import android.content.Intent;
+import android.util.FeatureFlagUtils;
 
 import androidx.preference.PreferenceFragmentCompat;
 
@@ -24,6 +25,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
 import com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings;
+import com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2;
 
 public class WifiPickerActivity extends SettingsActivity implements ButtonBarHandler {
 
@@ -39,9 +41,18 @@
 
     @Override
     protected boolean isValidFragment(String fragmentName) {
+        boolean isSavedAccessPointsWifiSettings;
+        if (FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+            isSavedAccessPointsWifiSettings =
+                    SavedAccessPointsWifiSettings2.class.getName().equals(fragmentName);
+        } else {
+            isSavedAccessPointsWifiSettings =
+                    SavedAccessPointsWifiSettings.class.getName().equals(fragmentName);
+        }
+
         if (WifiSettings.class.getName().equals(fragmentName)
                 || WifiP2pSettings.class.getName().equals(fragmentName)
-                || SavedAccessPointsWifiSettings.class.getName().equals(fragmentName)) {
+                || isSavedAccessPointsWifiSettings) {
             return true;
         }
         return false;
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 28b668f..a5b380e 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -68,6 +68,7 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.widget.SwitchBarController;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
 import com.android.settings.wifi.dpp.WifiDppUtils;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -954,12 +955,21 @@
                         ? accessPoint.getTitle()
                         : context.getText(R.string.pref_title_network_details);
 
-        new SubSettingLauncher(getContext())
-                .setTitleText(title)
-                .setDestination(WifiNetworkDetailsFragment.class.getName())
-                .setArguments(pref.getExtras())
-                .setSourceMetricsCategory(getMetricsCategory())
-                .launch();
+        if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+            new SubSettingLauncher(getContext())
+                    .setTitleText(title)
+                    .setDestination(WifiNetworkDetailsFragment2.class.getName())
+                    .setArguments(pref.getExtras())
+                    .setSourceMetricsCategory(getMetricsCategory())
+                    .launch();
+        } else {
+            new SubSettingLauncher(getContext())
+                    .setTitleText(title)
+                    .setDestination(WifiNetworkDetailsFragment.class.getName())
+                    .setArguments(pref.getExtras())
+                    .setSourceMetricsCategory(getMetricsCategory())
+                    .launch();
+        }
     }
 
     private Network getCurrentWifiNetwork() {
diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index 2d26cc4..f2cd1cf 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -190,7 +190,7 @@
     }
 
     private void addPreferences() {
-        addPreferencesFromResource(R.xml.wifi_settings);
+        addPreferencesFromResource(R.xml.wifi_settings2);
 
         mConnectedWifiEntryPreferenceCategory = findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
         mWifiEntryPreferenceCategory = findPreference(PREF_KEY_ACCESS_POINTS);
diff --git a/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
new file mode 100644
index 0000000..de831b7
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
@@ -0,0 +1,86 @@
+/*
+ * 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.details2;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiManager;
+import android.util.Log;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.wifi.dpp.WifiDppUtils;
+import com.android.settingslib.wifi.AccessPoint;
+
+/**
+ * {@link BasePreferenceController} that launches Wi-Fi Easy Connect configurator flow
+ */
+public class AddDevicePreferenceController2 extends BasePreferenceController {
+
+    private static final String TAG = "AddDevicePreferenceController2";
+
+    private static final String KEY_ADD_DEVICE = "add_device_to_network";
+
+    private AccessPoint mAccessPoint;
+    private WifiManager mWifiManager;
+
+    public AddDevicePreferenceController2(Context context) {
+        super(context, KEY_ADD_DEVICE);
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    /**
+     * Initiate with an {@link AccessPoint}.
+     */
+    public AddDevicePreferenceController2 init(AccessPoint accessPoint) {
+        mAccessPoint = accessPoint;
+
+        return this;
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        if (WifiDppUtils.isSupportConfiguratorQrCodeScanner(mContext, mAccessPoint)) {
+            return AVAILABLE;
+        } else {
+            return CONDITIONALLY_UNAVAILABLE;
+        }
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (KEY_ADD_DEVICE.equals(preference.getKey())) {
+            WifiDppUtils.showLockScreen(mContext, () -> launchWifiDppConfiguratorQrCodeScanner());
+            return true; /* click is handled */
+        }
+
+        return false; /* click is not handled */
+    }
+
+    private void launchWifiDppConfiguratorQrCodeScanner() {
+        final Intent intent = WifiDppUtils.getConfiguratorQrCodeScannerIntentOrNull(mContext,
+                mWifiManager, mAccessPoint);
+
+        if (intent == null) {
+            Log.e(TAG, "Launch Wi-Fi QR code scanner with a wrong Wi-Fi network!");
+        } else {
+            mContext.startActivity(intent);
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
new file mode 100644
index 0000000..1d6e457
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -0,0 +1,1207 @@
+/*
+ * 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.details2;
+
+import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.settings.SettingsEnums;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.VectorDrawable;
+import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.NetworkRequest;
+import android.net.NetworkUtils;
+import android.net.RouteInfo;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.core.text.BidiFormatter;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.FeatureFlags;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.datausage.WifiDataUsageSummaryPreferenceController;
+import com.android.settings.widget.EntityHeaderController;
+import com.android.settings.wifi.WifiDialog;
+import com.android.settings.wifi.WifiDialog.WifiDialogListener;
+import com.android.settings.wifi.WifiUtils;
+import com.android.settings.wifi.dpp.WifiDppUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnPause;
+import com.android.settingslib.core.lifecycle.events.OnResume;
+import com.android.settingslib.widget.ActionButtonsPreference;
+import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.wifi.AccessPoint;
+import com.android.settingslib.wifi.WifiTracker;
+import com.android.settingslib.wifi.WifiTrackerFactory;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.time.Duration;
+import java.util.StringJoiner;
+import java.util.stream.Collectors;
+
+/**
+ * Controller for logic pertaining to displaying Wifi information for the
+ * {@link WifiNetworkDetailsFragment}.
+ */
+public class WifiDetailPreferenceController2 extends AbstractPreferenceController
+        implements PreferenceControllerMixin, WifiDialogListener, LifecycleObserver, OnPause,
+        OnResume {
+
+    private static final String TAG = "WifiDetailsPrefCtrl2";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    @VisibleForTesting
+    static final String KEY_HEADER = "connection_header";
+    @VisibleForTesting
+    static final String KEY_DATA_USAGE_HEADER = "status_header";
+    @VisibleForTesting
+    static final String KEY_BUTTONS_PREF = "buttons";
+    @VisibleForTesting
+    static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength";
+    @VisibleForTesting
+    static final String KEY_TX_LINK_SPEED = "tx_link_speed";
+    @VisibleForTesting
+    static final String KEY_RX_LINK_SPEED = "rx_link_speed";
+    @VisibleForTesting
+    static final String KEY_FREQUENCY_PREF = "frequency";
+    @VisibleForTesting
+    static final String KEY_SECURITY_PREF = "security";
+    @VisibleForTesting
+    static final String KEY_SSID_PREF = "ssid";
+    @VisibleForTesting
+    static final String KEY_MAC_ADDRESS_PREF = "mac_address";
+    @VisibleForTesting
+    static final String KEY_IP_ADDRESS_PREF = "ip_address";
+    @VisibleForTesting
+    static final String KEY_GATEWAY_PREF = "gateway";
+    @VisibleForTesting
+    static final String KEY_SUBNET_MASK_PREF = "subnet_mask";
+    @VisibleForTesting
+    static final String KEY_DNS_PREF = "dns";
+    @VisibleForTesting
+    static final String KEY_IPV6_CATEGORY = "ipv6_category";
+    @VisibleForTesting
+    static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses";
+
+    private static final int STATE_NONE = 1;
+    private static final int STATE_ENABLE_WIFI = 2;
+    private static final int STATE_ENABLE_WIFI_FAILED = 3;
+    private static final int STATE_CONNECTING = 4;
+    private static final int STATE_CONNECTED = 5;
+    private static final int STATE_FAILED = 6;
+    private static final int STATE_NOT_IN_RANGE = 7;
+    private static final int STATE_DISCONNECTED = 8;
+    private static final long TIMEOUT = Duration.ofSeconds(10).toMillis();
+
+    // Be static to avoid too much object not be reset.
+    @VisibleForTesting
+    static CountDownTimer sTimer;
+
+    private AccessPoint mAccessPoint;
+    private final ConnectivityManager mConnectivityManager;
+    private final PreferenceFragmentCompat mFragment;
+    private final Handler mHandler;
+    private LinkProperties mLinkProperties;
+    private Network mNetwork;
+    private NetworkInfo mNetworkInfo;
+    private NetworkCapabilities mNetworkCapabilities;
+    private int mRssiSignalLevel = -1;
+    private String[] mSignalStr;
+    private WifiConfiguration mWifiConfig;
+    private WifiInfo mWifiInfo;
+    private final WifiManager mWifiManager;
+    private final WifiTracker mWifiTracker;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+    private boolean mIsOutOfRange;
+    private boolean mIsEphemeral;
+    private boolean mConnected;
+    private int mConnectingState;
+    private WifiManager.ActionListener mConnectListener;
+
+    // UI elements - in order of appearance
+    private ActionButtonsPreference mButtonsPref;
+    private EntityHeaderController mEntityHeaderController;
+    private Preference mSignalStrengthPref;
+    private Preference mTxLinkSpeedPref;
+    private Preference mRxLinkSpeedPref;
+    private Preference mFrequencyPref;
+    private Preference mSecurityPref;
+    private Preference mSsidPref;
+    private Preference mMacAddressPref;
+    private Preference mIpAddressPref;
+    private Preference mGatewayPref;
+    private Preference mSubnetPref;
+    private Preference mDnsPref;
+    private PreferenceCategory mIpv6Category;
+    private Preference mIpv6AddressPref;
+    private Lifecycle mLifecycle;
+    Preference mDataUsageSummaryPref;
+    WifiDataUsageSummaryPreferenceController mSummaryHeaderController;
+
+    private final IconInjector mIconInjector;
+    private final IntentFilter mFilter;
+
+    // Passpoint information - cache it in case of losing these information after
+    // updateAccessPointFromScannedList(). For R2, we should update these data from
+    // WifiManager#getPasspointConfigurations() after users manage the passpoint profile.
+    private boolean mIsExpired;
+    private boolean mIsPasspointConfigurationR1;
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION:
+                    if (!intent.getBooleanExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED,
+                            false /* defaultValue */)) {
+                        // only one network changed
+                        WifiConfiguration wifiConfiguration = intent
+                                .getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION);
+                        if (mAccessPoint.matches(wifiConfiguration)) {
+                            mWifiConfig = wifiConfiguration;
+                        }
+                    }
+                    // fall through
+                case WifiManager.NETWORK_STATE_CHANGED_ACTION:
+                case WifiManager.RSSI_CHANGED_ACTION:
+                    refreshPage();
+                    break;
+            }
+        }
+    };
+
+    private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
+            .clearCapabilities().addTransportType(TRANSPORT_WIFI).build();
+
+    // Must be run on the UI thread since it directly manipulates UI state.
+    private final NetworkCallback mNetworkCallback = new NetworkCallback() {
+        @Override
+        public void onLinkPropertiesChanged(Network network, LinkProperties lp) {
+            if (network.equals(mNetwork) && !lp.equals(mLinkProperties)) {
+                mLinkProperties = lp;
+                refreshIpLayerInfo();
+            }
+        }
+
+        private boolean hasCapabilityChanged(NetworkCapabilities nc, int cap) {
+            // If this is the first time we get NetworkCapabilities, report that something changed.
+            if (mNetworkCapabilities == null) return true;
+
+            // nc can never be null, see ConnectivityService#callCallbackForRequest.
+            return mNetworkCapabilities.hasCapability(cap) != nc.hasCapability(cap);
+        }
+
+        private boolean hasPrivateDnsStatusChanged(NetworkCapabilities nc) {
+            // If this is the first time that WifiDetailPreferenceController2 gets
+            // NetworkCapabilities, report that something has changed and assign nc to
+            // mNetworkCapabilities in onCapabilitiesChanged. Note that the NetworkCapabilities
+            // from onCapabilitiesChanged() will never be null, so calling
+            // mNetworkCapabilities.isPrivateDnsBroken() would be safe next time.
+            if (mNetworkCapabilities == null) {
+                return true;
+            }
+
+            return mNetworkCapabilities.isPrivateDnsBroken() != nc.isPrivateDnsBroken();
+        }
+
+        @Override
+        public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
+            // If the network just validated or lost Internet access or detected partial internet
+            // connectivity or private dns was broken, refresh network state. Don't do this on
+            // every NetworkCapabilities change because refreshEntityHeader sends IPCs to the
+            // system server from the UI thread, which can cause jank.
+            if (network.equals(mNetwork) && !nc.equals(mNetworkCapabilities)) {
+                if (hasPrivateDnsStatusChanged(nc)
+                        || hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
+                        || hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)
+                        || hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) {
+                    mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
+                    refreshEntityHeader();
+                }
+                mNetworkCapabilities = nc;
+                refreshButtons();
+                refreshIpLayerInfo();
+            }
+        }
+
+        @Override
+        public void onLost(Network network) {
+            // Ephemeral network not a saved network, leave detail page once disconnected
+            if (mIsEphemeral && network.equals(mNetwork)) {
+                exitActivity();
+            }
+        }
+    };
+
+    @VisibleForTesting
+    final WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
+        /** Called when the state of Wifi has changed. */
+        public void onWifiStateChanged(int state) {
+            Log.d(TAG, "onWifiStateChanged(" + state + ")");
+            if (mConnectingState == STATE_ENABLE_WIFI && state == WifiManager.WIFI_STATE_ENABLED) {
+                updateConnectingState(STATE_CONNECTING);
+            } else if (mConnectingState != STATE_NONE && state == WifiManager.WIFI_STATE_DISABLED) {
+                // update as disconnected once Wi-Fi disabled since may not received
+                // onConnectedChanged for this case.
+                updateConnectingState(STATE_DISCONNECTED);
+            }
+        }
+
+        /** Called when the connection state of wifi has changed. */
+        public void onConnectedChanged() {
+            refreshPage();
+        }
+
+        /**
+         * Called to indicate the list of AccessPoints has been updated and
+         * {@link WifiTracker#getAccessPoints()} should be called to get the updated list.
+         */
+        public void onAccessPointsChanged() {
+            refreshPage();
+        }
+    };
+
+    /**
+     * To get an instance of {@link WifiDetailPreferenceController2}
+     */
+    public static WifiDetailPreferenceController2 newInstance(
+            AccessPoint accessPoint,
+            ConnectivityManager connectivityManager,
+            Context context,
+            PreferenceFragmentCompat fragment,
+            Handler handler,
+            Lifecycle lifecycle,
+            WifiManager wifiManager,
+            MetricsFeatureProvider metricsFeatureProvider) {
+        return new WifiDetailPreferenceController2(
+                accessPoint, connectivityManager, context, fragment, handler, lifecycle,
+                wifiManager, metricsFeatureProvider, new IconInjector(context));
+    }
+
+    @VisibleForTesting
+        /* package */ WifiDetailPreferenceController2(
+            AccessPoint accessPoint,
+            ConnectivityManager connectivityManager,
+            Context context,
+            PreferenceFragmentCompat fragment,
+            Handler handler,
+            Lifecycle lifecycle,
+            WifiManager wifiManager,
+            MetricsFeatureProvider metricsFeatureProvider,
+            IconInjector injector) {
+        super(context);
+
+        mAccessPoint = accessPoint;
+        mConnectivityManager = connectivityManager;
+        mFragment = fragment;
+        mHandler = handler;
+        mSignalStr = context.getResources().getStringArray(R.array.wifi_signal);
+        mWifiConfig = accessPoint.getConfig();
+        mWifiManager = wifiManager;
+        mMetricsFeatureProvider = metricsFeatureProvider;
+        mIconInjector = injector;
+
+        mFilter = new IntentFilter();
+        mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+        mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
+
+        mLifecycle = lifecycle;
+        lifecycle.addObserver(this);
+
+        mWifiTracker = WifiTrackerFactory.create(
+                mFragment.getActivity(),
+                mWifiListener,
+                mLifecycle,
+                true /*includeSaved*/,
+                true /*includeScans*/);
+        mConnected = mAccessPoint.isActive();
+        // When lost the network connection, WifiInfo/NetworkInfo will be clear. So causes we
+        // could not check if the AccessPoint is ephemeral. Need to cache it in first.
+        mIsEphemeral = mAccessPoint.isEphemeral();
+        mConnectingState = STATE_NONE;
+        mConnectListener = new WifiManager.ActionListener() {
+            @Override
+            public void onSuccess() {
+                // Do nothing
+            }
+
+            @Override
+            public void onFailure(int reason) {
+                updateConnectingState(STATE_FAILED);
+            }
+        };
+
+        mIsExpired = mAccessPoint.isExpired();
+        mIsPasspointConfigurationR1 = mAccessPoint.isPasspointConfigurationR1();
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        // Returns null since this controller contains more than one Preference
+        return null;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+
+        setupEntityHeader(screen);
+
+        mButtonsPref = ((ActionButtonsPreference) screen.findPreference(KEY_BUTTONS_PREF))
+                .setButton1Text(R.string.forget)
+                .setButton1Icon(R.drawable.ic_settings_delete)
+                .setButton1OnClickListener(view -> forgetNetwork())
+                .setButton2Text(R.string.wifi_sign_in_button_text)
+                .setButton2Icon(R.drawable.ic_settings_sign_in)
+                .setButton2OnClickListener(view -> signIntoNetwork())
+                .setButton3Text(R.string.wifi_connect)
+                .setButton3Icon(R.drawable.ic_settings_wireless)
+                .setButton3OnClickListener(view -> connectNetwork())
+                .setButton3Enabled(true)
+                .setButton4Text(R.string.share)
+                .setButton4Icon(R.drawable.ic_qrcode_24dp)
+                .setButton4OnClickListener(view -> shareNetwork());
+
+        if (isPasspointConfigurationR1Expired()) {
+            // Hide Connect button.
+            mButtonsPref.setButton3Visible(false);
+        }
+
+        mSignalStrengthPref = screen.findPreference(KEY_SIGNAL_STRENGTH_PREF);
+        mTxLinkSpeedPref = screen.findPreference(KEY_TX_LINK_SPEED);
+        mRxLinkSpeedPref = screen.findPreference(KEY_RX_LINK_SPEED);
+        mFrequencyPref = screen.findPreference(KEY_FREQUENCY_PREF);
+        mSecurityPref = screen.findPreference(KEY_SECURITY_PREF);
+
+        mSsidPref = screen.findPreference(KEY_SSID_PREF);
+        mMacAddressPref = screen.findPreference(KEY_MAC_ADDRESS_PREF);
+        mIpAddressPref = screen.findPreference(KEY_IP_ADDRESS_PREF);
+        mGatewayPref = screen.findPreference(KEY_GATEWAY_PREF);
+        mSubnetPref = screen.findPreference(KEY_SUBNET_MASK_PREF);
+        mDnsPref = screen.findPreference(KEY_DNS_PREF);
+
+        mIpv6Category = screen.findPreference(KEY_IPV6_CATEGORY);
+        mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF);
+
+        mSecurityPref.setSummary(mAccessPoint.getSecurityString(/* concise */ false));
+    }
+
+    private void setupEntityHeader(PreferenceScreen screen) {
+        LayoutPreference headerPref = screen.findPreference(KEY_HEADER);
+
+        if (usingDataUsageHeader(mContext)) {
+            headerPref.setVisible(false);
+            mDataUsageSummaryPref = screen.findPreference(KEY_DATA_USAGE_HEADER);
+            mDataUsageSummaryPref.setVisible(true);
+            mSummaryHeaderController =
+                new WifiDataUsageSummaryPreferenceController(mFragment.getActivity(),
+                        mLifecycle, (PreferenceFragmentCompat) mFragment, mAccessPoint.getSsid());
+            return;
+        }
+
+        mEntityHeaderController =
+                EntityHeaderController.newInstance(
+                        mFragment.getActivity(), mFragment,
+                        headerPref.findViewById(R.id.entity_header));
+
+        ImageView iconView = headerPref.findViewById(R.id.entity_header_icon);
+
+        iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+
+        mEntityHeaderController.setLabel(mAccessPoint.getTitle());
+    }
+
+    private void refreshEntityHeader() {
+        if (usingDataUsageHeader(mContext)) {
+            mSummaryHeaderController.updateState(mDataUsageSummaryPref);
+        } else {
+            String summary;
+            if (isPasspointConfigurationR1Expired()) {
+                // Not able to get summary from AccessPoint because we may lost
+                // PasspointConfiguration information after updateAccessPointFromScannedList().
+                summary = mContext.getResources().getString(
+                        com.android.settingslib.R.string.wifi_passpoint_expired);
+            } else {
+                summary = mAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */);
+            }
+
+            mEntityHeaderController
+                    .setSummary(summary)
+                    .setRecyclerView(mFragment.getListView(), mLifecycle)
+                    .done(mFragment.getActivity(), true /* rebind */);
+        }
+    }
+
+    private void updateNetworkInfo() {
+        mNetwork = mWifiManager.getCurrentNetwork();
+        mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork);
+        mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork);
+    }
+
+    @Override
+    public void onResume() {
+        // Ensure mNetwork is set before any callbacks above are delivered, since our
+        // NetworkCallback only looks at changes to mNetwork.
+        updateNetworkInfo();
+        refreshPage();
+        mContext.registerReceiver(mReceiver, mFilter);
+        mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback,
+                mHandler);
+    }
+
+    @Override
+    public void onPause() {
+        mNetwork = null;
+        mLinkProperties = null;
+        mNetworkCapabilities = null;
+        mNetworkInfo = null;
+        mWifiInfo = null;
+        mContext.unregisterReceiver(mReceiver);
+        mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+    }
+
+    private void refreshPage() {
+        if (!updateAccessPoint()) {
+            return;
+        }
+
+        Log.d(TAG, "Update UI!");
+
+        // refresh header
+        refreshEntityHeader();
+
+        // refresh Buttons
+        refreshButtons();
+
+        // Update Connection Header icon and Signal Strength Preference
+        refreshRssiViews();
+        // Frequency Pref
+        refreshFrequency();
+        // Transmit Link Speed Pref
+        refreshTxSpeed();
+        // Receive Link Speed Pref
+        refreshRxSpeed();
+        // IP related information
+        refreshIpLayerInfo();
+        // SSID Pref
+        refreshSsid();
+        // MAC Address Pref
+        refreshMacAddress();
+    }
+
+    @VisibleForTesting
+    boolean updateAccessPoint() {
+        boolean changed = false;
+        // remember mIsOutOfRange as old before updated
+        boolean oldState = mIsOutOfRange;
+        updateAccessPointFromScannedList();
+
+        if (mAccessPoint.isActive()) {
+            updateNetworkInfo();
+            mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork);
+            mWifiInfo = mWifiManager.getConnectionInfo();
+            if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) {
+                // Once connected, can't get mNetwork immediately, return false and wait for
+                // next time to update UI. also reset {@code mIsOutOfRange}
+                mIsOutOfRange = oldState;
+                return false;
+            }
+            changed |= mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
+        }
+
+        // signal level changed
+        changed |= mRssiSignalLevel != mAccessPoint.getLevel();
+        // In/Out of range changed
+        changed |= oldState != mIsOutOfRange;
+        // connect state changed
+        if (mConnected != mAccessPoint.isActive()) {
+            mConnected = mAccessPoint.isActive();
+            changed = true;
+            updateConnectingState(mAccessPoint.isActive() ? STATE_CONNECTED : STATE_DISCONNECTED);
+        }
+
+        return changed;
+    }
+
+    private void updateAccessPointFromScannedList() {
+        mIsOutOfRange = true;
+
+        for (AccessPoint ap : mWifiTracker.getAccessPoints()) {
+            if (mAccessPoint.matches(ap)) {
+                mAccessPoint = ap;
+                mWifiConfig = ap.getConfig();
+                mIsOutOfRange = !mAccessPoint.isReachable();
+                return;
+            }
+        }
+    }
+
+    private void exitActivity() {
+        if (DEBUG) {
+            Log.d(TAG, "Exiting the WifiNetworkDetailsPage");
+        }
+        mFragment.getActivity().finish();
+    }
+
+    private void refreshRssiViews() {
+        int signalLevel = mAccessPoint.getLevel();
+
+        // Disappears signal view if not in range. e.g. for saved networks.
+        if (mIsOutOfRange) {
+            mSignalStrengthPref.setVisible(false);
+            mRssiSignalLevel = -1;
+            return;
+        }
+
+        if (mRssiSignalLevel == signalLevel) {
+            return;
+        }
+        mRssiSignalLevel = signalLevel;
+        Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
+
+        if (mEntityHeaderController != null) {
+            mEntityHeaderController
+                    .setIcon(redrawIconForHeader(wifiIcon)).done(mFragment.getActivity(),
+                            true /* rebind */);
+        }
+
+        Drawable wifiIconDark = wifiIcon.getConstantState().newDrawable().mutate();
+        wifiIconDark.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorControlNormal));
+        mSignalStrengthPref.setIcon(wifiIconDark);
+
+        mSignalStrengthPref.setSummary(mSignalStr[mRssiSignalLevel]);
+        mSignalStrengthPref.setVisible(true);
+    }
+
+    private Drawable redrawIconForHeader(Drawable original) {
+        final int iconSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.wifi_detail_page_header_image_size);
+        final int actualWidth = original.getMinimumWidth();
+        final int actualHeight = original.getMinimumHeight();
+
+        if ((actualWidth == iconSize && actualHeight == iconSize)
+                || !VectorDrawable.class.isInstance(original)) {
+            return original;
+        }
+
+        // clear tint list to make sure can set 87% black after enlarge
+        original.setTintList(null);
+
+        // enlarge icon size
+        final Bitmap bitmap = Utils.createBitmap(original,
+                iconSize /*width*/,
+                iconSize /*height*/);
+        Drawable newIcon = new BitmapDrawable(null /*resource*/, bitmap);
+
+        // config color for 87% black after enlarge
+        newIcon.setTintList(Utils.getColorAttr(mContext, android.R.attr.textColorPrimary));
+
+        return newIcon;
+    }
+
+    private void refreshFrequency() {
+        if (mWifiInfo == null) {
+            mFrequencyPref.setVisible(false);
+            return;
+        }
+
+        final int frequency = mWifiInfo.getFrequency();
+        String band = null;
+        if (frequency >= AccessPoint.LOWER_FREQ_24GHZ
+                && frequency < AccessPoint.HIGHER_FREQ_24GHZ) {
+            band = mContext.getResources().getString(R.string.wifi_band_24ghz);
+        } else if (frequency >= AccessPoint.LOWER_FREQ_5GHZ
+                && frequency < AccessPoint.HIGHER_FREQ_5GHZ) {
+            band = mContext.getResources().getString(R.string.wifi_band_5ghz);
+        } else {
+            Log.e(TAG, "Unexpected frequency " + frequency);
+            // Connecting state is unstable, make it disappeared if unexpected
+            if (mConnectingState == STATE_CONNECTING) {
+                mFrequencyPref.setVisible(false);
+            }
+            return;
+        }
+        mFrequencyPref.setSummary(band);
+        mFrequencyPref.setVisible(true);
+    }
+
+    private void refreshTxSpeed() {
+        if (mWifiInfo == null) {
+            mTxLinkSpeedPref.setVisible(false);
+            return;
+        }
+
+        int txLinkSpeedMbps = mWifiInfo.getTxLinkSpeedMbps();
+        mTxLinkSpeedPref.setVisible(txLinkSpeedMbps >= 0);
+        mTxLinkSpeedPref.setSummary(mContext.getString(
+                R.string.tx_link_speed, mWifiInfo.getTxLinkSpeedMbps()));
+    }
+
+    private void refreshRxSpeed() {
+        if (mWifiInfo == null) {
+            mRxLinkSpeedPref.setVisible(false);
+            return;
+        }
+
+        int rxLinkSpeedMbps = mWifiInfo.getRxLinkSpeedMbps();
+        mRxLinkSpeedPref.setVisible(rxLinkSpeedMbps >= 0);
+        mRxLinkSpeedPref.setSummary(mContext.getString(
+                R.string.rx_link_speed, mWifiInfo.getRxLinkSpeedMbps()));
+    }
+
+    private void refreshSsid() {
+        if (mAccessPoint.isPasspoint() || mAccessPoint.isOsuProvider()) {
+            mSsidPref.setVisible(true);
+            mSsidPref.setSummary(mAccessPoint.getSsidStr());
+        } else {
+            mSsidPref.setVisible(false);
+        }
+    }
+
+    private void refreshMacAddress() {
+        String macAddress = getMacAddress();
+        if (macAddress == null) {
+            mMacAddressPref.setVisible(false);
+            return;
+        }
+
+        mMacAddressPref.setVisible(true);
+        if (macAddress.equals(WifiInfo.DEFAULT_MAC_ADDRESS)) {
+            mMacAddressPref.setSummary(R.string.device_info_not_available);
+        } else {
+            mMacAddressPref.setSummary(macAddress);
+        }
+
+        // MAC Address Pref Title
+        refreshMacTitle();
+    }
+
+    private String getMacAddress() {
+        if (mWifiInfo != null) {
+            // get MAC address from connected network information
+            return mWifiInfo.getMacAddress();
+        }
+
+        // return randomized MAC address
+        if (mWifiConfig != null && mWifiConfig.macRandomizationSetting
+                == WifiConfiguration.RANDOMIZATION_PERSISTENT) {
+            return mWifiConfig.getRandomizedMacAddress().toString();
+        }
+
+        // return device MAC address
+        final String[] macAddresses = mWifiManager.getFactoryMacAddresses();
+        if (macAddresses != null && macAddresses.length > 0) {
+            return macAddresses[0];
+        }
+
+        Log.e(TAG, "Can't get device MAC address!");
+        return null;
+    }
+
+    private void updatePreference(Preference pref, String detailText) {
+        if (!TextUtils.isEmpty(detailText)) {
+            pref.setSummary(detailText);
+            pref.setVisible(true);
+        } else {
+            pref.setVisible(false);
+        }
+    }
+
+    private void refreshButtons() {
+        // Ephemeral network won't be removed permanently, but be putted in blacklist.
+        mButtonsPref.setButton1Text(
+                mIsEphemeral ? R.string.wifi_disconnect_button_text : R.string.forget);
+
+        boolean canForgetNetwork = canForgetNetwork();
+        boolean canSignIntoNetwork = canSignIntoNetwork();
+        boolean canConnectNetwork = canConnectNetwork() && !isPasspointConfigurationR1Expired();
+        boolean canShareNetwork = canShareNetwork();
+
+        mButtonsPref.setButton1Visible(canForgetNetwork);
+        mButtonsPref.setButton2Visible(canSignIntoNetwork);
+        mButtonsPref.setButton3Visible(canConnectNetwork);
+        mButtonsPref.setButton4Visible(canShareNetwork);
+        mButtonsPref.setVisible(canForgetNetwork
+                || canSignIntoNetwork
+                || canConnectNetwork
+                || canShareNetwork);
+    }
+
+    private boolean canConnectNetwork() {
+        // Display connect button for disconnected AP even not in the range.
+        return !mAccessPoint.isActive();
+    }
+
+    private boolean isPasspointConfigurationR1Expired() {
+        return mIsPasspointConfigurationR1 && mIsExpired;
+    }
+
+    private void refreshIpLayerInfo() {
+        // Hide IP layer info if not a connected network.
+        if (!mAccessPoint.isActive() || mNetwork == null || mLinkProperties == null) {
+            mIpAddressPref.setVisible(false);
+            mSubnetPref.setVisible(false);
+            mGatewayPref.setVisible(false);
+            mDnsPref.setVisible(false);
+            mIpv6Category.setVisible(false);
+            return;
+        }
+
+        // Find IPv4 and IPv6 addresses.
+        String ipv4Address = null;
+        String subnet = null;
+        StringJoiner ipv6Addresses = new StringJoiner("\n");
+
+        for (LinkAddress addr : mLinkProperties.getLinkAddresses()) {
+            if (addr.getAddress() instanceof Inet4Address) {
+                ipv4Address = addr.getAddress().getHostAddress();
+                subnet = ipv4PrefixLengthToSubnetMask(addr.getPrefixLength());
+            } else if (addr.getAddress() instanceof Inet6Address) {
+                ipv6Addresses.add(addr.getAddress().getHostAddress());
+            }
+        }
+
+        // Find IPv4 default gateway.
+        String gateway = null;
+        for (RouteInfo routeInfo : mLinkProperties.getRoutes()) {
+            if (routeInfo.isIPv4Default() && routeInfo.hasGateway()) {
+                gateway = routeInfo.getGateway().getHostAddress();
+                break;
+            }
+        }
+
+        // Find all (IPv4 and IPv6) DNS addresses.
+        String dnsServers = mLinkProperties.getDnsServers().stream()
+                .map(InetAddress::getHostAddress)
+                .collect(Collectors.joining("\n"));
+
+        // Update UI.
+        updatePreference(mIpAddressPref, ipv4Address);
+        updatePreference(mSubnetPref, subnet);
+        updatePreference(mGatewayPref, gateway);
+        updatePreference(mDnsPref, dnsServers);
+
+        if (ipv6Addresses.length() > 0) {
+            mIpv6AddressPref.setSummary(
+                    BidiFormatter.getInstance().unicodeWrap(ipv6Addresses.toString()));
+            mIpv6Category.setVisible(true);
+        } else {
+            mIpv6Category.setVisible(false);
+        }
+    }
+
+    private static String ipv4PrefixLengthToSubnetMask(int prefixLength) {
+        try {
+            InetAddress all = InetAddress.getByAddress(
+                    new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255});
+            return NetworkUtils.getNetworkPart(all, prefixLength).getHostAddress();
+        } catch (UnknownHostException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Returns whether the network represented by this preference can be forgotten.
+     */
+    private boolean canForgetNetwork() {
+        return (mWifiInfo != null && mWifiInfo.isEphemeral()) || canModifyNetwork()
+                || mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig();
+    }
+
+    /**
+     * Returns whether the network represented by this preference can be modified.
+     */
+    public boolean canModifyNetwork() {
+        return mWifiConfig != null && !WifiUtils.isNetworkLockedDown(mContext, mWifiConfig);
+    }
+
+    /**
+     * Returns whether the user can sign into the network represented by this preference.
+     */
+    private boolean canSignIntoNetwork() {
+        return mAccessPoint.isActive() && WifiUtils.canSignIntoNetwork(mNetworkCapabilities);
+    }
+
+    /**
+     * Returns whether the user can share the network represented by this preference with QR code.
+     */
+    private boolean canShareNetwork() {
+        return mAccessPoint.getConfig() != null
+                && WifiDppUtils.isSupportConfiguratorQrCodeGenerator(mContext, mAccessPoint);
+    }
+
+    /**
+     * Forgets the wifi network associated with this preference.
+     */
+    private void forgetNetwork() {
+        if (mWifiInfo != null && mWifiInfo.isEphemeral()) {
+            mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());
+        } else if (mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig()) {
+            // Post a dialog to confirm if user really want to forget the passpoint network.
+            showConfirmForgetDialog();
+            return;
+        } else if (mWifiConfig != null) {
+            mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
+        }
+
+        mMetricsFeatureProvider.action(
+                mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
+        mFragment.getActivity().finish();
+    }
+
+    @VisibleForTesting
+    protected void showConfirmForgetDialog() {
+        final AlertDialog dialog = new AlertDialog.Builder(mContext)
+                .setPositiveButton(R.string.forget, ((dialog1, which) -> {
+                    try {
+                        mWifiManager.removePasspointConfiguration(mAccessPoint.getPasspointFqdn());
+                    } catch (RuntimeException e) {
+                        Log.e(TAG, "Failed to remove Passpoint configuration for "
+                                + mAccessPoint.getPasspointFqdn());
+                    }
+                    mMetricsFeatureProvider.action(
+                            mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
+                    mFragment.getActivity().finish();
+                }))
+                .setNegativeButton(R.string.cancel, null /* listener */)
+                .setTitle(R.string.wifi_forget_dialog_title)
+                .setMessage(R.string.forget_passpoint_dialog_message)
+                .create();
+        dialog.show();
+    }
+
+    /**
+     * Show QR code to share the network represented by this preference.
+     */
+    private void launchWifiDppConfiguratorActivity() {
+        final Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntentOrNull(mContext,
+                mWifiManager, mAccessPoint);
+
+        if (intent == null) {
+            Log.e(TAG, "Launch Wi-Fi DPP QR code generator with a wrong Wi-Fi network!");
+        } else {
+            mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+                    SettingsEnums.ACTION_SETTINGS_SHARE_WIFI_QR_CODE,
+                    SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR,
+                    /* key */ null,
+                    /* value */ Integer.MIN_VALUE);
+
+            mContext.startActivity(intent);
+        }
+    }
+
+    /**
+     * Share the wifi network with QR code.
+     */
+    private void shareNetwork() {
+        WifiDppUtils.showLockScreen(mContext, () -> launchWifiDppConfiguratorActivity());
+    }
+
+    /**
+     * Sign in to the captive portal found on this wifi network associated with this preference.
+     */
+    private void signIntoNetwork() {
+        mMetricsFeatureProvider.action(
+                mFragment.getActivity(), SettingsEnums.ACTION_WIFI_SIGNIN);
+        mConnectivityManager.startCaptivePortalApp(mNetwork);
+    }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        if (dialog.getController() != null) {
+            mWifiManager.save(dialog.getController().getConfig(), new WifiManager.ActionListener() {
+                @Override
+                public void onSuccess() {
+                }
+
+                @Override
+                public void onFailure(int reason) {
+                    Activity activity = mFragment.getActivity();
+                    if (activity != null) {
+                        Toast.makeText(activity,
+                                R.string.wifi_failed_save_message,
+                                Toast.LENGTH_SHORT).show();
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * Wrapper for testing compatibility.
+     */
+    @VisibleForTesting
+    static class IconInjector {
+        private final Context mContext;
+
+        IconInjector(Context context) {
+            mContext = context;
+        }
+
+        public Drawable getIcon(int level) {
+            return mContext.getDrawable(Utils.getWifiIconResource(level)).mutate();
+        }
+    }
+
+    private boolean usingDataUsageHeader(Context context) {
+        return FeatureFlagUtils.isEnabled(context, FeatureFlags.WIFI_DETAILS_DATAUSAGE_HEADER);
+    }
+
+    @VisibleForTesting
+    void connectNetwork() {
+        final Activity activity = mFragment.getActivity();
+        // error handling, connected/saved network should have mWifiConfig.
+        if (mWifiConfig == null) {
+            Toast.makeText(activity,
+                    R.string.wifi_failed_connect_message,
+                    Toast.LENGTH_SHORT).show();
+            return;
+        }
+
+        // init state before connect
+        mConnectingState = STATE_NONE;
+
+        if (mWifiManager.isWifiEnabled()) {
+            updateConnectingState(STATE_CONNECTING);
+        } else {
+            // Enable Wi-Fi automatically to connect AP
+            updateConnectingState(STATE_ENABLE_WIFI);
+        }
+    }
+
+    private void updateConnectingState(int state) {
+        final Activity activity = mFragment.getActivity();
+        Log.d(TAG, "updateConnectingState from " + mConnectingState + " to " + state);
+        switch (mConnectingState) {
+            case STATE_NONE:
+            case STATE_ENABLE_WIFI:
+                if (state == STATE_ENABLE_WIFI) {
+                    Log.d(TAG, "Turn on Wi-Fi automatically!");
+                    updateConnectedButton(STATE_ENABLE_WIFI);
+                    Toast.makeText(activity,
+                            R.string.wifi_turned_on_message,
+                            Toast.LENGTH_SHORT).show();
+                    mWifiManager.setWifiEnabled(true);
+                    // start timer for error handling
+                    startTimer();
+                } else if (state == STATE_CONNECTING) {
+                    Log.d(TAG, "connecting...");
+                    updateConnectedButton(STATE_CONNECTING);
+                    if (mAccessPoint.isPasspoint()) {
+                        mWifiManager.connect(mWifiConfig, mConnectListener);
+                    } else {
+                        mWifiManager.connect(mWifiConfig.networkId, mConnectListener);
+                    }
+                    // start timer for error handling since framework didn't call back if failed
+                    startTimer();
+                } else if (state == STATE_ENABLE_WIFI_FAILED) {
+                    Log.e(TAG, "Wi-Fi failed to enable network!");
+                    stopTimer();
+                    // reset state
+                    state = STATE_NONE;
+                    Toast.makeText(activity,
+                            R.string.wifi_failed_connect_message,
+                            Toast.LENGTH_SHORT).show();
+                    updateConnectedButton(STATE_ENABLE_WIFI_FAILED);
+                }
+                // Do not break here for disconnected event.
+            case STATE_CONNECTED:
+                if (state == STATE_DISCONNECTED) {
+                    Log.d(TAG, "disconnected");
+                    // reset state
+                    state = STATE_NONE;
+                    updateConnectedButton(STATE_DISCONNECTED);
+                    refreshPage();
+                    // clear for getting MAC Address from saved configuration
+                    mWifiInfo = null;
+                }
+                break;
+            case STATE_CONNECTING:
+                if (state == STATE_CONNECTED) {
+                    Log.d(TAG, "connected");
+                    stopTimer();
+                    updateConnectedButton(STATE_CONNECTED);
+                    Toast.makeText(activity,
+                            mContext.getString(R.string.wifi_connected_to_message,
+                                    mAccessPoint.getTitle()),
+                            Toast.LENGTH_SHORT).show();
+
+                    refreshPage();
+                } else if (state == STATE_NOT_IN_RANGE) {
+                    Log.d(TAG, "AP not in range");
+                    stopTimer();
+                    // reset state
+                    state = STATE_NONE;
+                    Toast.makeText(activity,
+                            R.string.wifi_not_in_range_message,
+                            Toast.LENGTH_SHORT).show();
+                    updateConnectedButton(STATE_NOT_IN_RANGE);
+                } else if (state == STATE_FAILED) {
+                    Log.d(TAG, "failed");
+                    stopTimer();
+                    // reset state
+                    state = STATE_NONE;
+                    Toast.makeText(activity,
+                            R.string.wifi_failed_connect_message,
+                            Toast.LENGTH_SHORT).show();
+                    updateConnectedButton(STATE_FAILED);
+                }
+                break;
+            default:
+                Log.e(TAG, "Invalid state : " + mConnectingState);
+                // don't update invalid state
+                return;
+        }
+
+        mConnectingState = state;
+    }
+
+    private void updateConnectedButton(int state) {
+        switch (state) {
+            case STATE_ENABLE_WIFI:
+            case STATE_CONNECTING:
+                mButtonsPref.setButton3Text(R.string.wifi_connecting)
+                        .setButton3Enabled(false);
+                break;
+            case STATE_CONNECTED:
+                // init button state and set as invisible
+                mButtonsPref.setButton3Text(R.string.wifi_connect)
+                        .setButton3Icon(R.drawable.ic_settings_wireless)
+                        .setButton3Enabled(true)
+                        .setButton3Visible(false);
+                break;
+            case STATE_DISCONNECTED:
+            case STATE_NOT_IN_RANGE:
+            case STATE_FAILED:
+            case STATE_ENABLE_WIFI_FAILED:
+                if (isPasspointConfigurationR1Expired()) {
+                    // Hide Connect button.
+                    mButtonsPref.setButton3Visible(false);
+                } else {
+                    mButtonsPref.setButton3Text(R.string.wifi_connect)
+                            .setButton3Icon(R.drawable.ic_settings_wireless)
+                            .setButton3Enabled(true)
+                            .setButton3Visible(true);
+                }
+                break;
+            default:
+                Log.e(TAG, "Invalid connect button state : " + state);
+                break;
+        }
+    }
+
+    private void startTimer() {
+        if (sTimer != null) {
+            stopTimer();
+        }
+
+        sTimer = new CountDownTimer(TIMEOUT, TIMEOUT + 1) {
+            @Override
+            public void onTick(long millisUntilFinished) {
+                // Do nothing
+            }
+            @Override
+            public void onFinish() {
+                if (mFragment == null || mFragment.getActivity() == null) {
+                    Log.d(TAG, "Ignore timeout since activity not exist!");
+                    return;
+                }
+                Log.e(TAG, "Timeout for state:" + mConnectingState);
+                if (mConnectingState == STATE_ENABLE_WIFI) {
+                    updateConnectingState(STATE_ENABLE_WIFI_FAILED);
+                } else if (mConnectingState == STATE_CONNECTING) {
+                    updateAccessPointFromScannedList();
+                    if (mIsOutOfRange) {
+                        updateConnectingState(STATE_NOT_IN_RANGE);
+                    } else {
+                        updateConnectingState(STATE_FAILED);
+                    }
+                }
+            }
+        };
+        sTimer.start();
+    }
+
+    private void stopTimer() {
+        if (sTimer == null) return;
+
+        sTimer.cancel();
+        sTimer = null;
+    }
+
+    private void refreshMacTitle() {
+        if (mWifiConfig == null) {
+            return;
+        }
+
+        // For saved Passpoint network, framework doesn't have the field to keep the MAC choice
+        // persistently, so Passpoint network will always use the default value so far, which is
+        // randomized MAC address, so don't need to modify title.
+        if (mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig()) {
+            return;
+        }
+
+        mMacAddressPref.setTitle(
+                (mWifiConfig.macRandomizationSetting
+                        == WifiConfiguration.RANDOMIZATION_PERSISTENT)
+                        ? R.string.wifi_advanced_randomized_mac_address_title
+                        : R.string.wifi_advanced_device_mac_address_title);
+
+    }
+}
diff --git a/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
new file mode 100644
index 0000000..99967dc
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
@@ -0,0 +1,108 @@
+/*
+ * 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.details2;
+
+import android.app.backup.BackupManager;
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.DropDownPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.wifi.WifiDialog;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+/**
+ * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
+ */
+public class WifiMeteredPreferenceController2 extends BasePreferenceController implements
+        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
+
+    private static final String KEY_WIFI_METERED = "metered";
+    private WifiConfiguration mWifiConfiguration;
+    private WifiManager mWifiManager;
+    private Preference mPreference;
+
+    public WifiMeteredPreferenceController2(Context context, WifiConfiguration wifiConfiguration) {
+        super(context, KEY_WIFI_METERED);
+        mWifiConfiguration = wifiConfiguration;
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final DropDownPreference dropDownPreference = (DropDownPreference) preference;
+        final int meteredOverride = getMeteredOverride();
+        dropDownPreference.setValue(Integer.toString(meteredOverride));
+        updateSummary(dropDownPreference, meteredOverride);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (mWifiConfiguration != null) {
+            mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue);
+        }
+        mWifiManager.updateNetwork(mWifiConfiguration);
+        // Stage the backup of the SettingsProvider package which backs this up
+        BackupManager.dataChanged("com.android.providers.settings");
+        updateSummary((DropDownPreference) preference, getMeteredOverride());
+        return true;
+    }
+
+    @VisibleForTesting
+    int getMeteredOverride() {
+        if (mWifiConfiguration != null) {
+            // Wrap the meteredOverride since robolectric cannot recognize it
+            return mWifiConfiguration.meteredOverride;
+        }
+        return WifiConfiguration.METERED_OVERRIDE_NONE;
+    }
+
+    private void updateSummary(DropDownPreference preference, int meteredOverride) {
+        preference.setSummary(preference.getEntries()[meteredOverride]);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        if (dialog.getController() != null) {
+            final WifiConfiguration newConfig = dialog.getController().getConfig();
+            if (newConfig == null || mWifiConfiguration == null) {
+                return;
+            }
+
+            if (newConfig.meteredOverride != mWifiConfiguration.meteredOverride) {
+                mWifiConfiguration = newConfig;
+                onPreferenceChange(mPreference, String.valueOf(newConfig.meteredOverride));
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
new file mode 100644
index 0000000..5eb4b28
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -0,0 +1,167 @@
+/*
+ * 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.details2;
+
+import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.wifi.WifiConfigUiBase;
+import com.android.settings.wifi.WifiDialog;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.wifi.AccessPoint;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Detail page for the currently connected wifi network.
+ *
+ * <p>The AccessPoint should be saved to the intent Extras when launching this class via
+ * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page.
+ */
+public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
+        WifiDialog.WifiDialogListener {
+
+    private static final String TAG = "WifiNetworkDetailsFrg2";
+
+    private AccessPoint mAccessPoint;
+    private WifiDetailPreferenceController2 mWifiDetailPreferenceController2;
+    private List<WifiDialog.WifiDialogListener> mWifiDialogListeners = new ArrayList<>();
+
+    @Override
+    public void onAttach(Context context) {
+        mAccessPoint = new AccessPoint(context, getArguments());
+        super.onAttach(context);
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.WIFI_NETWORK_DETAILS;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.wifi_network_details_fragment;
+    }
+
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        if (dialogId == WIFI_DIALOG_ID) {
+            return SettingsEnums.DIALOG_WIFI_AP_EDIT;
+        }
+        return 0;
+    }
+
+    @Override
+    public Dialog onCreateDialog(int dialogId) {
+        if (getActivity() == null || mWifiDetailPreferenceController2 == null
+                || mAccessPoint == null) {
+            return null;
+        }
+        return WifiDialog.createModal(getActivity(), this, mAccessPoint,
+                WifiConfigUiBase.MODE_MODIFY);
+    }
+
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify);
+        item.setIcon(com.android.internal.R.drawable.ic_mode_edit);
+        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+        super.onCreateOptionsMenu(menu, inflater);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem menuItem) {
+        switch (menuItem.getItemId()) {
+            case Menu.FIRST:
+                if (!mWifiDetailPreferenceController2.canModifyNetwork()) {
+                    RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
+                            RestrictedLockUtilsInternal.getDeviceOwner(getContext()));
+                } else {
+                    showDialog(WIFI_DIALOG_ID);
+                }
+                return true;
+            default:
+                return super.onOptionsItemSelected(menuItem);
+        }
+    }
+
+    @Override
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
+        final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
+
+        mWifiDetailPreferenceController2 = WifiDetailPreferenceController2.newInstance(
+                mAccessPoint,
+                cm,
+                context,
+                this,
+                new Handler(Looper.getMainLooper()),  // UI thread.
+                getSettingsLifecycle(),
+                context.getSystemService(WifiManager.class),
+                mMetricsFeatureProvider);
+
+        controllers.add(mWifiDetailPreferenceController2);
+        controllers.add(new AddDevicePreferenceController2(context).init(mAccessPoint));
+
+        final WifiMeteredPreferenceController2 meteredPreferenceController2 =
+                new WifiMeteredPreferenceController2(context, mAccessPoint.getConfig());
+        controllers.add(meteredPreferenceController2);
+
+        final WifiPrivacyPreferenceController2 privacyController2 =
+                new WifiPrivacyPreferenceController2(context);
+        privacyController2.setWifiConfiguration(mAccessPoint.getConfig());
+        privacyController2.setIsEphemeral(mAccessPoint.isEphemeral());
+        privacyController2.setIsPasspoint(
+                mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
+        controllers.add(privacyController2);
+
+        // Sets callback listener for wifi dialog.
+        mWifiDialogListeners.add(mWifiDetailPreferenceController2);
+        mWifiDialogListeners.add(privacyController2);
+        mWifiDialogListeners.add(meteredPreferenceController2);
+
+        return controllers;
+    }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        for (WifiDialog.WifiDialogListener listener : mWifiDialogListeners) {
+            listener.onSubmit(dialog);
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
new file mode 100644
index 0000000..d85b607
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
@@ -0,0 +1,162 @@
+/*
+ * 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.details2;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.DropDownPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.wifi.WifiDialog;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+/**
+ * {@link AbstractPreferenceController} that controls whether the wifi network is mac randomized
+ * or not
+ */
+public class WifiPrivacyPreferenceController2 extends BasePreferenceController implements
+        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
+
+    private static final String KEY_WIFI_PRIVACY = "privacy";
+    private WifiConfiguration mWifiConfiguration;
+    private WifiManager mWifiManager;
+    private boolean mIsEphemeral = false;
+    private boolean mIsPasspoint = false;
+    private Preference mPreference;
+
+    public WifiPrivacyPreferenceController2(Context context) {
+        super(context, KEY_WIFI_PRIVACY);
+        mWifiConfiguration = null;
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    public void setWifiConfiguration(WifiConfiguration wifiConfiguration) {
+        mWifiConfiguration = wifiConfiguration;
+    }
+
+    public void setIsEphemeral(boolean isEphemeral) {
+        mIsEphemeral = isEphemeral;
+    }
+
+    public void setIsPasspoint(boolean isPasspoint) {
+        mIsPasspoint = isPasspoint;
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mWifiManager.isConnectedMacRandomizationSupported()
+                ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final DropDownPreference dropDownPreference = (DropDownPreference) preference;
+        final int randomizationLevel = getRandomizationValue();
+        dropDownPreference.setValue(Integer.toString(randomizationLevel));
+        updateSummary(dropDownPreference, randomizationLevel);
+
+        // Makes preference not selectable, when this is a ephemeral network.
+        if (mIsEphemeral || mIsPasspoint) {
+            preference.setSelectable(false);
+            dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (mWifiConfiguration != null) {
+            mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
+            mWifiManager.updateNetwork(mWifiConfiguration);
+
+            // To activate changing, we need to reconnect network. WiFi will auto connect to
+            // current network after disconnect(). Only needed when this is connected network.
+            final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+            if (wifiInfo != null && wifiInfo.getNetworkId() == mWifiConfiguration.networkId) {
+                mWifiManager.disconnect();
+            }
+        }
+        updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
+        return true;
+    }
+
+    @VisibleForTesting
+    int getRandomizationValue() {
+        if (mWifiConfiguration != null) {
+            return mWifiConfiguration.macRandomizationSetting;
+        }
+        return WifiConfiguration.RANDOMIZATION_PERSISTENT;
+    }
+
+    private static final int PREF_RANDOMIZATION_PERSISTENT = 0;
+    private static final int PREF_RANDOMIZATION_NONE = 1;
+
+    /**
+     * Returns preference index value.
+     *
+     * @param macRandomized is mac randomized value
+     * @return index value of preference
+     */
+    public static int translateMacRandomizedValueToPrefValue(int macRandomized) {
+        return (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT)
+            ? PREF_RANDOMIZATION_PERSISTENT : PREF_RANDOMIZATION_NONE;
+    }
+
+    /**
+     * Returns mac randomized value.
+     *
+     * @param prefMacRandomized is preference index value
+     * @return mac randomized value
+     */
+    public static int translatePrefValueToMacRandomizedValue(int prefMacRandomized) {
+        return (prefMacRandomized == PREF_RANDOMIZATION_PERSISTENT)
+            ? WifiConfiguration.RANDOMIZATION_PERSISTENT : WifiConfiguration.RANDOMIZATION_NONE;
+    }
+
+    private void updateSummary(DropDownPreference preference, int macRandomized) {
+        // Translates value here to set RANDOMIZATION_PERSISTENT as first item in UI for better UX.
+        final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
+        preference.setSummary(preference.getEntries()[prefMacRandomized]);
+    }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        if (dialog.getController() != null) {
+            final WifiConfiguration newConfig = dialog.getController().getConfig();
+            if (newConfig == null || mWifiConfiguration == null) {
+                return;
+            }
+
+            if (newConfig.macRandomizationSetting != mWifiConfiguration.macRandomizationSetting) {
+                mWifiConfiguration = newConfig;
+                onPreferenceChange(mPreference, String.valueOf(newConfig.macRandomizationSetting));
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 3975170..8544a53 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -152,7 +152,7 @@
                 } else {
                     updateSearchMenu(false);
                 }
-            } else if (WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION.equals(action)) {
+            } else if (WifiP2pManager.ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED.equals(action)) {
                 if (mWifiP2pManager != null) {
                     mWifiP2pManager.requestPersistentGroupInfo(mChannel, WifiP2pSettings.this);
                 }
@@ -339,7 +339,7 @@
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
         mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION);
+        mIntentFilter.addAction(WifiP2pManager.ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED);
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
 
         getActivity().registerReceiver(mReceiver, mIntentFilter);
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java
new file mode 100644
index 0000000..3b735fa
--- /dev/null
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java
@@ -0,0 +1,96 @@
+/*
+ * 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.savedaccesspoints2;
+
+import android.content.Context;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.wifitrackerlib.WifiEntry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Controller that manages a PreferenceGroup, which contains a list of saved access points.
+ */
+public class SavedAccessPointsPreferenceController2 extends BasePreferenceController implements
+        Preference.OnPreferenceClickListener {
+
+    private PreferenceGroup mPreferenceGroup;
+    private SavedAccessPointsWifiSettings2 mHost;
+    @VisibleForTesting
+    List<WifiEntry> mWifiEntries = new ArrayList<>();
+
+    public SavedAccessPointsPreferenceController2(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    /**
+     * Set {@link SavedAccessPointsWifiSettings2} for click callback action.
+     */
+    public SavedAccessPointsPreferenceController2 setHost(SavedAccessPointsWifiSettings2 host) {
+        mHost = host;
+        return this;
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mWifiEntries.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        mPreferenceGroup = screen.findPreference(getPreferenceKey());
+        updatePreference();
+        super.displayPreference(screen);
+    }
+
+    void displayPreference(PreferenceScreen screen, List<WifiEntry> wifiEntries) {
+        if (wifiEntries == null || wifiEntries.isEmpty()) {
+            mWifiEntries.clear();
+        } else {
+            mWifiEntries = wifiEntries;
+        }
+
+        displayPreference(screen);
+    }
+
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        if (mHost != null) {
+            mHost.showWifiPage(preference.getKey(), preference.getTitle());
+        }
+        return false;
+    }
+
+    private void updatePreference() {
+        mPreferenceGroup.removeAll();
+        for (WifiEntry wifiEntry : mWifiEntries) {
+            final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
+            preference.setKey(wifiEntry.getKey());
+            preference.setOnPreferenceClickListener(this);
+
+            mPreferenceGroup.addPreference(preference);
+        }
+    }
+}
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
new file mode 100644
index 0000000..e094051
--- /dev/null
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
@@ -0,0 +1,170 @@
+/*
+ * 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.savedaccesspoints2;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkScoreManager;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.Process;
+import android.os.SimpleClock;
+import android.os.SystemClock;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.wifi.WifiSettings;
+import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
+import com.android.wifitrackerlib.SavedNetworkTracker;
+
+import java.time.Clock;
+import java.time.ZoneOffset;
+
+/**
+ * UI to manage saved networks/access points.
+ */
+public class SavedAccessPointsWifiSettings2 extends DashboardFragment
+        implements SavedNetworkTracker.SavedNetworkTrackerCallback {
+
+    private static final String TAG = "SavedAccessPoints2";
+
+    // Key of a Bundle to save/restore the selected WifiEntry
+    static final String KEY_KEY = "key_key";
+
+    // Max age of tracked WifiEntries
+    private static final long MAX_SCAN_AGE_MILLIS = 15_000;
+    // Interval between initiating SavedNetworkTracker scans
+    private static final long SCAN_INTERVAL_MILLIS = 10_000;
+
+    private SavedNetworkTracker mSavedNetworkTracker;
+    private HandlerThread mWorkerThread;
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.WIFI_SAVED_ACCESS_POINTS;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.wifi_display_saved_access_points2;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        use(SavedAccessPointsPreferenceController2.class).setHost(this);
+        use(SubscribedAccessPointsPreferenceController2.class).setHost(this);
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final Context context = getContext();
+        mWorkerThread = new HandlerThread(TAG
+                + "{" + Integer.toHexString(System.identityHashCode(this)) + "}",
+                Process.THREAD_PRIORITY_BACKGROUND);
+        mWorkerThread.start();
+        final Clock elapsedRealtimeClock = new SimpleClock(ZoneOffset.UTC) {
+            @Override
+            public long millis() {
+                return SystemClock.elapsedRealtime();
+            }
+        };
+        mSavedNetworkTracker = new SavedNetworkTracker(getSettingsLifecycle(), context,
+                context.getSystemService(WifiManager.class),
+                context.getSystemService(ConnectivityManager.class),
+                context.getSystemService(NetworkScoreManager.class),
+                new Handler(Looper.getMainLooper()),
+                mWorkerThread.getThreadHandler(),
+                elapsedRealtimeClock,
+                MAX_SCAN_AGE_MILLIS,
+                SCAN_INTERVAL_MILLIS,
+                this);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        onSavedWifiEntriesChanged();
+        onSubscriptionWifiEntriesChanged();
+    }
+
+    @Override
+    public void onDestroy() {
+        mWorkerThread.quit();
+
+        super.onDestroy();
+    }
+
+    /**
+     * Shows {@link WifiNetworkDetailsFragment2} for assigned key of {@link WifiEntry}.
+     */
+    public void showWifiPage(@NonNull String key, CharSequence title) {
+        removeDialog(WifiSettings.WIFI_DIALOG_ID);
+
+        if (TextUtils.isEmpty(key)) {
+            Log.e(TAG, "Not able to show WifiEntry of an empty key");
+            return;
+        }
+
+        final Bundle bundle = new Bundle();
+        bundle.putString(KEY_KEY, key);
+
+        new SubSettingLauncher(getContext())
+                .setTitleText(title)
+                .setDestination(WifiNetworkDetailsFragment2.class.getName())
+                .setArguments(bundle)
+                .setSourceMetricsCategory(getMetricsCategory())
+                .launch();
+    }
+
+    @Override
+    public void onWifiStateChanged() {
+        // Do nothing.
+    }
+
+    @Override
+    public void onSavedWifiEntriesChanged() {
+        final PreferenceScreen screen = getPreferenceScreen();
+        use(SavedAccessPointsPreferenceController2.class)
+                .displayPreference(screen, mSavedNetworkTracker.getSavedWifiEntries());
+    }
+
+    @Override
+    public void onSubscriptionWifiEntriesChanged() {
+        final PreferenceScreen screen = getPreferenceScreen();
+        use(SubscribedAccessPointsPreferenceController2.class)
+                .displayPreference(screen, mSavedNetworkTracker.getSubscriptionWifiEntries());
+    }
+}
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SubscribedAccessPointsPreferenceController2.java b/src/com/android/settings/wifi/savedaccesspoints2/SubscribedAccessPointsPreferenceController2.java
new file mode 100644
index 0000000..8898458
--- /dev/null
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SubscribedAccessPointsPreferenceController2.java
@@ -0,0 +1,30 @@
+/*
+ * 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.savedaccesspoints2;
+
+import android.content.Context;
+
+/**
+ * Controller that manages a PreferenceGroup, which contains a list of subscribed access points.
+ */
+public class SubscribedAccessPointsPreferenceController2 extends
+        SavedAccessPointsPreferenceController2 {
+
+    public SubscribedAccessPointsPreferenceController2(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+}
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index e5c8de5..97ac9c5 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -38,6 +38,7 @@
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
@@ -54,8 +55,10 @@
 import com.android.settings.slices.SliceBuilderUtils;
 import com.android.settings.wifi.WifiDialogActivity;
 import com.android.settings.wifi.WifiSettings;
+import com.android.settings.wifi.WifiSettings2;
 import com.android.settings.wifi.WifiUtils;
 import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
 import com.android.settingslib.wifi.AccessPoint;
 
 import java.util.Arrays;
@@ -247,13 +250,24 @@
         accessPoint.saveWifiState(extras);
 
         if (accessPoint.isActive()) {
-            final Intent intent = new SubSettingLauncher(mContext)
-                    .setTitleRes(R.string.pref_title_network_details)
-                    .setDestination(WifiNetworkDetailsFragment.class.getName())
-                    .setArguments(extras)
-                    .setSourceMetricsCategory(SettingsEnums.WIFI)
-                    .toIntent();
-            return getActivityAction(requestCode, intent, icon, title);
+            Intent intent;
+            if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+                intent = new SubSettingLauncher(mContext)
+                        .setTitleRes(R.string.pref_title_network_details)
+                        .setDestination(WifiNetworkDetailsFragment2.class.getName())
+                        .setArguments(extras)
+                        .setSourceMetricsCategory(SettingsEnums.WIFI)
+                        .toIntent();
+                return getActivityAction(requestCode, intent, icon, title);
+            } else {
+                intent = new SubSettingLauncher(mContext)
+                        .setTitleRes(R.string.pref_title_network_details)
+                        .setDestination(WifiNetworkDetailsFragment.class.getName())
+                        .setArguments(extras)
+                        .setSourceMetricsCategory(SettingsEnums.WIFI)
+                        .toIntent();
+                return getActivityAction(requestCode, intent, icon, title);
+            }
         } else if (WifiUtils.getConnectingType(accessPoint) != WifiUtils.CONNECT_TYPE_OTHERS) {
             final Intent intent = new Intent(mContext, ConnectToWifiHandler.class)
                     .putExtra(WifiDialogActivity.KEY_ACCESS_POINT_STATE, extras);
@@ -317,11 +331,21 @@
     public Intent getIntent() {
         final String screenTitle = mContext.getText(R.string.wifi_settings).toString();
         final Uri contentUri = new Uri.Builder().appendPath(KEY_WIFI).build();
-        final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
+
+        Intent intent;
+        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_WIFITRACKER2)) {
+            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
+                WifiSettings2.class.getName(), KEY_WIFI, screenTitle,
+                SettingsEnums.DIALOG_WIFI_AP_EDIT)
+                .setClassName(mContext.getPackageName(), SubSettings.class.getName())
+                .setData(contentUri);
+        } else {
+            intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 WifiSettings.class.getName(), KEY_WIFI, screenTitle,
                 SettingsEnums.DIALOG_WIFI_AP_EDIT)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
+        }
 
         return intent;
     }
diff --git a/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor b/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
index 675108d..c29807b 100644
--- a/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
+++ b/tests/robotests/assets/grandfather_invalid_base_preference_controller_constructor
@@ -11,4 +11,5 @@
 com.android.settings.fuelgauge.batterysaver.BatterySaverButtonPreferenceController
 com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController
 com.android.settings.security.VisiblePatternProfilePreferenceController
-com.android.settings.wifi.details.WifiMeteredPreferenceController
\ No newline at end of file
+com.android.settings.wifi.details.WifiMeteredPreferenceController
+com.android.settings.wifi.details2.WifiMeteredPreferenceController2
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 6ef0018..df41b706 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -87,4 +87,6 @@
 com.android.settings.wifi.p2p.WifiP2pSettings
 com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings
 com.android.settings.wifi.WifiInfo
-com.android.settings.applications.specialaccess.notificationaccess.NotificationAccessDetails
\ No newline at end of file
+com.android.settings.applications.specialaccess.notificationaccess.NotificationAccessDetails
+com.android.settings.wifi.details2.WifiNetworkDetailsFragment2
+com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
index 4543114..80a3a11 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
@@ -28,7 +28,9 @@
 import android.app.Activity;
 import android.content.ClipboardManager;
 import android.content.Context;
+import android.content.pm.UserInfo;
 import android.os.Process;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 
@@ -120,7 +122,7 @@
     @Test
     public void handlePrefTreeClick_notAdminUser_isDemoUser_handleBuildNumberPref() {
         mShadowUserManager.setIsAdminUser(false);
-        mShadowUserManager.setIsDemoUser(true);
+        mShadowUserManager.addUser(UserHandle.myUserId(), "test", UserInfo.FLAG_DEMO);
 
         assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
     }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
index dcfba42..8fad638 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
@@ -81,13 +81,13 @@
     }
 
     @Test
-    public void updateBatteryTipAvailabilityCache_hasImportantTip_shouldReturnTrue() {
+    public void refreshBatteryTips_hasImportantTip_shouldReturnTrue() {
         final List<BatteryTip> tips = new ArrayList<>();
         tips.add(new LowBatteryTip(BatteryTip.StateType.INVISIBLE, false, ""));
         tips.add(new EarlyWarningTip(BatteryTip.StateType.NEW, false));
         ShadowBatteryTipLoader.setBatteryTips(tips);
 
-        BatteryFixSlice.updateBatteryTipAvailabilityCache(mContext);
+        BatteryFixSlice.refreshBatteryTips(mContext);
 
         assertThat(BatteryFixSlice.isBatteryTipAvailableFromCache(mContext)).isTrue();
     }
@@ -99,7 +99,7 @@
         tips.add(new EarlyWarningTip(BatteryTip.StateType.HANDLED, false));
         ShadowBatteryTipLoader.setBatteryTips(tips);
 
-        BatteryFixSlice.updateBatteryTipAvailabilityCache(mContext);
+        BatteryFixSlice.refreshBatteryTips(mContext);
         final Slice slice = mSlice.getSlice();
 
         assertThat(SliceMetadata.from(mContext, slice).isErrorSlice()).isTrue();
@@ -115,7 +115,7 @@
         tips.add(new EarlyWarningTip(BatteryTip.StateType.NEW, false));
         // Create fake cache data
         ShadowBatteryTipLoader.setBatteryTips(tips);
-        BatteryFixSlice.updateBatteryTipAvailabilityCache(mContext);
+        BatteryFixSlice.refreshBatteryTips(mContext);
         // Create fake background worker data
         BatteryFixSlice.BatteryTipWorker batteryTipWorker = mock(
                 BatteryFixSlice.BatteryTipWorker.class);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
index c4f1948..426983d 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
@@ -42,6 +42,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -130,6 +131,7 @@
     }
 
     @Test
+    @Ignore
     public void updateBottomNavigationViewV2_twoSubscription_shouldNotCrash() {
         mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
 
@@ -139,6 +141,7 @@
     }
 
     @Test
+    @Ignore
     public void switchFragment_switchBetweenTwoSubscriptions() {
         mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
 
@@ -154,6 +157,7 @@
     }
 
     @Test
+    @Ignore
     public void switchFragment_subscriptionsUpdate_notifyByIntent() {
         mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
 
@@ -181,6 +185,7 @@
     }
 
     @Test
+    @Ignore
     public void onSaveInstanceState_saveCurrentSubId() {
         mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
 
diff --git a/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
index d251480..f2a932e 100644
--- a/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
@@ -18,6 +18,8 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
 import android.provider.Settings;
 
 import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -81,7 +83,7 @@
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_DEMO_MODE, 1);
 
         // Indicate the user is a demo user.
-        mShadowUserManager.setIsDemoUser(true);
+        mShadowUserManager.addUser(UserHandle.myUserId(), "test", UserInfo.FLAG_DEMO);
 
         assertThat(mController.isAvailable()).isTrue();
     }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowThreadUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowThreadUtils.java
index 61ce13d..4f0767c 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowThreadUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowThreadUtils.java
@@ -16,16 +16,12 @@
 
 package com.android.settings.testutils.shadow;
 
-import android.util.Log;
-
 import com.android.settingslib.utils.ThreadUtils;
 
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
 import org.robolectric.annotation.Resetter;
 
-import java.util.concurrent.Callable;
-
 @Implements(ThreadUtils.class)
 public class ShadowThreadUtils {
 
@@ -43,15 +39,6 @@
     }
 
     @Implementation
-    protected static void postOnBackgroundThread(Callable callable) {
-        try {
-            callable.call();
-        } catch (Exception e) {
-            Log.e(TAG, e.getMessage(), e);
-        }
-    }
-
-    @Implementation
     protected static void postOnMainThread(Runnable runnable) {
         runnable.run();
     }
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
new file mode 100644
index 0000000..8d15224
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -0,0 +1,1905 @@
+/*
+ * 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.details2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.net.ConnectivityManager;
+import android.net.ConnectivityManager.NetworkCallback;
+import android.net.IpPrefix;
+import android.net.LinkAddress;
+import android.net.LinkProperties;
+import android.net.MacAddress;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.NetworkRequest;
+import android.net.RouteInfo;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+import android.provider.Settings;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
+import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
+import com.android.settings.widget.EntityHeaderController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.widget.ActionButtonsPreference;
+import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.wifi.AccessPoint;
+import com.android.settingslib.wifi.WifiTracker;
+import com.android.settingslib.wifi.WifiTrackerFactory;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InOrder;
+import org.mockito.Matchers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowToast;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowDevicePolicyManager.class, ShadowEntityHeaderController.class})
+public class WifiDetailPreferenceController2Test {
+
+    private static final int LEVEL = 1;
+    private static final int RSSI = -55;
+    private static final int TX_LINK_SPEED = 123;
+    private static final int RX_LINK_SPEED = 54;
+    private static final String SSID = "ssid";
+    private static final String MAC_ADDRESS = "01:23:45:67:89:ab";
+    private static final String RANDOMIZED_MAC_ADDRESS = "RANDOMIZED_MAC_ADDRESS";
+    private static final String FACTORY_MAC_ADDRESS = "FACTORY_MAC_ADDRESS";
+    private static final String SECURITY = "None";
+    private static final String FQDN = "fqdn";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PreferenceScreen mMockScreen;
+
+    @Mock
+    private AccessPoint mMockAccessPoint;
+    @Mock
+    private FragmentActivity mMockActivity;
+    @Mock
+    private ConnectivityManager mMockConnectivityManager;
+    @Mock
+    private Network mMockNetwork;
+    @Mock
+    private NetworkInfo mMockNetworkInfo;
+    @Mock
+    private WifiConfiguration mMockWifiConfig;
+    @Mock
+    private WifiInfo mMockWifiInfo;
+    @Mock
+    private WifiNetworkDetailsFragment2 mMockFragment;
+    @Mock
+    private WifiManager mMockWifiManager;
+    @Mock
+    private WifiTracker mMockWifiTracker;
+    @Mock
+    private MetricsFeatureProvider mMockMetricsFeatureProvider;
+    @Mock
+    private WifiDetailPreferenceController2.IconInjector mMockIconInjector;
+    @Mock
+    private MacAddress mMockMacAddress;
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private EntityHeaderController mMockHeaderController;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private LayoutPreference mMockHeaderLayoutPreference;
+    @Mock
+    private ImageView mMockHeaderIcon;
+
+    @Mock
+    private ActionButtonsPreference mMockButtonsPref;
+    @Mock
+    private Preference mMockSignalStrengthPref;
+    @Mock
+    private Preference mMockTxLinkSpeedPref;
+    @Mock
+    private Preference mMockRxLinkSpeedPref;
+    @Mock
+    private Preference mMockFrequencyPref;
+    @Mock
+    private Preference mMockSecurityPref;
+    @Mock
+    private Preference mMockSsidPref;
+    @Mock
+    private Preference mMockMacAddressPref;
+    @Mock
+    private Preference mMockIpAddressPref;
+    @Mock
+    private Preference mMockGatewayPref;
+    @Mock
+    private Preference mMockSubnetPref;
+    @Mock
+    private Preference mMockDnsPref;
+    @Mock
+    private PreferenceCategory mMockIpv6Category;
+    @Mock
+    private Preference mMockIpv6AddressesPref;
+    @Mock
+    private PackageManager mMockPackageManager;
+
+    @Captor
+    private ArgumentCaptor<NetworkCallback> mCallbackCaptor;
+    @Captor
+    private ArgumentCaptor<View.OnClickListener> mForgetClickListener;
+
+    private Context mContext;
+    private Lifecycle mLifecycle;
+    private LifecycleOwner mLifecycleOwner;
+    private LinkProperties mLinkProperties;
+    private WifiDetailPreferenceController2 mController;
+
+    // This class exists so that these values can be made static final. They can't be static final
+    // members of the test class, because any attempt to call IpPrefix or RouteInfo constructors
+    // during static initialization of the test class results in NoSuchMethorError being thrown
+    // when the test is run.
+    private static class Constants {
+        static final int IPV4_PREFIXLEN = 25;
+        static final LinkAddress IPV4_ADDR;
+        static final Inet4Address IPV4_GATEWAY;
+        static final RouteInfo IPV4_DEFAULT;
+        static final RouteInfo IPV4_SUBNET;
+        static final LinkAddress IPV6_LINKLOCAL;
+        static final LinkAddress IPV6_GLOBAL1;
+        static final LinkAddress IPV6_GLOBAL2;
+        static final InetAddress IPV4_DNS1;
+        static final InetAddress IPV4_DNS2;
+        static final InetAddress IPV6_DNS;
+
+        private static LinkAddress ipv6LinkAddress(String addr) throws UnknownHostException {
+            return new LinkAddress(InetAddress.getByName(addr), 64);
+        }
+
+        private static LinkAddress ipv4LinkAddress(String addr, int prefixlen)
+                throws UnknownHostException {
+            return new LinkAddress(InetAddress.getByName(addr), prefixlen);
+        }
+
+        static {
+            try {
+                // We create our test constants in these roundabout ways because the robolectric
+                // shadows don't contain NetworkUtils.parseNumericAddress and other utility methods,
+                // so the easy ways to do things fail with NoSuchMethodError.
+                IPV4_ADDR = ipv4LinkAddress("192.0.2.2", IPV4_PREFIXLEN);
+                IPV4_GATEWAY = (Inet4Address) InetAddress.getByName("192.0.2.127");
+
+                final Inet4Address any4 = (Inet4Address) InetAddress.getByName("0.0.0.0");
+                IpPrefix subnet = new IpPrefix(IPV4_ADDR.getAddress(), IPV4_PREFIXLEN);
+                IPV4_SUBNET = new RouteInfo(subnet, any4);
+                IPV4_DEFAULT = new RouteInfo(new IpPrefix(any4, 0), IPV4_GATEWAY);
+
+                IPV6_LINKLOCAL = ipv6LinkAddress("fe80::211:25ff:fef8:7cb2%1");
+                IPV6_GLOBAL1 = ipv6LinkAddress("2001:db8:1::211:25ff:fef8:7cb2");
+                IPV6_GLOBAL2 = ipv6LinkAddress("2001:db8:1::3dfe:8902:f98f:739d");
+
+                IPV4_DNS1 = InetAddress.getByName("8.8.8.8");
+                IPV4_DNS2 = InetAddress.getByName("8.8.4.4");
+                IPV6_DNS = InetAddress.getByName("2001:4860:4860::64");
+            } catch (UnknownHostException e) {
+                throw new RuntimeException("Invalid hardcoded IP addresss: " + e);
+            }
+        }
+    }
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = spy(RuntimeEnvironment.application);
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
+
+        when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
+        when(mMockAccessPoint.getConfig()).thenReturn(mMockWifiConfig);
+        when(mMockAccessPoint.getLevel()).thenReturn(LEVEL);
+        when(mMockAccessPoint.getSecurityString(false)).thenReturn(SECURITY);
+        when(mMockAccessPoint.getSsidStr()).thenReturn(SSID);
+        when(mMockConnectivityManager.getNetworkInfo(any(Network.class)))
+                .thenReturn(mMockNetworkInfo);
+        doNothing().when(mMockConnectivityManager).registerNetworkCallback(
+                nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
+        mMockButtonsPref = createMock();
+        when(mMockButtonsPref.setButton1OnClickListener(mForgetClickListener.capture()))
+                .thenReturn(mMockButtonsPref);
+
+        when(mMockWifiInfo.getTxLinkSpeedMbps()).thenReturn(TX_LINK_SPEED);
+        when(mMockWifiInfo.getRxLinkSpeedMbps()).thenReturn(RX_LINK_SPEED);
+        when(mMockWifiInfo.getRssi()).thenReturn(RSSI);
+        when(mMockWifiInfo.getMacAddress()).thenReturn(MAC_ADDRESS);
+        when(mMockWifiManager.getConnectionInfo()).thenReturn(mMockWifiInfo);
+
+        when(mMockWifiManager.getCurrentNetwork()).thenReturn(mMockNetwork);
+        mLinkProperties = new LinkProperties();
+        when(mMockConnectivityManager.getLinkProperties(mMockNetwork)).thenReturn(mLinkProperties);
+
+        when(mMockFragment.getActivity()).thenReturn(mMockActivity);
+
+        ShadowEntityHeaderController.setUseMock(mMockHeaderController);
+        // builder pattern
+        when(mMockHeaderController.setRecyclerView(mMockFragment.getListView(), mLifecycle))
+                .thenReturn(mMockHeaderController);
+        when(mMockHeaderController.setSummary(anyString())).thenReturn(mMockHeaderController);
+        when(mMockIconInjector.getIcon(anyInt())).thenReturn(new ColorDrawable());
+
+        setupMockedPreferenceScreen();
+    }
+
+    private void setUpForConnectedNetwork() {
+        when(mMockAccessPoint.isActive()).thenReturn(true);
+        ArrayList list = new ArrayList<>();
+        list.add(mMockAccessPoint);
+        when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
+        WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
+        when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
+        when(mMockAccessPoint.isReachable()).thenReturn(true);
+
+        mController = newWifiDetailPreferenceController2();
+    }
+
+    private void setUpForDisconnectedNetwork() {
+        when(mMockAccessPoint.isActive()).thenReturn(false);
+        ArrayList list = new ArrayList<>();
+        list.add(mMockAccessPoint);
+        when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
+        WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
+        when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
+        when(mMockAccessPoint.isReachable()).thenReturn(true);
+
+        mController = newWifiDetailPreferenceController2();
+    }
+
+    private void setUpForNotInRangeNetwork() {
+        when(mMockAccessPoint.isActive()).thenReturn(false);
+        ArrayList list = new ArrayList<>();
+        list.add(mMockAccessPoint);
+        when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
+        WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
+        when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(false);
+        when(mMockAccessPoint.isReachable()).thenReturn(false);
+
+        mController = newWifiDetailPreferenceController2();
+    }
+
+    private WifiDetailPreferenceController2 newWifiDetailPreferenceController2() {
+        return new WifiDetailPreferenceController2(
+                mMockAccessPoint,
+                mMockConnectivityManager,
+                mContext,
+                mMockFragment,
+                null,  // Handler
+                mLifecycle,
+                mMockWifiManager,
+                mMockMetricsFeatureProvider,
+                mMockIconInjector);
+    }
+
+    private void setupMockedPreferenceScreen() {
+        when(mMockScreen.getPreferenceManager().getContext()).thenReturn(mContext);
+
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_HEADER))
+                .thenReturn(mMockHeaderLayoutPreference);
+        when(mMockHeaderLayoutPreference.findViewById(R.id.entity_header_icon))
+                .thenReturn(mMockHeaderIcon);
+
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_BUTTONS_PREF))
+                .thenReturn(mMockButtonsPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_SIGNAL_STRENGTH_PREF))
+                .thenReturn(mMockSignalStrengthPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_TX_LINK_SPEED))
+                .thenReturn(mMockTxLinkSpeedPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_RX_LINK_SPEED))
+                .thenReturn(mMockRxLinkSpeedPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_FREQUENCY_PREF))
+                .thenReturn(mMockFrequencyPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_SECURITY_PREF))
+                .thenReturn(mMockSecurityPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_SSID_PREF))
+                .thenReturn(mMockSsidPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_MAC_ADDRESS_PREF))
+                .thenReturn(mMockMacAddressPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_IP_ADDRESS_PREF))
+                .thenReturn(mMockIpAddressPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_GATEWAY_PREF))
+                .thenReturn(mMockGatewayPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_SUBNET_MASK_PREF))
+                .thenReturn(mMockSubnetPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_DNS_PREF))
+                .thenReturn(mMockDnsPref);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_IPV6_CATEGORY))
+                .thenReturn(mMockIpv6Category);
+        when(mMockScreen.findPreference(WifiDetailPreferenceController2.KEY_IPV6_ADDRESSES_PREF))
+                .thenReturn(mMockIpv6AddressesPref);
+    }
+
+    private void displayAndResume() {
+        mController.displayPreference(mMockScreen);
+        mController.onResume();
+    }
+
+    @Test
+    public void isAvailable_shouldAlwaysReturnTrue() {
+        setUpForConnectedNetwork();
+        mController.displayPreference(mMockScreen);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void securityPreference_stringShouldBeSet() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        verify(mMockSecurityPref).setSummary(SECURITY);
+    }
+
+    @Test
+    public void latestWifiInfo_shouldBeFetchedInDisplayPreferenceForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockWifiManager, times(1)).getConnectionInfo();
+    }
+
+    @Test
+    public void latestWifiInfo_shouldNotBeFetchedInDisplayPreferenceForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockWifiManager, never()).getConnectionInfo();
+    }
+
+    @Test
+    public void latestWifiInfo_shouldNotBeFetchedInDisplayPreferenceForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockWifiManager, never()).getConnectionInfo();
+    }
+
+    @Test
+    public void latestNetworkInfo_shouldBeFetchedInDisplayPreferenceForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
+    }
+
+    @Test
+    public void latestNetworkInfo_shouldNotBeFetchedInDisplayPreferenceForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, never()).getNetworkInfo(any(Network.class));
+    }
+
+    @Test
+    public void latestNetworkInfo_shouldNotBeFetchedInDisplayPreferenceForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, never()).getNetworkInfo(any(Network.class));
+    }
+
+    @Test
+    public void networkCallback_shouldBeRegisteredOnResume() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).registerNetworkCallback(
+                nullable(NetworkRequest.class), mCallbackCaptor.capture(), nullable(Handler.class));
+    }
+
+    @Test
+    public void networkCallback_shouldBeUnregisteredOnPause() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+        mController.onPause();
+
+        verify(mMockConnectivityManager, times(1))
+                .unregisterNetworkCallback(mCallbackCaptor.getValue());
+    }
+
+    @Test
+    public void entityHeader_shouldHaveIconSetForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        Drawable expectedIcon = mMockIconInjector.getIcon(LEVEL);
+
+        displayAndResume();
+
+        verify(mMockHeaderController).setIcon(expectedIcon);
+    }
+
+    @Test
+    public void entityHeader_shouldHaveIconSetForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        Drawable expectedIcon = mMockIconInjector.getIcon(LEVEL);
+
+        displayAndResume();
+
+        verify(mMockHeaderController).setIcon(expectedIcon);
+    }
+
+    @Test
+    public void entityHeader_shouldNotHaveIconSetForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockHeaderController, never()).setIcon(any(Drawable.class));
+    }
+
+    @Test
+    public void entityHeader_shouldHaveLabelSetToTitle() {
+        setUpForConnectedNetwork();
+        String label = "title";
+        when(mMockAccessPoint.getTitle()).thenReturn(label);
+
+        displayAndResume();
+
+        verify(mMockHeaderController).setLabel(label);
+    }
+
+    @Test
+    public void entityHeader_shouldHaveSummarySet() {
+        setUpForConnectedNetwork();
+        String summary = "summary";
+        when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
+                .thenReturn(summary);
+
+        displayAndResume();
+
+        verify(mMockHeaderController).setSummary(summary);
+    }
+
+    @Test
+    public void entityHeader_shouldConvertSavedAsDisconnected() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockAccessPoint, times(1)).getSettingsSummary(true /*convertSavedAsDisconnected*/);
+    }
+
+    @Test
+    public void signalStrengthPref_shouldHaveIconSetForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref).setIcon(any(Drawable.class));
+    }
+
+    @Test
+    public void signalStrengthPref_shouldHaveIconSetForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref).setIcon(any(Drawable.class));
+    }
+
+    @Test
+    public void signalStrengthPref_shouldNotHaveIconSetForOutOfRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref, never()).setIcon(any(Drawable.class));
+    }
+
+    @Test
+    public void signalStrengthPref_shouldHaveDetailTextSetForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        String expectedStrength =
+                mContext.getResources().getStringArray(R.array.wifi_signal)[LEVEL];
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref).setSummary(expectedStrength);
+    }
+
+    @Test
+    public void signalStrengthPref_shouldHaveDetailTextSetForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        String expectedStrength =
+                mContext.getResources().getStringArray(R.array.wifi_signal)[LEVEL];
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref).setSummary(expectedStrength);
+    }
+
+    @Test
+    public void signalStrengthPref_shouldNotHaveDetailTextSetForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockSignalStrengthPref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void linkSpeedPref_shouldNotShowIfNotSet() {
+        setUpForConnectedNetwork();
+        when(mMockWifiInfo.getTxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+
+        displayAndResume();
+
+        verify(mMockTxLinkSpeedPref).setVisible(false);
+    }
+
+    @Test
+    public void linkSpeedPref_shouldVisibleForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        String expectedLinkSpeed = mContext.getString(R.string.tx_link_speed, TX_LINK_SPEED);
+
+        displayAndResume();
+
+        verify(mMockTxLinkSpeedPref).setVisible(true);
+        verify(mMockTxLinkSpeedPref).setSummary(expectedLinkSpeed);
+    }
+
+    @Test
+    public void linkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockTxLinkSpeedPref).setVisible(false);
+        verify(mMockTxLinkSpeedPref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void linkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockTxLinkSpeedPref).setVisible(false);
+        verify(mMockTxLinkSpeedPref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void rxLinkSpeedPref_shouldNotShowIfNotSet() {
+        setUpForConnectedNetwork();
+        when(mMockWifiInfo.getRxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+
+        displayAndResume();
+
+        verify(mMockRxLinkSpeedPref).setVisible(false);
+    }
+
+    @Test
+    public void rxLinkSpeedPref_shouldVisibleForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        String expectedLinkSpeed = mContext.getString(R.string.rx_link_speed, RX_LINK_SPEED);
+
+        displayAndResume();
+
+        verify(mMockRxLinkSpeedPref).setVisible(true);
+        verify(mMockRxLinkSpeedPref).setSummary(expectedLinkSpeed);
+    }
+
+    @Test
+    public void rxLinkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockRxLinkSpeedPref).setVisible(false);
+        verify(mMockRxLinkSpeedPref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void rxLinkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        verify(mMockRxLinkSpeedPref).setVisible(false);
+        verify(mMockRxLinkSpeedPref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void ssidPref_shouldHaveDetailTextSetForPasspointR1() {
+        setUpForConnectedNetwork();
+        when(mMockAccessPoint.isPasspoint()).thenReturn(true);
+        when(mMockAccessPoint.isOsuProvider()).thenReturn(false);
+
+        displayAndResume();
+
+        verify(mMockSsidPref, times(1)).setSummary(SSID);
+        verify(mMockSsidPref, times(1)).setVisible(true);
+    }
+
+    @Test
+    public void ssidPref_shouldHaveDetailTextSetForPasspointR2() {
+        setUpForConnectedNetwork();
+        when(mMockAccessPoint.isPasspoint()).thenReturn(false);
+        when(mMockAccessPoint.isOsuProvider()).thenReturn(true);
+
+        displayAndResume();
+
+        verify(mMockSsidPref, times(1)).setSummary(SSID);
+        verify(mMockSsidPref, times(1)).setVisible(true);
+    }
+
+    @Test
+    public void ssidPref_shouldNotShowIfNotPasspoint() {
+        setUpForConnectedNetwork();
+        when(mMockAccessPoint.isPasspoint()).thenReturn(false);
+        when(mMockAccessPoint.isOsuProvider()).thenReturn(false);
+
+        displayAndResume();
+
+        verify(mMockSsidPref).setVisible(false);
+    }
+
+    @Test
+    public void macAddressPref_shouldVisibleForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockMacAddressPref).setVisible(true);
+        verify(mMockMacAddressPref).setSummary(MAC_ADDRESS);
+    }
+
+    @Test
+    public void macAddressPref_shouldVisibleAsRandomizedForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        mMockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_PERSISTENT;
+        when(mMockWifiConfig.getRandomizedMacAddress()).thenReturn(mMockMacAddress);
+        when(mMockMacAddress.toString()).thenReturn(RANDOMIZED_MAC_ADDRESS);
+
+        displayAndResume();
+
+        verify(mMockMacAddressPref).setVisible(true);
+        verify(mMockMacAddressPref).setSummary(RANDOMIZED_MAC_ADDRESS);
+    }
+
+    @Test
+    public void macAddressPref_shouldVisibleAsFactoryForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        mMockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
+        when(mMockWifiManager.getFactoryMacAddresses())
+                .thenReturn(new String[]{FACTORY_MAC_ADDRESS});
+
+        displayAndResume();
+
+        verify(mMockMacAddressPref).setVisible(true);
+        verify(mMockMacAddressPref).setSummary(FACTORY_MAC_ADDRESS);
+    }
+
+    @Test
+    public void ipAddressPref_shouldHaveDetailTextSetForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
+
+        displayAndResume();
+
+        verify(mMockIpAddressPref).setSummary(Constants.IPV4_ADDR.getAddress().getHostAddress());
+        verify(mMockIpAddressPref).setVisible(true);
+    }
+
+    @Test
+    public void ipAddressPref_shouldInvisibleForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockIpAddressPref).setVisible(false);
+    }
+
+    @Test
+    public void gatewayAndSubnet_shouldHaveDetailTextSetForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        mLinkProperties.addLinkAddress(Constants.IPV4_ADDR);
+        mLinkProperties.addRoute(Constants.IPV4_DEFAULT);
+        mLinkProperties.addRoute(Constants.IPV4_SUBNET);
+
+        displayAndResume();
+
+        verify(mMockSubnetPref).setSummary("255.255.255.128");
+        verify(mMockGatewayPref).setSummary("192.0.2.127");
+        verify(mMockSubnetPref).setVisible(true);
+    }
+
+    @Test
+    public void gatewayAndSubnet_shouldInvisibleSetForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockSubnetPref).setVisible(false);
+    }
+
+    @Test
+    public void dnsServersPref_shouldHaveDetailTextSetForConnectedNetwork()
+            throws UnknownHostException {
+        setUpForConnectedNetwork();
+        mLinkProperties.addDnsServer(InetAddress.getByAddress(new byte[] {8, 8, 4, 4}));
+        mLinkProperties.addDnsServer(InetAddress.getByAddress(new byte[] {8, 8, 8, 8}));
+        mLinkProperties.addDnsServer(Constants.IPV6_DNS);
+
+        displayAndResume();
+
+        verify(mMockDnsPref).setSummary(
+                "8.8.4.4\n" + "8.8.8.8\n" + Constants.IPV6_DNS.getHostAddress());
+        verify(mMockDnsPref).setVisible(true);
+    }
+
+    @Test
+    public void dnsServersPref_shouldInvisibleSetForDisconnectedNetwork()
+            throws UnknownHostException {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockDnsPref).setVisible(false);
+    }
+
+    @Test
+    public void noCurrentNetwork_shouldNotFinishActivityForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        when(mMockWifiManager.getCurrentNetwork()).thenReturn(null);
+
+        displayAndResume();
+
+        verify(mMockActivity, never()).finish();
+    }
+
+    @Test
+    public void noLinkProperties_allIpDetailsHidden() {
+        setUpForConnectedNetwork();
+        when(mMockConnectivityManager.getLinkProperties(mMockNetwork)).thenReturn(null);
+        reset(mMockIpv6Category, mMockIpAddressPref, mMockSubnetPref, mMockGatewayPref,
+                mMockDnsPref);
+
+        displayAndResume();
+
+        verify(mMockIpv6Category).setVisible(false);
+        verify(mMockIpAddressPref).setVisible(false);
+        verify(mMockSubnetPref).setVisible(false);
+        verify(mMockGatewayPref).setVisible(false);
+        verify(mMockDnsPref).setVisible(false);
+        verify(mMockIpv6Category, never()).setVisible(true);
+        verify(mMockIpAddressPref, never()).setVisible(true);
+        verify(mMockSubnetPref, never()).setVisible(true);
+        verify(mMockGatewayPref, never()).setVisible(true);
+        verify(mMockDnsPref, never()).setVisible(true);
+    }
+
+    @Test
+    public void disconnectedNetwork_allIpDetailsHidden() {
+        setUpForDisconnectedNetwork();
+        reset(mMockIpv6Category, mMockIpAddressPref, mMockSubnetPref, mMockGatewayPref,
+                mMockDnsPref);
+
+        displayAndResume();
+
+        verify(mMockIpv6Category).setVisible(false);
+        verify(mMockIpAddressPref).setVisible(false);
+        verify(mMockSubnetPref).setVisible(false);
+        verify(mMockGatewayPref).setVisible(false);
+        verify(mMockDnsPref).setVisible(false);
+        verify(mMockIpv6Category, never()).setVisible(true);
+        verify(mMockIpAddressPref, never()).setVisible(true);
+        verify(mMockSubnetPref, never()).setVisible(true);
+        verify(mMockGatewayPref, never()).setVisible(true);
+        verify(mMockDnsPref, never()).setVisible(true);
+    }
+
+    // Convenience method to convert a LinkAddress to a string without a prefix length.
+    private String asString(LinkAddress l) {
+        return l.getAddress().getHostAddress();
+    }
+
+    // Pretend that the NetworkCallback was triggered with a new copy of lp. We need to create a
+    // new copy because the code only updates if !mLinkProperties.equals(lp).
+    private void updateLinkProperties(LinkProperties lp) {
+        mCallbackCaptor.getValue().onLinkPropertiesChanged(mMockNetwork, new LinkProperties(lp));
+    }
+
+    private void updateNetworkCapabilities(NetworkCapabilities nc) {
+        mCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork, new NetworkCapabilities(nc));
+    }
+
+    private NetworkCapabilities makeNetworkCapabilities() {
+        NetworkCapabilities nc = new NetworkCapabilities();
+        nc.clearAll();
+        nc.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
+        return nc;
+    }
+
+    private void verifyDisplayedIpv6Addresses(InOrder inOrder, LinkAddress... addresses) {
+        String text = Arrays.stream(addresses)
+                .map(address -> asString(address))
+                .collect(Collectors.joining("\n"));
+        inOrder.verify(mMockIpv6AddressesPref).setSummary(text);
+    }
+
+    @Test
+    public void onLinkPropertiesChanged_updatesFields() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        InOrder inOrder = inOrder(mMockIpAddressPref, mMockGatewayPref, mMockSubnetPref,
+                mMockDnsPref, mMockIpv6Category, mMockIpv6AddressesPref);
+
+        LinkProperties lp = new LinkProperties();
+
+        lp.addLinkAddress(Constants.IPV6_LINKLOCAL);
+        updateLinkProperties(lp);
+        verifyDisplayedIpv6Addresses(inOrder, Constants.IPV6_LINKLOCAL);
+        inOrder.verify(mMockIpv6Category).setVisible(true);
+
+        lp.addRoute(Constants.IPV4_DEFAULT);
+        updateLinkProperties(lp);
+        inOrder.verify(mMockGatewayPref).setSummary(Constants.IPV4_GATEWAY.getHostAddress());
+        inOrder.verify(mMockGatewayPref).setVisible(true);
+
+        lp.addLinkAddress(Constants.IPV4_ADDR);
+        lp.addRoute(Constants.IPV4_SUBNET);
+        updateLinkProperties(lp);
+        inOrder.verify(mMockIpAddressPref).setSummary(asString(Constants.IPV4_ADDR));
+        inOrder.verify(mMockIpAddressPref).setVisible(true);
+        inOrder.verify(mMockSubnetPref).setSummary("255.255.255.128");
+        inOrder.verify(mMockSubnetPref).setVisible(true);
+
+        lp.addLinkAddress(Constants.IPV6_GLOBAL1);
+        lp.addLinkAddress(Constants.IPV6_GLOBAL2);
+        updateLinkProperties(lp);
+        verifyDisplayedIpv6Addresses(inOrder,
+                Constants.IPV6_LINKLOCAL,
+                Constants.IPV6_GLOBAL1,
+                Constants.IPV6_GLOBAL2);
+
+        lp.removeLinkAddress(Constants.IPV6_GLOBAL1);
+        updateLinkProperties(lp);
+        verifyDisplayedIpv6Addresses(inOrder,
+                Constants.IPV6_LINKLOCAL,
+                Constants.IPV6_GLOBAL2);
+
+        lp.addDnsServer(Constants.IPV6_DNS);
+        updateLinkProperties(lp);
+        inOrder.verify(mMockDnsPref).setSummary(Constants.IPV6_DNS.getHostAddress());
+        inOrder.verify(mMockDnsPref).setVisible(true);
+
+        lp.addDnsServer(Constants.IPV4_DNS1);
+        lp.addDnsServer(Constants.IPV4_DNS2);
+        updateLinkProperties(lp);
+        inOrder.verify(mMockDnsPref).setSummary(
+                Constants.IPV6_DNS.getHostAddress() + "\n"
+                        + Constants.IPV4_DNS1.getHostAddress() + "\n"
+                        + Constants.IPV4_DNS2.getHostAddress());
+        inOrder.verify(mMockDnsPref).setVisible(true);
+    }
+
+    @Test
+    public void onCapabilitiesChanged_callsRefreshIfNecessary() {
+        setUpForConnectedNetwork();
+        NetworkCapabilities nc = makeNetworkCapabilities();
+        when(mMockConnectivityManager.getNetworkCapabilities(mMockNetwork))
+                .thenReturn(new NetworkCapabilities(nc));
+
+        String summary = "Connected, no Internet";
+        when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
+                .thenReturn(summary);
+
+        InOrder inOrder = inOrder(mMockHeaderController);
+        displayAndResume();
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+
+        // Check that an irrelevant capability update does not update the access point summary, as
+        // doing so could cause unnecessary jank...
+        summary = "Connected";
+        when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
+                .thenReturn(summary);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController, never()).setSummary(any(CharSequence.class));
+
+        // ... but that if the network validates, then we do refresh.
+        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+
+        summary = "Connected, no Internet";
+        when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
+                .thenReturn(summary);
+
+        // Another irrelevant update won't cause the UI to refresh...
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController, never()).setSummary(any(CharSequence.class));
+
+        // ... but if the network is no longer validated, then we display "connected, no Internet".
+        nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+
+        // UI will be refreshed when private DNS is broken.
+        summary = "Private DNS server cannot be accessed";
+        when(mMockAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */))
+                .thenReturn(summary);
+        nc.setPrivateDnsBroken(true);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+
+        // UI will be refreshed when device connects to a partial connectivity network.
+        summary = "Limited connection";
+        when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
+                .thenReturn(summary);
+        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+
+        // Although UI will be refreshed when network become validated. The Settings should
+        // continue to display "Limited connection" if network still provides partial connectivity.
+        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockHeaderController).setSummary(summary);
+    }
+
+    @Test
+    public void canForgetNetwork_shouldInvisibleIfWithoutConfiguration() {
+        setUpForConnectedNetwork();
+        when(mMockAccessPoint.getConfig()).thenReturn(null);
+        mController = newWifiDetailPreferenceController2();
+
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton1Visible(false);
+    }
+
+    @Test
+    public void canForgetNetwork_ephemeral() {
+        setUpForConnectedNetwork();
+        when(mMockWifiInfo.isEphemeral()).thenReturn(true);
+        when(mMockAccessPoint.getConfig()).thenReturn(null);
+
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton1Visible(true);
+    }
+
+    @Test
+    public void canForgetNetwork_saved() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton1Visible(true);
+    }
+
+    @Test
+    public void canForgetNetwork_lockedDown() {
+        setUpForConnectedNetwork();
+        lockDownNetwork();
+
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton1Visible(false);
+    }
+
+    @Test
+    public void canShareNetwork_shouldInvisibleIfWithoutConfiguration() {
+        setUpForConnectedNetwork();
+        when(mMockAccessPoint.getConfig()).thenReturn(null);
+
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton4Visible(false);
+    }
+
+    @Test
+    public void canModifyNetwork_saved() {
+        setUpForConnectedNetwork();
+        assertThat(mController.canModifyNetwork()).isTrue();
+    }
+
+    @Test
+    public void canModifyNetwork_lockedDown() {
+        setUpForConnectedNetwork();
+        lockDownNetwork();
+
+        assertThat(mController.canModifyNetwork()).isFalse();
+    }
+
+    /**
+     * Pretends that current network is locked down by device owner.
+     */
+    private void lockDownNetwork() {
+        final int doUserId = 123;
+        final int doUid = 1234;
+        String doPackage = "some.package";
+
+        mMockWifiConfig.creatorUid = doUid;
+        ComponentName doComponent = new ComponentName(doPackage, "some.Class");
+        try {
+            when(mMockPackageManager.getPackageUidAsUser(Matchers.anyString(), Matchers.anyInt()))
+                    .thenReturn(doUid);
+        } catch (PackageManager.NameNotFoundException e) {
+            //do nothing
+        }
+        ShadowDevicePolicyManager.getShadow().setDeviceOwnerComponentOnAnyUser(doComponent);
+        ShadowDevicePolicyManager.getShadow().setDeviceOwnerUserId(doUserId);
+
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 1);
+    }
+
+    @Test
+    public void forgetNetwork_ephemeral() {
+        setUpForConnectedNetwork();
+        String ssid = "ssid";
+        when(mMockWifiInfo.isEphemeral()).thenReturn(true);
+        when(mMockWifiInfo.getSSID()).thenReturn(ssid);
+
+        displayAndResume();
+        mForgetClickListener.getValue().onClick(null);
+
+        verify(mMockWifiManager).disableEphemeralNetwork(ssid);
+        verify(mMockMetricsFeatureProvider)
+                .action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
+    }
+
+    @Test
+    public void forgetNetwork_saved() {
+        setUpForConnectedNetwork();
+        mMockWifiConfig.networkId = 5;
+
+        mController.displayPreference(mMockScreen);
+        mForgetClickListener.getValue().onClick(null);
+
+        verify(mMockWifiManager).forget(mMockWifiConfig.networkId, null);
+        verify(mMockMetricsFeatureProvider)
+                .action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
+    }
+
+    @Test
+    public void forgetNetwork_shouldShowDialog() {
+        setUpForConnectedNetwork();
+        final WifiDetailPreferenceController2 spyController = spy(mController);
+
+        mMockWifiConfig.networkId = 5;
+        when(mMockAccessPoint.isPasspoint()).thenReturn(true);
+        when(mMockAccessPoint.getPasspointFqdn()).thenReturn(FQDN);
+        spyController.displayPreference(mMockScreen);
+
+        mForgetClickListener.getValue().onClick(null);
+
+        verify(mMockWifiManager, times(0)).removePasspointConfiguration(FQDN);
+        verify(mMockMetricsFeatureProvider, times(0))
+                .action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
+        verify(spyController).showConfirmForgetDialog();
+    }
+
+    @Test
+    public void networkStateChangedIntent_shouldRefetchInfo() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(1)).getConnectionInfo();
+
+        mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
+
+        verify(mMockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(2)).getConnectionInfo();
+    }
+
+    @Test
+    public void networkStateChangedIntent_shouldRefetchInfoForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(1)).getConnectionInfo();
+
+        mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
+
+        verify(mMockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(2)).getConnectionInfo();
+    }
+
+    @Test
+    public void rssiChangedIntent_shouldRefetchInfo() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(1)).getConnectionInfo();
+
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+        verify(mMockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(2)).getConnectionInfo();
+    }
+
+    @Test
+    public void rssiChangedIntent_shouldRefetchInfoForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        verify(mMockConnectivityManager, times(1)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(1)).getConnectionInfo();
+
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+        verify(mMockConnectivityManager, times(2)).getNetworkInfo(any(Network.class));
+        verify(mMockWifiManager, times(2)).getConnectionInfo();
+    }
+
+    @Test
+    public void networkDisconnectedState_shouldNotFinishActivityForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        when(mMockConnectivityManager.getNetworkInfo(any(Network.class))).thenReturn(null);
+        mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
+
+        verify(mMockActivity, never()).finish();
+    }
+
+    @Test
+    public void networkOnLost_shouldNotFinishActivityForConnectedNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        mCallbackCaptor.getValue().onLost(mMockNetwork);
+
+        verify(mMockActivity, never()).finish();
+    }
+
+    @Test
+    public void ipv6AddressPref_shouldHaveHostAddressTextSet() {
+        setUpForConnectedNetwork();
+        mLinkProperties.addLinkAddress(Constants.IPV6_LINKLOCAL);
+        mLinkProperties.addLinkAddress(Constants.IPV6_GLOBAL1);
+        mLinkProperties.addLinkAddress(Constants.IPV6_GLOBAL2);
+
+        displayAndResume();
+
+        String expectedAddresses = String.join("\n",
+                asString(Constants.IPV6_LINKLOCAL),
+                asString(Constants.IPV6_GLOBAL1),
+                asString(Constants.IPV6_GLOBAL2));
+
+        verify(mMockIpv6AddressesPref).setSummary(expectedAddresses);
+    }
+
+    @Test
+    public void ipv6AddressPref_shouldNotBeSelectable() {
+        setUpForConnectedNetwork();
+        mLinkProperties.addLinkAddress(Constants.IPV6_GLOBAL2);
+
+        displayAndResume();
+
+        assertThat(mMockIpv6AddressesPref.isSelectable()).isFalse();
+    }
+
+    @Test
+    public void captivePortal_shouldShowSignInButton() {
+        setUpForConnectedNetwork();
+
+        InOrder inOrder = inOrder(mMockButtonsPref);
+
+        displayAndResume();
+
+        inOrder.verify(mMockButtonsPref).setButton2Visible(false);
+
+        NetworkCapabilities nc = makeNetworkCapabilities();
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockButtonsPref).setButton2Visible(false);
+
+        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockButtonsPref).setButton2Visible(true);
+
+        nc.removeCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
+        updateNetworkCapabilities(nc);
+        inOrder.verify(mMockButtonsPref).setButton2Visible(false);
+    }
+
+    @Test
+    public void testSignInButton_shouldStartCaptivePortalApp() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        ArgumentCaptor<OnClickListener> captor = ArgumentCaptor.forClass(OnClickListener.class);
+        verify(mMockButtonsPref).setButton2OnClickListener(captor.capture());
+        captor.getValue().onClick(null);
+        verify(mMockConnectivityManager).startCaptivePortalApp(mMockNetwork);
+        verify(mMockMetricsFeatureProvider)
+                .action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN);
+    }
+
+    @Test
+    public void testSignInButton_shouldHideSignInButtonForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        NetworkCapabilities nc = makeNetworkCapabilities();
+        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
+        when(mMockConnectivityManager.getNetworkCapabilities(mMockNetwork))
+                .thenReturn(new NetworkCapabilities(nc));
+
+        // verify onResume
+        displayAndResume();
+
+        verify(mMockButtonsPref, never()).setButton2Visible(true);
+        verify(mMockButtonsPref).setButton2Visible(false);
+
+        // verify onCapabilitiesChanged
+        updateNetworkCapabilities(nc);
+
+        verify(mMockButtonsPref, never()).setButton2Visible(true);
+        verify(mMockButtonsPref).setButton2Visible(false);
+    }
+
+    @Test
+    public void testConnectButton_shouldInvisibleForConnectNetwork() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockButtonsPref, times(1)).setButton3Visible(false);
+    }
+
+    @Test
+    public void testConnectButton_shouldVisibleForDisconnectNetwork() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        verify(mMockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
+    }
+
+    private void setUpForToast() {
+        Resources res = mContext.getResources();
+        when(mMockActivity.getResources()).thenReturn(res);
+    }
+
+    @Test
+    public void testConnectButton_clickConnect_displayAsSuccess() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        String label = "title";
+        when(mMockAccessPoint.getTitle()).thenReturn(label);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check display button as connecting
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as connected
+        when(mMockAccessPoint.isActive()).thenReturn(true);
+        mController.updateAccessPoint();
+
+        // check connect button invisible, be init as default state and toast success message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(false);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_connected_to_message, label));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectButFailed_displayFailMessage() {
+        setUpForDisconnectedNetwork();
+        ArgumentCaptor<WifiManager.ActionListener> connectListenerCaptor =
+                ArgumentCaptor.forClass(WifiManager.ActionListener.class);
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check display button as connecting
+        verify(mMockWifiManager, times(1)).connect(anyInt(), connectListenerCaptor.capture());
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as failed
+        connectListenerCaptor.getValue().onFailure(-1);
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_failed_connect_message));
+    }
+
+    private void verifyConnectBtnSetUpAsVisible(InOrder inOrder) {
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Icon(R.drawable.ic_settings_wireless);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+    }
+
+    private void verifyConnectBtnSetUpAsConnecting(InOrder inOrder) {
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Text(R.string.wifi_connecting);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Enabled(false);
+    }
+
+    private void verifyConnectBtnBeInitAsDefault(InOrder inOrder) {
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Icon(R.drawable.ic_settings_wireless);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Enabled(true);
+    }
+
+    @Test
+    public void testConnectButton_clickConnectButTimeout_displayFailMessage() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check display button as connecting
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as failed
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_failed_connect_message));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectButTimeout_displayNotInRangeMessage() {
+        setUpForNotInRangeNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check display button as connecting
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as failed
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_not_in_range_message));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectWhenWiFiDisabled_displaySuccessMessage() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        String label = "title";
+        when(mMockAccessPoint.getTitle()).thenReturn(label);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
+        verify(mMockWifiManager, times(1)).setWifiEnabled(true);
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_turned_on_message));
+
+        // notify Wi-Fi enabled
+        mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
+
+        // check had connect network and icon display as expected
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as connected
+        when(mMockAccessPoint.isActive()).thenReturn(true);
+        mController.updateAccessPoint();
+
+        // check connect button invisible, be init as default state and toast success message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(false);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_connected_to_message, label));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWiFi() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
+        verify(mMockWifiManager, times(1)).setWifiEnabled(true);
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_turned_on_message));
+
+        // notify Wi-Fi enabled
+        mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
+
+        // check had connect network and icon display as expected
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as failed
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_failed_connect_message));
+    }
+
+    @Test
+    public void
+            testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWifiBecauseNotInRange() {
+        setUpForNotInRangeNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
+        verify(mMockWifiManager, times(1)).setWifiEnabled(true);
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_turned_on_message));
+
+        // notify Wi-Fi enabled
+        mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
+
+        // check had connect network and icon display as expected
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // update as failed
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_not_in_range_message));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectWhenWiFiDisabled_failedToEnableWifi() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
+        verify(mMockWifiManager, times(1)).setWifiEnabled(true);
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_turned_on_message));
+
+        // notify turn on Wi-Fi failed
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        verifyConnectBtnBeInitAsDefault(inOrder);
+        inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
+        assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+                mContext.getString(R.string.wifi_failed_connect_message));
+    }
+
+    @Test
+    public void testConnectButton_clickConnectAndBackKey_ignoreTimeoutEvent() {
+        setUpForDisconnectedNetwork();
+        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
+        InOrder inOrder = inOrder(mMockButtonsPref);
+        setUpForToast();
+
+        displayAndResume();
+
+        // check connect button exist
+        verifyConnectBtnSetUpAsVisible(inOrder);
+
+        // click connect button
+        mController.connectNetwork();
+
+        // check display button as connecting
+        verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
+        verifyConnectBtnSetUpAsConnecting(inOrder);
+
+        // leave detail page
+        when(mMockFragment.getActivity()).thenReturn(null);
+
+        // timeout happened
+        mController.sTimer.onFinish();
+
+        // check connect button visible, be init as default and toast failed message
+        inOrder.verify(mMockButtonsPref, never()).setButton3Text(R.string.wifi_connect);
+        inOrder.verify(mMockButtonsPref, never()).setButton3Icon(R.drawable.ic_settings_wireless);
+        inOrder.verify(mMockButtonsPref, never()).setButton3Enabled(true);
+        inOrder.verify(mMockButtonsPref, never()).setButton3Visible(true);
+        assertThat(ShadowToast.shownToastCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void updateAccessPoint_returnFalseForNothingChanged() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isFalse();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForSignalLevelChanged() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        // Level changed
+        when(mMockAccessPoint.getLevel()).thenReturn(LEVEL + 1);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForChangeAsNotInRange() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        // change as not in range
+        when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(false);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForChangeAsInRange() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        // change as in range
+        when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForChangeAsConnected() {
+        setUpForDisconnectedNetwork();
+
+        displayAndResume();
+
+        // change as connected
+        when(mMockAccessPoint.isActive()).thenReturn(true);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForChangeAsDisconnected() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        // change as disconnected
+        when(mMockAccessPoint.isActive()).thenReturn(false);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void updateAccessPoint_returnTrueForAccessPointUpdated() {
+        setUpForConnectedNetwork();
+
+        displayAndResume();
+
+        // change as disconnected
+        when(mMockAccessPoint.update(mMockWifiConfig, mMockWifiInfo, mMockNetworkInfo))
+                .thenReturn(true);
+        boolean changed = mController.updateAccessPoint();
+
+        assertThat(changed).isTrue();
+    }
+
+    @Test
+    public void testRefreshRssiViews_shouldNotUpdateIfLevelIsSameForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+        verify(mMockAccessPoint, times(3)).getLevel();
+        verify(mMockIconInjector, times(1)).getIcon(anyInt());
+    }
+
+    @Test
+    public void testRefreshRssiViews_shouldUpdateOnLevelChangeForConnectedNetwork() {
+        setUpForConnectedNetwork();
+        displayAndResume();
+
+        when(mMockAccessPoint.getLevel()).thenReturn(0);
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+        verify(mMockAccessPoint, times(4)).getLevel();
+        verify(mMockIconInjector, times(2)).getIcon(anyInt());
+    }
+
+    @Test
+    public void testRefreshRssiViews_shouldNotUpdateForNotInRangeNetwork() {
+        setUpForNotInRangeNetwork();
+
+        displayAndResume();
+
+        when(mMockAccessPoint.getLevel()).thenReturn(0);
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+        verify(mMockSignalStrengthPref, times(2)).setVisible(false);
+    }
+
+    @Test
+    public void testRedrawIconForHeader_shouldEnlarge() {
+        setUpForConnectedNetwork();
+        ArgumentCaptor<BitmapDrawable> drawableCaptor =
+                ArgumentCaptor.forClass(BitmapDrawable.class);
+        Drawable original = mContext.getDrawable(Utils.getWifiIconResource(LEVEL)).mutate();
+        when(mMockIconInjector.getIcon(anyInt())).thenReturn(original);
+
+        displayAndResume();
+
+        verify(mMockHeaderController, times(1)).setIcon(drawableCaptor.capture());
+
+        int expectedSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.wifi_detail_page_header_image_size);
+        BitmapDrawable icon = drawableCaptor.getValue();
+        assertThat(icon.getMinimumWidth()).isEqualTo(expectedSize);
+        assertThat(icon.getMinimumHeight()).isEqualTo(expectedSize);
+    }
+
+    @Test
+    public void testRedrawIconForHeader_shouldEnlargeForDisconnectedNetwork() {
+        setUpForDisconnectedNetwork();
+        ArgumentCaptor<BitmapDrawable> drawableCaptor =
+                ArgumentCaptor.forClass(BitmapDrawable.class);
+        Drawable original = mContext.getDrawable(Utils.getWifiIconResource(LEVEL)).mutate();
+        when(mMockIconInjector.getIcon(anyInt())).thenReturn(original);
+
+        displayAndResume();
+
+        verify(mMockHeaderController, times(1)).setIcon(drawableCaptor.capture());
+
+        int expectedSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.wifi_detail_page_header_image_size);
+        BitmapDrawable icon = drawableCaptor.getValue();
+        assertThat(icon.getMinimumWidth()).isEqualTo(expectedSize);
+        assertThat(icon.getMinimumHeight()).isEqualTo(expectedSize);
+    }
+
+    @Test
+    public void testRedrawIconForHeader_shouldNotEnlargeIfNotVectorDrawable() {
+        setUpForConnectedNetwork();
+        ArgumentCaptor<ColorDrawable> drawableCaptor =
+                ArgumentCaptor.forClass(ColorDrawable.class);
+
+        displayAndResume();
+
+        verify(mMockHeaderController, times(1)).setIcon(drawableCaptor.capture());
+        ColorDrawable icon = drawableCaptor.getValue();
+        assertThat(icon).isNotNull();
+    }
+
+    @Test
+    public void checkMacTitle_whenPrivacyRandomizedMac_shouldBeRandom() {
+        setUpForDisconnectedNetwork();
+        mMockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_PERSISTENT;
+        when(mMockWifiConfig.getRandomizedMacAddress()).thenReturn(mMockMacAddress);
+        when(mMockMacAddress.toString()).thenReturn(RANDOMIZED_MAC_ADDRESS);
+
+        displayAndResume();
+
+        verify(mMockMacAddressPref).setTitle(R.string.wifi_advanced_randomized_mac_address_title);
+    }
+
+    @Test
+    public void checkMacTitle_whenPrivacyDeviceMac_shouldBeFactory() {
+        setUpForDisconnectedNetwork();
+        mMockWifiConfig.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
+        when(mMockWifiConfig.getRandomizedMacAddress()).thenReturn(mMockMacAddress);
+        when(mMockWifiManager.getFactoryMacAddresses())
+                .thenReturn(new String[]{FACTORY_MAC_ADDRESS});
+
+        displayAndResume();
+
+        verify(mMockMacAddressPref).setTitle(R.string.wifi_advanced_device_mac_address_title);
+    }
+
+    @Test
+    @Ignore
+    public void entityHeader_expiredPasspointR1_shouldHandleExpiration() {
+        setUpForDisconnectedNetwork();
+        when(mMockAccessPoint.isPasspoint()).thenReturn(true);
+        when(mMockAccessPoint.isPasspointConfigurationR1()).thenReturn(true);
+        when(mMockAccessPoint.isExpired()).thenReturn(true);
+        String expireSummary = mContext.getResources().getString(
+                com.android.settingslib.R.string.wifi_passpoint_expired);
+
+        displayAndResume();
+
+        verify(mMockButtonsPref).setButton3Visible(false);
+        verify(mMockHeaderController).setSummary(expireSummary);
+    }
+
+    private ActionButtonsPreference createMock() {
+        final ActionButtonsPreference pref = mock(ActionButtonsPreference.class);
+        when(pref.setButton1Text(anyInt())).thenReturn(pref);
+        when(pref.setButton1Icon(anyInt())).thenReturn(pref);
+        when(pref.setButton1Enabled(anyBoolean())).thenReturn(pref);
+        when(pref.setButton1Visible(anyBoolean())).thenReturn(pref);
+        when(pref.setButton1OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
+
+        when(pref.setButton2Text(anyInt())).thenReturn(pref);
+        when(pref.setButton2Icon(anyInt())).thenReturn(pref);
+        when(pref.setButton2Enabled(anyBoolean())).thenReturn(pref);
+        when(pref.setButton2Visible(anyBoolean())).thenReturn(pref);
+        when(pref.setButton2OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
+
+        when(pref.setButton3Text(anyInt())).thenReturn(pref);
+        when(pref.setButton3Icon(anyInt())).thenReturn(pref);
+        when(pref.setButton3Enabled(anyBoolean())).thenReturn(pref);
+        when(pref.setButton3Visible(anyBoolean())).thenReturn(pref);
+        when(pref.setButton3OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
+
+        when(pref.setButton4Text(anyInt())).thenReturn(pref);
+        when(pref.setButton4Icon(anyInt())).thenReturn(pref);
+        when(pref.setButton4Enabled(anyBoolean())).thenReturn(pref);
+        when(pref.setButton4Visible(anyBoolean())).thenReturn(pref);
+        when(pref.setButton4OnClickListener(any(View.OnClickListener.class))).thenReturn(pref);
+
+        return pref;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java
new file mode 100644
index 0000000..517c96a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java
@@ -0,0 +1,96 @@
+/*
+ * 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.details2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+
+import androidx.preference.DropDownPreference;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiMeteredPreferenceController2Test {
+
+    private static final int METERED_OVERRIDE_NONE = 0;
+    private static final int METERED_OVERRIDE_METERED = 1;
+    private static final int METERED_OVERRIDE_NOT_METERED = 2;
+
+    @Mock
+    private WifiConfiguration mWifiConfiguration;
+
+    private WifiMeteredPreferenceController2 mPreferenceController;
+    private Context mContext;
+    private DropDownPreference mDropDownPreference;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+
+        mPreferenceController = spy(
+                new WifiMeteredPreferenceController2(mContext, mWifiConfiguration));
+        mDropDownPreference = new DropDownPreference(mContext);
+        mDropDownPreference.setEntries(R.array.wifi_metered_entries);
+        mDropDownPreference.setEntryValues(R.array.wifi_metered_values);
+    }
+
+    @Test
+    public void testUpdateState_wifiMetered_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_METERED).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Treat as metered");
+    }
+
+    @Test
+    public void testUpdateState_wifiNotMetered_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_NOT_METERED).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Treat as unmetered");
+    }
+
+    @Test
+    public void testUpdateState_wifiAuto_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_NONE).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Detect automatically");
+    }
+
+    @Test
+    public void testController_resilientToNullConfig() {
+        mPreferenceController = spy(new WifiMeteredPreferenceController2(mContext, null));
+
+        mPreferenceController.getMeteredOverride();
+        mPreferenceController.onPreferenceChange(mDropDownPreference, 1);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
new file mode 100644
index 0000000..91cc01e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
@@ -0,0 +1,128 @@
+/*
+ * 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.details2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+
+import androidx.preference.DropDownPreference;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiPrivacyPreferenceController2Test {
+
+    private static final int PRIVACY_RANDOMIZED = WifiConfiguration.RANDOMIZATION_PERSISTENT;
+    private static final int PRIVACY_TRUSTED = WifiConfiguration.RANDOMIZATION_NONE;
+
+    @Mock
+    private WifiConfiguration mWifiConfiguration;
+
+    private WifiPrivacyPreferenceController2 mPreferenceController;
+    private Context mContext;
+    private DropDownPreference mDropDownPreference;
+    private String[] mPerferenceStrings;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+
+        WifiPrivacyPreferenceController2 preferenceController =
+                new WifiPrivacyPreferenceController2(mContext);
+        preferenceController.setWifiConfiguration(mWifiConfiguration);
+        mPreferenceController = spy(preferenceController);
+        mDropDownPreference = new DropDownPreference(mContext);
+        mDropDownPreference.setEntries(R.array.wifi_privacy_entries);
+        mDropDownPreference.setEntryValues(R.array.wifi_privacy_values);
+
+        mPerferenceStrings = mContext.getResources().getStringArray(R.array.wifi_privacy_entries);
+    }
+
+    @Test
+    public void testUpdateState_wifiPrivacy_setCorrectValue() {
+        doReturn(PRIVACY_TRUSTED).when(mPreferenceController).getRandomizationValue();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        int prefValue = mPreferenceController.translateMacRandomizedValueToPrefValue(
+                PRIVACY_TRUSTED);
+        assertThat(mDropDownPreference.getEntry()).isEqualTo(mPerferenceStrings[prefValue]);
+    }
+
+    @Test
+    public void testUpdateState_wifiNotMetered_setCorrectValue() {
+        doReturn(PRIVACY_RANDOMIZED).when(mPreferenceController).getRandomizationValue();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        int prefValue = mPreferenceController.translateMacRandomizedValueToPrefValue(
+                PRIVACY_RANDOMIZED);
+        assertThat(mDropDownPreference.getEntry()).isEqualTo(mPerferenceStrings[prefValue]);
+    }
+
+    @Test
+    public void testController_resilientToNullConfig() {
+        mPreferenceController = spy(new WifiPrivacyPreferenceController2(mContext));
+
+        mPreferenceController.getRandomizationValue();
+        mPreferenceController.onPreferenceChange(mDropDownPreference, "1");
+    }
+
+    @Test
+    public void testUpdateState_isNotEphemeralNetwork_shouldBeSelectable() {
+        mPreferenceController.setIsEphemeral(false);
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.isSelectable()).isTrue();
+    }
+
+    @Test
+    public void testUpdateState_isEphemeralNetwork_shouldNotSelectable() {
+        mPreferenceController.setIsEphemeral(true);
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.isSelectable()).isFalse();
+    }
+
+    @Test
+    public void testUpdateState_isNotPasspointNetwork_shouldBeSelectable() {
+        mPreferenceController.setIsPasspoint(false);
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.isSelectable()).isTrue();
+    }
+
+    @Test
+    public void testUpdateState_isPasspointNetwork_shouldNotSelectable() {
+        mPreferenceController.setIsPasspoint(true);
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.isSelectable()).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java
new file mode 100644
index 0000000..f50021b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java
@@ -0,0 +1,106 @@
+/*
+ * 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.savedaccesspoints2;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.wifitrackerlib.WifiEntry;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+public class SavedAccessPointsPreferenceController2Test {
+
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private PreferenceCategory mPreferenceCategory;
+
+    private Context mContext;
+    private SavedAccessPointsWifiSettings2 mSettings;
+    private SavedAccessPointsPreferenceController2 mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mSettings = spy(new SavedAccessPointsWifiSettings2());
+        mController = spy(new SavedAccessPointsPreferenceController2(mContext, "test_key"));
+        mController.setHost(mSettings);
+
+        when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+                .thenReturn(mPreferenceCategory);
+        when(mPreferenceCategory.getContext()).thenReturn(mContext);
+    }
+
+    @Test
+    public void getAvailability_noSavedAccessPoint_shouldNotAvailable() {
+        mController.mWifiEntries = new ArrayList<>();
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void getAvailability_oneSavedAccessPoint_shouldAvailable() {
+        final WifiEntry mockWifiEntry = mock(WifiEntry.class);
+        mController.mWifiEntries = Arrays.asList(mockWifiEntry);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void displayPreference_oneAccessPoint_shouldListIt() {
+        final String title = "ssid_title";
+        final WifiEntry mockWifiEntry = mock(WifiEntry.class);
+        when(mockWifiEntry.getTitle()).thenReturn(title);
+        final ArgumentCaptor<WifiEntryPreference> captor =
+                ArgumentCaptor.forClass(WifiEntryPreference.class);
+
+        mController.displayPreference(mPreferenceScreen, Arrays.asList(mockWifiEntry));
+
+        verify(mPreferenceCategory).addPreference(captor.capture());
+
+        final List<WifiEntryPreference> prefs = captor.getAllValues();
+        assertThat(prefs.size()).isEqualTo(1);
+        assertThat(prefs.get(0).getTitle()).isEqualTo(title);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java
new file mode 100644
index 0000000..ab1b51c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2Test.java
@@ -0,0 +1,69 @@
+/*
+ * 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.savedaccesspoints2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+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;
+
+@RunWith(RobolectricTestRunner.class)
+public class SavedAccessPointsWifiSettings2Test {
+
+    @Mock
+    private SubscribedAccessPointsPreferenceController2 mSubscribedApController;
+    @Mock
+    private SavedAccessPointsPreferenceController2 mSavedApController;
+
+    private TestFragment mSettings;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mSettings = spy(new TestFragment());
+
+        doReturn(mSubscribedApController).when(mSettings)
+                .use(SubscribedAccessPointsPreferenceController2.class);
+        doReturn(mSavedApController).when(mSettings)
+                .use(SavedAccessPointsPreferenceController2.class);
+    }
+
+    @Test
+    public void verifyConstants() {
+        assertThat(mSettings.getMetricsCategory()).isEqualTo(MetricsEvent.WIFI_SAVED_ACCESS_POINTS);
+        assertThat(mSettings.getPreferenceScreenResId())
+                .isEqualTo(R.xml.wifi_display_saved_access_points2);
+    }
+
+    public static class TestFragment extends SavedAccessPointsWifiSettings2 {
+
+        public <T extends AbstractPreferenceController> T use(Class<T> clazz) {
+            return super.use(clazz);
+        }
+    }
+}
