diff --git a/Android.mk b/Android.mk
index df85bbc..61851cf 100644
--- a/Android.mk
+++ b/Android.mk
@@ -12,6 +12,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_PACKAGE_NAME := Settings
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_CERTIFICATE := platform
 LOCAL_PRIVILEGED_MODULE := true
 LOCAL_MODULE_TAGS := optional
@@ -39,6 +40,7 @@
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-arch-lifecycle-runtime \
     android-arch-lifecycle-extensions \
+    guava \
     jsr305 \
     settings-logtags \
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1917214..78c3a73 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3213,19 +3213,9 @@
             </intent-filter>
         </service>
         <service
-            android:name=".development.qstile.DevelopmentTiles$WindowTrace"
-            android:label="@string/window_trace_quick_settings_title"
-            android:icon="@drawable/tile_icon_window_trace"
-            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
-            android:enabled="false">
-            <intent-filter>
-                <action android:name="android.service.quicksettings.action.QS_TILE" />
-            </intent-filter>
-        </service>
-        <service
-            android:name=".development.qstile.DevelopmentTiles$LayerTrace"
-            android:label="@string/layer_trace_quick_settings_title"
-            android:icon="@drawable/tile_icon_layer_trace"
+            android:name=".development.qstile.DevelopmentTiles$WinscopeTrace"
+            android:label="@string/winscope_trace_quick_settings_title"
+            android:icon="@drawable/tile_icon_winscope_trace"
             android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
             android:enabled="false">
             <intent-filter>
@@ -3294,6 +3284,24 @@
             </intent-filter>
         </receiver>
 
+        <!-- Couldn't be triggered from outside of settings. Statsd can trigger it because we send
+             PendingIntent to it-->
+        <receiver android:name=".fuelgauge.batterytip.AnomalyDetectionReceiver"
+                  android:exported="false" />
+
+        <receiver android:name=".fuelgauge.batterytip.AnomalyConfigReceiver">
+            <intent-filter>
+                <action android:name="android.app.action.STATSD_STARTED"/>
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+            </intent-filter>
+        </receiver>
+
+        <service android:name=".fuelgauge.batterytip.AnomalyCleanUpJobService"
+                 android:permission="android.permission.BIND_JOB_SERVICE" />
+
+        <service android:name=".fuelgauge.batterytip.AnomalyDetectionJobService"
+                 android:permission="android.permission.BIND_JOB_SERVICE" />
+
         <!-- This is the longest AndroidManifest.xml ever. -->
     </application>
 </manifest>
diff --git a/proguard.flags b/proguard.flags
index 091211d..21c5cfd 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -4,6 +4,15 @@
 # Keep all Fragments in this package, which are used by reflection.
 -keep public class com.android.settings.** extends android.app.Fragment
 
+# Keep all preference controllers needed by slice and DashboardFragment.
+-keep class * extends com.android.settings.core.BasePreferenceController {
+    *;
+}
+
+-keep class * extends com.android.settings.core.TogglePreferenceController {
+    *;
+}
+
 # We want to keep methods in Activity that could be used in the XML attribute onClick.
 -keepclassmembers class * extends android.app.Activity {
     public void *(android.view.View);
diff --git a/res/drawable/tile_icon_layer_trace.xml b/res/drawable/tile_icon_layer_trace.xml
deleted file mode 100644
index 21dafd3..0000000
--- a/res/drawable/tile_icon_layer_trace.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-    Copyright (C) 2018 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0"
-        android:tint="?android:attr/colorControlNormal">
-    <path
-        android:pathData="M11.709,11.712 L7.061,8.098 6.039,8.893l5.676,4.415 5.676,-4.415 -1.028,-0.801zM11.716,10.11 L16.357,6.496 17.392,5.695 11.716,1.281 6.039,5.695 7.067,6.496Z"
-        android:fillColor="#FFFFFFFF"/>
-    <path
-        android:pathData="m20.27,15.235c0,0.82 -0.671,1.491 -1.491,1.491 -0.134,0 -0.261,-0.015 -0.38,-0.052l-2.654,2.646C15.782,19.439 15.797,19.573 15.797,19.708c0,0.82 -0.671,1.491 -1.491,1.491 -0.82,0 -1.491,-0.671 -1.491,-1.491 0,-0.134 0.015,-0.268 0.052,-0.388L10.966,17.419C10.847,17.456 10.713,17.471 10.579,17.471 10.444,17.471 10.31,17.456 10.191,17.419L6.799,20.818C6.836,20.938 6.851,21.064 6.851,21.199 6.851,22.019 6.18,22.689 5.36,22.689 4.54,22.689 3.869,22.019 3.869,21.199c0,-0.82 0.671,-1.491 1.491,-1.491 0.134,0 0.261,0.015 0.38,0.052L9.14,16.368C9.103,16.249 9.088,16.114 9.088,15.98 9.088,15.16 9.759,14.489 10.579,14.489c0.82,0 1.491,0.671 1.491,1.491 0,0.134 -0.015,0.268 -0.052,0.388l1.901,1.901C14.038,18.232 14.172,18.217 14.306,18.217c0.134,0 0.268,0.015 0.388,0.052L17.34,15.615C17.303,15.496 17.288,15.369 17.288,15.235c0,-0.82 0.671,-1.491 1.491,-1.491 0.82,0 1.491,0.671 1.491,1.491z"
-        android:fillColor="#FFFFFFFF"/>
-</vector>
-
diff --git a/res/drawable/tile_icon_window_trace.xml b/res/drawable/tile_icon_winscope_trace.xml
similarity index 100%
rename from res/drawable/tile_icon_window_trace.xml
rename to res/drawable/tile_icon_winscope_trace.xml
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index 6aee0f9..b3006a6 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -42,7 +42,7 @@
 
             <ImageView
                 android:id="@+id/suw_layout_icon"
-                style="@style/LockPatternIconStyle"
+                style="@style/SuwGlifIcon"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:src="@drawable/ic_lock" />
@@ -73,6 +73,7 @@
                 style="@style/SuwDescription.Glif"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:layout_marginHorizontal="?attr/suwMarginSides"
                 android:minLines="2" />
 
             <TextView android:id="@+id/headerText"
diff --git a/res/layout/confirm_lock_pattern_internal_base.xml b/res/layout/confirm_lock_pattern_internal_base.xml
index 2b09a7e..6773ec0 100644
--- a/res/layout/confirm_lock_pattern_internal_base.xml
+++ b/res/layout/confirm_lock_pattern_internal_base.xml
@@ -34,7 +34,7 @@
 
             <ImageView
                 android:id="@+id/suw_layout_icon"
-                style="@style/LockPatternIconStyle"
+                style="@style/SuwGlifIcon"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="?attr/suwGlifHeaderGravity"
diff --git a/res/layout/instant_app_buttons.xml b/res/layout/instant_app_buttons.xml
index 9c2e915..1ef9f41 100644
--- a/res/layout/instant_app_buttons.xml
+++ b/res/layout/instant_app_buttons.xml
@@ -20,24 +20,39 @@
     android:id="@+id/instant_app_button_container"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:paddingTop="4dp"
-    android:paddingStart="8dp"
-    android:paddingEnd="8dp"
-    android:visibility="gone">
-    <Button
-        android:id="@+id/install"
-        style="@style/ActionPrimaryButton"
-        android:enabled="false"
+    android:gravity="center"
+    android:paddingTop="24dp"
+    android:paddingStart="68dp"
+    android:paddingEnd="24dp"
+    android:orientation="horizontal">
+
+    <FrameLayout
         android:layout_width="0dp"
         android:layout_weight="1"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:text="@string/install_text"/>
+        android:layout_height="wrap_content">
+        <Button
+            android:id="@+id/install"
+            style="@style/ActionPrimaryButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="4dp"
+            android:text="@string/install_text"/>
+        <Button
+            android:id="@+id/launch"
+            style="@style/ActionPrimaryButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="4dp"
+            android:text="@string/launch_instant_app"/>
+    </FrameLayout>
+    <Space
+        android:layout_width="16dp"
+        android:layout_height="wrap_content" />
     <Button
         android:id="@+id/clear_data"
         android:layout_width="0dp"
         android:layout_weight="1"
         android:layout_height="wrap_content"
-        android:layout_gravity="center"
+        android:layout_marginBottom="4dp"
         android:text="@string/clear_instant_app_data"/>
 </LinearLayout>
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index f18f21b..2c4a1ed 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -54,9 +54,7 @@
                         style="@style/wifi_item_edit_content"
                         android:hint="@string/wifi_ssid_hint"
                         android:singleLine="true"
-                        android:inputType="textNoSuggestions">
-                    <requestFocus/>
-                </EditText>
+                        android:inputType="textNoSuggestions" />
 
                 <LinearLayout android:id="@+id/ssid_too_long_warning"
                               android:layout_width="match_parent"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 843e941..f8b3862 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Hierdie toestel as MIDI te gebruik"</string>
     <string name="usb_use" msgid="3372728031108932425">"Gebruik USB vir"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Gebruik USB ook vir"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Laai tans hierdie toestel"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Laai tans gekoppelde toestel"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 3bc46ba..94a62c3 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ይህን መሣሪያ እንደ MIDI ይጠቀሙበት"</string>
     <string name="usb_use" msgid="3372728031108932425">"ዩኤስቢ ተጠቀም ለ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"እንዲሁም ዩኤስቢን በተጨማሪ ተጠቀም ለ፦"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"ዩ ኤስ ቢ"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"የዚህን መሣሪያ ኃይል በመሙላት ላይ"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"የተገናኘ መሣሪያ ኃይል በመሙላት ላይ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 50b32a1..85669f2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -3538,6 +3538,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"‏يمكنك استخدام هذا الجهاز باعتباره MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"‏استخدام USB في"</string>
     <string name="usb_use_also" msgid="557340935190819370">"‏استخدام USB أيضًا من أجل"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"شحن هذا الجهاز"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"شحن الجهاز المتصل"</string>
diff --git a/res/values-as-nokeys/strings.xml b/res/values-as-nokeys/strings.xml
new file mode 100644
index 0000000..acab21b
--- /dev/null
+++ b/res/values-as-nokeys/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary" msgid="6616938758022986257">"এপ্লিকেশ্বনবোৰ পৰিচালনা কৰক"</string>
+</resources>
diff --git a/res/values-as/arrays.xml b/res/values-as/arrays.xml
new file mode 100644
index 0000000..e1c748f
--- /dev/null
+++ b/res/values-as/arrays.xml
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2007 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item msgid="5296756001147094692">"আমেৰিকা"</item>
+    <item msgid="3005562397632768392">"ইউৰোপ"</item>
+    <item msgid="5696915123093701218">"আফ্ৰিকা"</item>
+    <item msgid="4439789052790868249">"এছিয়া"</item>
+    <item msgid="956915953069815961">"অষ্ট্ৰেলিয়া"</item>
+    <item msgid="5345178126174698955">"প্ৰশান্ত মহাসাগৰীয়"</item>
+    <item msgid="8392017019801393511">"সকলো"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item msgid="3342301044271143016">"১৫ ছেকেণ্ড"</item>
+    <item msgid="8881760709354815449">"৩০ ছেকেণ্ড"</item>
+    <item msgid="7589406073232279088">"১ মিনিট"</item>
+    <item msgid="7001195990902244174">"২ মিনিট"</item>
+    <item msgid="7489864775127957179">"৫ মিনিট"</item>
+    <item msgid="2314124409517439288">"১০ মিনিট"</item>
+    <item msgid="6864027152847611413">"৩০ মিনিট"</item>
+  </string-array>
+  <string-array name="dream_timeout_entries">
+    <item msgid="3149294732238283185">"কেতিয়াও নকৰিব"</item>
+    <item msgid="2194151041885903260">"১৫ ছেকেণ্ড"</item>
+    <item msgid="5892295237131074341">"৩০ ছেকেণ্ড"</item>
+    <item msgid="3538441365970038213">"১ মিনিট"</item>
+    <item msgid="412343871668955639">"২ মিনিট"</item>
+    <item msgid="5076853889688991690">"৫ মিনিট"</item>
+    <item msgid="1903860996174927898">"১০ মিনিট"</item>
+    <item msgid="6415509612413178727">"৩০ মিনিট"</item>
+  </string-array>
+  <string-array name="lock_after_timeout_entries">
+    <item msgid="8929270399652145290">"তৎক্ষণাৎ"</item>
+    <item msgid="6736512735606834431">"৫ ছেকেণ্ড"</item>
+    <item msgid="8044619388267891375">"১৫ ছেকেণ্ড"</item>
+    <item msgid="1822002388249545488">"৩০ ছেকেণ্ড"</item>
+    <item msgid="8538071621211916519">"১ মিনিট"</item>
+    <item msgid="5663439580228932882">"২ মিনিট"</item>
+    <item msgid="49888496216106852">"৫ মিনিট"</item>
+    <item msgid="9002737361305019353">"১০ মিনিট"</item>
+    <item msgid="4322676235684793329">"৩০ মিনিট"</item>
+  </string-array>
+  <string-array name="entries_font_size">
+    <item msgid="8166647333858618801">"সৰু"</item>
+    <item msgid="6986443533756848935">"ডিফল্ট"</item>
+    <item msgid="38373998008112077">"ডাঙৰ"</item>
+    <item msgid="7635254317531872272">"সকলোতকৈ ডাঙৰ"</item>
+  </string-array>
+  <string-array name="wifi_status">
+    <item msgid="1922181315419294640"></item>
+    <item msgid="8934131797783724664">"স্কেন কৰি থকা হৈছে…"</item>
+    <item msgid="8513729475867537913">"সংযোগ কৰি থকা হৈছে…"</item>
+    <item msgid="515055375277271756">"বিস্বাশযোগ্যতা প্ৰমাণ কৰি থকা হৈছে …"</item>
+    <item msgid="1943354004029184381">"আইপি ঠিকনা সংগ্ৰহ কৰি থকা হৈছে…"</item>
+    <item msgid="4221763391123233270">"সংযোগ কৰা হ’ল"</item>
+    <item msgid="624838831631122137">"স্থগিত"</item>
+    <item msgid="7979680559596111948">"সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে"</item>
+    <item msgid="1634960474403853625">"সংযোগ বিচ্ছিন্ন"</item>
+    <item msgid="746097431216080650">"অসফল"</item>
+    <item msgid="6367044185730295334">"অৱৰোধিত"</item>
+    <item msgid="503942654197908005">"কিছুসময়ৰ বাবে দুৰ্বল সংযোগ দেখুওৱা হোৱা নাই"</item>
+  </string-array>
+  <string-array name="wifi_status_with_ssid">
+    <item msgid="7714855332363650812"></item>
+    <item msgid="8878186979715711006">"স্কেন কৰি থকা হৈছে…"</item>
+    <item msgid="355508996603873860">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ সৈতে সংযোগ কৰি থকা হৈছে…"</item>
+    <item msgid="554971459996405634">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ জৰিয়তে সত্যাপন কৰি থকা হৈছে…"</item>
+    <item msgid="7928343808033020343">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ আইপি ঠিকনা পৰা সংগ্ৰহ কৰি থকা হৈছে…"</item>
+    <item msgid="8937994881315223448">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ সৈতে সংযোগ কৰা হ\'ল"</item>
+    <item msgid="1330262655415760617">"স্থগিত"</item>
+    <item msgid="7698638434317271902">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ পৰা সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…"</item>
+    <item msgid="197508606402264311">"সংযোগ বিচ্ছিন্ন"</item>
+    <item msgid="8578370891960825148">"বিফল হৈছে"</item>
+    <item msgid="5660739516542454527">"অৱৰোধিত"</item>
+    <item msgid="1805837518286731242">"কিছুসময়ৰ বাবে দুৰ্বল সংযোগ দেখুওৱা হোৱা নাই"</item>
+  </string-array>
+    <!-- no translation found for wifi_security:0 (8491993170197127709) -->
+    <!-- no translation found for wifi_security:1 (6524315248437318854) -->
+    <!-- no translation found for wifi_security:2 (1532568756571457140) -->
+    <!-- no translation found for wifi_security:3 (3620707702811709779) -->
+    <!-- no translation found for wifi_security_no_eap:0 (2084555984818107151) -->
+    <!-- no translation found for wifi_security_no_eap:1 (397579322683471524) -->
+    <!-- no translation found for wifi_security_no_eap:2 (1968820975358150484) -->
+  <string-array name="wifi_eap_method">
+    <item msgid="1160193392455075561">"পিইএপি"</item>
+    <item msgid="7981731051382306293">"TLS"</item>
+    <item msgid="2892994535305020162">"TTLS"</item>
+    <item msgid="435667726254379514">"PWD"</item>
+    <item msgid="8549485714107012129">"ছিম"</item>
+    <item msgid="1023893786681286517">"AKA"</item>
+    <item msgid="3030483188676375009">"একে\'এ\'"</item>
+  </string-array>
+  <string-array name="eap_method_without_sim_auth">
+    <item msgid="4047867891913819797">"PEAP"</item>
+    <item msgid="641030570679578504">"TLS"</item>
+    <item msgid="3079489731769553856">"TTLS"</item>
+    <item msgid="35269224158638258">"PWD"</item>
+  </string-array>
+    <!-- no translation found for wifi_ap_band_config_full:0 (1085243288162893079) -->
+    <!-- no translation found for wifi_ap_band_config_full:1 (5531376834915607202) -->
+    <!-- no translation found for wifi_ap_band_config_full:2 (3580217704310339410) -->
+    <!-- no translation found for wifi_ap_band_config_2G_only:0 (7006771583217001015) -->
+    <!-- no translation found for wifi_ap_band_config_2G_only:1 (8904289885593822837) -->
+  <string-array name="wifi_p2p_wps_setup">
+    <item msgid="5085064298144493867">"পুশ্ব বুটাম"</item>
+    <item msgid="1624323946324499595">"সংযুক্ত ডিভাইচৰ পৰা পিন"</item>
+    <item msgid="5366790421523328066">"এই ডিভাইচৰ পিন"</item>
+  </string-array>
+  <string-array name="wifi_p2p_status">
+    <item msgid="1701505390737218306">"সংযোগ কৰা হ’ল"</item>
+    <item msgid="3189211552661432651">"নিমন্ত্ৰিত"</item>
+    <item msgid="3206450250360237549">"অসফল"</item>
+    <item msgid="7785896708926971207">"উপলব্ধ"</item>
+    <item msgid="2330782789550628803">"সীমাৰ বাহিৰত"</item>
+  </string-array>
+  <string-array name="bluetooth_visibility_timeout_entries">
+    <item msgid="8151962652413645395">"২ মিনিট"</item>
+    <item msgid="8675215713017289017">"৫ মিনিট"</item>
+    <item msgid="477015974247590543">"১ ঘণ্টা"</item>
+    <item msgid="5198271470953124739">"কেতিয়াও সময় উকলি নাযায়"</item>
+  </string-array>
+  <string-array name="bluetooth_max_connected_audio_devices">
+    <item msgid="60897909354162249">"ডিফ\'ল্ট"</item>
+    <item msgid="7584056855393485416">"2"</item>
+    <item msgid="844570832050176311">"৩"</item>
+    <item msgid="1896812737336024220">"৪"</item>
+    <item msgid="2664420770707984266">"৫"</item>
+  </string-array>
+  <string-array name="bluetooth_max_connected_audio_devices_values">
+    <item msgid="1992185266918208754">"১"</item>
+    <item msgid="2731443086402670729">"২"</item>
+    <item msgid="74627748729027880">"৩"</item>
+    <item msgid="2654447223197666662">"৪"</item>
+    <item msgid="7026157954713482328">"৫"</item>
+  </string-array>
+  <string-array name="wifi_signal">
+    <item msgid="2245412278046491293">"দুৰ্বল"</item>
+    <item msgid="2042505933058940139">"দুৰ্বল"</item>
+    <item msgid="1344546617235886412">"গ্ৰহণযোগ্য"</item>
+    <item msgid="6019931571712517411">"উচ্চ"</item>
+    <item msgid="8986346415847956850">"উত্তম"</item>
+  </string-array>
+  <string-array name="data_usage_data_range">
+    <item msgid="5013973108901348144">"যোৱা ৩০ দিন"</item>
+    <item msgid="6600989128423965319">"ডেটা ব্যৱহাৰ চক্ৰ..."</item>
+  </string-array>
+  <string-array name="usage_stats_display_order_types">
+    <item msgid="2100172576767439288">"ব্যৱহাৰৰ সময়"</item>
+    <item msgid="4796160515314745154">"অন্তিমবাৰ ব্যৱহাৰ কৰা হৈছিল"</item>
+    <item msgid="2502754479975776899">"এপৰ নাম"</item>
+  </string-array>
+  <string-array name="wifi_eap_entries">
+    <item msgid="8615575908717909498">"পিইএপি"</item>
+    <item msgid="8667872640594311615">"TLS"</item>
+    <item msgid="7182812872984827322">"TTLS"</item>
+    <item msgid="2318274046749286642">"PWD"</item>
+  </string-array>
+  <string-array name="wifi_peap_phase2_entries">
+    <item msgid="2577747762745812488">"নাই"</item>
+    <item msgid="937786527870979616">"MSCHAPV2"</item>
+    <item msgid="5302613883318643629">"GTC"</item>
+  </string-array>
+  <string-array name="wifi_peap_phase2_entries_with_sim_auth">
+    <item msgid="5760470455461128892">"নাই"</item>
+    <item msgid="7480272092408291086">"MSCHAPV2"</item>
+    <item msgid="5881794903338319324">"GTC"</item>
+    <item msgid="5610607665198791980">"ছিম"</item>
+    <item msgid="2860798636241124128">"AKA"</item>
+    <item msgid="8926455723452645935">"AKA\'"</item>
+  </string-array>
+  <string-array name="wifi_phase2_entries">
+    <item msgid="1818786254010764570">"নাই"</item>
+    <item msgid="6189918678874123056">"PAP"</item>
+    <item msgid="1524112260493662517">"MSCHAP"</item>
+    <item msgid="5923246669412752932">"MSCHAPV2"</item>
+    <item msgid="8651992560135239389">"GTC"</item>
+  </string-array>
+  <string-array name="wifi_ip_settings">
+    <item msgid="3906714200993111074">"DHCP"</item>
+    <item msgid="628395202971532382">"নিশ্চল"</item>
+  </string-array>
+  <string-array name="wifi_proxy_settings">
+    <item msgid="4473276491748503377">"নাই"</item>
+    <item msgid="8673874894887358090">"হস্তকৃত"</item>
+    <item msgid="168893341855953140">"প্ৰক্সি স্বয়ং-কনফিগাৰেশ্বন"</item>
+  </string-array>
+  <string-array name="apn_auth_entries">
+    <item msgid="3856896061242872146">"নাই"</item>
+    <item msgid="5756844015743664882">"PAP"</item>
+    <item msgid="535934025797984365">"CHAP"</item>
+    <item msgid="8383098660619805783">"PAP বা CHAP"</item>
+  </string-array>
+  <string-array name="apn_protocol_entries">
+    <item msgid="4852355456199302715">"IPv4"</item>
+    <item msgid="4394161344888484571">"IPv6"</item>
+    <item msgid="8084938354605535381">"IPv4/IPv6"</item>
+  </string-array>
+  <string-array name="bearer_entries">
+    <item msgid="1697455674244601285">"অনিৰ্দিষ্ট"</item>
+    <item msgid="1317061551798123908">"এলটিই"</item>
+    <item msgid="5005435684511894770">"HSPAP"</item>
+    <item msgid="7700603056475539235">"HSPA"</item>
+    <item msgid="245973007602397887">"HSUPA"</item>
+    <item msgid="6291566767651194016">"HSDPA"</item>
+    <item msgid="2005841400859926251">"UMTS"</item>
+    <item msgid="3757385691174882861">"EDGE"</item>
+    <item msgid="2979115073474306864">"জিপিআৰএছ"</item>
+    <item msgid="2271750502778879106">"eHRPD"</item>
+    <item msgid="4173379084783381337">"EVDO_B"</item>
+    <item msgid="2033682802005776093">"EVDO_A"</item>
+    <item msgid="5753917125831466719">"EVDO_0"</item>
+    <item msgid="4713807936577071142">"1xRTT"</item>
+    <item msgid="1142355797022021906">"IS95B"</item>
+    <item msgid="7471182818083460781">"IS95A"</item>
+  </string-array>
+  <string-array name="mvno_type_entries">
+    <item msgid="4367119357633573465">"নাই"</item>
+    <item msgid="6062567900587138000">"SPN"</item>
+    <item msgid="2454085083342423481">"IMSI"</item>
+    <item msgid="2681427309183221543">"GID"</item>
+  </string-array>
+  <string-array name="app_install_location_entries">
+    <item msgid="8151497958991952759">"আভ্যন্তৰীণ ডিভাইচ সঞ্চয়াগাৰ"</item>
+    <item msgid="3738430123799803530">"গুচাব পৰা SD কাৰ্ড"</item>
+    <item msgid="4498124044785815005">"ছিষ্টেমটোক সিদ্ধান্ত ল’বলৈ দিয়ক"</item>
+  </string-array>
+  <string-array name="app_ops_categories">
+    <item msgid="6358963769537892925">"অৱস্থান"</item>
+    <item msgid="255608127647030286">"ব্যক্তিগত"</item>
+    <item msgid="4588829735729884491">"মেছেজিং"</item>
+    <item msgid="886742181977884584">"মিডিয়া"</item>
+    <item msgid="7924928667052300589">"ডিভাইচ"</item>
+  </string-array>
+  <string-array name="app_ops_summaries">
+    <item msgid="4979188868761515915">"আনুমানিক অৱস্থান"</item>
+    <item msgid="5789673140227507995">"সঠিক অৱস্থান"</item>
+    <item msgid="1061584358377390581">"জিপিএছ"</item>
+    <item msgid="5387405117297558954">"কম্পন"</item>
+    <item msgid="3434165993711230924">"সম্পৰ্কসমূহ পঢ়ক"</item>
+    <item msgid="616161687718081936">"সম্পৰ্কসমূহ সংশোধন কৰক"</item>
+    <item msgid="7638002295329050091">"কলৰ লগ পঢ়ক"</item>
+    <item msgid="6546959730920410907">"কলৰ লগ সংশোধন কৰক"</item>
+    <item msgid="446877710771379667">"কেলেণ্ডাৰ পঢ়ক"</item>
+    <item msgid="7674458294386319722">"কেলেণ্ডাৰ সাল-সলনি কৰক"</item>
+    <item msgid="8281201165558093009">"ৱাই-ফাই স্কেন"</item>
+    <item msgid="8694611243479480497">"জাননী"</item>
+    <item msgid="7776439107987345446">"চেল স্কেন"</item>
+    <item msgid="514615766544675057">"ফ\'ন ক\'ল কৰক"</item>
+    <item msgid="8181415497109310680">"এছএমএছ পঢ়ক"</item>
+    <item msgid="6816551144382117307">"এছএমএছ লিখক"</item>
+    <item msgid="4600463921908905030">"SMS পাওক"</item>
+    <item msgid="5958926493289432745">"জৰূৰীকালীন এছএমএছ পাওক"</item>
+    <item msgid="4945269495221089540">"এমএমএছ পাওক"</item>
+    <item msgid="5570472453573929087">"WAP পুশ্ব পাওক"</item>
+    <item msgid="7125408150230860501">"এছএমএছ পঠিয়াওক"</item>
+    <item msgid="7080337936612188061">"আইচিচি এছএমএছ পঢ়ক"</item>
+    <item msgid="587124103118495063">"আইচিচি এছএমএছ লিখক"</item>
+    <item msgid="2320577158869025503">"ছেটিংবোৰ সংশোধন কৰক"</item>
+    <item msgid="1545733463471924009">"ওপৰত আঁকক"</item>
+    <item msgid="3609046903962454582">"জাননীত প্ৰৱেশ কৰক"</item>
+    <item msgid="4671646036128214513">"কেমেৰা"</item>
+    <item msgid="1097324338692486211">"ধ্বনি ৰেকৰ্ড কৰক"</item>
+    <item msgid="5031552983987798163">"অডিঅ’ প্লে কৰক"</item>
+    <item msgid="8374996688066472414">"ক্লিপব\'ৰ্ড পঢ়ক"</item>
+    <item msgid="3045529469061083747">"ক্লিপব\'ৰ্ড সংশোধন কৰক"</item>
+    <item msgid="5124443975763747838">"মিডিয়া বুটামসমূহ"</item>
+    <item msgid="4547883971364273343">"অডিঅ\' ফ\'কাছ"</item>
+    <item msgid="2603878814882344450">"মাষ্টাৰ ভলিউম"</item>
+    <item msgid="7136963238377062018">"ধ্বনিৰ ভলিউম"</item>
+    <item msgid="4270236897655923007">"ৰিঙৰ ভলিউম"</item>
+    <item msgid="6325739889222559394">"মিডিয়াৰ ভলিউম"</item>
+    <item msgid="5762123934816216821">"এলাৰ্মৰ ভলিউম"</item>
+    <item msgid="785049718065337473">"জাননীৰ ভলিউম"</item>
+    <item msgid="6700305533746877052">"ব্লুটুথ ভলিউম"</item>
+    <item msgid="2029227495214047094">"সক্ৰিয় কৰি ৰাখক"</item>
+    <item msgid="26109888160231211">"অৱস্থান নিৰীক্ষণ কৰক"</item>
+    <item msgid="5753382310468855812">"উচ্চ ক্ষমতাসম্পন্ন অৱস্থান নিৰীক্ষণ কৰক"</item>
+    <item msgid="3356591542543137332">"ব্যৱহাৰ পৰিসংখ্যা লাভ কৰক"</item>
+    <item msgid="3073734345226842233">"মাইক্ৰ\'ফ\'ন মিউট/আনমিউট কৰক"</item>
+    <item msgid="2111767435887685265">"ট’ষ্ট দেখুৱাওক"</item>
+    <item msgid="1091168669714823370">"মিডিয়া প্ৰ’জেক্ট কৰক"</item>
+    <item msgid="485564189219029300">"VPN সক্ৰিয় কৰক"</item>
+    <item msgid="7155384795265164395">"ৱালপেপাৰ লিখক"</item>
+    <item msgid="1835836196806147034">"সহায়ৰ গাঁঠনি"</item>
+    <item msgid="5989890403088155055">"সহায়ক স্ক্ৰীণশ্বট"</item>
+    <item msgid="8582699692765917557">"ফ\'নৰ স্থিতি পঢ়ক"</item>
+    <item msgid="1474039653814954902">"ভইচমেইল যোগ কৰক"</item>
+    <item msgid="7222837656938871633">"ছিপ ব্যৱহাৰ কৰক"</item>
+    <item msgid="6108267038969274380">"বৰ্হিগামী কল সম্পাদন কৰক"</item>
+    <item msgid="4823402479973873358">"ফিংগাৰপ্ৰিণ্ট"</item>
+    <item msgid="5895843015407713543">"শৰীৰৰ ছেন্সৰসমূহ"</item>
+    <item msgid="1436446526955010826">"চেল সম্প্ৰচাৰসমূহ পঢ়ক"</item>
+    <item msgid="884172201575690484">"নকল অৱস্থান"</item>
+    <item msgid="3591971310048485247">"সঞ্চয়াগাৰত পঢ়ক"</item>
+    <item msgid="4041187808621866119">"সঞ্চয়াগাৰত লিখক"</item>
+    <item msgid="6628873315024166197">"স্ক্ৰীণ অন কৰক"</item>
+    <item msgid="3253368931113490863">"একাউণ্টবোৰ বিচাৰক"</item>
+    <item msgid="780392378084812901">"নেপথ্যত চলাওক"</item>
+    <item msgid="2629748510881309577">"দিব্যাংসকলৰ বাবে থকা সুবিধাসমূহৰ ভলিউম"</item>
+  </string-array>
+  <string-array name="app_ops_labels">
+    <item msgid="6602854600289714121">"অৱস্থান"</item>
+    <item msgid="8677040780775113033">"অৱস্থান"</item>
+    <item msgid="1660743989948992916">"অৱস্থান"</item>
+    <item msgid="8791172739860195290">"কম্পন"</item>
+    <item msgid="383413555642128046">"সম্পৰ্কসূচী পঢ়ক"</item>
+    <item msgid="3654594895269697313">"সম্পৰ্কসূচী সংশোধন"</item>
+    <item msgid="7928393476362362538">"কল লগ পঢ়ক"</item>
+    <item msgid="6248591205254641116">"কল লগ সলনি কৰক"</item>
+    <item msgid="6093344633066170692">"কেলেণ্ডাৰ পঢ়ক"</item>
+    <item msgid="1334886368750347692">"কেলেণ্ডাৰ সংশোধন কৰক"</item>
+    <item msgid="1638204101698708656">"অৱস্থান"</item>
+    <item msgid="2154671955760380322">"প\'ষ্ট জাননী"</item>
+    <item msgid="4282477730595931828">"অৱস্থান"</item>
+    <item msgid="4891423912898525905">"ফ\'ন নম্বৰত কল কৰক"</item>
+    <item msgid="2623604824935968113">"এছএমএছ/এমএমএছ পঢ়ক"</item>
+    <item msgid="4420177125221176306">"এছএমএছ/এমএমএছ লিখক"</item>
+    <item msgid="3986142739951490025">"SMS/MMS পাওক"</item>
+    <item msgid="3984213795861739778">"এছএমএছ/এমএমএছ পাওক"</item>
+    <item msgid="3656243523752472788">"এছএমএছ/এমএমএছ পাওক"</item>
+    <item msgid="8105802370238551510">"SMS/MMS পাওক"</item>
+    <item msgid="1407766984645388488">"এছএমএছ/এমএমএছ পঠিয়াওক"</item>
+    <item msgid="3527273606643794973">"এছএমএছ/এমএমএছ পঢ়ক"</item>
+    <item msgid="4370895547001583812">"SMS/MMS লিখক"</item>
+    <item msgid="4218544235221631789">"ছেটিংসমূহ সংশোধন কৰক"</item>
+    <item msgid="736541391767350377">"ওপৰত আঁকক"</item>
+    <item msgid="5530815681721654194">"প্ৰৱেশৰ জাননীসমূহ"</item>
+    <item msgid="781213371706962767">"কেমেৰা"</item>
+    <item msgid="1720492593061838172">"ধ্বনি ৰেকৰ্ড কৰক"</item>
+    <item msgid="3493046322001257041">"অডিঅ\' প্লে কৰক"</item>
+    <item msgid="136815868796597058">"ক্লিপব\'ৰ্ড পঢ়ক"</item>
+    <item msgid="5238692940326972503">"ক্লিপব\'ৰ্ড সংশোধন কৰক"</item>
+    <item msgid="5753789168376302997">"মিডিয়া বুটাম"</item>
+    <item msgid="3265262911688671938">"অডিঅ\' ফ\'কাছ"</item>
+    <item msgid="2098976479485046797">"মাষ্টাৰ ভলিউম"</item>
+    <item msgid="5660213838861789350">"কণ্ঠস্বৰৰ ভলিউম"</item>
+    <item msgid="7983336752371254444">"ৰিঙৰ ভলিউম"</item>
+    <item msgid="7878027809189330917">"মধ্যমীয়া ভলিউম"</item>
+    <item msgid="7260546305036218513">"এলাৰ্মৰ ভলিউম"</item>
+    <item msgid="9103719301075748925">"জাননীৰ ভলিউম"</item>
+    <item msgid="7025966722295861512">"ব্লুটুথ ভলিউম"</item>
+    <item msgid="4665183401128289653">"জাগ্ৰত কৰি ৰাখক"</item>
+    <item msgid="8584357129746649222">"অৱস্থান"</item>
+    <item msgid="7669257279311110599">"অৱস্থান"</item>
+    <item msgid="3459320345690097795">"ব্যৱহাৰ পৰিসংখ্যা লাভ কৰক"</item>
+    <item msgid="1312534577834048535">"মাইক্ৰ\'ফ\'ন মিউট/আনমিউট কৰক"</item>
+    <item msgid="427580389823724225">"ট\'ষ্ট দেখুৱাওক"</item>
+    <item msgid="4992007785575926253">"মিডিয়া প্ৰ’জেক্ট কৰক"</item>
+    <item msgid="2482631530338029480">"ভিপিএন সক্ৰিয় কৰক"</item>
+    <item msgid="1662979573471871926">"ৱালপেপাৰ যোৰ দিয়ক"</item>
+    <item msgid="5964768335278263478">"সহায়ৰ গাঁথনি"</item>
+    <item msgid="2657138701132782702">"সহায় স্ক্ৰীণশ্বট"</item>
+    <item msgid="8571369610363539266">"ফ\'নৰ স্থিতি পঢ়ক"</item>
+    <item msgid="4542463358215230845">"ভইচমেইল যোগ কৰক"</item>
+    <item msgid="864565065016166003">"ছিপ ব্যৱহাৰ কৰক"</item>
+    <item msgid="1958009349883195116">"বৰ্হিগামী কল সম্পাদন কৰক"</item>
+    <item msgid="8526563410140613458">"ফিংগাৰপ্ৰিণ্ট"</item>
+    <item msgid="7864822459293570891">"শৰীৰৰ ছেন্সৰসমূহ"</item>
+    <item msgid="6798698496904810960">"চেল সম্প্ৰচাৰবোৰ পঢ়ক"</item>
+    <item msgid="5242052845700875820">"নকল অৱস্থান"</item>
+    <item msgid="1246296877820358565">"সঞ্চয়াগাৰ পঢ়ক"</item>
+    <item msgid="2404067308793740341">"সঞ্চয়াগাৰত লিখক"</item>
+    <item msgid="5832543806893763620">"স্ক্ৰীণ অন কৰক"</item>
+    <item msgid="5258373962467495905">"একাউণ্টবোৰ বিচাৰক"</item>
+    <item msgid="334625385979270703">"নেপথ্যত চলাওক"</item>
+    <item msgid="9039213578110332702">"দিব্যাংসকলৰ বাবে থকা সুবিধাসমূহৰ ভলিউম"</item>
+  </string-array>
+  <string-array name="long_press_timeout_selector_titles">
+    <item msgid="3511504869290423954">"চুটি"</item>
+    <item msgid="2560532955514699713">"মধ্যমীয়া"</item>
+    <item msgid="2372711992605524591">"দীঘল"</item>
+  </string-array>
+  <string-array name="captioning_typeface_selector_titles">
+    <item msgid="1319652728542138112">"ডিফ\'ল্ট"</item>
+    <item msgid="1016452621833735880">"ছানছ-ছেৰিফ"</item>
+    <item msgid="2496277987934654454">"ছানছ-ছেৰিফ ঘনীকৃত"</item>
+    <item msgid="7247838127505318669">"ছান-ছেৰিফ ম\'ন\'স্পেচ"</item>
+    <item msgid="4478414822462359763">"ছেৰিফ"</item>
+    <item msgid="7502451783483660829">"ছেৰিফ ম\'ন\'স্পেচ"</item>
+    <item msgid="639503332147461010">"অনানুষ্ঠানিক"</item>
+    <item msgid="7967169925231332424">"পকোৱা আখৰ"</item>
+    <item msgid="561832997193039673">"সৰু বৰফলাৰ আখৰ"</item>
+  </string-array>
+  <string-array name="captioning_font_size_selector_titles">
+    <item msgid="4800919809575254054">"নিচেই সৰু"</item>
+    <item msgid="6781094565687692782">"সৰু"</item>
+    <item msgid="8222123259497646551">"সাধাৰণ"</item>
+    <item msgid="5813217276778560466">"ডাঙৰ"</item>
+    <item msgid="9044232017390975191">"অতি ডাঙৰ"</item>
+  </string-array>
+  <string-array name="captioning_edge_type_selector_titles">
+    <item msgid="4733815704128258753">"ডিফ\'ল্ট"</item>
+    <item msgid="3217099060748617005">"নাই"</item>
+    <item msgid="7467615139904599420">"ৰূপৰেখা"</item>
+    <item msgid="5623165557468608975">"ছাঁযুক্ত আখৰ"</item>
+    <item msgid="8088451174058214588">"উঠঙা"</item>
+    <item msgid="3821418743395480313">"পোটোকা পৰা"</item>
+  </string-array>
+  <string-array name="captioning_opacity_selector_titles">
+    <item msgid="7622491218136667566">"২৫%"</item>
+    <item msgid="2367156416247936773">"৫০%"</item>
+    <item msgid="5395560410107149298">"৭৫%"</item>
+    <item msgid="8342334626783983353">"১০০%"</item>
+  </string-array>
+  <string-array name="captioning_preset_selector_titles">
+    <item msgid="7009918361545506251">"এপৰ ডিফ\'ল্টসমূহ ব্যৱহাৰ কৰক"</item>
+    <item msgid="1770533843436933500">"ক\'লাৰ ওপৰত বগা"</item>
+    <item msgid="758587126802411846">"বগা ওপৰত ক’লা"</item>
+    <item msgid="1495307195241623402">"ক\'লাৰ ওপৰত হালধীয়া"</item>
+    <item msgid="6039700130994371612">"নীলাৰ ওপৰত হালধীয়া"</item>
+    <item msgid="7169235156349580064">"নিজৰ উপযোগিতা অনুযায়ী তৈয়াৰ কৰা"</item>
+  </string-array>
+  <string-array name="vpn_types_long">
+    <item msgid="2732002039459078847">"পিপিটিপি ভিপিএন"</item>
+    <item msgid="3799752201662127867">"পূৰ্বে ভাগ-বতৰা কৰা কীসমূহৰ সৈতে L2TP/IPSec ভিপিএন"</item>
+    <item msgid="4725504331295252103">"প্ৰমাণপত্ৰসহ L2TP/IPSec ভিপিএন"</item>
+    <item msgid="7526551163264034377">"পূৰ্বতে শ্বেয়াৰ কৰা কী আৰু Xauth সত্যাপনসহ IPSec ভিপিএন"</item>
+    <item msgid="8064740940687465039">"প্ৰমাণপত্ৰ আৰু Xauth বিশ্ৱাসযোগ্যতা প্ৰামাণিকৰণৰ সৈতে IPSec ভিপিএন"</item>
+    <item msgid="4946199982372391490">"প্ৰমাণপত্ৰ আৰু হাইব্ৰিড সত্যাপনসহ IPSec ভিপিএন"</item>
+  </string-array>
+  <string-array name="vpn_states">
+    <item msgid="8621078286418985762">"সংযোগ বিচ্ছিন্ন"</item>
+    <item msgid="6692305604213080515">"আৰম্ভ কৰা হৈছে…"</item>
+    <item msgid="8001704909356800092">"সংযোগ কৰি থকা হৈছে…"</item>
+    <item msgid="4039737283841672166">"সংযোজিত হৈ আছে"</item>
+    <item msgid="4042143101664725090">"সময় উকলিছে"</item>
+    <item msgid="7664124146786465092">"বিফল হৈছে"</item>
+  </string-array>
+  <string-array name="security_settings_premium_sms_values">
+    <item msgid="7389829271787670252">"সোধক"</item>
+    <item msgid="5077768429488260031">"কেতিয়াও অনুমতি নিদিব"</item>
+    <item msgid="1417929597727989746">"চিৰদিনৰ বাবে অনুমোদন"</item>
+  </string-array>
+  <string-array name="ram_states">
+    <item msgid="3944681673818150669">"সাধাৰণ"</item>
+    <item msgid="3256987280393708586">"মজলীয়া"</item>
+    <item msgid="4662917179231875995">"নিম্ন"</item>
+    <item msgid="5264929699714647509">"সংকটপূৰ্ণ"</item>
+    <item msgid="5606155978847838966">"?"</item>
+  </string-array>
+  <string-array name="proc_stats_memory_states">
+    <item msgid="8845855295876909468">"সাধাৰণ"</item>
+    <item msgid="866544120205026771">"মজলীয়া"</item>
+    <item msgid="7851902244436886890">"নিম্ন"</item>
+    <item msgid="3022922196817563960">"জটিল"</item>
+  </string-array>
+  <string-array name="proc_stats_process_states">
+    <item msgid="5069825997142785829">"নেৰানেপেৰা"</item>
+    <item msgid="5779398140277006695">"শীৰ্ষ কাৰ্যকলাপ"</item>
+    <item msgid="1439598363694578255">"গুৰুত্বপূৰ্ণ (নেপথ্য)"</item>
+    <item msgid="3396458970745718652">"গুৰুত্বপূৰ্ণ (নেপথ্য)"</item>
+    <item msgid="5214825238247511992">"বেকআপ"</item>
+    <item msgid="311372689168254967">"অত্য়ধিক"</item>
+    <item msgid="7438189122367820362">"সেৱা (চলিত)"</item>
+    <item msgid="918687422516982498">"সেৱা (ৰিষ্টাৰ্ট কৰা হৈছে)"</item>
+    <item msgid="6807727069641853029">"ৰিচিভাৰ"</item>
+    <item msgid="6782857406100845127">"হ\'ম"</item>
+    <item msgid="2860945127596974299">"অন্তিম কাৰ্যকলাপ"</item>
+    <item msgid="8610560843693675830">"কেশ্ব কৰা হোৱা (কাৰ্যকলাপ)"</item>
+    <item msgid="4338089220026248848">"কেশ্ব কৰা হোৱা (কাৰ্যকলাপ গ্ৰাহক)"</item>
+    <item msgid="6652164677254579050">"কেশ্ব কৰা হোৱা (খালী)"</item>
+  </string-array>
+  <string-array name="color_picker">
+    <item msgid="7631642672260600032">"গাঢ় সেউজ-নীলা"</item>
+    <item msgid="8332294763632946560">"নীলা"</item>
+    <item msgid="2023216417616991392">"ইণ্ডিগ\'"</item>
+    <item msgid="3170497246594232819">"বেঙুনীয়া"</item>
+    <item msgid="4608643045752965568">"গুলপীয়া"</item>
+    <item msgid="6131821495505931173">"ৰঙা"</item>
+  </string-array>
+  <string-array name="automatic_storage_management_days">
+    <item msgid="687318592238852312">"৩০দিনতকৈ অধিক পুৰণি"</item>
+    <item msgid="2900554746706302178">"৬০ দিনতকৈ অধিক পুৰণি"</item>
+    <item msgid="5692284879054004388">"৯০ দিনতকৈ অধিক পুৰণি"</item>
+  </string-array>
+  <string-array name="wifi_metered_entries">
+    <item msgid="2975784243692054526">"নেটৱৰ্ক অগ্ৰাধিকাৰ ব্যৱহাৰ কৰক"</item>
+    <item msgid="8745603368609022803">"মিটাৰ কৰা হিছাপে আচৰণ কৰক"</item>
+    <item msgid="2266114985518865625">"নিৰিখ অনিৰ্দিষ্ট বুলি গণ্য কৰক"</item>
+  </string-array>
+</resources>
diff --git a/res/values-as/config.xml b/res/values-as/config.xml
new file mode 100644
index 0000000..153e247
--- /dev/null
+++ b/res/values-as/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="config_backup_settings_label" msgid="4423938073600296337"></string>
+</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 43ce3e2..82ac422 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bu cihazı MIDI kimi istifadə edin"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB istifadəsi"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB istifadə edin"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Enerji dodlurulması"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Qoşulmuş cihaza enerji doldurulur"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index e260cca..6070700 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -3403,6 +3403,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Koristite ovaj uređaj kao MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Koristi USB za"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Koristite USB i za"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Punjenje uređaja"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Punjenje povezanog uređaja"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index cfd1152..7734be5 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -488,8 +488,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"Абараніце свой планшэт"</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"Абараніце сваю прыладу"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"Абараніце свой тэлефон"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"Для большай бяспекі наладзьце дадатковы спосаб блакіроўкі экрана"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"Прадухіліце выкарыстанне гэтага планшэта без вашага дазволу, актываваўшы функцыі абароны прылады. Выберыце спосаб блакіроўкі экрана, які вы хочаце выкарыстоўваць."</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"Прадухіліце выкарыстанне гэтай прылады без вашага дазволу, актываваўшы функцыі абароны прылады. Выберыце спосаб блакіроўкі экрана, які вы хочаце выкарыстоўваць."</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"Прадухіліце выкарыстанне гэтага тэлефона без вашага дазволу, актываваўшы функцыі абароны прылады. Выберыце спосаб блакіроўкі экрана, які вы хочаце выкарыстоўваць."</string>
@@ -948,8 +947,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Усталёўка пункту доступу Wi‑Fi"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"Хот-спот AndroidAP WPA2 PSK"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"AndroidHotspot"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Функцыя недаступная, бо ўключаны рэжым палёту"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Wi-Fi-тэлефанія"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Рабіце выклікі праз Wi‑Fi"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Уключыце Wi-Fi-тэлефанію"</string>
@@ -1518,17 +1516,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Інфармацыя аб бяспецы"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Падключэнне да інтэрнэту адсутнічае. Каб праглядзець гэтую інфармацыю, наведайце %s з любога камп\'ютара, падключанага да інтэрнэту."</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Загрузка..."</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"Наладзьце блакіроўку экрана"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"Задайце пароль, каб абараніць прыладу"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"Перш чым карыстацца адбіткам пальца, задайце пароль"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"Спачатку задайце ўзор"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"Задайце PIN-код, каб абараніць прыладу"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"Каб карыст. адбіт. пальца, задайце PIN-код"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"Задайце ўзор разблакіроўкі, каб абараніць прыладу"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Увядзіце пароль яшчэ раз"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Пацвердзіце ўзор"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"Увядзіце PIN-код яшчэ раз"</string>
@@ -3456,6 +3450,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Выкарыстоўваць гэту прыладу ў якасці MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Выкарыстоўваць USB для"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Іншыя рэжымы працы USB"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Зарадка гэтай прылады"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Зарадка падключанай прылады"</string>
@@ -3942,8 +3940,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"занята"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Ачысціць даныя праграмы"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Хочаце выдаліць гэту імгненную праграму?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Адкрыць"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Гульні"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Аўдыяфайлы"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Занятае месца"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 7c9fa03..294da2c 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Използване на това устройство като MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Използване на USB за"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Използване на USB и за"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Зареждане на това устройство"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Зареждане на свързаното устройство"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ползв."</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Изчистване на приложението"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Искате ли да премахнете това мигновено приложение?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Отваряне"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Игри"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Аудиофайлове"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Използвано място"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 802df7f..e7ab661 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -482,8 +482,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"আপনার ট্যাবলেটটিকে নিরাপদ করুন"</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"আপনার ডিভাইসটিকে নিরাপদ করুন"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"আপনার ফোন রক্ষা করুন"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"অতিরিক্ত নিরাপত্তার জন্য একটি ব্যাক-আপ স্ক্রিন লক সেট করুন"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"ডিভাইস সুরক্ষা বৈশিষ্ট্যগুলি সক্রিয় করার দ্বারা আপনার অনুমতি ছাড়া অন্যদের এই ট্যাবলেটটি ব্যবহার করা থেকে আটকান৷ আপনি ব্যবহার করতে চান এমন স্ক্রিন লক বেছে নিন৷"</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"ডিভাইস সুরক্ষা বৈশিষ্ট্যগুলি সক্রিয় করার দ্বারা আপনার অনুমতি ছাড়া অন্যদের এই ডিভাইসটি ব্যবহার করা থেকে আটকান৷ আপনি ব্যবহার করতে চান এমন স্ক্রিন লক বেছে নিন৷"</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"ডিভাইস সুরক্ষা বৈশিষ্ট্যগুলি সক্রিয় করার দ্বারা আপনার অনুমতি ছাড়া অন্যদের এই ফোনটি ব্যবহার করা থেকে আটকান৷ আপনি ব্যবহার করতে চান এমন স্ক্রিন লক বেছে নিন৷"</string>
@@ -924,8 +923,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"ওয়াই-ফাই হটস্পট সেটআপ"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK হটস্পট"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"AndroidHotspot"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"বিমান মোড চালু থাকার কারণে এটি উপলভ্য নয়"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"ওয়াই-ফাই কলিং"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"ওয়াই-ফাই দিয়ে কল কভারেজ বাড়ান"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"ওয়াই-ফাই কলিং চালু করুন"</string>
@@ -1491,17 +1489,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"নিরাপত্তা তথ্য"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"ডেটা সংযোগ নেই। এই তথ্য এখনই দেখার জন্য ইন্টারনেটে সংযুক্ত যে কোনও কম্পিউটার থেকে %s এ যান।"</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"লোড হচ্ছে..."</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"স্ক্রিন লক সেট করুন"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"নিরাপত্তার জন্য, পাসওয়ার্ড সেট করুন"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"আঙ্গুলের ছাপ ব্যবহার করার জন্য পাসওয়ার্ড সেট করুন"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"আঙ্গুলের ছাপ ব্যবহার করার জন্য প্যাটার্ন সেট করুন"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"নিরাপত্তার জন্য, পিন সেট করুন"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"আঙ্গুলের ছাপ ব্যবহার করার জন্য পিন সেট করুন"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"নিরাপত্তার জন্য, প্যাটার্ন সেট করুন"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"আপনার পাসওয়ার্ডটি আবার লিখুন"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"আপনার প্যাটার্ন নিশ্চিত করুন"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"আপনার পিনটি আবার লিখুন"</string>
@@ -3364,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"MIDI হিসেবে এই ডিভাইসটি ব্যবহার করুন"</string>
     <string name="usb_use" msgid="3372728031108932425">"এর জন্য USB ব্যবহার করুন"</string>
     <string name="usb_use_also" msgid="557340935190819370">"এছাড়া এই সমস্ত কাজেও USB ব্যবহার করুন:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"এই ডিভাইসটি চার্জ করা হচ্ছে"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"সংযুক্ত ডিভাইসে চার্জ দেওয়া"</string>
@@ -3816,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ব্যবহৃত"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"অ্যাপের ডেটা সাফ করুন"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"আপনি কি এই ঝটপট অ্যাপটি সরাতে চান?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"চালু করুন"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"গেম্স"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"অডিও ফাইলগুলি"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"স্টোরেজ ব্যবহার হয়েছে"</string>
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 8dd114d..7fea8d8 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Tretiraj kao vezu s ograničenjem"</item>
     <item msgid="2266114985518865625">"Tretiraj kao vezu bez ograničenja"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 942999a..8f62501 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -445,8 +445,8 @@
     <string name="crypt_keeper_encrypt_title" product="tablet" msgid="1060273569887301457">"Šifriraj tablet"</string>
     <string name="crypt_keeper_encrypt_title" product="default" msgid="1878996487755806122">"Šifriranje telefona"</string>
     <string name="crypt_keeper_encrypted_summary" msgid="1868233637888132906">"Šifrirano"</string>
-    <string name="crypt_keeper_desc" product="tablet" msgid="503014594435731275">"Možete šifrirati svoje račune, postavke, preuzete aplikacije i njihove podatke, medijske podatke i druge datoteke. Nakon šifriranja tableta, uz pretpostavku da ste postavili zaključavanje ekrana (tj. postavili uzorak, numerički PIN ili lozinku), bit će potrebno da otključate ekran prilikom svakog uključivanja kako biste izvršili dešifriranje. Jedina alternativa dešifriranju je ponovno postavljanje na fabričke postavke uz brisanje svih vaših podataka.\n\nZa šifriranje je potreban jedan sat ili duže. Morate započeti sa napunjenom baterijom, a tablet treba biti priključen na napajanje tokom cijelog postupka. U slučaju prekida, izgubit ćete jedan dio ili sve svoje podatke"</string>
-    <string name="crypt_keeper_desc" product="default" msgid="2579929266645543631">"Možete šifrirati svoje račune, postavke, preuzete aplikacije i njihove podatke, medijske sadržaje i druge datoteke. Nakon šifriranja telefona, uz pretpostavku da ste postavili zaključavanje ekrana (tj. postavili uzorak, numerički PIN ili lozinku), bit će potrebno da otključate ekran prilikom svakog uključivanja kako biste izvršili dešifriranje. Jedina alternativa dešifriranju je ponovno postavljanje na fabričke postavke uz brisanje svih vaših podataka.\n\nZa šifriranje je potreban jedan sat ili duže. Morate započeti sa napunjenom baterijom, a telefon treba biti priključen na napajanje tokom cijelog postupka. U slučaju prekida, izgubit ćete jedan dio ili sve svoje podatke."</string>
+    <string name="crypt_keeper_desc" product="tablet" msgid="503014594435731275">"Možete šifrirati svoje račune, postavke, preuzete aplikacije i njihove podatke, medijske podatke i druge fajlove. Nakon šifriranja tableta, uz pretpostavku da ste postavili zaključavanje ekrana (tj. postavili uzorak, numerički PIN ili lozinku), bit će potrebno da otključate ekran prilikom svakog uključivanja kako biste izvršili dešifriranje. Jedina alternativa dešifriranju je ponovno postavljanje na fabričke postavke uz brisanje svih vaših podataka.\n\nZa šifriranje je potreban jedan sat ili duže. Morate započeti sa napunjenom baterijom, a tablet treba biti priključen na napajanje tokom cijelog postupka. U slučaju prekida, izgubit ćete jedan dio ili sve svoje podatke"</string>
+    <string name="crypt_keeper_desc" product="default" msgid="2579929266645543631">"Možete šifrirati svoje račune, postavke, preuzete aplikacije i njihove podatke, medijske sadržaje i druge fajlove. Nakon šifriranja telefona, uz pretpostavku da ste postavili zaključavanje ekrana (tj. postavili uzorak, numerički PIN ili lozinku), bit će potrebno da otključate ekran prilikom svakog uključivanja kako biste izvršili dešifriranje. Jedina alternativa dešifriranju je ponovno postavljanje na fabričke postavke uz brisanje svih vaših podataka.\n\nZa šifriranje je potreban jedan sat ili duže. Morate započeti sa napunjenom baterijom, a telefon treba biti priključen na napajanje tokom cijelog postupka. U slučaju prekida, izgubit ćete jedan dio ili sve svoje podatke."</string>
     <string name="crypt_keeper_button_text" product="tablet" msgid="1189623490604750854">"Šifriraj tablet"</string>
     <string name="crypt_keeper_button_text" product="default" msgid="2008346408473255519">"Šifriraj telefon"</string>
     <string name="crypt_keeper_low_charge_text" msgid="2029407131227814893">"Napunite bateriju i pokušajte ponovo."</string>
@@ -718,6 +718,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Zapamti postavke"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maksimalan broj povezanih Bluetooth audio uređaja"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Izaberite maksimalan broj povezanih Bluetooth audio uređaja"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Emitiranje"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Omogući bežični prikaz"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"Nije pronađen nijedan uređaj u blizini."</string>
@@ -1211,7 +1215,7 @@
     <string name="memory_downloads_usage" msgid="3755173051677533027">"Preuzimanja"</string>
     <string name="memory_dcim_usage" msgid="558887013613822577">"Slike, videozapisi"</string>
     <string name="memory_music_usage" msgid="1363785144783011606">"Zvuk (muzika, melodije zvona, podcasti itd.)"</string>
-    <string name="memory_media_misc_usage" msgid="6094866738586451683">"Druge datoteke"</string>
+    <string name="memory_media_misc_usage" msgid="6094866738586451683">"Drugi fajlovi"</string>
     <string name="memory_media_cache_usage" msgid="6704293333141177910">"Keširani podaci"</string>
     <string name="sd_eject" product="nosdcard" msgid="4988563376492400073">"Deaktiviraj dijeljenu pohranu"</string>
     <string name="sd_eject" product="default" msgid="6915293408836853020">"Deaktiviraj SD karticu"</string>
@@ -1261,7 +1265,7 @@
     <string name="usb_mtp_title" msgid="3399663424394065964">"Medijski uređaj (MTP)"</string>
     <string name="usb_mtp_summary" msgid="4617321473211391236">"Omogućava prenošenje medijskih fajlova u Windows ili korištenje Android File Transfer aplikacije za Mac (pogledajte www.android.com/filetransfer)"</string>
     <string name="usb_ptp_title" msgid="3852760810622389620">"Kamera (PTP)"</string>
-    <string name="usb_ptp_summary" msgid="7406889433172511530">"Omogućava vam da prenesete fotografije pomoću softvera fotoaparata i da prenesete sve datoteke na računare koji ne podržavaju MTP"</string>
+    <string name="usb_ptp_summary" msgid="7406889433172511530">"Omogućava vam da prenesete fotografije pomoću softvera fotoaparata i da prenesete sve fajlove na računare koji ne podržavaju MTP"</string>
     <string name="usb_midi_title" msgid="3069990264258413994">"MIDI"</string>
     <string name="usb_midi_summary" msgid="539169474810956358">"Omogućava da MIDI omogućene aplikacije rade preko USB-a sa MIDI softverom na vašem računaru."</string>
     <string name="storage_other_users" msgid="808708845102611856">"Drugi korisnici"</string>
@@ -1281,8 +1285,8 @@
     <string name="storage_dialog_unmounted" msgid="6403320870103261477">"Ovaj uređaj (<xliff:g id="NAME_0">^1</xliff:g>) je uspješno uklonjen, ali je i dalje dostupan. \n\nDa biste koristili uređaj <xliff:g id="NAME_1">^1</xliff:g>, prvo ga morate priključiti."</string>
     <string name="storage_dialog_unmountable" msgid="3732209361668282254">"Ovaj <xliff:g id="NAME_0">^1</xliff:g> je oštećen. \n\nDa biste koristili ovaj <xliff:g id="NAME_1">^1</xliff:g>, najprije ga morate postaviti."</string>
     <string name="storage_dialog_unsupported" msgid="4503128224360482228">"Ovaj uređaj ne podržava <xliff:g id="NAME_0">^1</xliff:g>. \n\n Da biste koristili <xliff:g id="NAME_1">^1</xliff:g> s ovim uređajem, najprije ga morate postaviti."</string>
-    <string name="storage_internal_format_details" msgid="4018647158382548820">"Nakon formatiranja, možete koristiti ovu <xliff:g id="NAME_0">^1</xliff:g> u drugim uređajima. \n\n Svi podaci sa ove <xliff:g id="NAME_1">^1</xliff:g> će biti izbrisani. Razmislite prvo o kreiranju sigurnosne kopije \n\n"<b>" Rezervne kopije za Fotografije i druge medije "</b>\n" Premjestite multimedijalne datoteke u alternativne skladištenje na ovom uređaju, ili ih prenesete na računalo pomoću USB kabla. \n\n"<b>" Sigurnosne kopije za aplikacije"</b>\n" Sve aplikacije pohranjene na ovom <xliff:g id="NAME_6">^1</xliff:g> će biti deinstalirane i njihovi podaci će biti izbrisani. Da bi ove aplikacije sačuvali, premjestite ih u alternativne memorije na ovom uređaju."</string>
-    <string name="storage_internal_unmount_details" msgid="3582802571684490057"><b>"Kada izbacite ovaj uređaj (<xliff:g id="NAME_0">^1</xliff:g>), aplikacije pohranjene na njemu će prestati radit, a medijske datoteke pohranjene na njemu neće biti dostupne dok ga ponovo ne umetnete."</b>" \n\nUređaj <xliff:g id="NAME_1">^1</xliff:g> je formatiran tako da funkcionira samo na ovom uređaju. Neće funkcionirati na bilo kojem drugom uređaju."</string>
+    <string name="storage_internal_format_details" msgid="4018647158382548820">"Nakon formatiranja, možete koristiti ovu <xliff:g id="NAME_0">^1</xliff:g> u drugim uređajima. \n\n Svi podaci sa ove <xliff:g id="NAME_1">^1</xliff:g> će biti izbrisani. Razmislite prvo o kreiranju sigurnosne kopije \n\n"<b>" Rezervne kopije za Fotografije i druge medije "</b>\n" Premjestite multimedijalne fajlove u alternativne skladištenje na ovom uređaju, ili ih prenesete na računalo pomoću USB kabla. \n\n"<b>" Sigurnosne kopije za aplikacije"</b>\n" Sve aplikacije pohranjene na ovom <xliff:g id="NAME_6">^1</xliff:g> će biti deinstalirane i njihovi podaci će biti izbrisani. Da bi ove aplikacije sačuvali, premjestite ih u alternativne memorije na ovom uređaju."</string>
+    <string name="storage_internal_unmount_details" msgid="3582802571684490057"><b>"Kada izbacite ovaj uređaj (<xliff:g id="NAME_0">^1</xliff:g>), aplikacije pohranjene na njemu će prestati radit, a medijski fajlovi pohranjeni na njemu neće biti dostupni dok ga ponovo ne umetnete."</b>" \n\nUređaj <xliff:g id="NAME_1">^1</xliff:g> je formatiran tako da funkcionira samo na ovom uređaju. Neće funkcionirati na bilo kojem drugom uređaju."</string>
     <string name="storage_internal_forget_details" msgid="9028875424669047327">"Da biste koristili aplikacije, slike ili podatke koje ovaj uređaj (<xliff:g id="NAME">^1</xliff:g>) sadrži, ponovo ga umetnite. \n\nUmjesto toga, možete odabrati da zaboravite ovu memoriju ukoliko uređaj nije dostupan \n\nAko odaberete da zaboravite memoriju, svi podaci koje uređaj sadrži će zauvijek biti izgubljeni \n\nAplikacije možete kasnije ponovo instalirati, ali njihovi podaci pohranjeni na ovom uređaju će biti izgubljeni."</string>
     <string name="storage_internal_forget_confirm_title" msgid="1370847944388479245">"Želite li zaboraviti uređaj <xliff:g id="NAME">^1</xliff:g>?"</string>
     <string name="storage_internal_forget_confirm" msgid="1148446041396902905">"Sve aplikacije, fotografije i podaci pohranjeni na ovom <xliff:g id="NAME">^1</xliff:g> bit će trajno izgubljeni."</string>
@@ -1310,7 +1314,7 @@
     <string name="storage_wizard_format_progress_title" msgid="6487352396450582292">"Formatiranje <xliff:g id="NAME">^1</xliff:g>..."</string>
     <string name="storage_wizard_format_progress_body" msgid="4445041233802828430">"Nemojte uklanjati <xliff:g id="NAME">^1</xliff:g> dok se formatira."</string>
     <string name="storage_wizard_migrate_title" msgid="1363078147938160407">"Premjestite pod. u novu memoriju"</string>
-    <string name="storage_wizard_migrate_body" msgid="890751699549542345">"Možete premjestiti slike, datoteke i neke aplikacije na novi uređaj <xliff:g id="NAME">^1</xliff:g>. \n\nPremještanje traje otprilike <xliff:g id="TIME">^2</xliff:g> te će osloboditi <xliff:g id="SIZE">^3</xliff:g> unutrašnje memorije. Neke aplikacije neće funkcionirati dok je ovo u toku."</string>
+    <string name="storage_wizard_migrate_body" msgid="890751699549542345">"Možete premjestiti slike, fajlove i neke aplikacije na novi uređaj <xliff:g id="NAME">^1</xliff:g>. \n\nPremještanje traje otprilike <xliff:g id="TIME">^2</xliff:g> te će osloboditi <xliff:g id="SIZE">^3</xliff:g> unutrašnje memorije. Neke aplikacije neće funkcionirati dok je ovo u toku."</string>
     <string name="storage_wizard_migrate_now" msgid="4523444323744239143">"Premjesti sada"</string>
     <string name="storage_wizard_migrate_later" msgid="3173482328116026253">"Premjesti kasnije"</string>
     <string name="storage_wizard_migrate_confirm_title" msgid="8564833529613286965">"Premjesti podatke sada"</string>
@@ -1320,7 +1324,7 @@
     <string name="storage_wizard_migrate_details" msgid="3709728824651136227">"Za vrijeme premještanja: \n• Nemojte uklanjati uređaj <xliff:g id="NAME">^1</xliff:g>. \n• Neke aplikacije neće funkcionirati ispravno. \n• Uređaj treba biti napunjen."</string>
     <string name="storage_wizard_ready_title" msgid="5381632402953258267">"<xliff:g id="NAME">^1</xliff:g> je spreman"</string>
     <string name="storage_wizard_ready_external_body" msgid="2879508114260597474">"Uređaj <xliff:g id="NAME">^1</xliff:g> je spreman za korištenje sa slikama i drugim medijima."</string>
-    <string name="storage_wizard_ready_internal_body" msgid="122532674037860197">"Novi uređaj (<xliff:g id="NAME">^1</xliff:g>) funkcionira. \n\nDa biste premjestili slike, datoteke i podatke aplikacija na ovaj uređaj, idite na Postavke &gt; Memorija."</string>
+    <string name="storage_wizard_ready_internal_body" msgid="122532674037860197">"Novi uređaj (<xliff:g id="NAME">^1</xliff:g>) funkcionira. \n\nDa biste premjestili slike, fajlove i podatke aplikacija na ovaj uređaj, idite na Postavke &gt; Memorija."</string>
     <string name="storage_wizard_move_confirm_title" msgid="292782012677890250">"Premjesti <xliff:g id="APP">^1</xliff:g>"</string>
     <string name="storage_wizard_move_confirm_body" msgid="5176432115206478941">"Premještanje <xliff:g id="APP">^1</xliff:g> i njenih podataka na <xliff:g id="NAME_0">^2</xliff:g> će trajati samo nekoliko trenutaka. Nećete biti u mogućnosti koristiti aplikacije sve dok se ne završi premještanje. \n\n Nemojte uklanjati <xliff:g id="NAME_1">^2</xliff:g> tokom premještanja."</string>
     <string name="storage_wizard_move_unlock" msgid="1526216561023200694">"Da prebacite podatke, morate otključati korisnika <xliff:g id="APP">^1</xliff:g>."</string>
@@ -1369,9 +1373,9 @@
     <string name="error_mcc_not3" msgid="4560171714156251661">"MCC polje mora imati 3 cifre."</string>
     <string name="error_mnc_not23" msgid="8418177072458379439">"MNC polje mora imati 2 ili 3 cifre."</string>
     <string name="error_adding_apn_type" msgid="4181334016628549645">"Operater ne dozvoljava dodavanje APN-a tipa %s."</string>
-    <string name="restore_default_apn" msgid="8178010218751639581">"Obnavljanje zadanih postavki za APN."</string>
+    <string name="restore_default_apn" msgid="8178010218751639581">"Vraćanje zadanih postavki za APN."</string>
     <string name="menu_restore" msgid="8260067415075573273">"Vrati na zadane vrijednosti"</string>
-    <string name="restore_default_apn_completed" msgid="2824775307377604897">"Obnavljanje zadanih postavki za APN dovršeno."</string>
+    <string name="restore_default_apn_completed" msgid="2824775307377604897">"Vraćanje zadanih postavki za APN dovršeno."</string>
     <string name="reset_dashboard_title" msgid="6254873816990678620">"Opcije vraćanja na zadano"</string>
     <string name="reset_dashboard_summary" msgid="4851012632493522755">"Mreža, aplikacije ili uređaj mogu se vratiti na zadano"</string>
     <string name="reset_network_title" msgid="6166025966016873843">"Vrati Wi-Fi, mobilnu i Bluetooth vezu na zadane postavke"</string>
@@ -1655,7 +1659,7 @@
     <string name="sd_card_storage" product="default" msgid="7623513618171928235">"Pohrana na SD kartici"</string>
     <string name="recompute_size" msgid="7722567982831691718">"Ponovno izračunavanje veličine…"</string>
     <string name="clear_data_dlg_title" msgid="5605258400134511197">"Izbrisati podatke aplikacija?"</string>
-    <string name="clear_data_dlg_text" msgid="3951297329833822490">"Svi podaci ove aplikacije će biti trajno izbrisani. To uključuje sve datoteke, postavke, račune, baze podataka itd."</string>
+    <string name="clear_data_dlg_text" msgid="3951297329833822490">"Svi podaci ove aplikacije će biti trajno izbrisani. To uključuje sve fajlove, postavke, račune, baze podataka itd."</string>
     <string name="dlg_ok" msgid="2402639055725653590">"Uredu"</string>
     <string name="dlg_cancel" msgid="1674753358972975911">"Otkaži"</string>
     <string name="app_not_found_dlg_title" msgid="3127123411738434964"></string>
@@ -1894,8 +1898,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Koristi uslugu"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Koristi ispravku boje"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Koristi natpise"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"UKLJUČENO"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"ISKLJUČENO"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Prikaži u Brzim postavkama"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Način rada za korekciju"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2919,6 +2925,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serijski broj, verzija hardvera"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"nivo sigurnosne zakrpe za android, verzija nemoduliranog signala, osnovna verzija"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambijentalni prikaz, Prikaz zaključavanja ekrana"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Postavljanje Wi-Fi NFC taga"</string>
     <string name="write_tag" msgid="8571858602896222537">"Pisati"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Dodirnite oznaku da biste pisali..."</string>
@@ -3209,7 +3217,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Pređi na postavku Samo alarmi do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Promijeniti u uvijek prekini"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"Kada je ekran uključen"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Dopustite da se obavještenja koja su utišana načinom rada Ne ometaj istaknu na ekranu"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"Kada je ekran isključen"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Dopustite da obavještenja koja su utišana načinom rada Ne ometaj uključe ekran i zatrepere svjetlom"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Dopustite da obavještenja koja su utišana načinom rada Ne ometaj uključe ekran"</string>
@@ -3397,12 +3406,16 @@
     <string name="usb_use_file_transfers" msgid="1223134119354320726">"Prijenos fajlova"</string>
     <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Prebacite fajlove na drugi uređaj"</string>
     <string name="usb_use_photo_transfers" msgid="8192719651229326283">"PTP"</string>
-    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Prebacuje slike ili datoteke ukoliko MTP nije podržan (PTP)"</string>
+    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Prebacuje slike ili fajlove ukoliko MTP nije podržan (PTP)"</string>
     <string name="usb_use_tethering" msgid="3944506882789422118">"Povezivanje mobitela putem USB-a"</string>
     <string name="usb_use_MIDI" msgid="5116404702692483166">"MIDI"</string>
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Koristite uređaj u MIDI načinu"</string>
     <string name="usb_use" msgid="3372728031108932425">"Koristite USB za"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Također koristi USB za"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Punjenje ovog uređaja"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Punjenje povezanog uređaja"</string>
@@ -3525,8 +3538,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"<xliff:g id="USED_MEMORY">%1$s</xliff:g> prosječno od ukupno <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> iskorištene memorije"</string>
     <string name="users_summary" msgid="1674864467098487328">"Prijavljeni ste kao korisnik <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> je zadana aplikacija"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"UKLJUČENO"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"ISKLJUČENO"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Izrada sigurnosnih kopija je onemogućena"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Ažurirano na Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Dostupno je ažuriranje"</string>
@@ -3705,9 +3720,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Povezan s uređajem <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Povezan s više uređaja"</string>
     <string name="demo_mode" msgid="2798762752209330277">"Način demonstracije Sistemskog UI-a"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Pločice programera za brze postavke"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Trag prozora"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Površinsko praćenje"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Postavke radnog profila"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pretraživanje kontakata"</string>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index c8ba797..0960e6d 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Tracta com a Wi-Fi amb límit de dades"</item>
     <item msgid="2266114985518865625">"Tracta com a Wi-Fi sense límit de dades"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 9d319da..b755982 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Recorda la configuració"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Nombre màxim de dispositius d\'àudio Bluetooth connectats"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Selecciona el nombre màxim de dispositius d\'àudio Bluetooth connectats"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Emet"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Activa pantalla sense fil"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No s\'ha trobat cap dispositiu a prop."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Utilitza el servei"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Utilitza la correcció del color"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Utilitza subtítols"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ACTIVAT"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"DESACTIVADA"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Mostra a configuració ràpida"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Mode de correcció"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"número de sèrie, versió de maquinari"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"nivell de pedaç de seguretat d\'Android, versió de banda base, versió de kernel"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Pantalla ambient, pantalla de bloqueig"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Configura l\'etiqueta d\'NFC per a Wi-Fi"</string>
     <string name="write_tag" msgid="8571858602896222537">"Escriu-hi"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Toca una etiqueta per escriure..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Canvia al mode Només alarmes fins a les <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Canvia al mode Interromp sempre"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"Quan la pantalla estigui encesa"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Permet que les notificacions silenciades pel mode No molestis obrin finestres emergents"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"Quan la pantalla estigui apagada"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Permet que les notificacions silenciades pel mode No molestis encenguin la pantalla i facin parpellejar el llum"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Permet que les notificacions silenciades pel mode No molestis encenguin la pantalla"</string>
@@ -3358,6 +3367,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"fer servir aquest dispositiu com a MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Funcions de l\'USB"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Utilitza la connexió USB també per al següent:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"S\'està carregant el dispositiu"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Càrrega de dispositius connectats"</string>
@@ -3478,8 +3491,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Memòria utilitzada de mitjana: <xliff:g id="USED_MEMORY">%1$s</xliff:g> de <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>"</string>
     <string name="users_summary" msgid="1674864467098487328">"Sessió iniciada com a <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"Aplicació predeterminada: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ACTIVADA"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"DESACTIVADA"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Còpia de seguretat desactivada"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Actualitzat a Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Actualització disponible"</string>
@@ -3653,9 +3668,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connectat a <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connectat a diversos dispositius"</string>
     <string name="demo_mode" msgid="2798762752209330277">"Mode de demostració de la IU del sistema"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Mosaics de configuració ràpida per a desenvolupadors"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Seguiment gestor finestres"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Captura de superfícies"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configuració del perfil professional"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Cerca de contactes"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 0ffea2b..a75bfe3 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -3448,6 +3448,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Toto zařízení se použije v režimu MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Použití USB:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Další využití USB:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Nabíjení zařízení"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Nabíjení připojeného zařízení"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 8ad4fad..9c40716 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bruge denne enhed som MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Brug USB"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Brug også USB til"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Opladning af denne enhed"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Den tilsluttede enhed oplades"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 2b8f9a9..2278eaf 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Dieses Gerät als MIDI verwenden"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB verwenden für"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB auch verwenden für"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Gerät aufladen"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Verbundenes Gerät wird aufgeladen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ff765ea..5669f35 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Χρήση αυτής της συσκευής ως MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Χρήση USB για"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Χρησιμοποιήστε επίσης το USB για"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Φόρτιση αυτής της συσκευής"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Φόρτιση συνδεδεμένης συσκευής"</string>
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
index 2b3388b..8b87a4e 100644
--- a/res/values-en-rAU/arrays.xml
+++ b/res/values-en-rAU/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Treat as metered"</item>
     <item msgid="2266114985518865625">"Treat as unmetered"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 15e68ae..b2fe946 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Remember settings"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maximum connected Bluetooth audio devices"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Select maximum number of connected Bluetooth audio devices"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Cast"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Enable wireless display"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No nearby devices were found."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Use service"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Use colour correction"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Use captions"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ON"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"OFF"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Show in Quick Settings"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Correction mode"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serial number, hardware version"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"android security patch level, baseband version, kernel version"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambient display, Lock screen display"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Set up Wi-Fi NFC Tag"</string>
     <string name="write_tag" msgid="8571858602896222537">"Write"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Tap a tag to write..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Change to alarms only until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Change to always interrupt"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"When the screen is on"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Let notifications silenced by Do Not Disturb pop on screen"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"When the screen is off"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Let notifications silenced by Do Not Disturb turn on the screen and blink the light"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Let notifications silenced by Do Not Disturb turn on the screen"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Use this device as MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Use USB for"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Also use USB for"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Default USB Configuration"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"When another device is connected and your phone is unlocked, these settings will be applied. Only connect to trusted devices."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Charging this device"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Charging connected device"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Avg <xliff:g id="USED_MEMORY">%1$s</xliff:g> of <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> memory used"</string>
     <string name="users_summary" msgid="1674864467098487328">"Signed in as <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> is default"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ON"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"OFF"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Backup disabled"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Updated to Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Update available"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connected to <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connected to multiple devices"</string>
     <string name="demo_mode" msgid="2798762752209330277">"System UI demo mode"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Quick settings developer tiles"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Window Trace"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Surface Trace"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Work profile settings"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Contact search"</string>
diff --git a/res/values-en-rCA/arrays.xml b/res/values-en-rCA/arrays.xml
index 2b3388b..8b87a4e 100644
--- a/res/values-en-rCA/arrays.xml
+++ b/res/values-en-rCA/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Treat as metered"</item>
     <item msgid="2266114985518865625">"Treat as unmetered"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 35a548b..81d4ca8 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Remember settings"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maximum connected Bluetooth audio devices"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Select maximum number of connected Bluetooth audio devices"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Cast"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Enable wireless display"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No nearby devices were found."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Use service"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Use colour correction"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Use captions"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ON"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"OFF"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Show in Quick Settings"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Correction mode"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serial number, hardware version"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"android security patch level, baseband version, kernel version"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambient display, Lock screen display"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Set up Wi-Fi NFC Tag"</string>
     <string name="write_tag" msgid="8571858602896222537">"Write"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Tap a tag to write..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Change to alarms only until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Change to always interrupt"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"When the screen is on"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Let notifications silenced by Do Not Disturb pop on screen"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"When the screen is off"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Let notifications silenced by Do Not Disturb turn on the screen and blink the light"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Let notifications silenced by Do Not Disturb turn on the screen"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Use this device as MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Use USB for"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Also use USB for"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Default USB Configuration"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"When another device is connected and your phone is unlocked, these settings will be applied. Only connect to trusted devices."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Charging this device"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Charging connected device"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Avg <xliff:g id="USED_MEMORY">%1$s</xliff:g> of <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> memory used"</string>
     <string name="users_summary" msgid="1674864467098487328">"Signed in as <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> is default"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ON"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"OFF"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Backup disabled"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Updated to Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Update available"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connected to <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connected to multiple devices"</string>
     <string name="demo_mode" msgid="2798762752209330277">"System UI demo mode"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Quick settings developer tiles"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Window Trace"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Surface Trace"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Work profile settings"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Contact search"</string>
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
index 2b3388b..8b87a4e 100644
--- a/res/values-en-rGB/arrays.xml
+++ b/res/values-en-rGB/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Treat as metered"</item>
     <item msgid="2266114985518865625">"Treat as unmetered"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 15e68ae..b2fe946 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Remember settings"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maximum connected Bluetooth audio devices"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Select maximum number of connected Bluetooth audio devices"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Cast"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Enable wireless display"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No nearby devices were found."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Use service"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Use colour correction"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Use captions"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ON"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"OFF"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Show in Quick Settings"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Correction mode"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serial number, hardware version"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"android security patch level, baseband version, kernel version"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambient display, Lock screen display"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Set up Wi-Fi NFC Tag"</string>
     <string name="write_tag" msgid="8571858602896222537">"Write"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Tap a tag to write..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Change to alarms only until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Change to always interrupt"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"When the screen is on"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Let notifications silenced by Do Not Disturb pop on screen"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"When the screen is off"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Let notifications silenced by Do Not Disturb turn on the screen and blink the light"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Let notifications silenced by Do Not Disturb turn on the screen"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Use this device as MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Use USB for"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Also use USB for"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Default USB Configuration"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"When another device is connected and your phone is unlocked, these settings will be applied. Only connect to trusted devices."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Charging this device"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Charging connected device"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Avg <xliff:g id="USED_MEMORY">%1$s</xliff:g> of <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> memory used"</string>
     <string name="users_summary" msgid="1674864467098487328">"Signed in as <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> is default"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ON"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"OFF"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Backup disabled"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Updated to Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Update available"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connected to <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connected to multiple devices"</string>
     <string name="demo_mode" msgid="2798762752209330277">"System UI demo mode"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Quick settings developer tiles"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Window Trace"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Surface Trace"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Work profile settings"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Contact search"</string>
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
index 2b3388b..8b87a4e 100644
--- a/res/values-en-rIN/arrays.xml
+++ b/res/values-en-rIN/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Treat as metered"</item>
     <item msgid="2266114985518865625">"Treat as unmetered"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 15e68ae..b2fe946 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Remember settings"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maximum connected Bluetooth audio devices"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Select maximum number of connected Bluetooth audio devices"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Cast"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Enable wireless display"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No nearby devices were found."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Use service"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Use colour correction"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Use captions"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ON"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"OFF"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Show in Quick Settings"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Correction mode"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serial number, hardware version"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"android security patch level, baseband version, kernel version"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambient display, Lock screen display"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Set up Wi-Fi NFC Tag"</string>
     <string name="write_tag" msgid="8571858602896222537">"Write"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Tap a tag to write..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Change to alarms only until <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Change to always interrupt"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"When the screen is on"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Let notifications silenced by Do Not Disturb pop on screen"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"When the screen is off"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Let notifications silenced by Do Not Disturb turn on the screen and blink the light"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Let notifications silenced by Do Not Disturb turn on the screen"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Use this device as MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Use USB for"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Also use USB for"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Default USB Configuration"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"When another device is connected and your phone is unlocked, these settings will be applied. Only connect to trusted devices."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Charging this device"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Charging connected device"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Avg <xliff:g id="USED_MEMORY">%1$s</xliff:g> of <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> memory used"</string>
     <string name="users_summary" msgid="1674864467098487328">"Signed in as <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> is default"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ON"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"OFF"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Backup disabled"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Updated to Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Update available"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connected to <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connected to multiple devices"</string>
     <string name="demo_mode" msgid="2798762752209330277">"System UI demo mode"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Quick settings developer tiles"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Window Trace"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Surface Trace"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Work profile settings"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Contact search"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 1830c30..4e33693 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -3357,6 +3357,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎Use this device as MIDI‎‏‎‎‏‎"</string>
     <string name="usb_use" msgid="3372728031108932425">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎Use USB for‎‏‎‎‏‎"</string>
     <string name="usb_use_also" msgid="557340935190819370">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎Also use USB for‎‏‎‎‏‎"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎USB‎‏‎‎‏‎"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎Charging this device‎‏‎‎‏‎"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎Charging connected device‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b51252b..951ecff 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -3356,6 +3356,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Usar este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utilizar USB para lo siguiente:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"También usar USB para"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Cargar este dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Cargando dispositivo conectado"</string>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index ce3daf5..7f34311 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Tratar como red de uso no medido"</item>
     <item msgid="2266114985518865625">"Tratar como red de uso medido"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 9d3ad01..84b1201 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Ajustes de recordatorio"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Máximo de dispositivos de audio conectados por Bluetooth"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Selecciona el número máximo de dispositivos de audio conectados por Bluetooth"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Enviar pantalla"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Habilitar pantalla inalámbrica"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"No hay dispositivos cercanos."</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Utilizar el servicio"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Utilizar la corrección de color"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Utilizar subtítulos"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ACTIVADO"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"DESACTIVADO"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Mostrar en ajustes rápidos"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Modo de corrección"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"número de serie, versión de hardware"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"nivel de parche de seguridad de android, versión de banda base, versión de kernel"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Pantalla ambiente, pantalla de bloqueo"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Configurar etiqueta NFC Wi-Fi"</string>
     <string name="write_tag" msgid="8571858602896222537">"Editar"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Toca una etiqueta para editarla..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Cambiar a Solo alarmas hasta las <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Cambiar a interrumpir siempre"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"Cuando la pantalla esté encendida"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Permitir que las notificaciones silenciadas por el modo No molestar aparezcan en la pantalla"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"Cuando la pantalla esté apagada"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Permitir que las notificaciones silenciadas por el modo No molestar activen la pantalla y hagan parpadear la luz"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Permitir que las notificaciones silenciadas por el modo No molestar activen la pantalla"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utilizar este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utilizar USB para"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Utilizar USB también para"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Configuración de USB predeterminada"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"Estos ajustes se aplicarán cuando otro dispositivo esté conectado y tu teléfono esté desbloqueado. Conecta únicamente dispositivos de confianza."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Cargando el dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Cargando dispositivo conectado"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Se está usando una media de <xliff:g id="USED_MEMORY">%1$s</xliff:g> de <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> de memoria"</string>
     <string name="users_summary" msgid="1674864467098487328">"Has iniciado sesión como <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"Aplicación predeterminada: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ACTIVADA"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"DESACTIVADO"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Copia de seguridad inhabilitada"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Actualizado a Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Actualización disponible"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Conectado a <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Conectado a varios dispositivos"</string>
     <string name="demo_mode" msgid="2798762752209330277">"Modo de demostración de IU del sistema"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Ajustes rápidos de mosaicos de desarrolladores"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Captura de ventanas"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Captura de superficies"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Ajustes de perfil de trabajo"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Búsqueda de contactos"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 2a002af..12488ae 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Kasutage seda seadet MIDI-na"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB kasutusviis"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Kasutage USB-d ka järgmiseks:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Seadme laadimine"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Ühendatud seadme laadimine"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"kasut."</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Tühjenda rakendus"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Kas soovite selle installimata avatava rakenduse eemaldada?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Ava"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Mängud"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Helifailid"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Kasutatav ruum"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 7c8d312..10c8d31 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -400,7 +400,7 @@
     <string name="lock_screen_intro_skip_dialog_text" product="device" msgid="1466238255429527112">"Ez dira aktibatuko gailuaren babes-eginbideak. Gailua galtzen baduzu edo lapurtzen badizute, ezin izango duzu ekidin beste pertsona batzuek erabiltzea."</string>
     <string name="lock_screen_intro_skip_dialog_text" product="default" msgid="3008526710555416125">"Ez dira aktibatuko gailuaren babes-eginbideak. Telefonoa galtzen baduzu edo lapurtzen badizute, ezin izango duzu ekidin beste pertsona batzuek erabiltzea."</string>
     <string name="skip_anyway_button_label" msgid="2323522873558834513">"Saltatu halere"</string>
-    <string name="go_back_button_label" msgid="4745265266186209467">"Atzera"</string>
+    <string name="go_back_button_label" msgid="4745265266186209467">"Egin atzera"</string>
     <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="3051496861358227199">"Ukitu sentsorea"</string>
     <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="8793966374365960368">"Telefonoaren atzealdean dago. Erabili hatz erakuslea."</string>
     <string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="2058830032070449160">"Hatz-marken sentsorea gailuan non dagoen erakusten duen ilustrazioa"</string>
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Erabili gailua MIDI gisa"</string>
     <string name="usb_use" msgid="3372728031108932425">"Erabili USBa honetarako:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Erabili USB konexioa hauetarako ere:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Gailua kargatzeko"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Konektatutako gailua kargatzea"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 597be58..40af8f4 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -206,7 +206,7 @@
     <string name="radio_info_neighboring_location_label" msgid="5766020323342985397">"اطلاعات شبکه همراه مجاور (منسوخ شده):"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="7062777594049622128">"نرخ بازخوانی اطلاعات شبکه همراه:"</string>
     <string name="radio_info_cellinfo_label" msgid="6213223844927623098">"همه اطلاعات اندازه‌گیری شبکه همراه:"</string>
-    <string name="radio_info_dcrtinfo_label" msgid="4062076024399431876">"اطلاعات بی‌درنگ اتصال داده:"</string>
+    <string name="radio_info_dcrtinfo_label" msgid="4062076024399431876">"اطلاعات هم‌زمان اتصال داده:"</string>
     <string name="radio_info_gprs_service_label" msgid="4209624131644060517">"سرویس داده:"</string>
     <string name="radio_info_roaming_label" msgid="6141505430275138647">"رومینگ:"</string>
     <string name="radio_info_imei_label" msgid="1220524224732944192">"IMEI:"</string>
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"‏استفاده از این دستگاه به‌عنوان MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"‏استفاده از USB برای"</string>
     <string name="usb_use_also" msgid="557340935190819370">"‏همچنین، استفاده از USB برای"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"شارژ کردن این دستگاه"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"شارژ دستگاه متصل‌‌شده"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 74a553e..bdf0096 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Käytä tätä laitetta MIDI-tilassa."</string>
     <string name="usb_use" msgid="3372728031108932425">"Käytä USB:tä:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Käytä USB:ta myös seuraaviin:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Laitteen lataaminen"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Yhdistetyn laitteen lataaminen"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a8f55e6..b8982d3 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -923,7 +923,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Configuration point accès Wi‑Fi"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"Point d\'accès AndroidAP WPA2 PSK"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"AndroidHotspot"</string>
-    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Cette option n\'est pas accessible, car le mode Avion n\'est pas activé"</string>
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Cette option n\'est pas accessible, car le mode Avion est activé"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Appels Wi-Fi"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Prolong. couv. appel avec Wi‑Fi"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Activer les appels Wi-Fi"</string>
@@ -1493,7 +1493,7 @@
     <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"Pour votre sécurité, définissez un mot de passe"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"Pour util. empr. digit., config. m. de passe"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"Pour utiliser empreinte digitale, configurer schéma"</string>
-    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"Pour votre de sécurité, définissez un NIP"</string>
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"Pour votre sécurité, définissez un NIP"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"Pour util. empr. digit., config. NIP"</string>
     <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"Pour votre sécurité, définissez un schéma de verrouillage"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Entrez de nouveau votre mot de passe"</string>
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utiliser cet appareil en tant que MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utiliser la connexion USB pour :"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Aussi utiliser la connexion USB pour"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Chargement de l\'appareil"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Chargement de l\'appareil connecté"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8d2f660..93b14fa 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utiliser cet appareil en tant que MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utiliser la connexion USB pour"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Également utiliser la connexion USB pour"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Rechargement de l\'appareil"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Rechargement de l\'appareil connecté"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6fa422a..fa94c9a 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utiliza este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Usar USB para"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Usar tamén o USB para"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Cargar este dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Cargando o dispositivo conectado"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0b2e4ef..6abb94a 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"MIDI તરીકે આ ઉપકરણનો ઉપયોગ કરો"</string>
     <string name="usb_use" msgid="3372728031108932425">"આ માટે USB નો ઉપયોગ કરો"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USBનો ઉપયોગ આના માટે પણ કરો"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"આ ઉપકરણને ચાર્જ કરવું"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"કનેક્ટેડ ઉપકરણ ચાર્જ કરી રહ્યાં છીએ"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"વપરાયો"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ઍપ્લિકેશન સાફ કરો"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"શું તમે આ ઝટપટ ઍપ્લિકેશન દૂર કરવા માંગો છો?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"ખોલો"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"રમતો"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ઑડિઓ ફાઇલો"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"જગ્યા વપરાઈ"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 75b698d..833d1b1 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"इस डिवाइस का उपयोग MIDI के रूप में करें"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB का उपयोग इसके लिए करें"</string>
     <string name="usb_use_also" msgid="557340935190819370">"यूएसबी का इस्तेमाल इन कामों के लिए भी करें"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"इस डिवाइस को चार्ज करना"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"जोड़े गए डिवाइस को चार्ज करना"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"उपयोग की गई"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ऐप्लिकेशन साफ़ करें"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"क्या आप इस झटपट ऐप को निकालना चाहते हैं?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"खोलें"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"गेम"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ऑडियो फ़ाइलें"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"उपयोग की गई जगह"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index ee93d12..6d3ccf2 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -3403,6 +3403,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Upotrebljavajte uređaj kao MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Svrha upotrebe USB-a"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Upotrebljavajte USB i za"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Punjenje ovog uređaja"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Punjenje povezanog uređaja"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 40a96f0..4cb4719 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -3360,6 +3360,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"A készülék használata MIDI-eszközként"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB használata a következő célra:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB használata a következőhöz is:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Az eszköz töltése"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Folyamatban van a csatlakoztatott eszköz töltése"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 7eee60f..1c65d2e 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -923,7 +923,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Wi-Fi թեժ կետի կարգավորում"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK թեժ կետ"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"Android թեժ կետ"</string>
-    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Հասանելի չէ, քանի որ ինքնաթիռի ռեժիմը միացված է"</string>
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Հասանելի չէ, քանի որ ինքնաթիռի ռեժիմ է միացված"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Զանգեր Wi-Fi-ի միջոցով"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Ընդարձակեք զանգերի ծածկույթը Wi‑Fi-ի միջոցով"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Միացրեք Wi-Fi-ի միջոցով զանգերը"</string>
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Այս սարքի օգտագործում որպես MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Օգտագործել հետևյալ USB կապակցումը՝"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB-ի այլ կիրառումներ"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Այս սարքի լիցքավորում"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Միացված սարքի լիցքավորում"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4d51617..53088a9 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Menggunakan perangkat ini sebagai MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Gunakan USB untuk"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Gunakan juga USB untuk"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Mengisi baterai perangkat ini"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Mengisi daya perangkat yang terhubung"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index c2325e8..7a064e5 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Nota þetta tæki sem MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Nota USB fyrir"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Nota USB einnig fyrir"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Hleður þetta tæki"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Hlaða tengt tæki"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 63b008b..28da700 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utilizzare questo dispositivo per la modalità MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utilizza connessione USB per"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Usa USB anche per"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Ricarica del dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Ricarica del dispositivo collegato"</string>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index 2da0c1b..1c1927c 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"יש להתייחס כרשת נמדדת"</item>
     <item msgid="2266114985518865625">"יש להתייחס כרשת לא נמדדת"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 140ac32..1093e1f 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -729,6 +729,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"זכור הגדרות"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"‏מקסימום התקני אודיו המחוברים באמצעות Bluetooth"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"‏בחירת מספר מקסימלי של התקני אודיו המחוברים באמצעות Bluetooth"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Cast"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"‏הפעל תצוגת WiFi"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"לא נמצאו מכשירים בקרבת מקום."</string>
@@ -1908,8 +1912,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"שימוש בשירות"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"שימוש בתיקון צבע"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"שימוש בכתוביות"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"מופעל"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"כבוי"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"הצג בהגדרות מהירות"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"מצב תיקון"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2951,7 +2957,9 @@
     <string name="keywords_sim_status" msgid="1474422416860990564">"‏רשת, מצב הרשת הסלולרית, מצב השירות, עוצמת האות, סוג הרשת הסלולרית, נדידה, iccid"</string>
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"מספר סידורי, גרסת חומרה"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"‏רמת תיקון האבטחה ב-Android, גרסת פס בסיס, גרסת ליבה"</string>
-    <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"תצוגה סביבתית, תצוגה של מסך נעילה"</string>
+    <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"תצוגה רגישה לסביבה, תצוגה של מסך נעילה"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"‏הגדר תג NFC של Wi-Fi"</string>
     <string name="write_tag" msgid="8571858602896222537">"כתוב"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"הקש על תג כדי לכתוב..."</string>
@@ -3250,7 +3258,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"עבור למצב \'התראות בלבד\' עד <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"שנה ל\'הפרעות בכל מצב\'"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"כאשר המסך מופעל"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"הודעות שהושתקו במצב \'נא לא להפריע\' יופיעו במסך"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"כאשר המסך כבוי"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"הודעות שהושתקו במצב \'נא לא להפריע\' יפעילו את המסך ואת האור המהבהב"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"הודעות שהושתקו במצב \'נא לא להפריע\' יפעילו את המסך"</string>
@@ -3450,6 +3459,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"‏שימוש במכשיר זה כהתקן MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"‏השתמש ב-USB בשביל"</string>
     <string name="usb_use_also" msgid="557340935190819370">"‏יש להשתמש ב-USB גם בשביל"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"‏ברירת המחדל של תצורת USB"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"כשמכשיר אחר מחובר והטלפון לא נעול, הגדרות אלה יחולו. יש לחבר רק למכשירים מהימנים."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"הטענת המכשיר"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"טעינת המכשיר המחובר"</string>
@@ -3574,8 +3585,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"ממוצע של <xliff:g id="USED_MEMORY">%1$s</xliff:g> מתוך <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> זיכרון בשימוש"</string>
     <string name="users_summary" msgid="1674864467098487328">"מחובר בתור <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"ברירת המחדל היא <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"מופעל"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"כבוי"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"הגיבוי מושבת"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"‏עודכן ל-Android גרסה ‏<xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"יש עדכון זמין"</string>
@@ -3759,9 +3772,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"מחובר אל <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"מחובר לכמה התקנים"</string>
     <string name="demo_mode" msgid="2798762752209330277">"מצב הדגמה בממשק המשתמש של המערכת"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"משבצות מפתח להגדרות מהירות"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"מעקב חלון"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"עקבות על המסך"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"הגדרות של פרופיל עבודה"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"חיפוש אנשי קשר"</string>
@@ -3936,8 +3953,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"בשימוש"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"נקה אפליקציה"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"האם ברצונך להסיר את אפליקציית האינסטנט הזאת?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"פתיחה"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"משחקים"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"קובצי אודיו"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"שטח אחסון בשימוש"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index dc74adc..03b63e7 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -3362,6 +3362,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"この端末を MIDI として利用する際に使用します"</string>
     <string name="usb_use" msgid="3372728031108932425">"USBの使用"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB の他の用途"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"この端末を充電する"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"接続端末の充電"</string>
@@ -3814,8 +3818,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"使用"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"アプリを削除"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"この Instant App を削除してもよろしいですか？"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"開く"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"ゲーム"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"音声ファイル"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"使用済み容量"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 258cac2..0a1dae7 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ამ მოწყობილობის MIDI-ს სახით გამოყენება"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB-ს გამოყენება"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB-ს აგრეთვე გამოყენება"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ამ მოწყობილობის დატენვა"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"დაკავშირებული მოწყობილობის დატენვა"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"გამოყენებული"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"აპის გასუფთავება"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"გსურთ ამ მყისიერი აპის ამოშლა?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"გახსნა"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"თამაშები"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"აუდიო ფაილები"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"გამოყენებული მეხსიერება"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index c0f456e..4adf855 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -482,7 +482,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"Планшетті қорғау"</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"Құрылғыны қорғау"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"Телефонды қорғау"</string>
-    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"Қауіпсіздікті күшейту үшін резервтік экран құлпын орнатыңыз"</string>
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"Қауіпсіздікті күшейту үшін қосымша экран құлпын орнатыңыз"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"құрылғы қорғау мүмкіндіктерін іске қосу арқылы сіздің рұқсатыңызсыз планшетті басқалардың пайдалануына жол бермеңіз. Пайдаланғыңыз келетін экран құлпын таңдаңыз."</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"Құрылғыны қорғау мүмкіндіктерін белсендіру арқылы басқалардың осы құрылғыны рұқсатыңызсыз пайдалануын болдырмаңыз. Пайдаланғыңыз келетін экран бекітпесін таңдаңыз."</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"Құрылғыны қорғау мүмкіндіктерін белсендіру арқылы басқалардың осы телефонды рұқсатыңызсыз пайдалануын болдырмаңыз. Пайдаланғыңыз келетін экран бекітпесін таңдаңыз."</string>
@@ -2138,7 +2138,7 @@
     <string name="usage_type_data_wifi_send" msgid="1847552143597396162">"Wi‑Fi пакеттері жіберілді"</string>
     <string name="usage_type_data_wifi_recv" msgid="5678475911549183829">"Wi‑Fi пакеттері қабылданды"</string>
     <string name="usage_type_audio" msgid="6957269406840886290">"Aудио"</string>
-    <string name="usage_type_video" msgid="4295357792078579944">"Видео"</string>
+    <string name="usage_type_video" msgid="4295357792078579944">"Бейне"</string>
     <string name="usage_type_camera" msgid="8299433109956769757">"Камера"</string>
     <string name="usage_type_flashlight" msgid="1516392356962208230">"Қалта шамы"</string>
     <string name="usage_type_on_time" msgid="3351200096173733159">"Уақыт қосулы"</string>
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Осы құрылғыны MIDI ретінде пайдалану"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB пайдалану мақсаты"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB байланысын келесілер үшін де пайдалану:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Осы құрылғыны зарядтауда"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Жалғанған құрылғыны зарядтау"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"пайдаланылған"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Қолданбаны деректерін өшіру"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Бұл лездік қолданбаны өшіргіңіз келе ме?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Ашу"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Ойындар"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Аудиофайлдар"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Пайдаланылған орын"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index f73c233..64514aa 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -3364,6 +3364,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ប្រើឧបករណ៍នេះជាមីឌី"</string>
     <string name="usb_use" msgid="3372728031108932425">"ប្រើ USB ដើម្បី"</string>
     <string name="usb_use_also" msgid="557340935190819370">"ក៏ប្រើប្រាស់​ USB ​សម្រាប់"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"សាកថ្ម​ឧបករណ៍​នេះ"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"សាកថ្ម​ឧបករណ៍​ដែលបាន​ភ្ជាប់"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index b9b848d..1315347 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ಈ ಸಾಧನವನ್ನು MIDI ಎಂದು ಬಳಸಿ"</string>
     <string name="usb_use" msgid="3372728031108932425">"ಇದಕ್ಕಾಗಿ USB ಬಳಸಿ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"ಇದಕ್ಕಾಗಿ USB ಅನ್ನು ಬಳಸಿ"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ಈ ಸಾಧನವನ್ನು ಚಾರ್ಜ್ ಮಾಡುವುದು"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"ಸಂಪರ್ಕಗೊಂಡಿರುವ ಸಾಧನವನ್ನು ಚಾರ್ಜ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ಬಳಕೆಯಾಗಿದೆ"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ಅಪ್ಲಿಕೇಶನ್ ತೆರವುಗೊಳಿಸಿ"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"ಈ ತತ್‌ಕ್ಷಣ ಅಪ್ಲಿಕೇಶನ್ ತೆಗೆದುಹಾಕಲು ಬಯಸುವಿರಾ?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"ತೆರೆ"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"ಗೇಮ್‌ಗಳು"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ಆಡಿಯೋ ಫೈಲ್‌ಗಳು"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"ಬಳಸಿರುವ ಸ್ಥಳ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 2426c58..94da39f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"이 기기를 MIDI로 사용"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB 사용"</string>
     <string name="usb_use_also" msgid="557340935190819370">"다음 항목에 USB 사용"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"기기 충전 중"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"연결된 기기 충전 중"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"사용됨"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"앱 삭제"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"이 인스턴트 앱을 삭제하시겠습니까?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"열기"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"게임"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"오디오 파일"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"사용 중인 공간"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 6ea3e98..dacab25 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -3361,6 +3361,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Бул түзмөктү MIDI катары колдонуу"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB төмөнкү үчүн колдонулсун:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB төмөнкү функцияларды да аткара алат:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Бул түзмөктү кубаттоо"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Туташкан түзмөктү кубаттоо"</string>
@@ -3813,8 +3817,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"колдонулду"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Колдонмонун дайындарын тазалоо"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Бул ыкчам ачылуучу колдонмо алынып салынсынбы?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Ачуу"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Оюндар"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Аудио файлдар"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Эстутумдан ээлеген орду"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 581590f..4480d17 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ໃຊ້ອຸປະກອນນີ້ເປັນ MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"ໃຊ້ USB ສຳ​ລັບ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"ໃຊ້ USB ສຳລັບ"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ກຳລັງສາກໄຟອຸປະກອນນີ້"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"ການສາກໄຟອຸປະກອນທີ່ເຊື່ອມຕໍ່"</string>
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
index 59c6513..091efc6 100644
--- a/res/values-lt/arrays.xml
+++ b/res/values-lt/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Laikyti matuojamu"</item>
     <item msgid="2266114985518865625">"Laikyti nematuojamu"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index e466f90..6b16d7e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -488,8 +488,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"Apsaugok. planš. komp."</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"Apsaugokite įrenginį"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"Apsaugokite savo telefoną"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"Kad dar labiau apsaugotumėte įrenginį, nustatykite atsarginį ekrano užraktą"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"Neleiskite kitiems asmenims naudoti šio planšetinio kompiuterio be leidimo, suaktyvinę įrenginio apsaugos funkcijas. Pasirinkite norimą naudoti užrakinimo ekraną."</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"Neleiskite kitiems asmenims naudoti šio įrenginio be jūsų leidimo, suaktyvinę įrenginio apsaugos funkcijas. Pasirinkite norimą naudoti užrakinimo ekraną."</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"Neleiskite kitiems asmenims naudoti šio telefono be jūsų leidimo, suaktyvinę įrenginio apsaugos funkcijas. Pasirinkite norimą naudoti užrakinimo ekraną."</string>
@@ -730,6 +729,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Atsiminti nustatymus"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maksimalus prijungtų „Bluetooth“ garso įrenginių skaičius"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Pasirinkite maksimalų prijungtų „Bluetooth“ garso įrenginių skaičių"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Perdavimas"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Įgalinti belaidį rodymą"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"Nerasta netoliese esančių įrenginių."</string>
@@ -948,8 +951,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"„Wi‑Fi“ vieš. int. pr. t. sąr."</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"„AndroidAP“ WPA2 PSK viešosios interneto prieigos taškas"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"„AndroidHotspot“"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Nepasiekiama, nes lėktuvo režimas įjungtas"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"„Wi-Fi“ skambinimas"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Skamb. aprėpties išplėtimas naud. „Wi‑Fi“"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Įjungti „Wi-Fi“ skambinimą"</string>
@@ -1517,17 +1519,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Saugos informacija"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Nėra duomenų ryšio. Jei norite dabar peržiūrėti šią informaciją, bet kuriuo prie interneto prijungtu kompiuteriu eikite į %s."</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Įkeliama…"</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"Ekrano užrakto nustatymas"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"Kad apsaugotumėte įrenginį, nustatykite slaptažodį"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"Nust. slapt., kad gal. naud. kont. kodą"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"Nust. atrak. pieš., kad gal. naud. kont. kodą"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"Kad apsaugotumėte įrenginį, nustatykite PIN kodą"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"Nus. PIN kodą, kad gal. naud. kon. kodą"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"Kad apsaugotumėte įrenginį, nubrėžkite atrakinimo piešinį"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Įveskite slaptažodį iš naujo"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Patvirtinkite piešinį"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"Įveskite PIN kodą iš naujo"</string>
@@ -1914,8 +1912,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Naudoti paslaugą"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Naudoti spalvų taisymą"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Naudoti subtitrus"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ĮJUNGTI"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"IŠJUNGTA"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Rodyti sparčiuosiuose nustatymuose"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Koregavimo režimas"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2956,6 +2956,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"serijos numeris, aparatinės įrangos versija"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"„Android“ saugos pataisos lygis, nemoduliuotų signalų įrangos versija, branduolio versija"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Aplinkos ekranas, užrakinimo ekranas"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Nustatyti „Wi-Fi“ ALR žymą"</string>
     <string name="write_tag" msgid="8571858602896222537">"Rašyti"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Palieskite žymą, kad galėtumėte rašyti..."</string>
@@ -3254,7 +3256,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Pakeisti tik į signalus iki <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Pakeisti į pertraukimo nustatymą visam laikui"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"Kai ekranas įjungtas"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Leisti, kad gavus pranešimų, nutildytų naudojant režimą „Netrukdyti“, jie būtų rodomi ekrane"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"Kai ekranas išjungtas"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Leisti, kad gavus pranešimų, nutildytų naudojant režimą „Netrukdyti“, būtų įjungiamas ekranas ir mirksėtų lemputė"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Leisti, kad gavus pranešimų, nutildytų naudojant režimą „Netrukdyti“, būtų įjungiamas ekranas"</string>
@@ -3454,6 +3457,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Naudoti šį įrenginį kaip MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB naudojimas"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Taip pat naudoti USB"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Numatytoji USB konfigūracija"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"Kai prijungiamas kitas įrenginys ir jūsų telefonas yra atrakintas, taikomi šie nustatymai. Prisijunkite tik prie patikimų įrenginių."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Šio įrenginio įkrovimas"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Įkraunamas prijungtas įrenginys"</string>
@@ -3578,8 +3583,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Vid. naudojama atminties: <xliff:g id="USED_MEMORY">%1$s</xliff:g> iš <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>"</string>
     <string name="users_summary" msgid="1674864467098487328">"Prisijungta kaip <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ yra numatytoji"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ĮJUNGTA"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"IŠJUNGTA"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Atsarginės kopijos kūrimas išjungtas"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Atnaujinta į <xliff:g id="VERSION">%1$s</xliff:g> versijos „Android“"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"Pasiekiamas naujinys"</string>
@@ -3763,9 +3770,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Prisijungta prie „<xliff:g id="ID_1">%1$s</xliff:g>“"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Prisijungta prie kelių įrenginių"</string>
     <string name="demo_mode" msgid="2798762752209330277">"Sistemos NS demonstracinis režimas"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Sparčiųjų nustatymų kūrėjo išklotinės elementai"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Lango žymė"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Paviršiaus pėdsakas"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> – <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Darbo profilio nustatymai"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktų paieška"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index c0218d3..640d521 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -485,8 +485,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"Aizsargājiet planšetd."</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"Aizsargājiet ierīci"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"Aizsargājiet tālruni"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"Papildu drošībai iestatiet rezerves ekrāna bloķēšanu."</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"Aktivizējiet ierīces aizsardzības funkcijas, lai neļautu citiem lietot šo planšetdatoru bez jūsu atļaujas. Izvēlieties bloķēšanas ekrānu, kuru vēlaties izmantot."</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"Aktivizējiet ierīces aizsardzības funkcijas, lai neļautu citiem lietot šo ierīci bez jūsu atļaujas. Izvēlieties bloķēšanas ekrānu, kuru vēlaties izmantot."</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"Aktivizējiet ierīces aizsardzības funkcijas, lai neļautu citiem lietot šo tālruni bez jūsu atļaujas. Izvēlieties bloķēšanas ekrānu, kuru vēlaties izmantot."</string>
@@ -936,8 +935,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Wi-Fi tīklāja iestatīšana"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK tīklājs"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"AndroidHotspot"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Nav pieejams, jo ir ieslēgts lidojuma režīms"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Wi-Fi zvani"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Vairāk zvanu iespēju ar Wi‑Fi"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Ieslēgt Wi-Fi zvanus"</string>
@@ -1504,17 +1502,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Informācija par drošību"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Nav izveidots datu savienojums. Lai skatītu šo informāciju tūlīt, jebkurā datorā ar interneta savienojumu apmeklējiet vietni %s."</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Notiek ielāde…"</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"Ekrāna bloķēšanas iestatīšana"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"Drošības nolūkos iestatiet paroli."</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"Parole pirksta nosp. lietošanai"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"Kombinācijas iestatīšana"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"Drošības nolūkos iestatiet PIN kodu."</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"PIN pirksta nosp. lietošanai"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"Drošības nolūkos iestatiet kombināciju."</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Atkārtota paroles ievade"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Apstipriniet kombināciju"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"Atkārtota PIN ievade"</string>
@@ -3409,6 +3403,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Izmantot šo ierīci MIDI režīmā"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB savienojuma lietošana"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB savienojuma izmantošanas iespējas"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Šīs ierīces uzlāde"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Pievienotās ierīces uzlāde"</string>
@@ -3878,8 +3876,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"izmantots"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Notīrīt lietotni"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Vai vēlaties noņemt šo tūlītējo lietotni?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Atvērt"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Spēles"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Audio faili"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Izmantotā vieta krātuvē"</string>
diff --git a/res/values-mcc262-mnc02-as/strings.xml b/res/values-mcc262-mnc02-as/strings.xml
new file mode 100644
index 0000000..a50914c
--- /dev/null
+++ b/res/values-mcc262-mnc02-as/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wifi_calling_off_explanation_2" msgid="741028819102506783">\n\n"আপুনি ৱাই-ফাই কলিং ব্যৱহাৰ কৰি জৰুৰীকালীন কল কৰিব নোৱাৰে। যদিহে আপুনি তেনে কল কৰিবলৈ চেষ্টা কৰে, তেন্তে আপোনাৰ ডিভাইচটৱে স্বয়ংক্ৰিয়ভাৱে ম\'বাইল নেটৱৰ্ক ব্যৱহাৰ কৰিব। জৰুৰীকালীন কল কেৱল ম\'বাইল নেটৱৰ্ক উপলব্ধ থকা ঠাইতহে কৰিব পৰা যায়।"</string>
+</resources>
diff --git a/res/values-mcc262-mnc02-or/strings.xml b/res/values-mcc262-mnc02-or/strings.xml
new file mode 100644
index 0000000..12bac4e
--- /dev/null
+++ b/res/values-mcc262-mnc02-or/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="wifi_calling_off_explanation_2" msgid="741028819102506783">\n\n"ୱାଇ-ଫାଇ କଲିଙ୍ଗ ମାଧ୍ୟମରେ ଜରୁରୀକାଳୀନ କଲ୍‍ କରିହେବ ନାହିଁ। ଯଦି ଜରୁରୀକାଳୀନ କଲ୍‍ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତି, ତେବେ ଆପଣଙ୍କର ଡିଭାଇସ୍ ସ୍ୱଚାଳିତ ଭାବେ ମୋବାଇଲ୍ ନେଟ୍‌ୱର୍କ ବ୍ୟବହାର କରିବ। ଜରୁରୀକାଳୀନ କଲ୍‌ଗୁଡ଼ିକ କେବଳ ମୋବାଇଲ୍‌ ନେଟ୍‌ୱର୍କ କଭରେଜ୍‌ କ୍ଷେତ୍ରଗୁଡ଼ିକରେ ହିଁ କରିହେବ।"</string>
+</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 1a424c7..d7c0cf3 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Користете го уредов како MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Користи USB за"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Користење на USB и за"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Полнење на уредот"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Се полни поврзаниот уред"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index aac9266..a580443 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"MIDI ആയി ഈ ഉപകരണം ഉപയോഗിക്കുക"</string>
     <string name="usb_use" msgid="3372728031108932425">"ഇതിനായി USB ഉപയോഗിക്കുക"</string>
     <string name="usb_use_also" msgid="557340935190819370">"ഇതിനും USB ഉപയോഗിക്കുക"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ഈ ഉപകരണം ചാർജ്ജുചെയ്യൽ"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"കണക്‌റ്റ് ചെയ്‌ത ഉപകരണം ചാർജ് ചെയ്യുന്നു"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ഉപയോഗിച്ചത്"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ആപ്പ് മായ്ക്കുക"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"ഈ ഇൻസ്റ്റന്റ് ആപ്പ് നീക്കംചെയ്യാൻ ആഗ്രഹിക്കുന്നുണ്ടോ?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"തുറക്കുക"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"ഗെയിമുകള്‍"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ഓഡിയോ ഫയലുകള്‍‌"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"ഉപയോഗിച്ച ഇടം"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 060b635..4d647d3 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -3356,6 +3356,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Энэ төхөөрөмжийг MIDI горимоор ашиглах"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB-ыг ашиглах"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Мөн USB-г дараахад ашиглах"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Энэ төхөөрөмжийг цэнэглэж байна"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Холбосон төхөөрөмжийг цэнэглэж байна"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index dee8eed..ed68e42 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"या डिव्हाइसचा MIDI म्हणून वापर करा"</string>
     <string name="usb_use" msgid="3372728031108932425">"यासाठी USB वापरा"</string>
     <string name="usb_use_also" msgid="557340935190819370">"यासाठी देखील USB वापरा"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"हे डिव्हाइस चार्ज करणे"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"कनेक्ट केलेले डिव्हाइस चार्ज करत आहे"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"वापरलेली"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"अॅप साफ करा"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"आपल्याला हे इन्स्टंट अ‍ॅप काढायचे आहे का?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"उघडा"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"गेम"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ऑडिओ फायली"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"वापरलेली जागा"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 5cd7d86..0d2e605 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Gunakan peranti ini sebagai MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Gunakan USB untuk"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Turut gunakan USB untuk"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Mengecas peranti ini"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Mengecas peranti tersambung"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"digunakan"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Kosongkan apl"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Adakah anda mahu mengalih keluar apl segera ini?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Buka"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Permainan"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Fail audio"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Ruang yang digunakan"</string>
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
index 9600d50..5cf6a2e 100644
--- a/res/values-my/arrays.xml
+++ b/res/values-my/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"အခမဲ့ မဟုတ်သော အသုံးပြုခြင်းအဖြစ် သတ်မှတ်ရန်"</item>
     <item msgid="2266114985518865625">"အခမဲ့ အသုံးပြုခြင်းအဖြစ် သတ်မှတ်ရန်"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index b346f2e..a1ab225 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -707,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"ဆက်တင်များအားမှတ်မိစေရန်"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"ဘလူးတုသ်စက်ပစ္စည်း အများဆုံးချိတ်ဆက်ထားနိုင်သည့် အရေအတွက်"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"ချိတ်ဆက်ထားနိုင်သည့် ဘလူးတုသ် ချိတ်ဆက်နိုင်သည့် အများဆုံးအရေအတွက်ကို ရွေးပါ"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"ကာစ်"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"ကြိုးမဲ့ ပြသမှုကို ဖွင့်ရန်"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"အနီးတဝိုက်တွင် စက်ပစ္စည်းများ ရှာမတွေ့ပါ။"</string>
@@ -1880,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"ဝန်ဆောင်မှုကို သုံးရန်"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"အရောင်ပြင်ဆင်ခြင်းကို သုံးရန်"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"စာတန်းကို သုံးရန်"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ဖွင့်ပါ"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"ပိတ်ထားသည်"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"အမြန်ဆက်တင်များတွင်ပြပါ"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"ပြင်ဆင်ရန်နည်းလမ်း"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2888,6 +2894,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"အမှတ်စဉ်၊ ဟာ့ဒ်ဝဲ ဗားရှင်း"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"android လုံခြုံရေး ပက်ချ် အဆင့်၊ baseband ဗားရှင်း၊ kernel ဗားရှင်း"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"ဝန်းကျင်ကို ပြကွက်၊ လော့ခ်ချထားချိန် မျက်နှာပြင်"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"ကြိုးမဲ့ NFC တဲဂ်ကို စဖွင့်သတ်မှတ်ရန်"</string>
     <string name="write_tag" msgid="8571858602896222537">"ရေးရန်"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"ရေးရန် တဲဂ် တစ်ခုကို ပုပ်ပါ..."</string>
@@ -3170,7 +3178,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> အထိနိုးစက်သာလျှင် သို့ပြောင်းမည်"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"အမြဲတမ်း ကြားဖြတ်ရန်သို့ ပြောင်းမည်"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"မျက်နှာပြင် ဖွင့်ထားချိန်"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"\"မနှောင့်ယှက်ရ\" က ပိတ်ထားသော အကြောင်းကြားချက်များကို မျက်နှာပြင်တွင်ပေါ်လာခွင့်ပေးပါ"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"မျက်နှာပြင် ပိတ်ထားချိန်"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"\"မနှောင့်ယှက်ရ\" က ပိတ်ထားသော အကြောင်းကြားချက်များကို မျက်နှာပြင်ကိုဖွင့်၍ မီးမှိတ်တုတ်ပြခွင့်ပေးပါ"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"\"မနှောင့်ယှက်ရ\" က ပိတ်ထားသော အကြောင်းကြားချက်များကို မျက်နှာပြင်ကိုဖွင့်ခွင့်ပေးပါ"</string>
@@ -3358,6 +3367,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ဤစက်ပစ္စည်းကို MIDI အဖြစ်အသုံးပြုပါ"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB သုံးပါ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB ကို အောက်ပါအတွက်လည်း သုံးသည်"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"မူရင်း USB စီစဉ်တ်မှတ်မှု"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"အခြားစက်ပစ္စည်းတစ်ခုကို ချိတ်ဆက်ထားပြီး သင့်ဖုန်းကို လော့ခ်ဖွင့်ထားသည့်အခါ ဤဆက်တင်များ အကျိုးသက်ရောက်မှု ရှိပါမည်။ ယုံကြည်စိတ်ချရသည့် စက်ပစ္စည်းများသို့သာ ချိတ်ဆက်ပါ။"</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ဤစက်ပစ္စည်းကို အားသွင်းနေသည်"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"ချိတ်ဆက်ထားသည့် စက်ကို အားသွင်းခြင်း"</string>
@@ -3478,8 +3489,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Avg သည်ယာယီမှတ်ဉာဏ် <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>  ၏ <xliff:g id="USED_MEMORY">%1$s</xliff:g> ကိုအသုံးပြုထားသည်"</string>
     <string name="users_summary" msgid="1674864467098487328">"<xliff:g id="USER_NAME">%1$s</xliff:g> အဖြစ် လက်မှတ်ထိုးဝင်ထားသည်"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည်မူရင်းဖြစ်သည်"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ဖွင့်ပါ"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"ပိတ်ရန်"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"အရံကူးယူခြင်း ပိတ်ထားသည်"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Android <xliff:g id="VERSION">%1$s</xliff:g> သို့ အပ်ဒိတ်လုပ်ထားသည်"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"အပ်ဒိတ် ရနိုင်သည်"</string>
@@ -3653,9 +3666,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"<xliff:g id="ID_1">%1$s</xliff:g> နှင့် ချိတ်ဆက်ထားပါသည်"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"စက်ပစ္စည်းအများအပြားနှင့် ချိတ်ဆက်ထားပါသည်"</string>
     <string name="demo_mode" msgid="2798762752209330277">"စနစ် UI သရုပ်ပြမုဒ်"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"ဆော့ဖ်ဝဲအင်ဂျင်နီယာ အကွက်များကို အမြန်သတ်မှတ်ခြင်း"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"ဝင်းဒိုး မျဉ်းဆွဲခြင်း"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"မျက်နှာပြင် မျဉ်းဆွဲခြင်း"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"အလုပ်ပရိုဖိုင်ဆက်တင်များ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"အဆက်အသွယ်ကို ရှာဖွေပါ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4ee8a88..24f6fe4 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bruk denne enheten som MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Bruk USB for"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Bruk i tillegg USB til"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Lading av denne enheten"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Lading av den tilkoblede enheten"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 9f8da0a..83f9376 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"यस यन्त्रलाई MIDI को रूपमा प्रयोग गर्नुहोस्"</string>
     <string name="usb_use" msgid="3372728031108932425">"का लागि USB प्रयोग गर्नुहोस्"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB लाई निम्न कार्यका लागि पनि प्रयोग गर्नुहोस्"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"यो यन्त्रलाई चार्ज गर्दै"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"जडान गरिएको यन्त्र चार्ज गर्दै"</string>
@@ -3812,8 +3816,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"प्रयोग भयो"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"अनुप्रयोगको डेटा खाली गर्नुहोस्"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"तपाईं यो तात्कालिक अनुप्रयोगलाई हटाउन चाहनुहुन्छ?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"खोल्नुहोस्"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"खेलहरू"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"अडियो फाइलहरू"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"प्रयोग गरेको ठाउँ"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 8c2c681..9b270ac 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Dit apparaat gebruiken als MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB gebruiken voor"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB ook gebruiken voor"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Dit apparaat opladen"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Verbonden apparaat wordt opgeladen"</string>
@@ -3717,7 +3721,7 @@
     <string name="web_action_enable_title" msgid="4051513950976670853">"Instant-apps"</string>
     <string name="web_action_enable_summary" msgid="3108127559723396382">"Links openen in apps, zelfs als deze niet zijn geïnstalleerd"</string>
     <string name="web_action_section_title" msgid="7364647086538399136">"Instant-apps"</string>
-    <string name="instant_apps_settings" msgid="8827777916518348213">"Voorkeuren voor instant-apps"</string>
+    <string name="instant_apps_settings" msgid="8827777916518348213">"Voorkeuren Instant-apps"</string>
     <string name="domain_url_section_title" msgid="7046835219056428883">"Geïnstalleerde apps"</string>
     <string name="automatic_storage_manager_activation_warning" msgid="6353100011690933254">"Je opslag wordt nu beheerd door de opslagbeheerder"</string>
     <string name="account_for_section_header" msgid="5356566418548737121">"Accounts voor <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
diff --git a/res/values-or-nokeys/strings.xml b/res/values-or-nokeys/strings.xml
new file mode 100644
index 0000000..507e47d
--- /dev/null
+++ b/res/values-or-nokeys/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="applications_settings_summary" msgid="6616938758022986257">"ଆପ୍ଲିକେଶନ୍‌ଗୁଡ଼ିକର ପରିଚାଳନା କରନ୍ତୁ"</string>
+</resources>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
new file mode 100644
index 0000000..4b99711
--- /dev/null
+++ b/res/values-or/arrays.xml
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2007 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="timezone_filters">
+    <item msgid="5296756001147094692">"ଆମେରିକା"</item>
+    <item msgid="3005562397632768392">"ୟୁରୋପ"</item>
+    <item msgid="5696915123093701218">"ଆଫ୍ରିକା"</item>
+    <item msgid="4439789052790868249">"ଏସିଆ"</item>
+    <item msgid="956915953069815961">"ଅଷ୍ଟ୍ରେଲିଆ"</item>
+    <item msgid="5345178126174698955">"ପେସିଫିକ୍‌"</item>
+    <item msgid="8392017019801393511">"ସମସ୍ତ"</item>
+  </string-array>
+  <string-array name="screen_timeout_entries">
+    <item msgid="3342301044271143016">"୧୫ ସେକେଣ୍ଡ"</item>
+    <item msgid="8881760709354815449">"୩୦ ସେକେଣ୍ଡ"</item>
+    <item msgid="7589406073232279088">"1 ମିନିଟ୍"</item>
+    <item msgid="7001195990902244174">"2 ମିନିଟ୍"</item>
+    <item msgid="7489864775127957179">"5 ମିନିଟ୍‍"</item>
+    <item msgid="2314124409517439288">"10 ମିନିଟ୍"</item>
+    <item msgid="6864027152847611413">"30 ମିନିଟ୍"</item>
+  </string-array>
+  <string-array name="dream_timeout_entries">
+    <item msgid="3149294732238283185">"ଆଦୌ ନୁହେଁ"</item>
+    <item msgid="2194151041885903260">"୧୫ ସେକେଣ୍ଡ"</item>
+    <item msgid="5892295237131074341">"୩୦ ସେକେଣ୍ଡ"</item>
+    <item msgid="3538441365970038213">"1 ମିନିଟ୍"</item>
+    <item msgid="412343871668955639">"୨ ମିନିଟ୍"</item>
+    <item msgid="5076853889688991690">"ମିନିଟ୍"</item>
+    <item msgid="1903860996174927898">"10 ମିନିଟ୍"</item>
+    <item msgid="6415509612413178727">"୩୦ ମିନିଟ୍‌"</item>
+  </string-array>
+  <string-array name="lock_after_timeout_entries">
+    <item msgid="8929270399652145290">"ତୁରନ୍ତ"</item>
+    <item msgid="6736512735606834431">"୫ ସେକେଣ୍ଡ"</item>
+    <item msgid="8044619388267891375">"ସେକେଣ୍ଡ"</item>
+    <item msgid="1822002388249545488">"30 ସେକେଣ୍ଡ"</item>
+    <item msgid="8538071621211916519">"୧ ମିନିଟ୍‌"</item>
+    <item msgid="5663439580228932882">"2 ମିନିଟ୍"</item>
+    <item msgid="49888496216106852">"5 ମିନିଟ୍"</item>
+    <item msgid="9002737361305019353">"10 ମିନିଟ୍"</item>
+    <item msgid="4322676235684793329">"୩୦ ମିନିଟ୍"</item>
+  </string-array>
+  <string-array name="entries_font_size">
+    <item msgid="8166647333858618801">"ଛୋଟ"</item>
+    <item msgid="6986443533756848935">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ"</item>
+    <item msgid="38373998008112077">"ବହୁତ ବଡ଼"</item>
+    <item msgid="7635254317531872272">"ବୃହତ୍ତମ"</item>
+  </string-array>
+  <string-array name="wifi_status">
+    <item msgid="1922181315419294640"></item>
+    <item msgid="8934131797783724664">"ସ୍କାନ୍‌ କରୁଛି…"</item>
+    <item msgid="8513729475867537913">"ସଂଯୋଗ କରୁଛି…"</item>
+    <item msgid="515055375277271756">"ପ୍ରାମାଣିକୀକରଣ କରାଯାଉଛି…"</item>
+    <item msgid="1943354004029184381">"IP ଠିକଣା ପ୍ରାପ୍ତ କରୁଛି…"</item>
+    <item msgid="4221763391123233270">"ସଂଯୋଜିତ"</item>
+    <item msgid="624838831631122137">"ନିଲମ୍ବିତ"</item>
+    <item msgid="7979680559596111948">"ବିଚ୍ଛିନ୍ନ ହେଉଛି…"</item>
+    <item msgid="1634960474403853625">"ବିଚ୍ଛିନ୍ନ"</item>
+    <item msgid="746097431216080650">"ଅସଫଳ"</item>
+    <item msgid="6367044185730295334">"ଅବରୋଧିତ"</item>
+    <item msgid="503942654197908005">"ସାମୟିକ ଭାବେ ଖରାପ ସଂଯୋଜନାକୁ ଏଡାଉଛି"</item>
+  </string-array>
+  <string-array name="wifi_status_with_ssid">
+    <item msgid="7714855332363650812"></item>
+    <item msgid="8878186979715711006">"ସ୍କାନ୍‌ କରୁଛି…"</item>
+    <item msgid="355508996603873860">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>କୁ ସଂଯୋଗ କରାଯାଉଛି…"</item>
+    <item msgid="554971459996405634">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ସହ ପ୍ରମାଣିତ ହେଉଛି…"</item>
+    <item msgid="7928343808033020343">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ରୁ IP ଠିକଣା ହାସଲ କରୁଛି…"</item>
+    <item msgid="8937994881315223448">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ସହ ସଂଯୁକ୍ତ"</item>
+    <item msgid="1330262655415760617">"କଟିଯାଇଛି"</item>
+    <item msgid="7698638434317271902">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ରୁ ବିଚ୍ଛିନ୍ନ ହେଉଛି…"</item>
+    <item msgid="197508606402264311">"ସଂଯୁକ୍ତ ନାହିଁ"</item>
+    <item msgid="8578370891960825148">"ଅସଫଳ"</item>
+    <item msgid="5660739516542454527">"ଅବରୋଧିତ"</item>
+    <item msgid="1805837518286731242">"ଦୁର୍ବଳ ସଂଯୋଗକୂ ସାମୟିକ ଭାବେ ଏଡ଼ାଉଛି"</item>
+  </string-array>
+    <!-- no translation found for wifi_security:0 (8491993170197127709) -->
+    <!-- no translation found for wifi_security:1 (6524315248437318854) -->
+    <!-- no translation found for wifi_security:2 (1532568756571457140) -->
+    <!-- no translation found for wifi_security:3 (3620707702811709779) -->
+    <!-- no translation found for wifi_security_no_eap:0 (2084555984818107151) -->
+    <!-- no translation found for wifi_security_no_eap:1 (397579322683471524) -->
+    <!-- no translation found for wifi_security_no_eap:2 (1968820975358150484) -->
+  <string-array name="wifi_eap_method">
+    <item msgid="1160193392455075561">"PEAP"</item>
+    <item msgid="7981731051382306293">"TLS"</item>
+    <item msgid="2892994535305020162">"TTLS"</item>
+    <item msgid="435667726254379514">"PWD"</item>
+    <item msgid="8549485714107012129">"ସିମ୍‌"</item>
+    <item msgid="1023893786681286517">"AKA"</item>
+    <item msgid="3030483188676375009">"AKA\'"</item>
+  </string-array>
+  <string-array name="eap_method_without_sim_auth">
+    <item msgid="4047867891913819797">"PEAP"</item>
+    <item msgid="641030570679578504">"TLS"</item>
+    <item msgid="3079489731769553856">"TTLS"</item>
+    <item msgid="35269224158638258">"PWD"</item>
+  </string-array>
+    <!-- no translation found for wifi_ap_band_config_full:0 (1085243288162893079) -->
+    <!-- no translation found for wifi_ap_band_config_full:1 (5531376834915607202) -->
+    <!-- no translation found for wifi_ap_band_config_full:2 (3580217704310339410) -->
+    <!-- no translation found for wifi_ap_band_config_2G_only:0 (7006771583217001015) -->
+    <!-- no translation found for wifi_ap_band_config_2G_only:1 (8904289885593822837) -->
+  <string-array name="wifi_p2p_wps_setup">
+    <item msgid="5085064298144493867">"ପୁଶ୍‌ ବଟନ୍‌"</item>
+    <item msgid="1624323946324499595">"ପୀଅର୍‌ ଡିଭାଇସ୍‌ରୁ PIN‌"</item>
+    <item msgid="5366790421523328066">"ଏହି ଡିଭାଇସ୍‌ରୁ PIN"</item>
+  </string-array>
+  <string-array name="wifi_p2p_status">
+    <item msgid="1701505390737218306">"ସଂଯୁକ୍ତ"</item>
+    <item msgid="3189211552661432651">"ଆମନ୍ତ୍ରିତ"</item>
+    <item msgid="3206450250360237549">"ବିଫଳ"</item>
+    <item msgid="7785896708926971207">"ଉପଲବ୍ଧ"</item>
+    <item msgid="2330782789550628803">"ପରିସୀମା ବାହାରେ"</item>
+  </string-array>
+  <string-array name="bluetooth_visibility_timeout_entries">
+    <item msgid="8151962652413645395">"2 ମିନିଟ୍"</item>
+    <item msgid="8675215713017289017">"୫ ମିନିଟ୍‌"</item>
+    <item msgid="477015974247590543">"୧ ଘଣ୍ଟା"</item>
+    <item msgid="5198271470953124739">"କେବେବି ବନ୍ଦ କରନାହିଁ"</item>
+  </string-array>
+  <string-array name="bluetooth_max_connected_audio_devices">
+    <item msgid="60897909354162249">"୧ (ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ)"</item>
+    <item msgid="7584056855393485416">"୨"</item>
+    <item msgid="844570832050176311">"୩"</item>
+    <item msgid="1896812737336024220">"4"</item>
+    <item msgid="2664420770707984266">"5"</item>
+  </string-array>
+  <string-array name="bluetooth_max_connected_audio_devices_values">
+    <item msgid="1992185266918208754">"1"</item>
+    <item msgid="2731443086402670729">"୨"</item>
+    <item msgid="74627748729027880">"3"</item>
+    <item msgid="2654447223197666662">"4"</item>
+    <item msgid="7026157954713482328">"5"</item>
+  </string-array>
+  <string-array name="wifi_signal">
+    <item msgid="2245412278046491293">"ଖରାପ"</item>
+    <item msgid="2042505933058940139">"ଖରାପ"</item>
+    <item msgid="1344546617235886412">"ଠିକଠାକ"</item>
+    <item msgid="6019931571712517411">"ଭଲ"</item>
+    <item msgid="8986346415847956850">"ସର୍ବୋତ୍ତମ"</item>
+  </string-array>
+  <string-array name="data_usage_data_range">
+    <item msgid="5013973108901348144">"ଗତ ୩୦ ଦିନ"</item>
+    <item msgid="6600989128423965319">"ବ୍ୟବହାରର ଚକ୍ର ସେଟ୍‌ କରନ୍ତୁ…"</item>
+  </string-array>
+  <string-array name="usage_stats_display_order_types">
+    <item msgid="2100172576767439288">"ବ୍ୟବହାରର ସମୟ"</item>
+    <item msgid="4796160515314745154">"ଗତଥର ବ୍ୟବହାର କରାଯାଇଥିବା"</item>
+    <item msgid="2502754479975776899">"ଆପ୍‌ର ନାମ"</item>
+  </string-array>
+  <string-array name="wifi_eap_entries">
+    <item msgid="8615575908717909498">"PEAP"</item>
+    <item msgid="8667872640594311615">"TLS"</item>
+    <item msgid="7182812872984827322">"TTLS"</item>
+    <item msgid="2318274046749286642">"PWD"</item>
+  </string-array>
+  <string-array name="wifi_peap_phase2_entries">
+    <item msgid="2577747762745812488">"କିଛି ନାହିଁ"</item>
+    <item msgid="937786527870979616">"MSCHAPV2"</item>
+    <item msgid="5302613883318643629">"GTC"</item>
+  </string-array>
+  <string-array name="wifi_peap_phase2_entries_with_sim_auth">
+    <item msgid="5760470455461128892">"କିଛି ନୁହେଁ"</item>
+    <item msgid="7480272092408291086">"MSCHAPV2"</item>
+    <item msgid="5881794903338319324">"GTC"</item>
+    <item msgid="5610607665198791980">"SIM"</item>
+    <item msgid="2860798636241124128">"AKA"</item>
+    <item msgid="8926455723452645935">"AKA\'"</item>
+  </string-array>
+  <string-array name="wifi_phase2_entries">
+    <item msgid="1818786254010764570">"କିଛି ନୁହେଁ"</item>
+    <item msgid="6189918678874123056">"PAP"</item>
+    <item msgid="1524112260493662517">"MSCHAP"</item>
+    <item msgid="5923246669412752932">"MSCHAPV2"</item>
+    <item msgid="8651992560135239389">"GTC"</item>
+  </string-array>
+  <string-array name="wifi_ip_settings">
+    <item msgid="3906714200993111074">"DHCP"</item>
+    <item msgid="628395202971532382">"ଷ୍ଟାଟିକ୍"</item>
+  </string-array>
+  <string-array name="wifi_proxy_settings">
+    <item msgid="4473276491748503377">"କିଛି ନାହିଁ"</item>
+    <item msgid="8673874894887358090">"ମାନୁଆଲ୍‌"</item>
+    <item msgid="168893341855953140">"ପ୍ରକ୍ସୀ ଅଟୋ-କନ୍‌ପିଗରେଶନ୍"</item>
+  </string-array>
+  <string-array name="apn_auth_entries">
+    <item msgid="3856896061242872146">"କିଛି ନୁହେଁ"</item>
+    <item msgid="5756844015743664882">"PAP"</item>
+    <item msgid="535934025797984365">"CHAP"</item>
+    <item msgid="8383098660619805783">"PAP କିମ୍ୱା CHAP"</item>
+  </string-array>
+  <string-array name="apn_protocol_entries">
+    <item msgid="4852355456199302715">"IPv4"</item>
+    <item msgid="4394161344888484571">"IPv6"</item>
+    <item msgid="8084938354605535381">"IPv4/IPv6"</item>
+  </string-array>
+  <string-array name="bearer_entries">
+    <item msgid="1697455674244601285">"ଅନିର୍ଦ୍ଦିଷ୍ଟ"</item>
+    <item msgid="1317061551798123908">"LTE"</item>
+    <item msgid="5005435684511894770">"HSPAP"</item>
+    <item msgid="7700603056475539235">"HSPA"</item>
+    <item msgid="245973007602397887">"HSUPA"</item>
+    <item msgid="6291566767651194016">"HSDPA"</item>
+    <item msgid="2005841400859926251">"UMTS"</item>
+    <item msgid="3757385691174882861">"EDGE"</item>
+    <item msgid="2979115073474306864">"GPRS"</item>
+    <item msgid="2271750502778879106">"eHRPD"</item>
+    <item msgid="4173379084783381337">"EVDO_B"</item>
+    <item msgid="2033682802005776093">"EVDO_A"</item>
+    <item msgid="5753917125831466719">"EVDO_0"</item>
+    <item msgid="4713807936577071142">"1xRTT"</item>
+    <item msgid="1142355797022021906">"IS95B"</item>
+    <item msgid="7471182818083460781">"IS95A"</item>
+  </string-array>
+  <string-array name="mvno_type_entries">
+    <item msgid="4367119357633573465">"କିଛି ନୁହେଁ"</item>
+    <item msgid="6062567900587138000">"SPN"</item>
+    <item msgid="2454085083342423481">"IMSI"</item>
+    <item msgid="2681427309183221543">"GID"</item>
+  </string-array>
+  <string-array name="app_install_location_entries">
+    <item msgid="8151497958991952759">"ଇଣ୍ଟର୍ନଲ୍‍ ଡିଭାଇସ୍‌ ଷ୍ଟୋରେଜ୍‌"</item>
+    <item msgid="3738430123799803530">"ଅପସାରଣୀୟ SD କାର୍ଡ"</item>
+    <item msgid="4498124044785815005">"ସିଷ୍ଟମକୁ ନିଷ୍ପତ୍ତି ନେବାକୁ ଦିଅନ୍ତୁ"</item>
+  </string-array>
+  <string-array name="app_ops_categories">
+    <item msgid="6358963769537892925">"ଲୋକେଶନ୍"</item>
+    <item msgid="255608127647030286">"ବ୍ୟକ୍ତିଗତ"</item>
+    <item msgid="4588829735729884491">"ମେସେଜିଙ୍ଗ"</item>
+    <item msgid="886742181977884584">"ମିଡିଆ"</item>
+    <item msgid="7924928667052300589">"ଡିଭାଇସ୍‌"</item>
+  </string-array>
+  <string-array name="app_ops_summaries">
+    <item msgid="4979188868761515915">"ଆନୁମାନିକ ଲୋକେଶନ୍‌"</item>
+    <item msgid="5789673140227507995">"ଫାଇନ୍‌ ଲୋକେଶନ୍‌"</item>
+    <item msgid="1061584358377390581">"GPS"</item>
+    <item msgid="5387405117297558954">"କମ୍ପନ"</item>
+    <item msgid="3434165993711230924">"ଯୋଗାଯୋଗଗୁଡ଼ିକୁ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="616161687718081936">"ଯୋଗାଯୋଗଗୁଡିକ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</item>
+    <item msgid="7638002295329050091">"କଲ୍‌ ଲଗ୍‌ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="6546959730920410907">"କଲ୍‌ ଲଗ୍‌ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+    <item msgid="446877710771379667">"କ୍ୟାଲେଣ୍ଡର ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="7674458294386319722">"କ୍ୟାଲେଣ୍ଡର ସଂଶୋଧନ"</item>
+    <item msgid="8281201165558093009">"ୱାଇ-ଫାଇ ସ୍କାନ୍"</item>
+    <item msgid="8694611243479480497">"ବିଜ୍ଞପ୍ତି"</item>
+    <item msgid="7776439107987345446">"ସେଲ୍‌ ସ୍କାନ୍‌"</item>
+    <item msgid="514615766544675057">"ଫୋନ୍‌ ନମ୍ବର୍‌ କଲ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="8181415497109310680">"SMS ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="6816551144382117307">"SMS ଲେଖନ୍ତୁ"</item>
+    <item msgid="4600463921908905030">"SMS ଗ୍ରହଣ"</item>
+    <item msgid="5958926493289432745">"ଜରୁରୀକାଳୀନ SMS ପାଆନ୍ତୁ"</item>
+    <item msgid="4945269495221089540">"MMS ପାଆନ୍ତୁ"</item>
+    <item msgid="5570472453573929087">"ୱାପ୍‌ ପୁଶ୍‌ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+    <item msgid="7125408150230860501">"SMS ପଠାନ୍ତୁ"</item>
+    <item msgid="7080337936612188061">"ICC SMS ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="587124103118495063">"ICC SMS ଲେଖନ୍ତୁ"</item>
+    <item msgid="2320577158869025503">"ସେଟିଙ୍ଗରେ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+    <item msgid="1545733463471924009">"ସ୍କ୍ରୀନ୍‌ର ଉପର ଭାଗରେ ଆଙ୍କନ୍ତୁ"</item>
+    <item msgid="3609046903962454582">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍‌ସେସ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="4671646036128214513">"କ୍ୟାମେରା"</item>
+    <item msgid="1097324338692486211">"ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ"</item>
+    <item msgid="5031552983987798163">"ଅଡିଓ ବଜାନ୍ତୁ"</item>
+    <item msgid="8374996688066472414">"କ୍ଲିପବୋର୍ଡ ପଢନ୍ତୁ"</item>
+    <item msgid="3045529469061083747">"କ୍ଲିପ୍‌ବୋର୍ଡ ବଦଳାନ୍ତୁ"</item>
+    <item msgid="5124443975763747838">"ମିଡିଆର ବଟନ୍‌"</item>
+    <item msgid="4547883971364273343">"ଅଡିଓ ଫୋକସ୍‌"</item>
+    <item msgid="2603878814882344450">"ମାଷ୍ଟର୍ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="7136963238377062018">"ଭଏସ ଭଲ୍ୟୁମ"</item>
+    <item msgid="4270236897655923007">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="6325739889222559394">"ମିଡିଆ ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="5762123934816216821">"ଆଲାର୍ମର ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="785049718065337473">"ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="6700305533746877052">"ବ୍ଲୁଟୂଥ୍‌ ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="2029227495214047094">"ଜାଗ୍ରତ ରଖନ୍ତୁ"</item>
+    <item msgid="26109888160231211">"ଜାଗା ଖୋଜନ୍ତୁ"</item>
+    <item msgid="5753382310468855812">"ମଜବୁତ ସିଗ୍ନାଲ୍‌ ଥିବା ଜାଗା ଖୋଜନ୍ତୁ"</item>
+    <item msgid="3356591542543137332">"ଉପଯୋଗର ହିସାବ ପାଆନ୍ତୁ"</item>
+    <item msgid="3073734345226842233">"ମାଇକ୍ରୋଫୋନ୍‌ର ସାଉଣ୍ଡ ବନ୍ଦ/ଚାଲୁ କରନ୍ତୁ"</item>
+    <item msgid="2111767435887685265">"ଟୋଷ୍ଟ୍‌ ଦେଖାନ୍ତୁ"</item>
+    <item msgid="1091168669714823370">"ପ୍ରୋଜେକ୍ଟ ମିଡିଆ"</item>
+    <item msgid="485564189219029300">"VPN ସକ୍ରିୟ କରନ୍ତୁ"</item>
+    <item msgid="7155384795265164395">"ୱାଲପେପର୍‌ ଯୋଡ଼ନ୍ତୁ"</item>
+    <item msgid="1835836196806147034">"ସହାୟତାର ସଂରଚନା"</item>
+    <item msgid="5989890403088155055">"ସହାୟକ ସ୍କ୍ରିନ୍‌ଶଟ୍‍"</item>
+    <item msgid="8582699692765917557">"ଫୋନ୍‌ର ସ୍ଥିତି ଜାଣନ୍ତୁ"</item>
+    <item msgid="1474039653814954902">"ଭଏସ୍‌ମେଲ୍‌ ଯୋଡ଼ନ୍ତୁ"</item>
+    <item msgid="7222837656938871633">"sip ବ୍ୟବହାର କରନ୍ତୁ"</item>
+    <item msgid="6108267038969274380">"ଆଉଟ୍‌ଗୋଇଙ୍ଗ କଲ୍ କରନ୍ତୁ"</item>
+    <item msgid="4823402479973873358">"ଆଙ୍ଗୁଠି ଚିହ୍ନ"</item>
+    <item msgid="5895843015407713543">"ବଡୀ ସେନ୍ସର୍"</item>
+    <item msgid="1436446526955010826">"ସେଲ୍‌ ବ୍ରଡକାଷ୍ଟ ପଢନ୍ତୁ"</item>
+    <item msgid="884172201575690484">"ନକଲି ଅବସ୍ଥାନ"</item>
+    <item msgid="3591971310048485247">"ଷ୍ଟୋରେଜ୍‌ରୁ ଡାଟା ପଢ଼ିବାର ଅନୁମତି"</item>
+    <item msgid="4041187808621866119">"ଷ୍ଟୋରେଜ୍‌ରେ ଡାଟା ରଖିବାର ଅନୁମତି"</item>
+    <item msgid="6628873315024166197">"ସ୍କ୍ରୀନ୍‌ ଅନ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="3253368931113490863">"ଆକାଉଣ୍ଟଗୁଡିକ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+    <item msgid="780392378084812901">"ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡରେ ଚଲାନ୍ତୁ"</item>
+    <item msgid="2629748510881309577">"ଆକ୍‌ସେସିବିଲିଟୀ ଭଲ୍ୟୁମ୍"</item>
+  </string-array>
+  <string-array name="app_ops_labels">
+    <item msgid="6602854600289714121">"ଲୋକେଶନ୍‌"</item>
+    <item msgid="8677040780775113033">"ଲୋକେଶନ୍"</item>
+    <item msgid="1660743989948992916">"ଲୋକେଶନ୍‌"</item>
+    <item msgid="8791172739860195290">"କମ୍ପନ"</item>
+    <item msgid="383413555642128046">"ଯୋଗାଯୋଗଗୁଡ଼ିକ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="3654594895269697313">"ଯୋଗାଯୋଗ ବଦଳାନ୍ତୁ"</item>
+    <item msgid="7928393476362362538">"କଲ୍‌ ଲଗ୍‌ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="6248591205254641116">"କଲ୍‌ ଲଗ୍‌ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+    <item msgid="6093344633066170692">"କ୍ୟାଲେଣ୍ଡର ଦେଖନ୍ତୁ"</item>
+    <item msgid="1334886368750347692">"କ୍ୟାଲେଣ୍ଡରରେ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</item>
+    <item msgid="1638204101698708656">"ଲୋକେଶନ୍‍"</item>
+    <item msgid="2154671955760380322">"ପୋଷ୍ଟ ବିଜ୍ଞପ୍ତି"</item>
+    <item msgid="4282477730595931828">"ଲୋକେଶନ୍"</item>
+    <item msgid="4891423912898525905">"ଫୋନ୍‌କୁ କଲ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="2623604824935968113">"SMS/MMS ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="4420177125221176306">"SMS/MMS ଲେଖନ୍ତୁ"</item>
+    <item msgid="3986142739951490025">"SMS/MMS ପାଆନ୍ତୁ"</item>
+    <item msgid="3984213795861739778">"SMS/MMS ପାଆନ୍ତୁ"</item>
+    <item msgid="3656243523752472788">"SMS/MMS ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+    <item msgid="8105802370238551510">"SMS/MMS ପାଆନ୍ତୁ"</item>
+    <item msgid="1407766984645388488">"SMS/MMS ପଠାନ୍ତୁ"</item>
+    <item msgid="3527273606643794973">"SMS/MMS ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="4370895547001583812">"SMS/MMS ଲେଖନ୍ତୁ"</item>
+    <item msgid="4218544235221631789">"ସେଟିଙ୍ଗଗୁଡ଼ିକ ବଦଳାନ୍ତୁ"</item>
+    <item msgid="736541391767350377">"ଉପର ଭାଗରେ ଆଙ୍କନ୍ତୁ"</item>
+    <item msgid="5530815681721654194">"ବିଜ୍ଞପ୍ତି ଆକସେସ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="781213371706962767">"କ୍ୟାମେରା"</item>
+    <item msgid="1720492593061838172">"ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ"</item>
+    <item msgid="3493046322001257041">"ଅଡିଓ ଚଲାନ୍ତୁ"</item>
+    <item msgid="136815868796597058">"କ୍ଲିପ୍‌ବୋର୍ଡକୁ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="5238692940326972503">"କ୍ଲିପ୍‌ବୋର୍ଡରେ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+    <item msgid="5753789168376302997">"ମିଡିଆ ବଟନ୍‌"</item>
+    <item msgid="3265262911688671938">"ଅଡିଓ ଫୋକସ୍‌"</item>
+    <item msgid="2098976479485046797">"ମାଷ୍ଟର୍‌ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="5660213838861789350">"ଭଏସ୍ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="7983336752371254444">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="7878027809189330917">"ମିଡିଆ ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="7260546305036218513">"ଆଲାର୍ମ ଭଲ୍ୟୁମ୍"</item>
+    <item msgid="9103719301075748925">"ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="7025966722295861512">"ବ୍ଲୁଟୂଥ୍‌ ଭଲ୍ୟୁମ୍‌"</item>
+    <item msgid="4665183401128289653">"ଜାଗ୍ରତ କରି ରଖନ୍ତୁ"</item>
+    <item msgid="8584357129746649222">"ଅବସ୍ଥିତି"</item>
+    <item msgid="7669257279311110599">"ଲୋକେଶନ୍‌"</item>
+    <item msgid="3459320345690097795">"ବ୍ୟବହାର ହିସାବ ପାଆନ୍ତୁ"</item>
+    <item msgid="1312534577834048535">"ମାଇକ୍ରୋଫୋନ୍‌କୁ ବନ୍ଦ କରନ୍ତୁ/ଖୋଲନ୍ତୁ"</item>
+    <item msgid="427580389823724225">"ଟୋଷ୍ଟ ଦେଖାନ୍ତୁ"</item>
+    <item msgid="4992007785575926253">"ପ୍ରୋଜେକ୍ଟ ମିଡିଆ"</item>
+    <item msgid="2482631530338029480">"VPN ସକ୍ରିୟ କରନ୍ତୁ"</item>
+    <item msgid="1662979573471871926">"ୱାଲପେପର୍‌ ଯୋଡ଼ନ୍ତୁ"</item>
+    <item msgid="5964768335278263478">"ସହାୟକ ସଂରଚନା"</item>
+    <item msgid="2657138701132782702">"ସହାୟତାର ସ୍କ୍ରିନ୍‌ଶଟ୍‌"</item>
+    <item msgid="8571369610363539266">"ଫୋନ୍‌ର ସ୍ଥିତି ଜାଣନ୍ତୁ"</item>
+    <item msgid="4542463358215230845">"ଭଏସ୍‌ମେଲ୍‌ ଯୋଡ଼ନ୍ତୁ"</item>
+    <item msgid="864565065016166003">"ସିପ୍‌ ବ୍ୟବହାର କରନ୍ତୁ"</item>
+    <item msgid="1958009349883195116">"ଆଉଟ୍‌ଗୋଇଙ୍ଗ କଲ୍‌ ପ୍ରୋସେସ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="8526563410140613458">"ଆଙ୍ଗୁଠି ଚିହ୍ନ"</item>
+    <item msgid="7864822459293570891">"ବଡୀ ସେନ୍ସର୍"</item>
+    <item msgid="6798698496904810960">"ସେଲ୍‌ର ସମ୍ପ୍ରସାରଣକୁ ପଢ଼ନ୍ତୁ"</item>
+    <item msgid="5242052845700875820">"ନକଲି ଲୋକେଶନ୍‌"</item>
+    <item msgid="1246296877820358565">"ପଠନ ଷ୍ଟୋରେଜ୍‌"</item>
+    <item msgid="2404067308793740341">"ଷ୍ଟୋରେଜ୍‌ରେ ଡାଟା ରଖିବାର ଅନୁମତି"</item>
+    <item msgid="5832543806893763620">"ସ୍କ୍ରୀନ୍‌କୁ ଅନ୍‌ କରନ୍ତୁ"</item>
+    <item msgid="5258373962467495905">"ଆକାଉଣ୍ଟଗୁଡିକ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+    <item msgid="334625385979270703">"ବ୍ୟାକ୍‌ଗ୍ରାଊଣ୍ଡରେ ଚଲାନ୍ତୁ"</item>
+    <item msgid="9039213578110332702">"ଦିବ୍ୟାଙ୍ଗମାନଙ୍କ ପାଇଁ ସୁବିଧାଗୁଡ଼ିକର ଭଲ୍ୟୁମ୍‌"</item>
+  </string-array>
+  <string-array name="long_press_timeout_selector_titles">
+    <item msgid="3511504869290423954">"ଛୋଟ"</item>
+    <item msgid="2560532955514699713">"ମଧ୍ୟମ"</item>
+    <item msgid="2372711992605524591">"ଲମ୍ଵା"</item>
+  </string-array>
+  <string-array name="captioning_typeface_selector_titles">
+    <item msgid="1319652728542138112">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ"</item>
+    <item msgid="1016452621833735880">"ସାନ୍ସ-ସେରିଫ୍‌"</item>
+    <item msgid="2496277987934654454">"ସାନ୍ସ-ସେରିଫ୍ କଣ୍ଡେନ୍ସଡ୍"</item>
+    <item msgid="7247838127505318669">"ସାନ୍ସ-ସେରିଫ୍‍ ମୋନୋସ୍ପେସ୍"</item>
+    <item msgid="4478414822462359763">"Serif"</item>
+    <item msgid="7502451783483660829">"Serif monospace"</item>
+    <item msgid="639503332147461010">"ସାଧାରଣ"</item>
+    <item msgid="7967169925231332424">"କର୍ସିଭ"</item>
+    <item msgid="561832997193039673">"ଛୋଟ ଆକାରର ଅକ୍ଷର"</item>
+  </string-array>
+  <string-array name="captioning_font_size_selector_titles">
+    <item msgid="4800919809575254054">"ବହୁତ ଛୋଟ"</item>
+    <item msgid="6781094565687692782">"ଛୋଟ"</item>
+    <item msgid="8222123259497646551">"ସାଧାରଣ"</item>
+    <item msgid="5813217276778560466">"ବହୁତ ବଡ଼"</item>
+    <item msgid="9044232017390975191">"ବହୁତ ବଡ଼"</item>
+  </string-array>
+  <string-array name="captioning_edge_type_selector_titles">
+    <item msgid="4733815704128258753">"ଡିଫଲ୍ଟ"</item>
+    <item msgid="3217099060748617005">"କିଛି ନୁହେଁ"</item>
+    <item msgid="7467615139904599420">"ଆଉଟ୍‌ଲାଇନ୍‌"</item>
+    <item msgid="5623165557468608975">"ଡ୍ରପ୍‌ ଛାୟା"</item>
+    <item msgid="8088451174058214588">"ଉଠିକରିଥିବା"</item>
+    <item msgid="3821418743395480313">"ସଂକ୍ଷିପ୍ତ"</item>
+  </string-array>
+  <string-array name="captioning_opacity_selector_titles">
+    <item msgid="7622491218136667566">"25%"</item>
+    <item msgid="2367156416247936773">"50%"</item>
+    <item msgid="5395560410107149298">"75%"</item>
+    <item msgid="8342334626783983353">"100%"</item>
+  </string-array>
+  <string-array name="captioning_preset_selector_titles">
+    <item msgid="7009918361545506251">"ଆପ୍‌ର ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ ସେଟିଙ୍ଗ ବ୍ୟବହାର କରନ୍ତୁ"</item>
+    <item msgid="1770533843436933500">"କଳା ଉପରେ ଧଳା"</item>
+    <item msgid="758587126802411846">"ଧଳା ଉପରେ କଳା"</item>
+    <item msgid="1495307195241623402">"କଳା ଉପରେ ହଳଦିଆ"</item>
+    <item msgid="6039700130994371612">"ନୀଳ ଉପରେ ହଳଦିଆ"</item>
+    <item msgid="7169235156349580064">"କଷ୍ଟମ୍‌"</item>
+  </string-array>
+  <string-array name="vpn_types_long">
+    <item msgid="2732002039459078847">"PPTP VPN"</item>
+    <item msgid="3799752201662127867">"ପୂର୍ବରୁ ଶେୟାର୍‌ ହୋଇଥିବା କୀଗୁଡ଼ିକ ସହ L2TP/IPSec VPN"</item>
+    <item msgid="4725504331295252103">"ସର୍ଟିଫିକେଟ୍‌ ସହ L2TP/IPSec VPN"</item>
+    <item msgid="7526551163264034377">"ଶେୟାର୍‌ କରାଯାଇଥିବା କୀ’ଗୁଡ଼ିକ ସହିତ IPSec VPN ଏବଂ Xauth ସତ୍ୟାପନ"</item>
+    <item msgid="8064740940687465039">"ସର୍ଟିଫିକେଟ୍‌ ଏବଂ Xauth ପ୍ରାମାଣିକୀକରଣ ସହ IPSec VPN"</item>
+    <item msgid="4946199982372391490">"ସର୍ଟିଫିକେଟ୍‌ ଓ ହାଇବ୍ରିଡ୍‌ ସତ୍ୟାପନ ସହ IPSec VPN"</item>
+  </string-array>
+  <string-array name="vpn_states">
+    <item msgid="8621078286418985762">"ବିଛିନ୍ନ ହେଲା"</item>
+    <item msgid="6692305604213080515">"ଆରମ୍ଭ କରୁଛି…"</item>
+    <item msgid="8001704909356800092">"ସଂଯୋଗ କରାଯାଉଛି…"</item>
+    <item msgid="4039737283841672166">"ସଂଯୁକ୍ତ"</item>
+    <item msgid="4042143101664725090">"ସମୟ ସମାପ୍ତ"</item>
+    <item msgid="7664124146786465092">"ଅସଫଳ"</item>
+  </string-array>
+  <string-array name="security_settings_premium_sms_values">
+    <item msgid="7389829271787670252">"ପଚାରନ୍ତୁ"</item>
+    <item msgid="5077768429488260031">"ଆଦୌ ଅନୁମତି ଦିଅନାହିଁ"</item>
+    <item msgid="1417929597727989746">"ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ"</item>
+  </string-array>
+  <string-array name="ram_states">
+    <item msgid="3944681673818150669">"ସାଧାରଣ"</item>
+    <item msgid="3256987280393708586">"ମଧ୍ୟମ ଧରଣର"</item>
+    <item msgid="4662917179231875995">"ନିମ୍ନ"</item>
+    <item msgid="5264929699714647509">"ଜଟିଳ"</item>
+    <item msgid="5606155978847838966">"?"</item>
+  </string-array>
+  <string-array name="proc_stats_memory_states">
+    <item msgid="8845855295876909468">"ସାଧାରଣ"</item>
+    <item msgid="866544120205026771">"ମଧ୍ୟମ"</item>
+    <item msgid="7851902244436886890">"ନିମ୍ନ"</item>
+    <item msgid="3022922196817563960">"ଜଟିଳ"</item>
+  </string-array>
+  <string-array name="proc_stats_process_states">
+    <item msgid="5069825997142785829">"ନିରନ୍ତର"</item>
+    <item msgid="5779398140277006695">"ଶ୍ରେଷ୍ଠ ଗତିବିଧି"</item>
+    <item msgid="1439598363694578255">"ଜରୁରୀ (ଫୋର୍‌ଗ୍ରାଉଣ୍ଡ)"</item>
+    <item msgid="3396458970745718652">"ଗୁରୁତ୍ଵପୁର୍ଣ୍ଣ (ପୃଷ୍ଠପଟ)"</item>
+    <item msgid="5214825238247511992">"ବ୍ୟାକଅପ୍"</item>
+    <item msgid="311372689168254967">"ଭାରୀ"</item>
+    <item msgid="7438189122367820362">"ସେବା (ଚାଲୁଛି)"</item>
+    <item msgid="918687422516982498">"ସେବା (ରିଷ୍ଟାର୍ଟ ହେଉଛି)"</item>
+    <item msgid="6807727069641853029">"ପ୍ରାପକ"</item>
+    <item msgid="6782857406100845127">"ହୋମ୍‌"</item>
+    <item msgid="2860945127596974299">"ଶେଷ ଗତିବିଧି"</item>
+    <item msgid="8610560843693675830">"କ୍ୟାଶ୍ ହୋଇଥିବା (କାର୍ଯ୍ୟକଳାପ)"</item>
+    <item msgid="4338089220026248848">"କ୍ୟାଶ୍ ହୋଇଥିବା (କାର୍ଯ୍ୟକଳାପ କ୍ଲାଏଣ୍ଟ)"</item>
+    <item msgid="6652164677254579050">"କ୍ୟାଶ୍ ହୋଇଥିବା (ଖାଲି)"</item>
+  </string-array>
+  <string-array name="color_picker">
+    <item msgid="7631642672260600032">"ଟିଲ୍"</item>
+    <item msgid="8332294763632946560">"ନୀଳ"</item>
+    <item msgid="2023216417616991392">"ଇଣ୍ଡିଗୋ"</item>
+    <item msgid="3170497246594232819">"ବାଇଗଣୀ"</item>
+    <item msgid="4608643045752965568">"ଗୋଲାପୀ"</item>
+    <item msgid="6131821495505931173">"ନାଲି"</item>
+  </string-array>
+  <string-array name="automatic_storage_management_days">
+    <item msgid="687318592238852312">"୩୦ ଦିନରୁ ଅଧିକ ପୁରୁଣା"</item>
+    <item msgid="2900554746706302178">"60 ଦିନରୁ ଅଧିକ ପୁରୁଣା"</item>
+    <item msgid="5692284879054004388">"90 ଦିନରୁ ବି ଅଧିକ ପୁରୁଣା"</item>
+  </string-array>
+  <string-array name="wifi_metered_entries">
+    <item msgid="2975784243692054526">"ନେଟ୍‌ୱର୍କ ପସନ୍ଦ ବ୍ୟବହାର କରନ୍ତୁ"</item>
+    <item msgid="8745603368609022803">"ମାପ ହୋଇଥିବା ସଂଯୋଗ ରୂପେ ବିବେଚନା କରନ୍ତୁ"</item>
+    <item msgid="2266114985518865625">"ଅପରିମିତ ସଂଯୋଗ ରୂପେ ବିବେଚନା କରନ୍ତୁ"</item>
+  </string-array>
+</resources>
diff --git a/res/values-or/config.xml b/res/values-or/config.xml
new file mode 100644
index 0000000..153e247
--- /dev/null
+++ b/res/values-or/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="config_backup_settings_label" msgid="4423938073600296337"></string>
+</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 284472f..2b0bc3e 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ਇਸ ਡੀਵਾਈਸ ਦੀ MIDI ਵਜੋਂ ਵਰਤੋਂ ਕਰੋ"</string>
     <string name="usb_use" msgid="3372728031108932425">"ਇਸ ਲਈ USB ਦਾ ਉਪਯੋਗ ਕਰੋ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"ਇਸ ਲਈ ਵੀ USB ਵਰਤੋ"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਚਾਰਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"ਕਨੈਕਟ ਕੀਤੇ ਡੀਵਾਈਸ ਨੂੰ ਚਾਰਜ ਕਰਨਾ"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ਵਰਤੀ ਗਈ"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ਐਪ ਕਲੀਅਰ ਕਰੋ"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"ਕੀ ਤੁਸੀਂ ਇਸ \'ਤਤਕਾਲ ਐਪ\' ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"ਖੋਲ੍ਹੋ"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"ਗੇਮਾਂ"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ਆਡੀਓ ਫ਼ਾਈਲਾਂ"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"ਵਰਤੀ ਗਈ ਜਗ੍ਹਾ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index dc516d8..0fbcf1c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -3448,6 +3448,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Użyj tego urządzenia jako MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Użyj USB do:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Dodatkowe tryby USB"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Ładowanie tego urządzenia"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Ładowanie podłączonego urządzenia"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 812e0bc..10e0776 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Usar este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Usar USB para"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Também usar o USB para"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Para carregamento do dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Carregando dispositivo conectado"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 8d71479..78e85d1 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Utilizar este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Utilizar USB para"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Utilizar o USB também para"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Carregar este dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Carregar o dispositivo ligado"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 812e0bc..10e0776 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Usar este dispositivo como MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Usar USB para"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Também usar o USB para"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Para carregamento do dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Carregando dispositivo conectado"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 7fba789..cbe0669 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -3403,6 +3403,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Folosiți acest dispozitiv ca MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Folosiți conexiunea USB pentru"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Folosiți conexiunea USB și pentru"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Încărcarea acestui dispozitiv"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Se încarcă dispozitivul conectat"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d0079cb..b48b8df 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -3448,6 +3448,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Использование устройства как MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Режим работы USB"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Другие способы использования USB"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Зарядка этого устройства"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Зарядка подключенного устройства"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index a59ebc4..5302550 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"මෙම උපාංගය MIDI ලෙස භාවිත කිරිම"</string>
     <string name="usb_use" msgid="3372728031108932425">"පහත සඳහා USB භාවිතා කරන්න"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB ද භාවිත කරන්න"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"මෙම උපාංගය ආරෝපණය කරමින්"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"සම්බන්ධිත උපාංගය ආරෝපණය කරමින්"</string>
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
index 2c1450e..5bcd9c5 100644
--- a/res/values-sk/arrays.xml
+++ b/res/values-sk/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"Považovať za sieť s meraním dát"</item>
     <item msgid="2266114985518865625">"Považovať za sieť bez merania dát"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index a9fdc50..849528f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -729,6 +729,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Zapamätať nastavenia"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"Maximálny počet pripojených zvukových zariadení Bluetooth"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"Výber maximálneho počtu pripojených zvukových zariadení Bluetooth"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"Prenos"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"Povoliť bezdrôtové zobrazenie"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"V okolí sa nenašli žiadne zariadenia."</string>
@@ -1908,8 +1912,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"Používať službu"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"Používať úpravu farieb"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"Používať titulky"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ZAPNUTÉ"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"VYPNUTÉ"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"Zobraziť v Rýchlych nastaveniach"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"Režim korekcie"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2950,6 +2956,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"sériové číslo, hardvérová verzia"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"úroveň opráv zabezpečenia androidu, verzia základného pásma, verzia jadra"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"Ambientné zobrazenie, zobrazenie uzamknutej obrazovky"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Nastavenie štítka NFC pre Wi‑Fi"</string>
     <string name="write_tag" msgid="8571858602896222537">"Zapísať"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"Klepnutím na značku začnete zápis..."</string>
@@ -3248,7 +3256,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Zmena na možnosť Iba budíky platná do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"Zmena na možnosť Vždy prerušiť"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"Keď je obrazovka zapnutá"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Povoliť, aby sa upozornenia stlmené režimom Nerušiť mohli zobraziť na obrazovke"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"Keď je obrazovka vypnutá"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Povoliť, aby upozornenia stlmené režimom Nerušiť mohli zapnúť obrazovku a blikať svetlom"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Povoliť, aby upozornenia stlmené režimom Nerušiť mohli zapnúť obrazovku"</string>
@@ -3448,6 +3457,8 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Použiť toto zariadenie ako MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Použiť rozhranie USB na"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB použiť aj pre"</string>
+    <string name="usb_default_label" msgid="4217189967858707974">"Predvolená konfigurácia USB"</string>
+    <string name="usb_default_info" msgid="8864535445796200695">"Tieto nastavenia sa použijú, keď bude pripojené ďalšie zariadenie a telefón bude odomknutý. Pripájajte sa iba k dôveryhodným zariadeniam."</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Nabíjanie zariadenia"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Nabíja sa pripojené zariadenie"</string>
@@ -3572,8 +3583,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"Využíva sa v priemere <xliff:g id="USED_MEMORY">%1$s</xliff:g> z celkovej pamäte <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>"</string>
     <string name="users_summary" msgid="1674864467098487328">"Prihlásený používateľ <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"<xliff:g id="APP_NAME">%1$s</xliff:g> je predvolená aplikácia"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"ZAP."</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"VYPNUTÉ"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"Zálohovanie je zakázané"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"Aktualizované na Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"K dispozícii je aktualizácia"</string>
@@ -3757,9 +3770,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"Pripojené k zariadeniu <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Pripojené k viacerým zariadeniam"</string>
     <string name="demo_mode" msgid="2798762752209330277">"Ukážka používateľského rozhrania systému"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Dlaždice rýchleho nastavenia pre vývojárov"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"Trasovanie okna"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Povrchové trasovanie"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> – <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Nastavenia pracovného profilu"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Vyhľadávanie kontaktov"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b0201ad..1f1e1d2 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -3448,6 +3448,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Uporaba te naprave kot vmesnik MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Uporaba povezave USB za"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Uporabi USB tudi za"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Polnjenje te naprave"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Polnjenje akumulatorja v povezani napravi"</string>
@@ -3934,8 +3938,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"uporab."</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Počisti aplikacijo"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Ali želite odstraniti to nenamestljivo aplikacijo?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Odpri"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Igre"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Zvočne datoteke"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Uporabljen prostor"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 1b579a2..34cca05 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Përdore këtë pajisje si MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Përdore USB-në për"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Përdor po ashtu USB-në për"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Ngarkimi i kësaj pajisjeje"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Pajisja e lidhur po ngarkohet"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"e përdorur"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Pastro aplikacionin"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Dëshiron që ta heqësh këtë aplikacion të çastit?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Hap"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Lojëra"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Skedarët audio"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Hapësira e përdorur"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 18ad45a..7a2be58 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -3403,6 +3403,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Користите овај уређај као MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Користи USB за"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Користите USB и за"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Пуњење уређаја"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Пуњење повезаног уређаја"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index db7dc1c..9a56c2a 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Använd den här enheten som MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Använd USB för"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Använd även USB för"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Enheten laddas"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Laddning av ansluten enhet"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"används"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Rensa app"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Vill du ta bort den här snabbappen?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Öppna"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Spel"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Ljudfiler"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Använt lagringsutrymme"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index b8bc68f..3103f4a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Tumia kifaa hiki kama MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Tumia USB kwa ajili ya"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Pia tumia USB"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Kuchaji kifaa hiki"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Inachaji kifaa kilichounganishwa"</string>
diff --git a/res/values-sw400dp/styles.xml b/res/values-sw400dp/config.xml
old mode 100755
new mode 100644
similarity index 64%
rename from res/values-sw400dp/styles.xml
rename to res/values-sw400dp/config.xml
index f69f7c3..d791857
--- a/res/values-sw400dp/styles.xml
+++ b/res/values-sw400dp/config.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2017 The Android Open Source Project
+    Copyright (C) 2018 Google Inc.
 
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
@@ -17,7 +17,9 @@
 
 <resources>
 
-    <!-- Unhide the icon on bigger screens -->
-    <style name="LockPatternIconStyle" parent="SuwGlifIcon" />
+    <!-- Whether to use a UI variant that minimizes the number of UI elements on screen. This is
+         typically used when there is not enough space to display everything, because pattern view
+         doesn't interact well with scroll view -->
+    <bool name="config_lock_pattern_minimal_ui">false</bool>
 
-</resources>
+</resources>
\ No newline at end of file
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 877ff81..53d28fa 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"இந்தச் சாதனத்தை MIDI ஆகப் பயன்படுத்தும்"</string>
     <string name="usb_use" msgid="3372728031108932425">"இதற்காக USBஐப் பயன்படுத்து:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USBஐ இதற்கும் பயன்படுத்தலாம்"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"இந்தச் சாதனத்தைச் சார்ஜ் செய்வதற்கு"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"இணைக்கப்பட்ட சாதனத்தைச் சார்ஜ் செய்தல்"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"பயன்பாடு"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"பயன்பாட்டை அழி"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"இந்த இன்ஸ்டண்ட் பயன்பாட்டை அகற்றவா?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"திற"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"கேம்ஸ்"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ஆடியோ ஃபைல்கள்"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"பயன்படுத்திய இட அளவு"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index daaa164..f02e704 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -3359,6 +3359,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ఈ పరికరాన్ని MIDI వలె ఉపయోగించడం"</string>
     <string name="usb_use" msgid="3372728031108932425">"దీని కోసం USBని ఉపయోగించండి"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USBని దీని కోసం కూడా ఉపయోగించండి"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ఈ పరికరాన్ని ఛార్జ్ చేయడం"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"కనెక్ట్ చేయబడిన పరికరాన్ని ఛార్జ్ చేస్తోంది"</string>
@@ -3811,8 +3815,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"ఉపయోగించబడింది"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"యాప్‌ను క్లియర్ చేయి"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"మీరు ఈ తక్షణ అనువర్తనాన్ని తీసివేయాలనుకుంటున్నారా?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"తెరువు"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"గేమ్‌లు"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"ఆడియో ఫైల్‌లు"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"ఉపయోగించబడిన నిల్వ"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 47562ae..74b21e4 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"ใช้อุปกรณ์นี้เป็น MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"ใช้ USB สำหรับ"</string>
     <string name="usb_use_also" msgid="557340935190819370">"และใช้ USB สำหรับ"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"ชาร์จอุปกรณ์นี้"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"การชาร์จอุปกรณ์ที่เชื่อมต่อ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 139a63c..8190657 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Gamitin ang device na ito bilang MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Gamitin ang USB para sa"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Gamitin din ang USB para sa"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Pag-charge sa device na ito"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Pag-charge ng nakakonektang device"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1da5ff4..0e43462 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bu cihazı MIDI olarak kullanın"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB\'yi şunun için kullan:"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Ayrıca USB\'yi şunun için kullan:"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Bu cihazı şarj et"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Bağlı cihazı şarj etme"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"kullanılan"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"Uygulamayı temizle"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"Bu hazır uygulamayı kaldırmak istiyor musunuz?"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"Aç"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"Oyunlar"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"Ses dosyaları"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"Kullanılan alan"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index a46de41..60477cf 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -3448,6 +3448,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Використовувати цей пристрій як MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Використання USB"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Інші застосування USB"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Заряджання пристрою"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Заряджання під’єднаного пристрою"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index e6553e6..8b52059 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -3356,6 +3356,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"‏اس آلہ کو بطور MIDI استعمال کریں"</string>
     <string name="usb_use" msgid="3372728031108932425">"‏اس کیلئے USB استعمال کریں"</string>
     <string name="usb_use_also" msgid="557340935190819370">"‏درجہ ذیل کے لئے بھی USB استعمال کریں"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"اس آلہ کو چارج کر رہی ہے"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"منسلک آلہ چارج ہو رہا ہے"</string>
@@ -3808,8 +3812,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"مستعمل"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"ایپ صاف کریں"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"کیا آپ اس فوری ایپ کو ہٹانا چاہتے ہیں؟"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"کھولیں"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"گیمز"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"آڈیو فائلز"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"استعمال شدہ جگہ"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 936d67a..241134d 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -923,7 +923,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Wi‑Fi ulanish nuqtasini sozlash"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK hotspot"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"AndroidHotspot"</string>
-    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Parvoz rejimi yoniqligi uchun funksiya ishlamaydi"</string>
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"Parvoz rejimi yoniqligi uchun bu funksiya ishlamaydi"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Wi-Fi qo‘ng‘iroq"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"Wi‑Fi orqali chaqiruv qamrovini kengaytiring"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"Wi-Fi chaqiruvni yoqing"</string>
@@ -1489,7 +1489,7 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Xavfsizlik qoidalari"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Sizda internet ulanish yo‘q. Bu ma‘lumotni ko‘rish uchun, internetga ulangan kompyuterda %s manziliga kiring."</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Yuklanmoqda…"</string>
-    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"Ekranni qulfini o‘rnatish"</string>
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"Ekranni qulfini sozlash"</string>
     <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"Xavfsizlik uchun parol o‘rnating"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"Barmoq izidan foydalanish uchun parol o‘rnating"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"Barmoq izidan foydalanish uchun grafik kalit o‘rnating"</string>
@@ -3378,6 +3378,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bu qurilmadan MIDI sifatida foydalanish"</string>
     <string name="usb_use" msgid="3372728031108932425">"USBdan foydalanish"</string>
     <string name="usb_use_also" msgid="557340935190819370">"USB ulanish maqsadi"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Shu qurilmani quvvatlash"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Ulangan qurilma quvvatlanmoqda"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 461c013..42ae0c5 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -3364,6 +3364,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Sử dụng thiết bị này làm MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Sử dụng USB cho"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Ngoài ra, sử dụng USB để"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Sạc thiết bị này"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Sạc thiết bị được kết nối"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8a7c7a4..1e947f5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3358,6 +3358,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"将此设备用作 MIDI 设备"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB 的用途"</string>
     <string name="usb_use_also" msgid="557340935190819370">"同时将 USB 用于以下用途："</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"为此设备充电"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"为连接的设备充电"</string>
@@ -3810,8 +3814,7 @@
     <string name="storage_percent_full" msgid="6095012055875077036">"已使用"</string>
     <string name="clear_instant_app_data" msgid="2004222610585890909">"清除应用"</string>
     <string name="clear_instant_app_confirmation" msgid="7451671214898856857">"要移除这个免安装应用吗？"</string>
-    <!-- no translation found for launch_instant_app (391581144859010499) -->
-    <skip />
+    <string name="launch_instant_app" msgid="391581144859010499">"打开"</string>
     <string name="game_storage_settings" msgid="3410689937046696557">"游戏"</string>
     <string name="audio_files_title" msgid="4777048870657911307">"音频文件"</string>
     <string name="app_info_storage_title" msgid="5554719444625611987">"已用空间"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index b0334ec..f7fe9dc 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -482,8 +482,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"保護您的平板電腦"</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"保護您的裝置"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"保護您的手機"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"為提升安全性，請設定後備螢幕鎖定方式"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"只要啟用裝置保護功能，即可阻止他人在未經您准許下使用此平板電腦。請選擇您想使用的螢幕鎖定功能。"</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"只要啟用裝置保護功能，即可阻止他人在未經您准許下使用此裝置。請選擇您想使用的螢幕鎖定功能。"</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"只要啟用裝置保護功能，即可阻止他人在未經您准許下使用此手機。請選擇您想使用的螢幕鎖定功能。"</string>
@@ -924,8 +923,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Wi‑Fi 熱點設定"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK 熱點"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"Android 熱點"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"由於飛行模式已開啟，因此無法使用"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Wi-Fi 通話"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"透過 Wi-Fi 擴大通話覆蓋範圍"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"開啟 Wi-Fi 通話功能"</string>
@@ -1492,17 +1490,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"安全資訊"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"您沒有數據連線，如要立即查看這項資訊，請使用任何已連接互聯網的電腦前往 %s。"</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"載入中…"</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"設定螢幕鎖定"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"為安全起見，請設定密碼"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"如要使用指紋，請設定密碼"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"如要使用指紋，請設定上鎖圖案"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"為安全起見，請設定 PIN"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"如要使用指紋，請設定 PIN"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"為安全起見，請設定圖案"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"請重新輸入密碼"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"確認圖形"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"請重新輸入 PIN"</string>
@@ -3367,6 +3361,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"在 MIDI 模式下使用此裝置"</string>
     <string name="usb_use" msgid="3372728031108932425">"使用 USB 於"</string>
     <string name="usb_use_also" msgid="557340935190819370">"使用 USB 時同時開啟以下模式"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"為此裝置充電"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"正在為連接的裝置充電"</string>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
index a54945e..831218d 100644
--- a/res/values-zh-rTW/arrays.xml
+++ b/res/values-zh-rTW/arrays.xml
@@ -497,4 +497,7 @@
     <item msgid="8745603368609022803">"視為計量付費"</item>
     <item msgid="2266114985518865625">"視為非計量付費"</item>
   </string-array>
+    <!-- no translation found for dark_ui_mode_entries:0 (146804192658443142) -->
+    <!-- no translation found for dark_ui_mode_entries:1 (6620560879508595181) -->
+    <!-- no translation found for dark_ui_mode_entries:2 (6385301106124765323) -->
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 7a510dd..e8200f4 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -482,8 +482,7 @@
     <string name="setup_lock_settings_picker_title" product="tablet" msgid="90329443364067215">"保護你的平板電腦"</string>
     <string name="setup_lock_settings_picker_title" product="device" msgid="2399952075134938929">"保護你的裝置"</string>
     <string name="setup_lock_settings_picker_title" product="default" msgid="1572244299605153324">"保護你的手機"</string>
-    <!-- no translation found for lock_settings_picker_fingerprint_added_security_message (5008939545428518367) -->
-    <skip />
+    <string name="lock_settings_picker_fingerprint_added_security_message" msgid="5008939545428518367">"為了進一步提升安全性，請設定備用的螢幕鎖定方式"</string>
     <string name="setup_lock_settings_picker_message" product="tablet" msgid="8919671129189936210">"只要啟用裝置保護功能，即可防止他人在未獲你授權的情況下使用這台平板電腦。請選擇你要使用的螢幕鎖定方式。"</string>
     <string name="setup_lock_settings_picker_message" product="device" msgid="3787276514406353777">"只要啟用裝置保護功能，即可防止他人在未獲你授權的情況下使用這個裝置。請選擇你要使用的螢幕鎖定方式。"</string>
     <string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"只要啟用裝置保護功能，即可防止他人在未獲你授權的情況下使用這支手機。請選擇你要使用的螢幕鎖定方式。"</string>
@@ -708,6 +707,10 @@
     <string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"記住設定"</string>
     <string name="bluetooth_max_connected_audio_devices_string" msgid="6752690395207847881">"已連線藍牙音訊裝置的數量上限"</string>
     <string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="5936561749790095473">"選取已連線藍牙音訊裝置的數量上限"</string>
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports (5101903170688399944) -->
+    <skip />
+    <!-- no translation found for bluetooth_enable_avdtp_delay_reports_summary (7052797876020616399) -->
+    <skip />
     <string name="wifi_display_settings_title" msgid="8740852850033480136">"投放"</string>
     <string name="wifi_display_enable_menu_item" msgid="4883036464138167674">"啟用無線螢幕分享"</string>
     <string name="wifi_display_no_devices_found" msgid="1382012407154143453">"找不到附近的裝置。"</string>
@@ -924,8 +927,7 @@
     <string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Wi‑Fi 無線基地台設定"</string>
     <string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"AndroidAP WPA2 PSK 無線基地台"</string>
     <string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"Android 無線基地台"</string>
-    <!-- no translation found for wifi_tether_disabled_by_airplane (414480185654767932) -->
-    <skip />
+    <string name="wifi_tether_disabled_by_airplane" msgid="414480185654767932">"已開啟飛航模式，因此無法使用"</string>
     <string name="wifi_calling_settings_title" msgid="4102921303993404577">"Wi-Fi 通話"</string>
     <string name="wifi_calling_suggestion_title" msgid="7766895085362824508">"透過 Wi‑Fi 擴大通話涵蓋範圍"</string>
     <string name="wifi_calling_suggestion_summary" msgid="6460250990899143406">"開啟 Wi-Fi 通話功能"</string>
@@ -1491,17 +1493,13 @@
     <string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"安全資訊"</string>
     <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"你沒有數據連線，如要立即查看這項資訊，請使用任何已連上網際網路的電腦前往 %s。"</string>
     <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"載入中…"</string>
-    <!-- no translation found for lockpassword_choose_your_screen_lock_header (2942199737559900752) -->
-    <skip />
-    <!-- no translation found for lockpassword_choose_your_password_message (5377842480961577542) -->
-    <skip />
+    <string name="lockpassword_choose_your_screen_lock_header" msgid="2942199737559900752">"設定螢幕鎖定"</string>
+    <string name="lockpassword_choose_your_password_message" msgid="5377842480961577542">"為了安全起見，請設定密碼"</string>
     <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="6624409510609085450">"如要使用指紋，請設定密碼"</string>
     <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="5901096361617543819">"如要使用指紋，請設定解鎖圖案"</string>
-    <!-- no translation found for lockpassword_choose_your_pin_message (6658264750811929338) -->
-    <skip />
+    <string name="lockpassword_choose_your_pin_message" msgid="6658264750811929338">"為了安全起見，請設定 PIN 碼"</string>
     <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="765344692615917183">"如要使用指紋，請設定 PIN 碼"</string>
-    <!-- no translation found for lockpassword_choose_your_pattern_message (8631545254345759087) -->
-    <skip />
+    <string name="lockpassword_choose_your_pattern_message" msgid="8631545254345759087">"為了安全起見，請設定解鎖圖案"</string>
     <string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"請重新輸入你的密碼"</string>
     <string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"確認圖案"</string>
     <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"請重新輸入你的 PIN 碼"</string>
@@ -1886,8 +1884,10 @@
     <string name="accessibility_service_master_switch_title" msgid="6835441300276358239">"使用服務"</string>
     <string name="accessibility_daltonizer_master_switch_title" msgid="8655284637968823154">"使用色彩校正"</string>
     <string name="accessibility_caption_master_switch_title" msgid="4010227386676077826">"使用字幕"</string>
-    <string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"開啟"</string>
-    <string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"關閉"</string>
+    <!-- no translation found for accessibility_summary_state_enabled (7914278500885887763) -->
+    <skip />
+    <!-- no translation found for accessibility_summary_state_disabled (2984230257590246745) -->
+    <skip />
     <string name="enable_quick_setting" msgid="2366999897816894536">"在快速設定中顯示"</string>
     <string name="daltonizer_type" msgid="1124178250809091080">"校正模式"</string>
     <plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
@@ -2898,6 +2898,8 @@
     <string name="keywords_model_and_hardware" msgid="1459248377212829642">"序號、硬體版本"</string>
     <string name="keywords_android_version" msgid="9069747153590902819">"Android 安全性修補程式等級、基頻版本、核心版本"</string>
     <string name="keywords_ambient_display_screen" msgid="5874969496073249362">"微光螢幕, 螢幕鎖定畫面"</string>
+    <!-- no translation found for keywords_fingerprint_settings (239222512315619538) -->
+    <skip />
     <string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"設定 Wi-Fi NFC 標記"</string>
     <string name="write_tag" msgid="8571858602896222537">"寫入"</string>
     <string name="status_awaiting_tap" msgid="2130145523773160617">"輕觸標記即可寫入..."</string>
@@ -3180,7 +3182,8 @@
     <string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"變更為僅允許鬧鐘模式，結束時間為 <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_summary_always" msgid="6172985102689237703">"變更為一律允許干擾模式"</string>
     <string name="zen_mode_screen_on" msgid="8774571998575673502">"螢幕開啟時"</string>
-    <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"允許「零打擾」模式設為靜音的通知在畫面上彈出通知"</string>
+    <!-- no translation found for zen_mode_screen_on_summary (2208664848367443505) -->
+    <skip />
     <string name="zen_mode_screen_off" msgid="3144446765110327937">"螢幕關閉時"</string>
     <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"允許「零打擾」模式設為靜音的通知開啟螢幕及閃爍燈光"</string>
     <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"允許「零打擾」模式設為靜音的通知開啟螢幕"</string>
@@ -3358,7 +3361,7 @@
     <string name="usb_use_charging_only" msgid="2180443097365214467">"為這個裝置充電"</string>
     <string name="usb_use_charging_only_desc" msgid="3066256793008540627">"僅為這個裝置充電"</string>
     <string name="usb_use_power_only" msgid="6449381364444187612">"正在為連接的裝置充電"</string>
-    <string name="usb_use_power_only_desc" msgid="5674490059427055197">"開啟後無法使用其他設定"</string>
+    <string name="usb_use_power_only_desc" msgid="5674490059427055197">"開啟後停用其他設定"</string>
     <string name="usb_use_file_transfers" msgid="1223134119354320726">"檔案傳輸"</string>
     <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"將檔案轉移到另一個裝置"</string>
     <string name="usb_use_photo_transfers" msgid="8192719651229326283">"PTP"</string>
@@ -3368,6 +3371,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"將這個裝置用做 MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"USB 用途"</string>
     <string name="usb_use_also" msgid="557340935190819370">"使用 USB 時一併開啟以下模式"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"為這個裝置充電"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"正在為連接的裝置充電"</string>
@@ -3378,7 +3385,7 @@
     <string name="usb_summary_file_transfers_power" msgid="7700800611455849806">"檔案傳輸和供電"</string>
     <string name="usb_summary_tether_power" msgid="5825335393952752238">"USB 數據連線和供電"</string>
     <string name="usb_summary_photo_transfers_power" msgid="6826058111908423069">"PTP 和供電"</string>
-    <string name="usb_summary_MIDI_power" msgid="3308250484012677596">"MIDI 和供電"</string>
+    <string name="usb_summary_MIDI_power" msgid="3308250484012677596">"MIDI 模式和供電"</string>
     <string name="background_check_pref" msgid="7550258400138010979">"背景檢查"</string>
     <string name="background_check_title" msgid="4534254315824525593">"完整背景存取權"</string>
     <string name="assist_access_context_title" msgid="2269032346698890257">"使用畫面中的文字"</string>
@@ -3488,8 +3495,10 @@
     <string name="memory_summary" msgid="8080825904671961872">"平均記憶體用量為 <xliff:g id="USED_MEMORY">%1$s</xliff:g> (共 <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>)"</string>
     <string name="users_summary" msgid="1674864467098487328">"登入身分：<xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
     <string name="payment_summary" msgid="3472482669588561110">"預設使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
-    <string name="location_on_summary" msgid="4083334422422067511">"開啟"</string>
-    <string name="location_off_summary" msgid="6474350053215707957">"關閉"</string>
+    <!-- no translation found for location_on_summary (3637699010986988970) -->
+    <skip />
+    <!-- no translation found for location_off_summary (7217264690673949107) -->
+    <skip />
     <string name="backup_disabled" msgid="485189128759595412">"備份功能已停用"</string>
     <string name="android_version_summary" msgid="2935995161657697278">"已更新至 Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="android_version_pending_update_summary" msgid="487831391976523090">"有可用的更新"</string>
@@ -3663,9 +3672,13 @@
     <string name="bluetooth_connected_summary" msgid="7672528674593152862">"已連線到「<xliff:g id="ID_1">%1$s</xliff:g>」"</string>
     <string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"已連線到多個裝置"</string>
     <string name="demo_mode" msgid="2798762752209330277">"系統 UI 示範模式"</string>
+    <!-- no translation found for dark_ui_mode (2112241426441807273) -->
+    <skip />
+    <!-- no translation found for dark_ui_mode_title (975299966259850992) -->
+    <skip />
     <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"快速設定開發人員圖塊"</string>
-    <string name="window_trace_quick_settings_title" msgid="3839917000546526898">"視窗追蹤"</string>
-    <string name="layer_trace_quick_settings_title" msgid="876797401275734018">"Surface 追蹤"</string>
+    <!-- no translation found for winscope_trace_quick_settings_title (1294290008255732032) -->
+    <skip />
     <string name="support_country_format" msgid="4502523713489559595">"<xliff:g id="COUNTRY">%1$s</xliff:g> - <xliff:g id="LANGUAGE">%2$s</xliff:g>"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Work 設定檔設定"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"聯絡人搜尋"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 3b014ab..cd05e61 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -3359,6 +3359,10 @@
     <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Sebenzisa le divayisi njenge-MIDI"</string>
     <string name="usb_use" msgid="3372728031108932425">"Sebenzisela i-USB i-"</string>
     <string name="usb_use_also" msgid="557340935190819370">"Phinda usebenzise i-USB ku-"</string>
+    <!-- no translation found for usb_default_label (4217189967858707974) -->
+    <skip />
+    <!-- no translation found for usb_default_info (8864535445796200695) -->
+    <skip />
     <string name="usb_pref" msgid="1400617804525116158">"I-USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Ishaja le divayisi"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Ishaja idivayisi exhunyiwe"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index cb6f9be..0ccbbf4 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1079,4 +1079,18 @@
         <item>2</item>
     </string-array>
 
+    <!-- Titles for ui dark mode preference. -->
+    <string-array name="dark_ui_mode_entries" >
+        <item>Automatic (based on time of day)</item>
+        <item>Always on</item>
+        <item>Always off</item>
+    </string-array>
+
+    <!-- Values for ui dark mode preference. -->
+    <string-array name="dark_ui_mode_values" translatable="false" >
+        <item>auto</item>
+        <item>yes</item>
+        <item>no</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index ce61164..ec611f0 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -122,4 +122,10 @@
 
     <!-- Whether or not new device intro suggestion is supported for this device -->
     <bool name="config_new_device_intro_suggestion_supported">false</bool>
+
+    <!-- Whether to use a UI variant that minimizes the number of UI elements on screen. This is
+         typically used when there is not enough space to display everything, because pattern view
+         doesn't interact well with scroll view -->
+    <bool name="config_lock_pattern_minimal_ui">true</bool>
+
 </resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 66af163..76322ff 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -18,6 +18,8 @@
 -->
 <resources>
     <item type="id" name="preference_highlighted" />
+    <item type="id" name="job_anomaly_clean_up" />
+    <item type="id" name="job_anomaly_detection" />
 
     <item type="id" name="lock_none" />
     <item type="id" name="lock_pin" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ad11706..46a15c1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1655,10 +1655,15 @@
     <!-- Bluetooth settings.  Dock Setting Dialog - Remember setting and don't ask user again -->
     <string name="bluetooth_dock_settings_remember">Remember settings</string>
 
+    <!-- Bluetooth developer options. -->
     <!-- Bluetooth developer settings: Maximum number of connected audio devices -->
     <string name="bluetooth_max_connected_audio_devices_string">Maximum connected Bluetooth audio devices</string>
     <!-- Bluetooth developer settings: Maximum number of connected audio devices -->
     <string name="bluetooth_max_connected_audio_devices_dialog_title">Select maximum number of connected Bluetooth audio devices</string>
+    <!-- Bluetooth developer settings: Checkbox title for enabling Bluetooth receiving AVDTP delay reports -->
+    <string name="bluetooth_enable_avdtp_delay_reports">Enable Bluetooth AVDTP delay reports</string>
+    <!-- Bluetooth developer settings: Summary of checkbox for enabling Bluetooth receiving AVDTP delay reports -->
+    <string name="bluetooth_enable_avdtp_delay_reports_summary">Allow receiving Bluetooth AVDTP delay reports</string>
 
     <!-- Wifi Display settings. The title of the screen. [CHAR LIMIT=40] -->
     <string name="wifi_display_settings_title">Cast</string>
@@ -4409,10 +4414,10 @@
     <!-- Used in the Captions settings screen to control turning on/off the feature entirely -->
     <string name="accessibility_caption_master_switch_title">Use captions</string>
 
-    <!-- Preference's state when enabled. Note: UPPERCASE -->
-    <string name="accessibility_summary_state_enabled">ON</string>
-    <!-- Preference's state when disabled. Note: UPPERCASE -->
-    <string name="accessibility_summary_state_disabled">OFF</string>
+    <!-- Preference's state when enabled. -->
+    <string name="accessibility_summary_state_enabled">On</string>
+    <!-- Preference's state when disabled. -->
+    <string name="accessibility_summary_state_disabled">Off</string>
 
     <!-- Title for the preference to show a tile for a particular feature in the Quick Settings pane. [CHAR LIMIT=NONE] -->
     <string name="enable_quick_setting">Show in Quick Settings</string>
@@ -6758,6 +6763,8 @@
     <string name="keywords_android_version">android security patch level, baseband version, kernel version</string>
     <!-- Search keyword for Ambient display settings screen. -->
     <string name="keywords_ambient_display_screen">Ambient display, Lock screen display</string>
+    <!-- Search keyword for fingerprint settings. -->
+    <string name="keywords_fingerprint_settings">fingerprint</string>
 
     <!-- NFC Wi-Fi pairing/setup strings-->
 
@@ -7592,7 +7599,7 @@
     <!-- [CHAR LIMIT=40] Zen mode settings: visual signals: screen is on: title -->
     <string name="zen_mode_screen_on">When the screen is on</string>
     <!-- [CHAR LIMIT=130] Zen mode settings:  visual signals: screen is on: summary -->
-    <string name="zen_mode_screen_on_summary">Let notifications silenced by Do Not Disturb pop on screen</string>
+    <string name="zen_mode_screen_on_summary">Let notifications silenced by Do Not Disturb pop on screen and show a status bar icon</string>
     <!-- [CHAR LIMIT=40] Zen mode settings: visual signals: screen is off: title -->
     <string name="zen_mode_screen_off">When the screen is off</string>
     <!-- [CHAR LIMIT=130] Zen mode settings:  visual interruptions: screen is off: summary -->
@@ -8096,6 +8103,10 @@
          for this device should be used for. These options are less commonly used.
          Choices are usb_use_tethering, usb_use_photo_transfers, usb_use_MIDI, and usb_use_power_only.-->
     <string name="usb_use_also">Also use USB for</string>
+    <!-- The label that leads to the Default USB configuration window. -->
+    <string name="usb_default_label">Default USB Configuration</string>
+    <!-- Description at the footer of the default USB configuration window that describes how the setting works. -->
+    <string name="usb_default_info">When another device is connected and your phone is unlocked, these settings will be applied. Only connect to trusted devices.</string>
 
     <!-- Settings item title for USB preference [CHAR LIMIT=35] -->
     <string name="usb_pref">USB</string>
@@ -8406,10 +8417,10 @@
     <string name="payment_summary"><xliff:g id="app_name" example="Payment App">%1$s</xliff:g> is default</string>
 
     <!-- Summary of location on screen [CHAR LIMIT=NONE] -->
-    <string name="location_on_summary">ON</string>
+    <string name="location_on_summary">On</string>
 
     <!-- Location off [CHAR LIMIT=NONE] -->
-    <string name="location_off_summary">OFF</string>
+    <string name="location_off_summary">Off</string>
 
     <!-- Backup disabled summary [CHAR LIMIT=NONE] -->
     <string name="backup_disabled">Back up disabled</string>
@@ -8878,14 +8889,17 @@
     <!-- [CHAR LIMIT=60] Name of dev option called "System UI demo mode" -->
     <string name="demo_mode">System UI demo mode</string>
 
+    <!-- [CHAR LIMIT=60] Name of dev option that changes the UI Mode -->
+    <string name="dark_ui_mode">Night mode</string>
+
+    <!-- [CHAR LIMIT=60] Name of dev option that changes the color of the UI -->
+    <string name="dark_ui_mode_title">Set Night mode</string>
+
     <!-- [CHAR LIMIT=60] Name of dev option to enable extra quick settings tiles -->
     <string name="quick_settings_developer_tiles">Quick settings developer tiles</string>
 
-    <!-- [CHAR LIMIT=25] Title of developer tile to toggle window trace -->
-    <string name="window_trace_quick_settings_title">Window Trace</string>
-
-    <!-- [CHAR LIMIT=25] Title of developer tile to toggle layer trace -->
-    <string name="layer_trace_quick_settings_title">Surface Trace</string>
+    <!-- [CHAR LIMIT=25] Title of developer tile to toggle winscope trace -->
+    <string name="winscope_trace_quick_settings_title">Winscope Trace</string>
 
     <!-- Template for formatting country and language. eg Canada - French [CHAR LIMIT=NONE]-->
     <string name="support_country_format"><xliff:g id="country" example="Canada">%1$s</xliff:g> - <xliff:g id="language" example="French">%2$s</xliff:g></string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index b436355..86375fa 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -457,11 +457,6 @@
         <item name="*android:successColor">@color/setup_lock_pattern_view_success_color_light</item>
     </style>
 
-    <!-- Overridden in sw400dp -->
-    <style name="LockPatternIconStyle" parent="SuwGlifIcon">
-        <item name="android:visibility">gone</item>
-    </style>
-
     <style name="SuggestionConditionStyle">
         <item name="android:background">@color/suggestion_condition_background</item>
     </style>
diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml
index 3548efb..84b80b8 100644
--- a/res/xml/app_and_notification.xml
+++ b/res/xml/app_and_notification.xml
@@ -20,7 +20,7 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="apps_and_notification_screen"
     android:title="@string/app_and_notification_dashboard_title"
-    settings:initialExpandedChildrenCount="6">
+    settings:initialExpandedChildrenCount="8">
 
     <PreferenceCategory
         android:key="recent_apps_category"
@@ -46,18 +46,19 @@
         android:key="all_app_info_divider"
         android:order="-190"/>
 
-    <Preference
-        android:key="manage_perms"
-        android:title="@string/app_permissions"
-        android:order="-130"
-        settings:keywords="@string/keywords_app_permissions">
-        <intent android:action="android.intent.action.MANAGE_PERMISSIONS" />
-    </Preference>
-
+    <!-- Notifications (appears before manage_perms), default apps (appears after) -->
     <PreferenceCategory
         android:key="dashboard_tile_placeholder"
         android:order="10" />
 
+    <Preference
+        android:key="manage_perms"
+        android:title="@string/app_permissions"
+        android:order="12"
+        settings:keywords="@string/keywords_app_permissions">
+        <intent android:action="android.intent.action.MANAGE_PERMISSIONS" />
+    </Preference>
+
     <com.android.settingslib.RestrictedPreference
         android:key="app_and_notif_cell_broadcast_settings"
         android:title="@string/cell_broadcast_settings"
diff --git a/res/xml/connected_devices_advanced.xml b/res/xml/connected_devices_advanced.xml
index a5d48fd..36eab22 100644
--- a/res/xml/connected_devices_advanced.xml
+++ b/res/xml/connected_devices_advanced.xml
@@ -50,7 +50,7 @@
         settings:controller="com.android.settings.connecteddevice.BluetoothOnWhileDrivingPreferenceController"
         android:order="-2"/>
 
-    <Preference
+    <com.android.settingslib.RestrictedPreference
         android:key="connected_device_printing"
         android:title="@string/print_settings"
         android:summary="@string/summary_placeholder"
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index a88a97b..571f38e 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -112,6 +112,13 @@
             <intent android:action="com.android.settings.action.DEMO_MODE" />
         </Preference>
 
+        <ListPreference
+            android:key="dark_ui_mode"
+            android:title="@string/dark_ui_mode"
+            android:dialogTitle="@string/dark_ui_mode_title"
+            android:entries="@array/dark_ui_mode_entries"
+            android:entryValues="@array/dark_ui_mode_values" />
+
         <Preference
             android:key="quick_settings_tiles"
             android:title="@string/quick_settings_developer_tiles"
@@ -235,12 +242,11 @@
             android:title="@string/tethering_hardware_offload"
             android:summary="@string/tethering_hardware_offload_summary" />
 
-        <ListPreference
-            android:key="select_usb_configuration"
-            android:title="@string/select_usb_configuration_title"
-            android:dialogTitle="@string/select_usb_configuration_dialog_title"
-            android:entries="@array/usb_configuration_titles"
-            android:entryValues="@array/usb_configuration_values" />
+        <Preference
+            android:key="default_usb_configuration"
+            android:fragment="com.android.settings.connecteddevice.usb.UsbDefaultFragment"
+            android:icon="@drawable/ic_usb"
+            android:title="@string/usb_default_label"/>
 
         <SwitchPreference
             android:key="bluetooth_show_devices_without_names"
@@ -257,6 +263,11 @@
             android:title="@string/bluetooth_disable_inband_ringing"
             android:summary="@string/bluetooth_disable_inband_ringing_summary" />
 
+        <SwitchPreference
+            android:key="bluetooth_enable_avdtp_delay_reports"
+            android:title="@string/bluetooth_enable_avdtp_delay_reports"
+            android:summary="@string/bluetooth_enable_avdtp_delay_reports_summary"/>
+
         <ListPreference
             android:key="bluetooth_select_avrcp_version"
             android:title="@string/bluetooth_select_avrcp_version_string"
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index c86df68..43affe6 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -27,7 +27,8 @@
         <!-- This preference category gets removed if new_recent_location_ui is disabled -->
         <Preference
             android:key="app_level_permissions"
-            android:title="@string/location_app_level_permissions">
+            android:title="@string/location_app_level_permissions"
+            settings:allowDividerAbove="true">
             <intent android:action="android.intent.action.MANAGE_PERMISSION_APPS">
                 <extra android:name="android.intent.extra.PERMISSION_NAME"
                        android:value="android.permission-group.LOCATION" />
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index dabed8a..8c93f97 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -60,7 +60,8 @@
         android:key="legal_container"
         android:order="5"
         android:title="@string/legal_information"
-        android:fragment="com.android.settings.LegalSettings" />
+        android:fragment="com.android.settings.LegalSettings"
+        settings:allowDividerAbove="true"/>
 
     <!-- Regulatory labels -->
     <Preference
@@ -76,7 +77,8 @@
         android:order="7"
         android:title="@string/sim_status_title"
         settings:keywords="@string/keywords_sim_status"
-        android:summary="@string/summary_placeholder"/>
+        android:summary="@string/summary_placeholder"
+        settings:allowDividerAbove="true"/>
 
     <!-- Model & hardware -->
     <Preference
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index fbe4e0d..d89653a 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -36,7 +36,8 @@
         <com.android.settings.widget.MasterSwitchPreference
             android:fragment="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings"
             android:key="battery_saver_summary"
-            android:title="@string/battery_saver"/>
+            android:title="@string/battery_saver"
+            settings:controller="com.android.settings.fuelgauge.BatterySaverController"/>
 
         <Preference
             android:fragment="com.android.settings.fuelgauge.SmartBatterySettings"
diff --git a/res/xml/security_dashboard_settings.xml b/res/xml/security_dashboard_settings.xml
index 00eaa7e..858cbaf 100644
--- a/res/xml/security_dashboard_settings.xml
+++ b/res/xml/security_dashboard_settings.xml
@@ -53,7 +53,8 @@
         <Preference
             android:key="fingerprint_settings"
             android:title="@string/security_settings_fingerprint_preference_title"
-            android:summary="@string/summary_placeholder" />
+            android:summary="@string/summary_placeholder"
+            settings:keywords="@string/keywords_fingerprint_settings"/>
 
     </PreferenceCategory>
 
diff --git a/res/xml/usb_default_fragment.xml b/res/xml/usb_default_fragment.xml
new file mode 100644
index 0000000..b8d5e53
--- /dev/null
+++ b/res/xml/usb_default_fragment.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2018 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"
+    android:title="@string/usb_pref"
+    android:key="usb_default_fragment">
+</PreferenceScreen>
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 18a7ee1..2a4934c 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -73,7 +73,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Activity activity = getActivity();
         final Intent intent = activity.getIntent();
@@ -112,10 +112,10 @@
     public Dialog onCreateDialog(int id) {
         switch (id) {
             case DatePreferenceController.DIALOG_DATEPICKER:
-                return getPreferenceController(DatePreferenceController.class)
+                return use(DatePreferenceController.class)
                         .buildDatePicker(getActivity());
             case TimePreferenceController.DIALOG_TIMEPICKER:
-                return getPreferenceController(TimePreferenceController.class)
+                return use(TimePreferenceController.class)
                         .buildTimePicker(getActivity());
             default:
                 throw new IllegalArgumentException();
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index e726c63..5bad368 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -74,7 +74,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -133,7 +133,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null);
                 }
             };
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index f66b1f9..9ad32e2 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -73,7 +73,7 @@
  *
  * This is the initial screen.
  */
-public class MasterClear extends InstrumentedFragment {
+public class MasterClear extends InstrumentedFragment implements OnGlobalLayoutListener {
     private static final String TAG = "MasterClear";
 
     @VisibleForTesting static final int KEYGUARD_REQUEST = 55;
@@ -86,20 +86,17 @@
     static final String ERASE_ESIMS_EXTRA = "erase_esim";
 
     private View mContentView;
-    private Button mInitiateButton;
+    @VisibleForTesting Button mInitiateButton;
     private View mExternalStorageContainer;
     @VisibleForTesting CheckBox mExternalStorage;
     private View mEsimStorageContainer;
     @VisibleForTesting CheckBox mEsimStorage;
-    private ScrollView mScrollView;
+    @VisibleForTesting ScrollView mScrollView;
 
-    private final OnGlobalLayoutListener mOnGlobalLayoutListener = new OnGlobalLayoutListener() {
-        @Override
-        public void onGlobalLayout() {
-            mScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
-            mInitiateButton.setEnabled(hasReachedBottom(mScrollView));
-        }
-    };
+    @Override
+    public void onGlobalLayout() {
+        mInitiateButton.setEnabled(hasReachedBottom(mScrollView));
+    }
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -259,13 +256,16 @@
      */
     @VisibleForTesting
     void establishInitialState() {
-        mInitiateButton = (Button) mContentView.findViewById(R.id.initiate_master_clear);
+        mInitiateButton = mContentView.findViewById(R.id.initiate_master_clear);
         mInitiateButton.setOnClickListener(mInitiateListener);
         mExternalStorageContainer = mContentView.findViewById(R.id.erase_external_container);
-        mExternalStorage = (CheckBox) mContentView.findViewById(R.id.erase_external);
+        mExternalStorage = mContentView.findViewById(R.id.erase_external);
         mEsimStorageContainer = mContentView.findViewById(R.id.erase_esim_container);
-        mEsimStorage = (CheckBox) mContentView.findViewById(R.id.erase_esim);
-        mScrollView = (ScrollView) mContentView.findViewById(R.id.master_clear_scrollview);
+        mEsimStorage = mContentView.findViewById(R.id.erase_esim);
+        if (mScrollView != null) {
+            mScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+        }
+        mScrollView = mContentView.findViewById(R.id.master_clear_scrollview);
 
         /*
          * If the external storage is emulated, it will be erased with a factory
@@ -322,8 +322,8 @@
 
         final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
         loadAccountList(um);
-        StringBuffer contentDescription = new StringBuffer();
-        View masterClearContainer = mContentView.findViewById(R.id.master_clear_container);
+        final StringBuffer contentDescription = new StringBuffer();
+        final View masterClearContainer = mContentView.findViewById(R.id.master_clear_container);
         getContentDescription(masterClearContainer, contentDescription);
         masterClearContainer.setContentDescription(contentDescription);
 
@@ -334,12 +334,13 @@
                 int oldScrollY) {
                 if (v instanceof ScrollView && hasReachedBottom((ScrollView) v)) {
                     mInitiateButton.setEnabled(true);
+                    mScrollView.setOnScrollChangeListener(null);
                 }
             }
         });
 
         // Set the initial state of the initiateButton
-        mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
+        mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(this);
     }
 
     /**
diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
index 52c1a0d..5b45cfa 100644
--- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
+++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
@@ -22,13 +22,10 @@
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.app.Activity;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.Fragment;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ComponentInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.os.Binder;
@@ -44,13 +41,12 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.accessibility.AccessibilityShortcutController.ToggleableFrameworkFeatureInfo;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
-import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settings.widget.RadioButtonPreference;
-import com.android.settings.wrapper.IPackageManagerWrapper;
 import com.android.settingslib.accessibility.AccessibilityUtils;
+import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.widget.CandidateInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
index f81208f..e911b61 100644
--- a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
@@ -32,6 +32,7 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.ArrayList;
 import java.util.Comparator;
diff --git a/src/com/android/settings/accessibility/VibrationSettings.java b/src/com/android/settings/accessibility/VibrationSettings.java
index 738f218..4b19d93 100644
--- a/src/com/android/settings/accessibility/VibrationSettings.java
+++ b/src/com/android/settings/accessibility/VibrationSettings.java
@@ -52,7 +52,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildControllers(context, getLifecycle());
     }
 
@@ -86,7 +86,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildControllers(context, null /* lifecycle */);
                 }
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index 9702102..cab5dab 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -62,7 +62,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final String[] authorities = getIntent().getStringArrayExtra(EXTRA_AUTHORITIES);
         final AccountPreferenceController accountPrefController =
diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
index 9239b8e..109e782 100644
--- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
@@ -109,7 +109,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mAccountSynController = new AccountSyncPreferenceController(context);
         controllers.add(mAccountSynController);
diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
index 7d6bdbb..7b62078 100644
--- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
+++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
@@ -58,7 +58,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final Activity activity = getActivity();
         final Application app;
         if (activity != null) {
@@ -91,7 +91,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null, null /* host */);
                 }
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index edbd8b9..fb63df2 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -128,23 +128,27 @@
     protected String retrieveAppEntry() {
         final Bundle args = getArguments();
         mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
+        Intent intent = (args == null) ?
+                getIntent() : (Intent) args.getParcelable("intent");
         if (mPackageName == null) {
-            Intent intent = (args == null) ?
-                    getActivity().getIntent() : (Intent) args.getParcelable("intent");
             if (intent != null && intent.getData() != null) {
                 mPackageName = intent.getData().getSchemeSpecificPart();
             }
         }
-        mUserId = UserHandle.myUserId();
+        if (intent != null && intent.hasExtra(Intent.EXTRA_USER_HANDLE)) {
+            mUserId = ((UserHandle) intent.getParcelableExtra(
+                    Intent.EXTRA_USER_HANDLE)).getIdentifier();
+        } else {
+            mUserId = UserHandle.myUserId();
+        }
         mAppEntry = mState.getEntry(mPackageName, mUserId);
         if (mAppEntry != null) {
             // Get application info again to refresh changed properties of application
             try {
-                mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName,
+                mPackageInfo = mPm.getPackageInfoAsUser(mAppEntry.info.packageName,
                         PackageManager.MATCH_DISABLED_COMPONENTS |
-                        PackageManager.MATCH_ANY_USER |
-                        PackageManager.GET_SIGNATURES |
-                        PackageManager.GET_PERMISSIONS);
+                                PackageManager.GET_SIGNING_CERTIFICATES |
+                                PackageManager.GET_PERMISSIONS, mUserId);
             } catch (NameNotFoundException e) {
                 Log.e(TAG, "Exception when retrieving package:" + mAppEntry.info.packageName, e);
             }
diff --git a/src/com/android/settings/applications/ApplicationFeatureProvider.java b/src/com/android/settings/applications/ApplicationFeatureProvider.java
index eae23d1..3ffacb0 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProvider.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProvider.java
@@ -17,11 +17,7 @@
 package com.android.settings.applications;
 
 import android.annotation.UserIdInt;
-import android.app.Fragment;
 import android.content.Intent;
-import android.view.View;
-
-import com.android.settings.applications.instantapps.InstantAppButtonsController;
 
 import java.util.List;
 import java.util.Set;
@@ -29,13 +25,6 @@
 public interface ApplicationFeatureProvider {
 
     /**
-     * Returns a new {@link InstantAppButtonsController} instance for showing buttons
-     * only relevant to instant apps.
-     */
-    InstantAppButtonsController newInstantAppButtonsController(Fragment fragment,
-            View view, InstantAppButtonsController.ShowDialogDelegate showDialogDelegate);
-
-    /**
      * Calculates the total number of apps installed on the device via policy in the current user
      * and all its managed profiles.
      *
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 5323cd5..e1f434e 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.applications;
 
-import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ComponentInfo;
@@ -26,9 +25,7 @@
 import android.os.RemoteException;
 import android.os.UserManager;
 import android.util.ArraySet;
-import android.view.View;
 
-import com.android.settings.applications.instantapps.InstantAppButtonsController;
 import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settings.wrapper.IPackageManagerWrapper;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -55,12 +52,6 @@
     }
 
     @Override
-    public InstantAppButtonsController newInstantAppButtonsController(Fragment fragment,
-            View view, InstantAppButtonsController.ShowDialogDelegate showDialogDelegate) {
-        return new InstantAppButtonsController(mContext, fragment, view, showDialogDelegate);
-    }
-
-    @Override
     public void calculateNumberOfPolicyInstalledApps(boolean async, NumberOfAppsCallback callback) {
         final CurrentUserAndManagedProfilePolicyInstalledAppCounter counter =
                 new CurrentUserAndManagedProfilePolicyInstalledAppCounter(mContext, mPm, callback);
diff --git a/src/com/android/settings/applications/DefaultAppSettings.java b/src/com/android/settings/applications/DefaultAppSettings.java
index 34b635b..7d74fbd 100644
--- a/src/com/android/settings/applications/DefaultAppSettings.java
+++ b/src/com/android/settings/applications/DefaultAppSettings.java
@@ -60,7 +60,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context);
     }
 
@@ -109,7 +109,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context);
                 }
diff --git a/src/com/android/settings/applications/SpecialAccessSettings.java b/src/com/android/settings/applications/SpecialAccessSettings.java
index 4e43c05..6387ec7 100644
--- a/src/com/android/settings/applications/SpecialAccessSettings.java
+++ b/src/com/android/settings/applications/SpecialAccessSettings.java
@@ -61,7 +61,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context);
     }
 
@@ -95,7 +95,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context);
                 }
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 90df547..b878bc8 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -86,6 +86,7 @@
     @VisibleForTesting static final int UNINSTALL_ALL_USERS_MENU = 1;
     @VisibleForTesting static final int UNINSTALL_UPDATES = 2;
     static final int FORCE_STOP_MENU = 3;
+    static final int INSTALL_INSTANT_APP_MENU = 4;
 
     // Result code identifiers
     @VisibleForTesting
@@ -103,6 +104,7 @@
     static final int DLG_FORCE_STOP = DLG_BASE + 1;
     private static final int DLG_DISABLE = DLG_BASE + 2;
     private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3;
+    static final int DLG_CLEAR_INSTANT_APP = DLG_BASE + 4;
 
     private static final String KEY_ADVANCED_APP_INFO_CATEGORY = "advanced_app_info";
 
@@ -210,7 +212,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         retrieveAppEntry();
         if (mPackageInfo == null) {
             return null;
@@ -244,7 +246,7 @@
         // The following are controllers for preferences that don't need to refresh the preference
         // state when app state changes.
         mInstantAppButtonPreferenceController =
-                new InstantAppButtonsPreferenceController(context, this, packageName);
+                new InstantAppButtonsPreferenceController(context, this, packageName, lifecycle);
         controllers.add(mInstantAppButtonPreferenceController);
         controllers.add(new AppBatteryPreferenceController(context, this, packageName, lifecycle));
         controllers.add(new AppMemoryPreferenceController(context, this, lifecycle));
diff --git a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
index e8400a0..5cdc47e 100644
--- a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
+++ b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java
@@ -15,6 +15,8 @@
  */
 package com.android.settings.applications.appinfo;
 
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import android.app.AlertDialog;
 import android.app.AppOpsManager;
 import android.content.ActivityNotFoundException;
@@ -30,8 +32,9 @@
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.util.Log;
-
+import android.view.Window;
 import android.view.WindowManager;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
@@ -86,15 +89,16 @@
     @Override
     public void onResume() {
         super.onResume();
-        getActivity().getWindow().addFlags(
-                WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        getActivity().getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
     }
 
     @Override
     public void onPause() {
-        getActivity().getWindow().clearFlags(
-                WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
         super.onPause();
+        Window window = getActivity().getWindow();
+        WindowManager.LayoutParams attrs = window.getAttributes();
+        attrs.privateFlags &= ~PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+        window.setAttributes(attrs);
     }
 
     @Override
diff --git a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java
index b9fe003..df64d76 100644
--- a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java
@@ -18,30 +18,62 @@
 
 import android.app.AlertDialog;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.UserHandle;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
 
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.applications.AppStoreUtil;
 import com.android.settings.applications.LayoutPreference;
-import com.android.settings.applications.instantapps.InstantAppButtonsController;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.AppUtils;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
+import com.android.settingslib.core.lifecycle.events.OnOptionsItemSelected;
+import com.android.settingslib.core.lifecycle.events.OnPrepareOptionsMenu;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
-public class InstantAppButtonsPreferenceController extends BasePreferenceController {
+import java.util.List;
+
+public class InstantAppButtonsPreferenceController extends BasePreferenceController implements
+        LifecycleObserver, OnCreateOptionsMenu, OnPrepareOptionsMenu, OnOptionsItemSelected,
+        DialogInterface.OnClickListener {
 
     private static final String KEY_INSTANT_APP_BUTTONS = "instant_app_buttons";
+    private static final String META_DATA_DEFAULT_URI = "default-url";
 
     private final AppInfoDashboardFragment mParent;
     private final String mPackageName;
-    private InstantAppButtonsController mInstantAppButtonsController;
+    private final PackageManagerWrapper mPackageManagerWrapper;
+    private String mLaunchUri;
+    private LayoutPreference mPreference;
+    private MenuItem mInstallMenu;
 
     public InstantAppButtonsPreferenceController(Context context, AppInfoDashboardFragment parent,
-            String packageName) {
+            String packageName, Lifecycle lifecycle) {
         super(context, KEY_INSTANT_APP_BUTTONS);
         mParent = parent;
         mPackageName = packageName;
+        mPackageManagerWrapper = new PackageManagerWrapper(context.getPackageManager());
+        mLaunchUri = getDefaultLaunchUri();
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
     }
 
     @Override
@@ -53,22 +85,99 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        LayoutPreference buttons =
-                (LayoutPreference) screen.findPreference(KEY_INSTANT_APP_BUTTONS);
-        mInstantAppButtonsController = getApplicationFeatureProvider()
-                .newInstantAppButtonsController(mParent,
-                        buttons.findViewById(R.id.instant_app_button_container),
-                        id -> mParent.showDialogInner(id, 0))
-                .setPackageName(mPackageName)
-                .show();
+        mPreference = (LayoutPreference) screen.findPreference(KEY_INSTANT_APP_BUTTONS);
+        initButtons(mPreference.findViewById(R.id.instant_app_button_container));
     }
 
-    public AlertDialog createDialog(int id) {
-        return mInstantAppButtonsController.createDialog(id);
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (!TextUtils.isEmpty(mLaunchUri)) {
+            menu.add(0, AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU, 2, R.string.install_text)
+                .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+        }
     }
 
-    @VisibleForTesting
-    ApplicationFeatureProvider getApplicationFeatureProvider() {
-        return FeatureFactory.getFactory(mContext).getApplicationFeatureProvider(mContext);
+    @Override
+    public boolean onOptionsItemSelected(MenuItem menuItem) {
+        if (menuItem.getItemId() == AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU) {
+            final Intent appStoreIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName);
+            if (appStoreIntent != null) {
+                mParent.startActivity(appStoreIntent);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        mInstallMenu = menu.findItem(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU);
+        if (mInstallMenu != null) {
+            if (AppStoreUtil.getAppStoreLink(mContext, mPackageName) == null) {
+                mInstallMenu.setEnabled(false);
+            }
+        }
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+            .action(mContext, MetricsEvent.ACTION_SETTINGS_CLEAR_INSTANT_APP, mPackageName);
+        mPackageManagerWrapper.deletePackageAsUser(
+            mPackageName, null, 0, UserHandle.myUserId());
+    }
+
+    AlertDialog createDialog(int id) {
+        if (id == AppInfoDashboardFragment.DLG_CLEAR_INSTANT_APP) {
+            AlertDialog confirmDialog = new AlertDialog.Builder(mContext)
+                .setPositiveButton(R.string.clear_instant_app_data, this)
+                .setNegativeButton(R.string.cancel, null)
+                .setTitle(R.string.clear_instant_app_data)
+                .setMessage(mContext.getString(R.string.clear_instant_app_confirmation))
+                .create();
+            return confirmDialog;
+        }
+        return null;
+    }
+
+    private void initButtons(View view) {
+        final Button installButton = view.findViewById(R.id.install);
+        final Button clearDataButton = view.findViewById(R.id.clear_data);
+        final Button launchButton = view.findViewById(R.id.launch);
+        if (!TextUtils.isEmpty(mLaunchUri)) {
+            installButton.setVisibility(View.GONE);
+            final Intent intent = new Intent(Intent.ACTION_VIEW);
+            intent.setData(Uri.parse(mLaunchUri));
+            launchButton.setOnClickListener(v -> mParent.startActivity(intent));
+        } else {
+            launchButton.setVisibility(View.GONE);
+            final Intent appStoreIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName);
+            if (appStoreIntent != null) {
+                installButton.setOnClickListener(v -> mParent.startActivity(appStoreIntent));
+            } else {
+                installButton.setEnabled(false);
+            }
+        }
+        clearDataButton.setOnClickListener(
+            v -> mParent.showDialogInner(mParent.DLG_CLEAR_INSTANT_APP, 0));
+    }
+
+    private String getDefaultLaunchUri() {
+        final PackageManager manager = mContext.getPackageManager();
+        final Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_LAUNCHER);
+        intent.setPackage(mPackageName);
+        final List<ResolveInfo> infos = manager.queryIntentActivities(
+            intent, PackageManager.GET_META_DATA | PackageManager.MATCH_INSTANT);
+        for (ResolveInfo info : infos) {
+            final Bundle metaData = info.activityInfo.metaData;
+            if (metaData != null) {
+                final String launchUri = metaData.getString(META_DATA_DEFAULT_URI);
+                if (!TextUtils.isEmpty(launchUri)) {
+                    return launchUri;
+                }
+            }
+        }
+        return null;
     }
 }
diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java
index 1873683..202317a 100644
--- a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java
@@ -20,7 +20,6 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.UserHandle;
-import android.os.UserManager;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.util.Log;
@@ -44,9 +43,6 @@
 
     @Override
     public int getAvailabilityStatus() {
-        if (UserManager.get(mContext).isManagedProfile()) {
-            return DISABLED_FOR_USER;
-        }
         return hasPictureInPictureActivites() ? AVAILABLE : DISABLED_FOR_USER;
     }
 
diff --git a/src/com/android/settings/applications/assist/DefaultAssistPicker.java b/src/com/android/settings/applications/assist/DefaultAssistPicker.java
index 01ca25a..d54e6d1 100644
--- a/src/com/android/settings/applications/assist/DefaultAssistPicker.java
+++ b/src/com/android/settings/applications/assist/DefaultAssistPicker.java
@@ -31,9 +31,11 @@
 import com.android.internal.app.AssistUtils;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
 
+import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.widget.CandidateInfo;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
index f78548b..9c87984 100644
--- a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
+++ b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
@@ -27,8 +27,8 @@
 
 import com.android.internal.app.AssistUtils;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPreferenceController;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import java.util.List;
 
diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
index 7a5c13d..84c1f76 100644
--- a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
+++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
@@ -25,8 +25,8 @@
 import com.android.internal.app.AssistUtils;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
index c305ccf..09f0b21 100644
--- a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
+++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
@@ -25,8 +25,8 @@
 import android.text.TextUtils;
 
 import com.android.internal.app.AssistUtils;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPreferenceController;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
diff --git a/src/com/android/settings/applications/assist/ManageAssist.java b/src/com/android/settings/applications/assist/ManageAssist.java
index 4126aaf..f5a3838 100644
--- a/src/com/android/settings/applications/assist/ManageAssist.java
+++ b/src/com/android/settings/applications/assist/ManageAssist.java
@@ -51,7 +51,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -93,7 +93,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
deleted file mode 100644
index 71b5ec4..0000000
--- a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.defaultapps;
-
-import android.app.AppGlobals;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ComponentInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.util.IconDrawableFactory;
-
-import com.android.settings.widget.RadioButtonPickerFragment;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-/**
- * Data model representing an app in DefaultAppPicker UI.
- */
-public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo {
-
-    public final int userId;
-    public final ComponentName componentName;
-    public final PackageItemInfo packageItemInfo;
-    public final String summary;
-    protected final PackageManagerWrapper mPm;
-    private final Context mContext;
-
-    public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn) {
-        this(context, pm, uid, cn, null /* summary */, true /* enabled */);
-    }
-
-    public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info) {
-        this(context, pm, info, null /* summary */, true /* enabled */);
-    }
-
-    public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn,
-            String summary, boolean enabled) {
-        super(enabled);
-        mContext = context;
-        mPm = pm;
-        packageItemInfo = null;
-        userId = uid;
-        componentName = cn;
-        this.summary = summary;
-    }
-
-    public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info,
-            String summary, boolean enabled) {
-        super(enabled);
-        mContext = context;
-        mPm = pm;
-        userId = UserHandle.myUserId();
-        packageItemInfo = info;
-        componentName = null;
-        this.summary = summary;
-    }
-
-    @Override
-    public CharSequence loadLabel() {
-        if (componentName != null) {
-            try {
-                final ComponentInfo componentInfo = getComponentInfo();
-                if (componentInfo != null) {
-                    return componentInfo.loadLabel(mPm.getPackageManager());
-                } else {
-                    final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
-                            componentName.getPackageName(), 0, userId);
-                    return appInfo.loadLabel(mPm.getPackageManager());
-                }
-            } catch (PackageManager.NameNotFoundException e) {
-                return null;
-            }
-        } else if (packageItemInfo != null) {
-            return packageItemInfo.loadLabel(mPm.getPackageManager());
-        } else {
-            return null;
-        }
-
-    }
-
-    @Override
-    public Drawable loadIcon() {
-        final IconDrawableFactory factory = IconDrawableFactory.newInstance(mContext);
-        if (componentName != null) {
-            try {
-                final ComponentInfo componentInfo = getComponentInfo();
-                final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
-                        componentName.getPackageName(), 0, userId);
-                if (componentInfo != null) {
-                    return factory.getBadgedIcon(componentInfo, appInfo, userId);
-                } else {
-                    return factory.getBadgedIcon(appInfo);
-                }
-            } catch (PackageManager.NameNotFoundException e) {
-                return null;
-            }
-        }
-        if (packageItemInfo != null) {
-            try {
-                final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
-                        packageItemInfo.packageName, 0, userId);
-                return factory.getBadgedIcon(packageItemInfo, appInfo, userId);
-            } catch (PackageManager.NameNotFoundException e) {
-                return null;
-            }
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public String getKey() {
-        if (componentName != null) {
-            return componentName.flattenToString();
-        } else if (packageItemInfo != null) {
-            return packageItemInfo.packageName;
-        } else {
-            return null;
-        }
-    }
-
-    private ComponentInfo getComponentInfo() {
-        try {
-            ComponentInfo componentInfo = AppGlobals.getPackageManager().getActivityInfo(
-                    componentName, 0, userId);
-            if (componentInfo == null) {
-                componentInfo = AppGlobals.getPackageManager().getServiceInfo(
-                        componentName, 0, userId);
-            }
-            return componentInfo;
-        } catch (RemoteException e) {
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
index 7b27516..cc3b3d1 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
@@ -32,6 +32,8 @@
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settings.widget.RadioButtonPreference;
+import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.widget.CandidateInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 /**
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
index d016567..6d4d3b2 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
@@ -29,6 +29,7 @@
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.widget.GearPreference;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.TwoTargetPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 30835fb..50c6d02 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -38,7 +38,9 @@
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.utils.ThreadUtils;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -186,8 +188,8 @@
     @Override
     protected List<DefaultAppInfo> getCandidates() {
         final List<DefaultAppInfo> candidates = new ArrayList<>();
-        final List<ResolveInfo> resolveInfos = mPm.getPackageManager()
-                .queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA);
+        final List<ResolveInfo> resolveInfos = mPm.queryIntentServices(
+                AUTOFILL_PROBE, PackageManager.GET_META_DATA);
         final Context context = getContext();
         for (ResolveInfo info : resolveInfos) {
             final String permission = info.serviceInfo.permission;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
index b159d1d..787fbfa 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
@@ -24,6 +24,7 @@
 import android.view.autofill.AutofillManager;
 
 import com.android.settings.wrapper.AutofillManagerWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 public class DefaultAutofillPreferenceController extends DefaultAppPreferenceController {
     private AutofillManagerWrapper mAutofillManager;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
index 2639c8d..8153be2 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
@@ -23,6 +23,8 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 
+import com.android.settingslib.applications.DefaultAppInfo;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index 916f9422..c762917 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -29,6 +29,8 @@
 import android.util.IconDrawableFactory;
 import android.util.Log;
 
+import com.android.settingslib.applications.DefaultAppInfo;
+
 import java.util.List;
 
 public class DefaultBrowserPreferenceController extends DefaultAppPreferenceController {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
index bafd56f..c20c0df 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
@@ -28,6 +28,8 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
index 7713dbd..d9f3320 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
@@ -22,6 +22,8 @@
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 
+import com.android.settingslib.applications.DefaultAppInfo;
+
 import java.util.List;
 
 public class DefaultEmergencyPreferenceController extends DefaultAppPreferenceController {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
index 7da390f..8617e85 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
@@ -30,6 +30,7 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
index fa6ddff..6f37797 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
@@ -25,6 +25,7 @@
 import android.content.pm.ResolveInfo;
 
 import com.android.settings.R;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
index 6a1d919..e462ab8 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
@@ -24,6 +24,7 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
index 92c9386..37d7192 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
@@ -23,6 +23,8 @@
 import android.telecom.DefaultDialerManager;
 import android.telephony.TelephonyManager;
 
+import com.android.settingslib.applications.DefaultAppInfo;
+
 import java.util.List;
 
 public class DefaultPhonePreferenceController extends DefaultAppPreferenceController {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
index 4c6c9ce..91f9caf 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
@@ -25,6 +25,8 @@
 import com.android.internal.telephony.SmsApplication;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
index c3b7ac4..cb86b2e 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
@@ -21,6 +21,7 @@
 import android.telephony.TelephonyManager;
 
 import com.android.internal.telephony.SmsApplication;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import java.util.Collection;
 
diff --git a/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
index 4dc984b..4652855 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
@@ -21,6 +21,7 @@
 
 import com.android.settings.Utils;
 
+
 public class DefaultWorkBrowserPreferenceController extends DefaultBrowserPreferenceController {
 
     public static final String KEY = "work_default_browser";
diff --git a/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java b/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java
deleted file mode 100644
index 42474a8..0000000
--- a/src/com/android/settings/applications/instantapps/InstantAppButtonsController.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.instantapps;
-
-import android.app.AlertDialog;
-import android.app.Fragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.UserHandle;
-import android.view.View;
-import android.widget.Button;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.applications.AppStoreUtil;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-/** Encapsulates a container for buttons relevant to instant apps */
-public class InstantAppButtonsController implements DialogInterface.OnClickListener {
-
-    public interface ShowDialogDelegate {
-        /**
-         * Delegate that should be called when this controller wants to show a dialog.
-         */
-        void showDialog(int id);
-    }
-
-    private final Context mContext;
-    private final Fragment mFragment;
-    private final View mView;
-    private final PackageManagerWrapper mPackageManagerWrapper;
-    private final ShowDialogDelegate mShowDialogDelegate;
-    private String mPackageName;
-
-    public static final int DLG_BASE = 0x5032;
-    public static final int DLG_CLEAR_APP = DLG_BASE + 1;
-
-    public InstantAppButtonsController(
-            Context context,
-            Fragment fragment,
-            View view,
-            ShowDialogDelegate showDialogDelegate) {
-      mContext = context;
-      mFragment = fragment;
-      mView = view;
-      mShowDialogDelegate = showDialogDelegate;
-      mPackageManagerWrapper = new PackageManagerWrapper(context.getPackageManager());
-    }
-
-    public InstantAppButtonsController setPackageName(String packageName) {
-        mPackageName = packageName;
-        return this;
-    }
-
-    public void bindButtons() {
-        Button installButton = (Button)mView.findViewById(R.id.install);
-        Button clearDataButton = (Button)mView.findViewById(R.id.clear_data);
-        Intent appStoreIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName);
-        if (appStoreIntent != null) {
-            installButton.setEnabled(true);
-            installButton.setOnClickListener(v -> mFragment.startActivity(appStoreIntent));
-        }
-
-        clearDataButton.setOnClickListener(v -> mShowDialogDelegate.showDialog(DLG_CLEAR_APP));
-    }
-
-    public AlertDialog createDialog(int id) {
-        if (id == DLG_CLEAR_APP) {
-            AlertDialog dialog = new AlertDialog.Builder(mFragment.getActivity())
-                    .setPositiveButton(R.string.clear_instant_app_data, this)
-                    .setNegativeButton(R.string.cancel, null)
-                    .setTitle(R.string.clear_instant_app_data)
-                    .setMessage(mContext.getString(R.string.clear_instant_app_confirmation))
-                    .create();
-            return dialog;
-        }
-        return null;
-    }
-
-    public void onClick(DialogInterface dialog, int which) {
-        if (which == DialogInterface.BUTTON_POSITIVE) {
-            FeatureFactory.getFactory(mContext)
-                    .getMetricsFeatureProvider()
-                    .action(mContext,
-                            MetricsEvent.ACTION_SETTINGS_CLEAR_INSTANT_APP,
-                            mPackageName);
-            mPackageManagerWrapper.deletePackageAsUser(
-                    mPackageName, null, 0, UserHandle.myUserId());
-        }
-    }
-
-    public InstantAppButtonsController show() {
-        bindButtons();
-        mView.setVisibility(View.VISIBLE);
-        return this;
-    }
-}
diff --git a/src/com/android/settings/backup/BackupSettingsFragment.java b/src/com/android/settings/backup/BackupSettingsFragment.java
index e6bb12d..e9bcc6f 100644
--- a/src/com/android/settings/backup/BackupSettingsFragment.java
+++ b/src/com/android/settings/backup/BackupSettingsFragment.java
@@ -61,7 +61,7 @@
      * Get a list of {@link AbstractPreferenceController} for this fragment.
      */
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new BackupSettingsPreferenceController(context));
         return controllers;
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java b/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
index dbcc5d6..b976561 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
@@ -45,14 +45,18 @@
     protected void init(PreferenceScreen screen) {
         mFooterPreference = mFooterPreferenceMixin.createFooterPreference();
         mFooterPreference.setTitle(mContext.getString(
-                    R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
+                R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
     }
 
     @Override
-    protected void refresh() {}
+    protected void refresh() {
+    }
 
     @Override
     public String getPreferenceKey() {
+        if (mFooterPreference == null) {
+            return null;
+        }
         return mFooterPreference.getKey();
     }
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index a762fa1..b9cfa00 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -136,7 +136,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
 
         if (mCachedDevice != null) {
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
index dbe2c1b..6376347 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -185,14 +185,6 @@
 
     @Override
     public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
-        Collection<CachedBluetoothDevice> cachedDevices =
-                mLocalManager.getCachedDeviceManager().getCachedDevicesCopy();
-        // TODO: The state update of the Cached Bluetooth Devices should be
-        // moved to the device manager: b/72316092
-        for (CachedBluetoothDevice cachedBluetoothDevice : cachedDevices) {
-            boolean isActive = Objects.equals(cachedBluetoothDevice, activeDevice);
-            cachedBluetoothDevice.setActiveDevice(isActive, bluetoothProfile);
-        }
     }
 
     /**
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
index 5e003fe..0e556c4 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
@@ -193,7 +193,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(
                 new BluetoothDeviceRenamePreferenceController(context, KEY_RENAME_DEVICES, this,
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 7ec0a67..47952c6 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -363,7 +363,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Lifecycle lifecycle = getLifecycle();
         mDeviceNamePrefController = new BluetoothDeviceNamePreferenceController(context, lifecycle);
diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java
index 847a9c9..07cda3d 100644
--- a/src/com/android/settings/bluetooth/DevicePickerFragment.java
+++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java
@@ -170,7 +170,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
index 32c2af7..6a1568d 100644
--- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
@@ -28,7 +28,6 @@
 import com.android.settings.connecteddevice.usb.UsbModePreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.nfc.NfcPreferenceController;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.print.PrintSettingPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -66,7 +65,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildControllers(context, getLifecycle());
     }
 
@@ -123,7 +122,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildControllers(context, null /* lifecycle */);
                 }
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index e9ae11e..8aab3cf 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -58,7 +58,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Lifecycle lifecycle = getLifecycle();
 
@@ -119,15 +119,7 @@
 
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
-
                     return new ArrayList<>();
                 }
-
-                @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
-                        Context context) {
-                    //TODO(b/69333961): update the index for controllers
-                    return super.getPreferenceControllers(context);
-                }
             };
 }
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java
index a9ba6e5..304a369 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java
@@ -71,7 +71,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Lifecycle lifecycle = getLifecycle();
         final NfcPreferenceController nfcPreferenceController =
diff --git a/src/com/android/settings/connecteddevice/usb/UsbBackend.java b/src/com/android/settings/connecteddevice/usb/UsbBackend.java
index cdfb6b0..d204c17 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbBackend.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbBackend.java
@@ -21,10 +21,12 @@
 import android.hardware.usb.UsbPort;
 import android.hardware.usb.UsbPortStatus;
 import android.net.ConnectivityManager;
-import android.os.UserHandle;
 import android.os.UserManager;
 import android.support.annotation.VisibleForTesting;
 
+import com.android.settings.wrapper.UsbManagerWrapper;
+import com.android.settings.wrapper.UserManagerWrapper;
+
 public class UsbBackend {
 
     public static final int MODE_POWER_MASK  = 0x01;
@@ -47,31 +49,31 @@
 
     private UsbManager mUsbManager;
     @VisibleForTesting
-    UsbManagerPassThrough mUsbManagerPassThrough;
+    UsbManagerWrapper mUsbManagerWrapper;
     private UsbPort mPort;
     private UsbPortStatus mPortStatus;
 
     private Context mContext;
 
     public UsbBackend(Context context) {
-        this(context, new UserRestrictionUtil(context), null);
+        this(context, new UserManagerWrapper(UserManager.get(context)), null);
     }
 
     @VisibleForTesting
-    public UsbBackend(Context context, UserRestrictionUtil userRestrictionUtil,
-            UsbManagerPassThrough usbManagerPassThrough) {
+    public UsbBackend(Context context, UserManagerWrapper userManagerWrapper,
+            UsbManagerWrapper usbManagerWrapper) {
         mContext = context;
         mUsbManager = context.getSystemService(UsbManager.class);
 
-        mUsbManagerPassThrough = usbManagerPassThrough;
-        if (mUsbManagerPassThrough == null) {
-            mUsbManagerPassThrough = new UsbManagerPassThrough(mUsbManager);
+        mUsbManagerWrapper = usbManagerWrapper;
+        if (mUsbManagerWrapper == null) {
+            mUsbManagerWrapper = new UsbManagerWrapper(mUsbManager);
         }
 
-        mFileTransferRestricted = userRestrictionUtil.isUsbFileTransferRestricted();
-        mFileTransferRestrictedBySystem = userRestrictionUtil.isUsbFileTransferRestrictedBySystem();
-        mTetheringRestricted = userRestrictionUtil.isUsbTetheringRestricted();
-        mTetheringRestrictedBySystem = userRestrictionUtil.isUsbTetheringRestrictedBySystem();
+        mFileTransferRestricted = userManagerWrapper.isUsbFileTransferRestricted();
+        mFileTransferRestrictedBySystem = userManagerWrapper.isUsbFileTransferRestrictedBySystem();
+        mTetheringRestricted = userManagerWrapper.isUsbTetheringRestricted();
+        mTetheringRestrictedBySystem = userManagerWrapper.isUsbTetheringRestrictedBySystem();
 
         mMidiSupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI);
         ConnectivityManager cm =
@@ -106,37 +108,15 @@
     }
 
     public int getUsbDataMode() {
-        long functions = mUsbManagerPassThrough.getCurrentFunctions();
-        if (functions == UsbManager.FUNCTION_MTP) {
-            return MODE_DATA_MTP;
-        } else if (functions == UsbManager.FUNCTION_PTP) {
-            return MODE_DATA_PTP;
-        } else if (functions == UsbManager.FUNCTION_MIDI) {
-            return MODE_DATA_MIDI;
-        } else if (functions == UsbManager.FUNCTION_RNDIS) {
-            return MODE_DATA_TETHER;
-        }
-        return MODE_DATA_NONE;
+        return usbFunctionToMode(mUsbManagerWrapper.getCurrentFunctions());
     }
 
-    private void setUsbFunction(int mode) {
-        switch (mode) {
-            case MODE_DATA_MTP:
-                mUsbManager.setCurrentFunctions(UsbManager.FUNCTION_MTP);
-                break;
-            case MODE_DATA_PTP:
-                mUsbManager.setCurrentFunctions(UsbManager.FUNCTION_PTP);
-                break;
-            case MODE_DATA_MIDI:
-                mUsbManager.setCurrentFunctions(UsbManager.FUNCTION_MIDI);
-                break;
-            case MODE_DATA_TETHER:
-                mUsbManager.setCurrentFunctions(UsbManager.FUNCTION_RNDIS);
-                break;
-            default:
-                mUsbManager.setCurrentFunctions(UsbManager.FUNCTION_NONE);
-                break;
-        }
+    public void setDefaultUsbMode(int mode) {
+        mUsbManager.setScreenUnlockedFunctions(modeToUsbFunction(mode & MODE_DATA_MASK));
+    }
+
+    public int getDefaultUsbMode() {
+        return usbFunctionToMode(mUsbManager.getScreenUnlockedFunctions());
     }
 
     public void setMode(int mode) {
@@ -153,11 +133,6 @@
         setUsbFunction(mode & MODE_DATA_MASK);
     }
 
-    private int modeToPower(int mode) {
-        return (mode & MODE_POWER_MASK) == MODE_POWER_SOURCE
-                    ? UsbPort.POWER_ROLE_SOURCE : UsbPort.POWER_ROLE_SINK;
-    }
-
     public boolean isModeDisallowed(int mode) {
         if (mFileTransferRestricted && ((mode & MODE_DATA_MASK) == MODE_DATA_MTP
                 || (mode & MODE_DATA_MASK) == MODE_DATA_PTP)) {
@@ -201,47 +176,40 @@
         return (mode & MODE_POWER_MASK) != MODE_POWER_SOURCE;
     }
 
-    // Wrapper class to enable testing with UserManager APIs
-    public static class UserRestrictionUtil {
-        private UserManager mUserManager;
-
-        public UserRestrictionUtil(Context context) {
-            mUserManager = UserManager.get(context);
+    private static int usbFunctionToMode(long functions) {
+        if (functions == UsbManager.FUNCTION_MTP) {
+            return MODE_DATA_MTP;
+        } else if (functions == UsbManager.FUNCTION_PTP) {
+            return MODE_DATA_PTP;
+        } else if (functions == UsbManager.FUNCTION_MIDI) {
+            return MODE_DATA_MIDI;
+        } else if (functions == UsbManager.FUNCTION_RNDIS) {
+            return MODE_DATA_TETHER;
         }
+        return MODE_DATA_NONE;
+    }
 
-        public boolean isUsbFileTransferRestricted() {
-            return mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER);
-        }
-
-        public boolean isUsbTetheringRestricted() {
-            return mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING);
-        }
-
-        public boolean isUsbFileTransferRestrictedBySystem() {
-            return mUserManager.hasBaseUserRestriction(
-                UserManager.DISALLOW_USB_FILE_TRANSFER, UserHandle.of(UserHandle.myUserId()));
-        }
-
-        public boolean isUsbTetheringRestrictedBySystem() {
-            return mUserManager.hasBaseUserRestriction(
-                UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.of(UserHandle.myUserId()));
+    private static long modeToUsbFunction(int mode) {
+        switch (mode) {
+            case MODE_DATA_MTP:
+                return UsbManager.FUNCTION_MTP;
+            case MODE_DATA_PTP:
+                return UsbManager.FUNCTION_PTP;
+            case MODE_DATA_MIDI:
+                return UsbManager.FUNCTION_MIDI;
+            case MODE_DATA_TETHER:
+                return UsbManager.FUNCTION_RNDIS;
+            default:
+                return UsbManager.FUNCTION_NONE;
         }
     }
 
-    // Temporary pass-through to allow roboelectric to use getCurrentFunctions()
-    public static class UsbManagerPassThrough {
-        private UsbManager mUsbManager;
+    private static int modeToPower(int mode) {
+        return (mode & MODE_POWER_MASK) == MODE_POWER_SOURCE
+                ? UsbPort.POWER_ROLE_SOURCE : UsbPort.POWER_ROLE_SINK;
+    }
 
-        public UsbManagerPassThrough(UsbManager manager) {
-            mUsbManager = manager;
-        }
-
-        public long getCurrentFunctions() {
-            return mUsbManager.getCurrentFunctions();
-        }
-
-        public long usbFunctionsFromString(String str) {
-            return UsbManager.usbFunctionsFromString(str);
-        }
+    private void setUsbFunction(int mode) {
+        mUsbManager.setCurrentFunctions(modeToUsbFunction(mode));
     }
 }
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
new file mode 100644
index 0000000..4c2a9b1
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2018 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.connecteddevice.usb;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.hardware.usb.UsbManager;
+import android.os.Bundle;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
+import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.FooterPreferenceMixin;
+
+import com.google.android.collect.Lists;
+
+import java.util.List;
+
+/**
+ * Provides options for selecting the default USB mode.
+ */
+public class UsbDefaultFragment extends RadioButtonPickerFragment {
+    @VisibleForTesting
+    UsbBackend mUsbBackend;
+
+    private static final String[] FUNCTIONS_LIST = {
+            UsbManager.USB_FUNCTION_NONE,
+            UsbManager.USB_FUNCTION_MTP,
+            UsbManager.USB_FUNCTION_RNDIS,
+            UsbManager.USB_FUNCTION_MIDI,
+            UsbManager.USB_FUNCTION_PTP
+    };
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mUsbBackend = new UsbBackend(context);
+    }
+
+    @Override
+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        super.onCreatePreferences(savedInstanceState, rootKey);
+        FooterPreferenceMixin footer = new FooterPreferenceMixin(this, this.getLifecycle());
+        FooterPreference pref = footer.createFooterPreference();
+        pref.setTitle(R.string.usb_default_info);
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.USB_DEFAULT;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.usb_default_fragment;
+    }
+
+    @Override
+    protected List<? extends CandidateInfo> getCandidates() {
+        List<CandidateInfo> ret = Lists.newArrayList();
+        for (final String option : FUNCTIONS_LIST) {
+            int newMode = 0;
+            final String title;
+            final Context context = getContext();
+            if (option.equals(UsbManager.USB_FUNCTION_MTP)) {
+                newMode = UsbBackend.MODE_DATA_MTP;
+                title = context.getString(R.string.usb_use_file_transfers);
+            } else if (option.equals(UsbManager.USB_FUNCTION_PTP)) {
+                newMode = UsbBackend.MODE_DATA_PTP;
+                title = context.getString(R.string.usb_use_photo_transfers);
+            } else if (option.equals(UsbManager.USB_FUNCTION_MIDI)) {
+                newMode = UsbBackend.MODE_DATA_MIDI;
+                title = context.getString(R.string.usb_use_MIDI);
+            } else if (option.equals(UsbManager.USB_FUNCTION_RNDIS)) {
+                newMode = UsbBackend.MODE_DATA_TETHER;
+                title = context.getString(R.string.usb_use_tethering);
+            } else if (option.equals(UsbManager.USB_FUNCTION_NONE)) {
+                newMode = UsbBackend.MODE_DATA_NONE;
+                title = context.getString(R.string.usb_use_charging_only);
+            } else {
+                title = "";
+            }
+
+            // Only show supported and allowed options
+            if (mUsbBackend.isModeSupported(newMode)
+                    && !mUsbBackend.isModeDisallowedBySystem(newMode)
+                    && !mUsbBackend.isModeDisallowed(newMode)) {
+                ret.add(new CandidateInfo(true /* enabled */) {
+                    @Override
+                    public CharSequence loadLabel() {
+                        return title;
+                    }
+
+                    @Override
+                    public Drawable loadIcon() {
+                        return null;
+                    }
+
+                    @Override
+                    public String getKey() {
+                        return option;
+                    }
+                });
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    protected String getDefaultKey() {
+        switch (mUsbBackend.getDefaultUsbMode()) {
+            case UsbBackend.MODE_DATA_MTP:
+                return UsbManager.USB_FUNCTION_MTP;
+            case UsbBackend.MODE_DATA_PTP:
+                return UsbManager.USB_FUNCTION_PTP;
+            case UsbBackend.MODE_DATA_TETHER:
+                return UsbManager.USB_FUNCTION_RNDIS;
+            case UsbBackend.MODE_DATA_MIDI:
+                return UsbManager.USB_FUNCTION_MIDI;
+            default:
+                return UsbManager.USB_FUNCTION_NONE;
+        }
+    }
+
+    @Override
+    protected boolean setDefaultKey(String key) {
+        int thisMode = UsbBackend.MODE_DATA_NONE;
+        if (key.equals(UsbManager.USB_FUNCTION_MTP)) {
+            thisMode = UsbBackend.MODE_DATA_MTP;
+        } else if (key.equals(UsbManager.USB_FUNCTION_PTP)) {
+            thisMode = UsbBackend.MODE_DATA_PTP;
+        } else if (key.equals(UsbManager.USB_FUNCTION_RNDIS)) {
+            thisMode = UsbBackend.MODE_DATA_TETHER;
+        } else if (key.equals(UsbManager.USB_FUNCTION_MIDI)) {
+            thisMode = UsbBackend.MODE_DATA_MIDI;
+        }
+        if (!Utils.isMonkeyRunning()) {
+            mUsbBackend.setDefaultUsbMode(thisMode);
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
index c861188..f758e23 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
@@ -79,7 +79,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mUsbBackend = new UsbBackend(context);
         mControllers = createControllerList(context, mUsbBackend, this);
         mUsbReceiver = new UsbConnectionBroadcastReceiver(context, mUsbConnectionListener,
@@ -121,7 +121,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     List<AbstractPreferenceController> ret = new ArrayList<>();
                     ret.addAll(createControllerList(context, new UsbBackend(context), null));
diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java
index 777f3dd..76250fa 100644
--- a/src/com/android/settings/core/BasePreferenceController.java
+++ b/src/com/android/settings/core/BasePreferenceController.java
@@ -25,6 +25,8 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 
 /**
@@ -73,9 +75,50 @@
 
     protected Lifecycle mLifecycle;
 
+    /**
+     * Instantiate a controller as specified controller type and user-defined key.
+     * <p/>
+     * This is done through reflection. Do not use this method unless you know what you are doing.
+     */
+    public static BasePreferenceController createInstance(Context context,
+            String controllerName, String key) {
+        try {
+            final Class<?> clazz = Class.forName(controllerName);
+            final Constructor<?> preferenceConstructor =
+                    clazz.getConstructor(Context.class, String.class);
+            final Object[] params = new Object[] {context, key};
+            return (BasePreferenceController) preferenceConstructor.newInstance(params);
+        } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
+                IllegalArgumentException | InvocationTargetException | IllegalAccessException e) {
+            throw new IllegalStateException(
+                    "Invalid preference controller: " + controllerName, e);
+        }
+    }
+
+    /**
+     * Instantiate a controller as specified controller type.
+     * <p/>
+     * This is done through reflection. Do not use this method unless you know what you are doing.
+     */
+    public static BasePreferenceController createInstance(Context context, String controllerName) {
+        try {
+            final Class<?> clazz = Class.forName(controllerName);
+            final Constructor<?> preferenceConstructor = clazz.getConstructor(Context.class);
+            final Object[] params = new Object[] {context};
+            return (BasePreferenceController) preferenceConstructor.newInstance(params);
+        } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
+                IllegalArgumentException | InvocationTargetException | IllegalAccessException e) {
+            throw new IllegalStateException(
+                    "Invalid preference controller: " + controllerName, e);
+        }
+    }
+
     public BasePreferenceController(Context context, String preferenceKey) {
         super(context);
         mPreferenceKey = preferenceKey;
+        if (TextUtils.isEmpty(mPreferenceKey)) {
+            throw new IllegalArgumentException("Preference key must be set");
+        }
     }
 
     /**
diff --git a/src/com/android/settings/core/PreferenceControllerListHelper.java b/src/com/android/settings/core/PreferenceControllerListHelper.java
new file mode 100644
index 0000000..220bd88
--- /dev/null
+++ b/src/com/android/settings/core/PreferenceControllerListHelper.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2018 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.core;
+
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_CONTROLLER;
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY;
+
+import android.annotation.NonNull;
+import android.annotation.XmlRes;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Helper to load {@link BasePreferenceController} lists from Xml.
+ */
+public class PreferenceControllerListHelper {
+
+    private static final String TAG = "PrefCtrlListCreator";
+
+    /**
+     * Instantiates a list of controller based on xml definition.
+     */
+    @NonNull
+    public static List<BasePreferenceController> getPreferenceControllersFromXml(Context context,
+            @XmlRes int xmlResId) {
+        final List<BasePreferenceController> controllers = new ArrayList<>();
+        List<Bundle> preferenceMetadata;
+        try {
+            preferenceMetadata = PreferenceXmlParserUtils.extractMetadata(context, xmlResId);
+        } catch (IOException | XmlPullParserException e) {
+            Log.e(TAG, "Failed to parse preference xml for getting controllers");
+            return controllers;
+        }
+
+        for (Bundle metadata : preferenceMetadata) {
+            final String controllerName = metadata.getString(METADATA_CONTROLLER);
+            if (TextUtils.isEmpty(controllerName)) {
+                continue;
+            }
+            BasePreferenceController controller;
+            try {
+                controller = BasePreferenceController.createInstance(context, controllerName);
+            } catch (IllegalStateException e) {
+                final String key = metadata.getString(METADATA_KEY);
+                if (TextUtils.isEmpty(key)) {
+                    Log.w(TAG, "Controller requires key but it's not defined in xml: "
+                            + controllerName);
+                    continue;
+                }
+                Log.d(TAG, "Could not find Context-only controller for pref: " + key);
+                controller = BasePreferenceController.createInstance(context, controllerName, key);
+            }
+            controllers.add(controller);
+        }
+        return controllers;
+    }
+
+    /**
+     * Return a sub list of {@link AbstractPreferenceController} to only contain controller that
+     * doesn't exist in filter.
+     *
+     * @param filter The filter. This list will be unchanged.
+     * @param input  This list will be filtered into a sublist and element is kept
+     *               IFF the controller key is not used by anything from {@param filter}.
+     */
+    @NonNull
+    public static List<BasePreferenceController> filterControllers(
+            @NonNull List<BasePreferenceController> input,
+            List<AbstractPreferenceController> filter) {
+        if (input == null || filter == null) {
+            return input;
+        }
+        final Set<String> keys = new TreeSet<>();
+        final List<BasePreferenceController> filteredList = new ArrayList<>();
+        for (AbstractPreferenceController controller : filter) {
+            final String key = controller.getPreferenceKey();
+            if (key != null) {
+                keys.add(key);
+            }
+        }
+        for (BasePreferenceController controller : input) {
+            if (keys.contains(controller.getPreferenceKey())) {
+                Log.w(TAG, controller.getPreferenceKey() + " already has a controller");
+                continue;
+            }
+            filteredList.add(controller);
+        }
+        return filteredList;
+    }
+
+}
diff --git a/src/com/android/settings/core/PreferenceXmlParserUtils.java b/src/com/android/settings/core/PreferenceXmlParserUtils.java
index 4d6e840..e07ca9b 100644
--- a/src/com/android/settings/core/PreferenceXmlParserUtils.java
+++ b/src/com/android/settings/core/PreferenceXmlParserUtils.java
@@ -16,18 +16,40 @@
 
 package com.android.settings.core;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Bundle;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.util.TypedValue;
+import android.util.Xml;
+
 import com.android.settings.R;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * Utility class to parse elements of XML preferences
  */
 public class PreferenceXmlParserUtils {
 
+    private static final String TAG = "PreferenceXmlParserUtil";
+
+    private static final List<String> SUPPORTED_PREF_TYPES = Arrays.asList(
+            "Preference", "PreferenceCategory", "PreferenceScreen");
+
+    public static final String METADATA_KEY = "key";
+    public static final String METADATA_CONTROLLER = "controller";
+
     private static final String ENTRIES_SEPARATOR = "|";
 
     public static String getDataKey(Context context, AttributeSet attrs) {
@@ -83,6 +105,47 @@
     }
 
     /**
+     * Extracts metadata from preference xml and put them into a {@link Bundle}.
+     *
+     * TODO(zhfan): Similar logic exists in {@link SliceBuilderUtils} and
+     * {@link UniquePreferenceTest}. Need refactoring to consolidate them all.
+     */
+    @NonNull
+    public static List<Bundle> extractMetadata(Context context, int xmlResId)
+            throws IOException, XmlPullParserException {
+        final List<Bundle> metadata = new ArrayList<>();
+        if (xmlResId <= 0) {
+            Log.d(TAG, xmlResId + " is invalid.");
+            return metadata;
+        }
+        final XmlResourceParser parser = context.getResources().getXml(xmlResId);
+
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && type != XmlPullParser.START_TAG) {
+            // Parse next until start tag is found
+        }
+        final int outerDepth = parser.getDepth();
+
+        do {
+            if (type != XmlPullParser.START_TAG) {
+                continue;
+            }
+            final String nodeName = parser.getName();
+            if (!SUPPORTED_PREF_TYPES.contains(nodeName) && !nodeName.endsWith("Preference")) {
+                continue;
+            }
+            final Bundle preferenceMetadata = new Bundle();
+            final AttributeSet attrs = Xml.asAttributeSet(parser);
+            preferenceMetadata.putString(METADATA_KEY, getDataKey(context, attrs));
+            preferenceMetadata.putString(METADATA_CONTROLLER, getController(context, attrs));
+            metadata.add(preferenceMetadata);
+        } while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth));
+        return metadata;
+    }
+
+    /**
      * Returns the fragment name if this preference launches a child fragment.
      */
     public static String getDataChildFragment(Context context, AttributeSet attrs) {
@@ -98,7 +161,8 @@
         return data;
     }
 
-    private static String getDataEntries(Context context, AttributeSet set, int[] attrs, int resId) {
+    private static String getDataEntries(Context context, AttributeSet set, int[] attrs,
+            int resId) {
         final TypedArray sa = context.obtainStyledAttributes(set, attrs);
         final TypedValue tv = sa.peekValue(resId);
         sa.recycle();
@@ -108,7 +172,7 @@
                 data = context.getResources().getStringArray(tv.resourceId);
             }
         }
-        final int count = (data == null ) ? 0 : data.length;
+        final int count = (data == null) ? 0 : data.length;
         if (count == 0) {
             return null;
         }
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index 5431f4d..1cf4289 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -17,6 +17,8 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.TwoStatePreference;
 
+import com.android.settings.widget.MasterSwitchPreference;
+
 /**
  * Abstract class that consolidates logic for updating toggle controllers.
  * It automatically handles the getting and setting of the switch UI element.
@@ -46,7 +48,11 @@
 
     @Override
     public final void updateState(Preference preference) {
-        ((TwoStatePreference) preference).setChecked(isChecked());
+        if (preference instanceof TwoStatePreference) {
+            ((TwoStatePreference) preference).setChecked(isChecked());
+        } if (preference instanceof MasterSwitchPreference) {
+            ((MasterSwitchPreference) preference).setChecked(isChecked());
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 007b66b..f04c3c9 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -51,6 +51,7 @@
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.suggestions.SuggestionControllerMixin;
+import com.android.settingslib.utils.IconCache;
 
 import java.util.List;
 
@@ -365,31 +366,6 @@
         mRecyclerView.scrollToPosition(mDashboardData.hasSuggestion() ? 1 : 0);
     }
 
-    public static class IconCache {
-        private final Context mContext;
-        private final ArrayMap<Icon, Drawable> mMap = new ArrayMap<>();
-
-        public IconCache(Context context) {
-            mContext = context;
-        }
-
-        public Drawable getIcon(Icon icon) {
-            if (icon == null) {
-                return null;
-            }
-            Drawable drawable = mMap.get(icon);
-            if (drawable == null) {
-                drawable = icon.loadDrawable(mContext);
-                updateIcon(icon, drawable);
-            }
-            return drawable;
-        }
-
-        public void updateIcon(Icon icon, Drawable drawable) {
-            mMap.put(icon, drawable);
-        }
-    }
-
     public static class DashboardItemHolder extends RecyclerView.ViewHolder {
         public final ImageView icon;
         public final TextView title;
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 6a88a38..90c781b 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -27,14 +27,15 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
 
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerListHelper;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.Indexable;
 import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
 import com.android.settingslib.drawer.Tile;
@@ -58,7 +59,7 @@
             new ArrayMap<>();
     private final Set<String> mDashboardTilePrefKeys = new ArraySet<>();
 
-    protected DashboardFeatureProvider mDashboardFeatureProvider;
+    private DashboardFeatureProvider mDashboardFeatureProvider;
     private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
     private boolean mListeningToCategoryChange;
     private SummaryLoader mSummaryLoader;
@@ -66,13 +67,34 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        mDashboardFeatureProvider =
-                FeatureFactory.getFactory(context).getDashboardFeatureProvider(context);
+        mDashboardFeatureProvider = FeatureFactory.getFactory(context).
+                getDashboardFeatureProvider(context);
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
+        // Load preference controllers from code
+        final List<AbstractPreferenceController> controllersFromCode =
+                createPreferenceControllers(context);
+        // Load preference controllers from xml definition
+        final List<BasePreferenceController> controllersFromXml = PreferenceControllerListHelper
+                .getPreferenceControllersFromXml(context, getPreferenceScreenResId());
+        // Filter xml-based controllers in case a similar controller is created from code already.
+        final List<BasePreferenceController> uniqueControllerFromXml =
+                PreferenceControllerListHelper.filterControllers(
+                        controllersFromXml, controllersFromCode);
 
-        List<AbstractPreferenceController> controllers = getPreferenceControllers(context);
-        if (controllers == null) {
-            controllers = new ArrayList<>();
+        // Add unique controllers to list.
+        if (controllersFromCode != null) {
+            controllers.addAll(controllersFromCode);
         }
+        controllers.addAll(uniqueControllerFromXml);
+
+        // And wire up with lifecycle.
+        final Lifecycle lifecycle = getLifecycle();
+        uniqueControllerFromXml
+                .stream()
+                .filter(controller -> controller instanceof LifecycleObserver)
+                .forEach(
+                        controller -> lifecycle.addObserver((LifecycleObserver) controller));
+
         mPlaceholderPreferenceController =
                 new DashboardTilePlaceholderPreferenceController(context);
         controllers.add(mPlaceholderPreferenceController);
@@ -95,13 +117,6 @@
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        final View view = super.onCreateView(inflater, container, savedInstanceState);
-        return view;
-    }
-
-    @Override
     public void onCategoriesChanged() {
         final DashboardCategory category =
                 mDashboardFeatureProvider.getTilesForCategory(getCategoryKey());
@@ -191,7 +206,7 @@
     @Override
     protected abstract int getPreferenceScreenResId();
 
-    protected <T extends AbstractPreferenceController> T getPreferenceController(Class<T> clazz) {
+    protected <T extends AbstractPreferenceController> T use(Class<T> clazz) {
         List<AbstractPreferenceController> controllerList = mPreferenceControllers.get(clazz);
         if (controllerList != null) {
             if (controllerList.size() > 1) {
@@ -227,7 +242,9 @@
     /**
      * Get a list of {@link AbstractPreferenceController} for this fragment.
      */
-    protected abstract List<AbstractPreferenceController> getPreferenceControllers(Context context);
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+        return null;
+    }
 
     /**
      * Returns true if this tile should be displayed
@@ -337,7 +354,7 @@
         final Context context = getContext();
         mSummaryLoader = new SummaryLoader(getActivity(), getCategoryKey());
         mSummaryLoader.setSummaryConsumer(this);
-        final TypedArray a = context.obtainStyledAttributes(new int[]{
+        final TypedArray a = context.obtainStyledAttributes(new int[] {
                 android.R.attr.colorControlNormal});
         final int tintColor = a.getColor(0, context.getColor(android.R.color.white));
         a.recycle();
diff --git a/src/com/android/settings/dashboard/conditional/WorkModeCondition.java b/src/com/android/settings/dashboard/conditional/WorkModeCondition.java
index 5c47be6..cb1b60a 100644
--- a/src/com/android/settings/dashboard/conditional/WorkModeCondition.java
+++ b/src/com/android/settings/dashboard/conditional/WorkModeCondition.java
@@ -85,7 +85,7 @@
     @Override
     public void onPrimaryClick() {
         mManager.getContext().startActivity(new Intent(mManager.getContext(),
-                Settings.UserSettingsActivity.class)
+                Settings.AccountDashboardActivity.class)
                 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
     }
 
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
index 11eb80c..87b3f4b 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
@@ -38,7 +38,6 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardAdapter.DashboardItemHolder;
-import com.android.settings.dashboard.DashboardAdapter.IconCache;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.Utils;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -46,6 +45,7 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
 import com.android.settingslib.suggestions.SuggestionControllerMixin;
+import com.android.settingslib.utils.IconCache;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index 339de7c..2d50589 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -169,7 +169,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
         mSummaryController =
                 new DataUsageSummaryPreferenceController(context);
diff --git a/src/com/android/settings/datausage/DataUsageSummaryLegacy.java b/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
index 6a241eb..f46c91e 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
@@ -188,7 +188,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 22ecb09..5902545 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -110,7 +110,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context);
     }
 
@@ -168,7 +168,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context);
                 }
diff --git a/src/com/android/settings/development/BluetoothDelayReportsPreferenceController.java b/src/com/android/settings/development/BluetoothDelayReportsPreferenceController.java
new file mode 100644
index 0000000..5dc6e52
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothDelayReportsPreferenceController.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2018 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.development;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.annotation.VisibleForTesting;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class BluetoothDelayReportsPreferenceController extends
+        DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+        PreferenceControllerMixin {
+
+    private static final String BLUETOOTH_ENABLE_AVDTP_DELAY_REPORT_KEY =
+            "bluetooth_enable_avdtp_delay_reports";
+    @VisibleForTesting
+    static final String BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY =
+            "persist.bluetooth.enabledelayreports";
+
+    private SwitchPreference mPreference;
+
+    public BluetoothDelayReportsPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return BLUETOOTH_ENABLE_AVDTP_DELAY_REPORT_KEY;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+
+        mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean isEnabled = (Boolean) newValue;
+        SystemProperties.set(BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY,
+                isEnabled ? "true" : "false");
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final boolean isEnabled = SystemProperties.getBoolean(
+                BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, false /* default */);
+        mPreference.setChecked(isEnabled);
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchEnabled() {
+        mPreference.setEnabled(true);
+    }
+
+    @Override
+    protected void onDeveloperOptionsSwitchDisabled() {
+        mPreference.setEnabled(false);
+        // the default setting for this preference is the disabled state
+        mPreference.setChecked(false);
+        SystemProperties.set(BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, "false");
+    }
+
+}
diff --git a/src/com/android/settings/development/DarkUIPreferenceController.java b/src/com/android/settings/development/DarkUIPreferenceController.java
new file mode 100644
index 0000000..a35397b
--- /dev/null
+++ b/src/com/android/settings/development/DarkUIPreferenceController.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2018 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.development;
+
+import android.app.UiModeManager;
+import android.content.Context;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class DarkUIPreferenceController extends
+        DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+        PreferenceControllerMixin {
+
+    private static final String DARK_UI_KEY = "dark_ui_mode";
+    private final UiModeManager mUiModeManager;
+
+    public DarkUIPreferenceController(Context context) {
+        this(context, context.getSystemService(UiModeManager.class));
+    }
+
+    @VisibleForTesting
+    DarkUIPreferenceController(Context context, UiModeManager uiModeManager) {
+        super(context);
+        mUiModeManager = uiModeManager;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return DARK_UI_KEY;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        mUiModeManager.setNightMode(modeToInt((String) newValue));
+        updateSummary(preference);
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        updateSummary(preference);
+    }
+
+    private void updateSummary(Preference preference) {
+        int mode = mUiModeManager.getNightMode();
+        ((ListPreference) preference).setValue(modeToString(mode));
+        preference.setSummary(modeToDescription(mode));
+    }
+
+    private String modeToDescription(int mode) {
+        String[] values = mContext.getResources().getStringArray(R.array.dark_ui_mode_entries);
+        switch (mode) {
+            case UiModeManager.MODE_NIGHT_AUTO:
+                return values[0];
+            case UiModeManager.MODE_NIGHT_YES:
+                return values[1];
+            case UiModeManager.MODE_NIGHT_NO:
+            default:
+                return values[2];
+
+        }
+    }
+
+    private String modeToString(int mode) {
+        switch (mode) {
+            case UiModeManager.MODE_NIGHT_AUTO:
+                return "auto";
+            case UiModeManager.MODE_NIGHT_YES:
+                return "yes";
+            case UiModeManager.MODE_NIGHT_NO:
+            default:
+                return "no";
+
+        }
+    }
+
+    private int modeToInt(String mode) {
+        switch (mode) {
+            case "auto":
+                return UiModeManager.MODE_NIGHT_AUTO;
+            case "yes":
+                return UiModeManager.MODE_NIGHT_YES;
+            case "no":
+            default:
+                return UiModeManager.MODE_NIGHT_NO;
+        }
+    }
+}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 395d230..e2495f0 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -302,7 +302,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         if (Utils.isMonkeyRunning()) {
             mPreferenceControllers = new ArrayList<>();
             return null;
@@ -375,6 +375,7 @@
         controllers.add(new LocalBackupPasswordPreferenceController(context));
         controllers.add(new StayAwakePreferenceController(context, lifecycle));
         controllers.add(new HdcpCheckingPreferenceController(context));
+        controllers.add(new DarkUIPreferenceController(context));
         controllers.add(new BluetoothSnoopLogPreferenceController(context));
         controllers.add(new OemUnlockPreferenceController(context, activity, fragment));
         controllers.add(new FileEncryptionPreferenceController(context));
@@ -401,10 +402,10 @@
         controllers.add(new WifiConnectedMacRandomizationPreferenceController(context));
         controllers.add(new MobileDataAlwaysOnPreferenceController(context));
         controllers.add(new TetheringHardwareAccelPreferenceController(context));
-        controllers.add(new SelectUsbConfigPreferenceController(context, lifecycle));
         controllers.add(new BluetoothDeviceNoNamePreferenceController(context));
         controllers.add(new BluetoothAbsoluteVolumePreferenceController(context));
         controllers.add(new BluetoothInbandRingingPreferenceController(context));
+        controllers.add(new BluetoothDelayReportsPreferenceController(context));
         controllers.add(new BluetoothAvrcpVersionPreferenceController(context));
         controllers.add(new BluetoothAudioCodecPreferenceController(context, lifecycle,
                 bluetoothA2dpConfigStore));
@@ -453,7 +454,7 @@
 
     @VisibleForTesting
     <T extends AbstractPreferenceController> T getDevelopmentOptionsController(Class<T> clazz) {
-        return getPreferenceController(clazz);
+        return use(clazz);
     }
 
     /**
@@ -477,7 +478,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context, null /* activity */,
                             null /* lifecycle */, null /* devOptionsDashboardFragment */,
diff --git a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
index 63eb24c..5f9fcca 100644
--- a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
+++ b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
@@ -30,8 +30,8 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.wrapper.UsbManagerWrapper;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.connecteddevice.usb.UsbBackend;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnCreate;
@@ -49,7 +49,7 @@
     private final String[] mListSummaries;
     private final UsbManager mUsbManager;
     @VisibleForTesting
-    UsbBackend.UsbManagerPassThrough mUsbManagerPassThrough;
+    UsbManagerWrapper mUsbManagerWrapper;
     private BroadcastReceiver mUsbReceiver;
     private ListPreference mPreference;
 
@@ -59,7 +59,7 @@
         mListValues = context.getResources().getStringArray(R.array.usb_configuration_values);
         mListSummaries = context.getResources().getStringArray(R.array.usb_configuration_titles);
         mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
-        mUsbManagerPassThrough = new UsbBackend.UsbManagerPassThrough(mUsbManager);
+        mUsbManagerWrapper = new UsbManagerWrapper(mUsbManager);
         mUsbReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
@@ -98,7 +98,7 @@
             return false;
         }
 
-        writeUsbConfigurationOption(mUsbManagerPassThrough
+        writeUsbConfigurationOption(mUsbManagerWrapper
                 .usbFunctionsFromString(newValue.toString()));
         updateUsbConfigurationValues();
         return true;
@@ -138,10 +138,10 @@
     }
 
     private void updateUsbConfigurationValues() {
-        long functions = mUsbManagerPassThrough.getCurrentFunctions();
+        long functions = mUsbManagerWrapper.getCurrentFunctions();
         int index = 0;
         for (int i = 0; i < mListValues.length; i++) {
-            if (functions == mUsbManagerPassThrough.usbFunctionsFromString(mListValues[i])) {
+            if (functions == mUsbManagerWrapper.usbFunctionsFromString(mListValues[i])) {
                 index = i;
                 break;
             }
diff --git a/src/com/android/settings/development/WebViewAppPreferenceController.java b/src/com/android/settings/development/WebViewAppPreferenceController.java
index 9ccb20b..4f35910 100644
--- a/src/com/android/settings/development/WebViewAppPreferenceController.java
+++ b/src/com/android/settings/development/WebViewAppPreferenceController.java
@@ -25,9 +25,9 @@
 import android.util.Log;
 
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.webview.WebViewUpdateServiceWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.development.DeveloperOptionsPreferenceController;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
index 8f37c67..32bc0ab 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
@@ -51,7 +51,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new FeatureFlagsPreferenceController(context, getLifecycle()));
         return controllers;
diff --git a/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java b/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java
index ca4181e..24bb5d1 100644
--- a/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java
@@ -40,7 +40,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new DevelopmentTilePreferenceController(context));
         return controllers;
diff --git a/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java b/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java
index 083a719..51fcb2c 100644
--- a/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java
@@ -22,17 +22,23 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.service.quicksettings.TileService;
+import android.support.annotation.VisibleForTesting;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
 
+import com.android.internal.statusbar.IStatusBarService;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.List;
 
 public class DevelopmentTilePreferenceController extends AbstractPreferenceController {
 
+    private static final String TAG = "DevTilePrefController";
     private final OnChangeHandler mOnChangeHandler;
     private final PackageManager mPackageManager;
 
@@ -78,24 +84,42 @@
         }
     }
 
-    private static class OnChangeHandler implements Preference.OnPreferenceChangeListener {
+    @VisibleForTesting
+    static class OnChangeHandler implements Preference.OnPreferenceChangeListener {
 
         private final Context mContext;
         private final PackageManager mPackageManager;
+        private IStatusBarService mStatusBarService;
 
         public OnChangeHandler(Context context) {
             mContext = context;
             mPackageManager = context.getPackageManager();
+            mStatusBarService = IStatusBarService.Stub.asInterface(
+                    ServiceManager.checkService(Context.STATUS_BAR_SERVICE));
         }
 
         @Override
         public boolean onPreferenceChange(Preference preference, Object newValue) {
-            ComponentName cn = new ComponentName(
+            boolean enabled = ((Boolean) newValue).booleanValue();
+            ComponentName componentName = new ComponentName(
                     mContext.getPackageName(), preference.getKey());
-            mPackageManager.setComponentEnabledSetting(cn, (Boolean) newValue
+            mPackageManager.setComponentEnabledSetting(componentName, enabled
                             ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                             : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                     PackageManager.DONT_KILL_APP);
+
+            try {
+                if (mStatusBarService != null) {
+                    if (enabled) {
+                        mStatusBarService.addTile(componentName);
+                    } else {
+                        mStatusBarService.remTile(componentName);
+                    }
+                }
+            } catch (RemoteException e) {
+                Log.e(TAG, "Failed to modify QS tile for component " +
+                        componentName.toString(), e);
+            }
             return true;
         }
     }
diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java
index 38f9565..736c40c 100644
--- a/src/com/android/settings/development/qstile/DevelopmentTiles.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java
@@ -142,26 +142,29 @@
     }
 
     /**
-     * Tile to toggle Window Trace.
+     * Tile to toggle Winscope trace which consists of Window and Layer traces.
      */
-    public static class WindowTrace extends DevelopmentTiles {
+    public static class WinscopeTrace extends DevelopmentTiles {
         @VisibleForTesting
-        IWindowManagerWrapper mWindowManager;
+        static final int SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE = 1025;
         @VisibleForTesting
-        Toast mToast;
+        static final int SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE = 1026;
+        private IBinder mSurfaceFlinger;
+        private IWindowManagerWrapper mWindowManager;
+        private Toast mToast;
 
         @Override
         public void onCreate() {
             super.onCreate();
             mWindowManager = new IWindowManagerWrapper(WindowManagerGlobal
                     .getWindowManagerService());
+            mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
             Context context = getApplicationContext();
-            CharSequence text = "Trace written to /data/misc/wmtrace/wm_trace.pb";
+            CharSequence text = "Trace files written to /data/misc/wmtrace";
             mToast = Toast.makeText(context, text, Toast.LENGTH_LONG);
         }
 
-        @Override
-        protected boolean isEnabled() {
+        private boolean isWindowTraceEnabled() {
             try {
                 return mWindowManager.isWindowTraceEnabled();
             } catch (RemoteException e) {
@@ -171,46 +174,8 @@
             return false;
         }
 
-        @Override
-        protected void setIsEnabled(boolean isEnabled) {
-            try {
-                if (isEnabled) {
-                    mWindowManager.startWindowTrace();
-                } else {
-                    mWindowManager.stopWindowTrace();
-                    mToast.show();
-                }
-            } catch (RemoteException e) {
-                Log.e(TAG, "Could not set window trace status." + e.toString());
-            }
-        }
-    }
-
-    /**
-     * Tile to toggle Layer Trace.
-     */
-    public static class LayerTrace extends DevelopmentTiles {
-        @VisibleForTesting
-        static final int SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE = 1025;
-        @VisibleForTesting
-        static final int SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE = 1026;
-        @VisibleForTesting
-        IBinder mSurfaceFlinger;
-        @VisibleForTesting
-        Toast mToast;
-
-        @Override
-        public void onCreate() {
-            super.onCreate();
-            mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
-            Context context = getApplicationContext();
-            CharSequence text = "Trace written to /data/misc/wmtrace/layers_trace.pb";
-            mToast = Toast.makeText(context, text, Toast.LENGTH_LONG);
-        }
-
-        @Override
-        protected boolean isEnabled() {
-            boolean surfaceTraceEnabled = false;
+        private boolean isLayerTraceEnabled() {
+            boolean layerTraceEnabled = false;
             Parcel reply = null;
             Parcel data = null;
             try {
@@ -219,8 +184,8 @@
                     data = Parcel.obtain();
                     data.writeInterfaceToken("android.ui.ISurfaceComposer");
                     mSurfaceFlinger.transact(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE,
-                            data, reply, 0 /* flags */ );
-                    surfaceTraceEnabled = reply.readBoolean();
+                            data, reply, 0 /* flags */);
+                    layerTraceEnabled = reply.readBoolean();
                 }
             } catch (RemoteException e) {
                 Log.e(TAG, "Could not get layer trace status, defaulting to false." + e.toString());
@@ -230,11 +195,27 @@
                     reply.recycle();
                 }
             }
-            return surfaceTraceEnabled;
+            return layerTraceEnabled;
         }
 
         @Override
-        protected void setIsEnabled(boolean isEnabled) {
+        protected boolean isEnabled() {
+            return isWindowTraceEnabled() || isLayerTraceEnabled();
+        }
+
+        private void setWindowTraceEnabled(boolean isEnabled) {
+            try {
+                if (isEnabled) {
+                    mWindowManager.startWindowTrace();
+                } else {
+                    mWindowManager.stopWindowTrace();
+                }
+            } catch (RemoteException e) {
+                Log.e(TAG, "Could not set window trace status." + e.toString());
+            }
+        }
+
+        private void setLayerTraceEnabled(boolean isEnabled) {
             Parcel data = null;
             try {
                 if (mSurfaceFlinger != null) {
@@ -243,9 +224,6 @@
                     data.writeInt(isEnabled ? 1 : 0);
                     mSurfaceFlinger.transact(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE,
                             data, null, 0 /* flags */);
-                    if (!isEnabled){
-                        mToast.show();
-                    }
                 }
             } catch (RemoteException e) {
                 Log.e(TAG, "Could not set layer tracing." + e.toString());
@@ -255,5 +233,14 @@
                 }
             }
         }
+
+        @Override
+        protected void setIsEnabled(boolean isEnabled) {
+            setWindowTraceEnabled(isEnabled);
+            setLayerTraceEnabled(isEnabled);
+            if (!isEnabled) {
+                mToast.show();
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/DeviceInfoSettings.java b/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
index 79f57be..164bf8a 100644
--- a/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
+++ b/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
@@ -73,7 +73,7 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         final BuildNumberPreferenceController buildNumberPreferenceController =
-                getPreferenceController(BuildNumberPreferenceController.class);
+                use(BuildNumberPreferenceController.class);
         if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
             return;
         }
@@ -91,7 +91,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getActivity(), this /* fragment */,
                 getLifecycle());
     }
@@ -158,7 +158,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null /*activity */,
                             null /* fragment */, null /* lifecycle */);
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 341c76f..9c872a4 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -58,7 +58,8 @@
 import java.util.List;
 
 public class StorageDashboardFragment extends DashboardFragment
-    implements LoaderManager.LoaderCallbacks<SparseArray<StorageAsyncLoader.AppsStorageResult>> {
+        implements
+        LoaderManager.LoaderCallbacks<SparseArray<StorageAsyncLoader.AppsStorageResult>> {
     private static final String TAG = "StorageDashboardFrag";
     private static final int STORAGE_JOB_ID = 0;
     private static final int ICON_JOB_ID = 1;
@@ -166,7 +167,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mSummaryController = new StorageSummaryDonutPreferenceController(context);
         controllers.add(mSummaryController);
@@ -223,7 +224,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     final StorageManager sm = context.getSystemService(StorageManager.class);
                     final UserManagerWrapper userManager =
                             new UserManagerWrapper(context.getSystemService(UserManager.class));
@@ -354,7 +356,8 @@
         }
 
         @Override
-        public void onLoaderReset(Loader<SparseArray<Drawable>> loader) {}
+        public void onLoaderReset(Loader<SparseArray<Drawable>> loader) {
+        }
     }
 
     public final class VolumeSizeCallbacks
@@ -369,7 +372,8 @@
         }
 
         @Override
-        public void onLoaderReset(Loader<PrivateStorageInfo> loader) {}
+        public void onLoaderReset(Loader<PrivateStorageInfo> loader) {
+        }
 
         @Override
         public void onLoadFinished(
diff --git a/src/com/android/settings/deviceinfo/StorageProfileFragment.java b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
index f2383de..3f75f5c 100644
--- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
@@ -98,7 +98,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final StorageManager sm = context.getSystemService(StorageManager.class);
         mPreferenceController =
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 03b69a5..05fe326 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -94,7 +94,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getActivity(), this /* fragment */,
                 getLifecycle());
     }
@@ -130,7 +130,7 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         final BuildNumberPreferenceController buildNumberPreferenceController =
-            getPreferenceController(BuildNumberPreferenceController.class);
+            use(BuildNumberPreferenceController.class);
         if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
             return;
         }
@@ -198,7 +198,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null /*activity */,
                             null /* fragment */, null /* lifecycle */);
diff --git a/src/com/android/settings/display/AmbientDisplaySettings.java b/src/com/android/settings/display/AmbientDisplaySettings.java
index 3cac078..02db6f1 100644
--- a/src/com/android/settings/display/AmbientDisplaySettings.java
+++ b/src/com/android/settings/display/AmbientDisplaySettings.java
@@ -76,7 +76,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(),
                 new AmbientDisplayConfiguration(context), mMetricsFeatureProvider,
                 this::updatePreferenceStates);
@@ -101,7 +101,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null,
                             new AmbientDisplayConfiguration(context), null, null);
                 }
diff --git a/src/com/android/settings/display/ColorModePreferenceFragment.java b/src/com/android/settings/display/ColorModePreferenceFragment.java
index e3fb65d..ea8dd6a 100644
--- a/src/com/android/settings/display/ColorModePreferenceFragment.java
+++ b/src/com/android/settings/display/ColorModePreferenceFragment.java
@@ -22,6 +22,7 @@
 
 import com.android.settings.R;
 import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/src/com/android/settings/display/VrDisplayPreferencePicker.java b/src/com/android/settings/display/VrDisplayPreferencePicker.java
index 5487c46..5f99be9 100644
--- a/src/com/android/settings/display/VrDisplayPreferencePicker.java
+++ b/src/com/android/settings/display/VrDisplayPreferencePicker.java
@@ -24,6 +24,7 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/settings/dream/CurrentDreamPicker.java b/src/com/android/settings/dream/CurrentDreamPicker.java
index f0d520c..3ebce1c 100644
--- a/src/com/android/settings/dream/CurrentDreamPicker.java
+++ b/src/com/android/settings/dream/CurrentDreamPicker.java
@@ -24,6 +24,7 @@
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settingslib.dream.DreamBackend;
 import com.android.settingslib.dream.DreamBackend.DreamInfo;
+import com.android.settingslib.widget.CandidateInfo;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java
index c3eaa7f..c0d4c40 100644
--- a/src/com/android/settings/dream/DreamSettings.java
+++ b/src/com/android/settings/dream/DreamSettings.java
@@ -109,7 +109,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context);
     }
 
@@ -137,18 +137,18 @@
 
     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
             = new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(
-                        Context context, boolean enabled) {
-                    final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.dream_fragment_overview;
-                    return Arrays.asList(sir);
-                }
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(
+                Context context, boolean enabled) {
+            final SearchIndexableResource sir = new SearchIndexableResource(context);
+            sir.xmlResId = R.xml.dream_fragment_overview;
+            return Arrays.asList(sir);
+        }
 
-                @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
-                    return buildPreferenceControllers(context);
-                }
-            };
+        @Override
+        public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+            return buildPreferenceControllers(context);
+        }
+    };
 }
 
diff --git a/src/com/android/settings/dream/WhenToDreamPicker.java b/src/com/android/settings/dream/WhenToDreamPicker.java
index 7031bdf..f6f89a8 100644
--- a/src/com/android/settings/dream/WhenToDreamPicker.java
+++ b/src/com/android/settings/dream/WhenToDreamPicker.java
@@ -22,6 +22,7 @@
 import com.android.settings.R;
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settingslib.dream.DreamBackend;
+import com.android.settingslib.widget.CandidateInfo;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/com/android/settings/enterprise/ApplicationListFragment.java b/src/com/android/settings/enterprise/ApplicationListFragment.java
index 7425a30..1b41f03 100644
--- a/src/com/android/settings/enterprise/ApplicationListFragment.java
+++ b/src/com/android/settings/enterprise/ApplicationListFragment.java
@@ -49,7 +49,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         ApplicationListPreferenceController controller = new ApplicationListPreferenceController(
                 context, this, context.getPackageManager(), this);
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
index 0628dbb..a0ad551 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
@@ -51,7 +51,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, true /* async */);
     }
 
@@ -112,7 +112,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, false /* async */);
                 }
diff --git a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
index a1c61de..1788c33 100644
--- a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
+++ b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
@@ -48,7 +48,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final EnterpriseSetDefaultAppsListPreferenceController controller =
                 new EnterpriseSetDefaultAppsListPreferenceController(
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 1bbb035..1ecb2a8 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -327,7 +327,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Bundle bundle = getArguments();
         final int uid = bundle.getInt(EXTRA_UID, 0);
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index 85fb9f5..58b7d13 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -21,42 +21,36 @@
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
+
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.dashboard.conditional.BatterySaverCondition;
 import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.widget.MasterSwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
-import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGING;
-
-public class BatterySaverController extends AbstractPreferenceController
-        implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
-        LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
+public class BatterySaverController extends TogglePreferenceController
+        implements LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
     private static final String KEY_BATTERY_SAVER = "battery_saver_summary";
     private final BatterySaverReceiver mBatteryStateChangeReceiver;
     private final PowerManager mPowerManager;
     private MasterSwitchPreference mBatterySaverPref;
 
-    public BatterySaverController(Context context, Lifecycle lifecycle) {
-        super(context);
+    public BatterySaverController(Context context) {
+        super(context, KEY_BATTERY_SAVER);
 
-        lifecycle.addObserver(this);
         mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
         mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
         mBatteryStateChangeReceiver.setBatterySaverListener(this);
     }
 
     @Override
-    public boolean isAvailable() {
-        return true;
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
     }
 
     @Override
@@ -71,17 +65,9 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        mBatterySaverPref.setChecked(mPowerManager.isPowerSaveMode());
-        updateSummary();
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        final boolean saverOn = (Boolean) newValue;
-        if (saverOn != mPowerManager.isPowerSaveMode()
-                && !mPowerManager.setPowerSaveMode(saverOn)) {
-            // Do nothing if power save mode doesn't set correctly
+    public boolean setChecked(boolean isChecked) {
+        mBatterySaverPref.setChecked(isChecked);
+        if (!mPowerManager.setPowerSaveMode(isChecked)) {
             return false;
         }
 
@@ -91,6 +77,11 @@
     }
 
     @Override
+    public boolean isChecked() {
+        return mPowerManager.isPowerSaveMode();
+    }
+
+    @Override
     public void onStart() {
         mContext.getContentResolver().registerContentObserver(
                 Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL)
@@ -110,7 +101,8 @@
         ConditionManager.get(mContext).getCondition(BatterySaverCondition.class).refreshState();
     }
 
-    private void updateSummary() {
+    @Override
+    public String getSummary() {
         final boolean mode = mPowerManager.isPowerSaveMode();
         final int format = mode ? R.string.battery_saver_on_summary
                 : R.string.battery_saver_off_summary;
@@ -119,10 +111,12 @@
         final int percentFormat = percent > 0 ? R.string.battery_saver_desc_turn_on_auto_pct
                 : R.string.battery_saver_desc_turn_on_auto_never;
 
-        final String summary = mContext.getString(format, mContext.getString(percentFormat,
+        return mContext.getString(format, mContext.getString(percentFormat,
                 Utils.formatPercentage(percent)));
+    }
 
-        mBatterySaverPref.setSummary(summary);
+    private void updateSummary() {
+        mBatterySaverPref.setSummary(getSummary());
     }
 
     private final ContentObserver mObserver = new ContentObserver(new Handler()) {
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index da9b705..10bc853 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -44,6 +44,7 @@
 import com.android.settings.overlay.FeatureFactory;
 
 import com.android.settingslib.utils.PowerUtil;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
@@ -69,6 +70,7 @@
         int BACKGROUND = 2;
         int ALL = 3;
     }
+
     private static final String TAG = "BatteryUtils";
 
     private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5;
@@ -81,6 +83,7 @@
     private Context mContext;
     @VisibleForTesting
     PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+
     public static BatteryUtils getInstance(Context context) {
         if (sInstance == null || sInstance.isDataCorrupted()) {
             sInstance = new BatteryUtils(context);
@@ -153,8 +156,7 @@
     private long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
         final long rawRealTimeUs = PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
         return getScreenUsageTimeMs(uid, which, rawRealTimeUs)
-                + PowerUtil.convertUsToMs(
-                        getForegroundServiceTotalTimeUs(uid, rawRealTimeUs));
+                + PowerUtil.convertUsToMs(getForegroundServiceTotalTimeUs(uid, rawRealTimeUs));
     }
 
     /**
@@ -349,6 +351,7 @@
 
     /**
      * Calculate the screen usage time since last full charge.
+     *
      * @param batteryStatsHelper utility class that contains the screen usage data
      * @return time in millis
      */
@@ -500,5 +503,35 @@
         return false;
     }
 
+    /**
+     * Check if the app represented by {@code uid} has battery usage more than {@code threshold}
+     *
+     * @param batteryStatsHelper used to check the battery usage
+     * @param userManager        used to init the {@code batteryStatsHelper}
+     * @param uid                represent the app
+     * @param threshold          battery percentage threshold(e.g. 10 means 10% battery usage )
+     * @return {@code true} if battery drain is more than the threshold
+     */
+    public boolean isAppHeavilyUsed(BatteryStatsHelper batteryStatsHelper, UserManager userManager,
+            int uid, int threshold) {
+        initBatteryStatsHelper(batteryStatsHelper, null /* bundle */, userManager);
+        final int dischargeAmount = batteryStatsHelper.getStats().getDischargeAmount(
+                BatteryStats.STATS_SINCE_CHARGED);
+        List<BatterySipper> batterySippers = batteryStatsHelper.getUsageList();
+        final double hiddenAmount = removeHiddenBatterySippers(batterySippers);
+
+        for (int i = 0, size = batterySippers.size(); i < size; i++) {
+            final BatterySipper batterySipper = batterySippers.get(i);
+            if (batterySipper.getUid() == uid) {
+                final int percent = (int) calculateBatteryPercent(
+                        batterySipper.totalPowerMah, batteryStatsHelper.getTotalPower(),
+                        hiddenAmount,
+                        dischargeAmount);
+                return percent >= threshold;
+            }
+        }
+
+        return false;
+    }
 }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 25351d3..2e94e2c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -167,7 +167,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java
index 2e771bd..abfb22b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java
@@ -123,7 +123,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 659166a..07f4a2c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -59,6 +59,7 @@
 
 import com.android.settingslib.utils.PowerUtil;
 import com.android.settingslib.utils.StringUtil;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -227,22 +228,25 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final Lifecycle lifecycle = getLifecycle();
         final SettingsActivity activity = (SettingsActivity) getActivity();
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
-                context, activity, this /* host */, getLifecycle());
+                context, activity, this /* host */, lifecycle);
         controllers.add(mBatteryHeaderPreferenceController);
         mBatteryAppListPreferenceController = new BatteryAppListPreferenceController(context,
                 KEY_APP_LIST, lifecycle, activity, this);
         controllers.add(mBatteryAppListPreferenceController);
         mBatteryTipPreferenceController = new BatteryTipPreferenceController(context,
-                KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this, this);
+                KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this /* fragment */, this /*
+                BatteryTipListener */);
         controllers.add(mBatteryTipPreferenceController);
-        controllers.add(new BatterySaverController(context, getLifecycle()));
+        BatterySaverController batterySaverController = new BatterySaverController(context);
+        controllers.add(batterySaverController);
         controllers.add(new BatteryPercentagePreferenceController(context));
 
+        lifecycle.addObserver(batterySaverController);
         return controllers;
     }
 
@@ -322,7 +326,8 @@
 
     @VisibleForTesting
     void updateLastFullChargePreference(long timeMs) {
-        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, false);
+        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs,
+                false);
         mLastFullChargePref.setSubtitle(timeSequence);
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
index 1ca8626..ab7863c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
@@ -307,19 +307,21 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(
                 context, getActivity(), this /* host */, getLifecycle());
         controllers.add(mBatteryHeaderPreferenceController);
         controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
         controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
-        controllers.add(new BatterySaverController(context, getLifecycle()));
         controllers.add(new BatteryPercentagePreferenceController(context));
         controllers.add(new AmbientDisplayPreferenceController(
                 context,
                 new AmbientDisplayConfiguration(context),
                 KEY_AMBIENT_DISPLAY));
+        BatterySaverController batterySaverController = new BatterySaverController(context);
+        controllers.add(batterySaverController);
+        getLifecycle().addObserver(batterySaverController);
         return controllers;
     }
 
diff --git a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
index 92ecd4b..1433008 100644
--- a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java
@@ -22,11 +22,14 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 
+import com.android.internal.util.CollectionUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.batterytip.AppInfo;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -37,7 +40,7 @@
     static final String KEY_RESTRICT_APP = "restricted_app";
 
     private AppOpsManager mAppOpsManager;
-    private List<AppOpsManager.PackageOps> mPackageOps;
+    private List<AppInfo> mAppInfos;
     private SettingsActivity mSettingsActivity;
     private InstrumentedPreferenceFragment mPreferenceFragment;
 
@@ -62,9 +65,17 @@
     public void updateState(Preference preference) {
         super.updateState(preference);
 
-        mPackageOps = mAppOpsManager.getPackagesForOps(
+        final List<AppOpsManager.PackageOps> packageOpsList = mAppOpsManager.getPackagesForOps(
                 new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
-        final int num = mPackageOps != null ? mPackageOps.size() : 0;
+        final int num = CollectionUtils.size(packageOpsList);
+        mAppInfos = new ArrayList<>();
+
+        for (int i = 0; i < num; i++) {
+            final AppOpsManager.PackageOps packageOps = packageOpsList.get(i);
+            mAppInfos.add(new AppInfo.Builder()
+                    .setPackageName(packageOps.getPackageName())
+                    .build());
+        }
 
         // Enable the preference if some apps already been restricted, otherwise disable it
         preference.setEnabled(num > 0);
@@ -78,7 +89,7 @@
         if (getPreferenceKey().equals(preference.getKey())) {
             // start fragment
             RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mPreferenceFragment,
-                    mPackageOps);
+                    mAppInfos);
             return true;
         }
 
diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
index 26386b6..0843c98 100644
--- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
+++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
@@ -17,6 +17,7 @@
 package com.android.settings.fuelgauge;
 
 import android.app.AppOpsManager;
+import android.app.Fragment;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -35,6 +36,7 @@
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.fuelgauge.batterytip.AppInfo;
 import com.android.settings.widget.AppCheckBoxPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
 
@@ -47,11 +49,12 @@
 
     public static final String TAG = "RestrictedAppDetails";
 
-    private static final String EXTRA_PACKAGE_OPS_LIST = "package_ops_list";
+    @VisibleForTesting
+    static final String EXTRA_APP_INFO_LIST = "app_info_list";
     private static final String KEY_PREF_RESTRICTED_APP_LIST = "restrict_app_list";
 
     @VisibleForTesting
-    List<AppOpsManager.PackageOps> mPackageOpsList;
+    List<AppInfo> mAppInfos;
     @VisibleForTesting
     IconDrawableFactory mIconDrawableFactory;
     @VisibleForTesting
@@ -62,9 +65,9 @@
     PackageManager mPackageManager;
 
     public static void startRestrictedAppDetails(SettingsActivity caller,
-            InstrumentedPreferenceFragment fragment, List<AppOpsManager.PackageOps> packageOpsList) {
+            InstrumentedPreferenceFragment fragment, List<AppInfo> appInfos) {
         final Bundle args = new Bundle();
-        args.putParcelableList(EXTRA_PACKAGE_OPS_LIST, packageOpsList);
+        args.putParcelableList(EXTRA_APP_INFO_LIST, appInfos);
 
         new SubSettingLauncher(caller)
                 .setDestination(RestrictedAppDetails.class.getName())
@@ -80,7 +83,7 @@
         final Context context = getContext();
 
         mRestrictedAppListGroup = (PreferenceGroup) findPreference(KEY_PREF_RESTRICTED_APP_LIST);
-        mPackageOpsList = getArguments().getParcelableArrayList(EXTRA_PACKAGE_OPS_LIST);
+        mAppInfos = getArguments().getParcelableArrayList(EXTRA_APP_INFO_LIST);
         mPackageManager = context.getPackageManager();
         mIconDrawableFactory = IconDrawableFactory.newInstance(context);
         mBatteryUtils = BatteryUtils.getInstance(context);
@@ -105,7 +108,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
@@ -119,19 +122,20 @@
         mRestrictedAppListGroup.removeAll();
         final Context context = getPrefContext();
 
-        for (int i = 0, size = mPackageOpsList.size(); i < size; i++) {
+        for (int i = 0, size = mAppInfos.size(); i < size; i++) {
             final CheckBoxPreference checkBoxPreference = new AppCheckBoxPreference(context);
-            final AppOpsManager.PackageOps packageOps = mPackageOpsList.get(i);
+            final AppInfo appInfo = mAppInfos.get(i);
             try {
                 final ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo(
-                        packageOps.getPackageName(), 0 /* flags */);
+                        appInfo.packageName, 0 /* flags */);
                 checkBoxPreference.setChecked(true);
                 checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo));
-                checkBoxPreference.setKey(packageOps.getPackageName());
+                checkBoxPreference.setKey(appInfo.packageName);
                 checkBoxPreference.setIcon(
                         Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager,
-                                packageOps.getPackageName(),
-                                UserHandle.getUserId(packageOps.getUid())));
+                                appInfo.packageName,
+                                UserHandle.getUserId(
+                                        mBatteryUtils.getPackageUid(appInfo.packageName))));
                 checkBoxPreference.setOnPreferenceChangeListener((pref, value) -> {
                     // change the toggle
                     final int mode = (Boolean) value ? AppOpsManager.MODE_IGNORED
diff --git a/src/com/android/settings/fuelgauge/SmartBatterySettings.java b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
index 6aeb8a3..34f930a 100644
--- a/src/com/android/settings/fuelgauge/SmartBatterySettings.java
+++ b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
@@ -64,7 +64,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, (SettingsActivity) getActivity(), this);
     }
 
@@ -99,7 +99,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null, null);
                 }
diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceController.java
index 4d3dd31..bf8cd07 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceController.java
@@ -29,13 +29,15 @@
  */
 public class AutoBatterySaverPreferenceController extends TogglePreferenceController implements
         Preference.OnPreferenceChangeListener {
-    private static final int LOW_POWER_MODE_TRIGGER_THRESHOLD = 15;
+    private final int mDefWarnLevel;
 
     @VisibleForTesting
     static final String KEY_AUTO_BATTERY_SAVER = "auto_battery_saver";
 
     public AutoBatterySaverPreferenceController(Context context) {
         super(context, KEY_AUTO_BATTERY_SAVER);
+        mDefWarnLevel = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_lowBatteryWarningLevel);
     }
 
     @Override
@@ -46,7 +48,7 @@
     @Override
     public boolean isChecked() {
         return Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) != 0;
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, mDefWarnLevel) != 0;
     }
 
     @Override
@@ -54,7 +56,7 @@
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
                 isChecked
-                        ? LOW_POWER_MODE_TRIGGER_THRESHOLD
+                        ? mDefWarnLevel
                         : 0);
         return true;
     }
diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
index 1cc72a7..05b3503 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
@@ -42,12 +42,15 @@
         LifecycleObserver, OnStart, OnStop, SeekBarPreference.OnPreferenceChangeListener {
     @VisibleForTesting
     static final String KEY_AUTO_BATTERY_SEEK_BAR = "battery_saver_seek_bar";
+    private final int mDefWarnLevel;
     private SeekBarPreference mPreference;
     private AutoBatterySaverSettingObserver mContentObserver;
 
     public AutoBatterySeekBarPreferenceController(Context context, Lifecycle lifecycle) {
         super(context, KEY_AUTO_BATTERY_SEEK_BAR);
         mContentObserver = new AutoBatterySaverSettingObserver(new Handler(Looper.getMainLooper()));
+        mDefWarnLevel = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_lowBatteryWarningLevel);
         if (lifecycle != null) {
             lifecycle.addObserver(this);
         }
@@ -94,7 +97,7 @@
     void updatePreference(Preference preference) {
         final ContentResolver contentResolver = mContext.getContentResolver();
         final int level = Settings.Global.getInt(contentResolver,
-                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, mDefWarnLevel);
         if (level == 0) {
             preference.setVisible(false);
         } else {
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index 2340675..8009e95 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -18,14 +18,9 @@
 
 import android.content.Context;
 import android.os.Bundle;
-import android.os.PowerManager;
 import android.provider.SearchIndexableResource;
-import android.provider.Settings.Global;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.util.ArrayUtils;
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -64,7 +59,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -96,7 +91,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null);
                 }
             };
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobService.java
new file mode 100644
index 0000000..d5f4879
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobService.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.AsyncTask;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settingslib.utils.ThreadUtils;
+
+import java.util.concurrent.TimeUnit;
+
+/** A JobService to clean up obsolete data in anomaly database */
+public class AnomalyCleanUpJobService extends JobService {
+    private static final String TAG = "AnomalyCleanUpJobService";
+
+    @VisibleForTesting
+    static final long CLEAN_UP_FREQUENCY_MS = TimeUnit.DAYS.toMillis(1);
+
+    public static void scheduleCleanUp(Context context) {
+        final JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+
+        final ComponentName component = new ComponentName(context, AnomalyCleanUpJobService.class);
+        final JobInfo.Builder jobBuilder =
+                new JobInfo.Builder(R.id.job_anomaly_clean_up, component)
+                .setMinimumLatency(CLEAN_UP_FREQUENCY_MS)
+                .setRequiresDeviceIdle(true)
+                .setPersisted(true);
+
+        if (jobScheduler.schedule(jobBuilder.build()) != JobScheduler.RESULT_SUCCESS) {
+            Log.i(TAG, "Anomaly clean up job service schedule failed.");
+        }
+    }
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        final BatteryDatabaseManager batteryDatabaseManager = BatteryDatabaseManager
+                .getInstance(this);
+        final BatteryTipPolicy policy = new BatteryTipPolicy(this);
+        ThreadUtils.postOnBackgroundThread(() -> {
+            batteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp(
+                    System.currentTimeMillis() - TimeUnit.HOURS.toMillis(
+                            policy.dataHistoryRetainHour));
+            jobFinished(params, false /* wantsReschedule */);
+        });
+
+        return true;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters jobParameters) {
+        return true;
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java
new file mode 100644
index 0000000..f658627
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import android.app.PendingIntent;
+import android.app.StatsManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.provider.Settings;
+import android.util.Base64;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Receive broadcast when {@link StatsManager} restart, then check the anomaly config and
+ * prepare info for {@link StatsManager}
+ */
+public class AnomalyConfigReceiver extends BroadcastReceiver {
+    private static final String TAG = "AnomalyConfigReceiver";
+    private static final int REQUEST_CODE = 0;
+    private static final String PREF_DB = "anomaly_pref";
+    private static final String KEY_ANOMALY_CONFIG_VERSION = "anomaly_config_version";
+    private static final int DEFAULT_VERSION = 0;
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (StatsManager.ACTION_STATSD_STARTED.equals(intent.getAction())
+                || Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+            final StatsManager statsManager = context.getSystemService(StatsManager.class);
+
+            // Check whether to update the config
+            checkAnomalyConfig(context, statsManager);
+
+            // Upload PendingIntent to StatsManager
+            final Intent extraIntent = new Intent(context, AnomalyDetectionReceiver.class);
+            final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE,
+                    extraIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+            uploadPendingIntent(statsManager, pendingIntent);
+        }
+    }
+
+    @VisibleForTesting
+    void uploadPendingIntent(StatsManager statsManager, PendingIntent pendingIntent) {
+        Log.i(TAG, "Upload PendingIntent to StatsManager. configKey: "
+                + StatsManagerConfig.ANOMALY_CONFIG_KEY + " subId: "
+                + StatsManagerConfig.SUBSCRIBER_ID);
+        statsManager.setBroadcastSubscriber(StatsManagerConfig.ANOMALY_CONFIG_KEY,
+                StatsManagerConfig.SUBSCRIBER_ID, pendingIntent);
+    }
+
+    private void checkAnomalyConfig(Context context, StatsManager statsManager) {
+        final SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_DB,
+                Context.MODE_PRIVATE);
+        final int currentVersion = sharedPreferences.getInt(KEY_ANOMALY_CONFIG_VERSION,
+                DEFAULT_VERSION);
+        final int newVersion = Settings.Global.getInt(context.getContentResolver(),
+                Settings.Global.ANOMALY_CONFIG_VERSION, DEFAULT_VERSION);
+        Log.i(TAG, "CurrentVersion: " + currentVersion + " new version: " + newVersion);
+
+        if (newVersion > currentVersion) {
+            final byte[] config = Base64.decode(
+                    Settings.Global.getString(context.getContentResolver(),
+                            Settings.Global.ANOMALY_CONFIG), Base64.DEFAULT);
+            if (statsManager.addConfiguration(StatsManagerConfig.ANOMALY_CONFIG_KEY, config)) {
+                Log.i(TAG, "Upload the anomaly config. configKey: "
+                        + StatsManagerConfig.ANOMALY_CONFIG_KEY);
+                SharedPreferences.Editor editor = sharedPreferences.edit();
+                editor.putInt(KEY_ANOMALY_CONFIG_VERSION, newVersion);
+                editor.apply();
+            } else {
+                Log.i(TAG, "Upload the anomaly config failed. configKey: "
+                        + StatsManagerConfig.ANOMALY_CONFIG_KEY);
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
new file mode 100644
index 0000000..9d4f86f
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import static android.os.StatsDimensionsValue.INT_VALUE_TYPE;
+import static android.os.StatsDimensionsValue.TUPLE_VALUE_TYPE;
+
+import android.app.AppOpsManager;
+import android.app.StatsManager;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.app.job.JobWorkItem;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.StatsDimensionsValue;
+import android.os.SystemPropertiesProto;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settingslib.utils.ThreadUtils;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/** A JobService to store anomaly data to anomaly database */
+public class AnomalyDetectionJobService extends JobService {
+    private static final String TAG = "AnomalyDetectionService";
+    private static final int UID_NULL = 0;
+    private static final int STATSD_UID_FILED = 1;
+    private static final int ON = 1;
+
+    @VisibleForTesting
+    static final long MAX_DELAY_MS = TimeUnit.MINUTES.toMillis(30);
+
+    public static void scheduleAnomalyDetection(Context context, Intent intent) {
+        final JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+        final ComponentName component = new ComponentName(context,
+                AnomalyDetectionJobService.class);
+        final JobInfo.Builder jobBuilder =
+                new JobInfo.Builder(R.id.job_anomaly_detection, component)
+                        .setOverrideDeadline(MAX_DELAY_MS);
+
+        if (jobScheduler.enqueue(jobBuilder.build(), new JobWorkItem(intent))
+                != JobScheduler.RESULT_SUCCESS) {
+            Log.i(TAG, "Anomaly detection job service enqueue failed.");
+        }
+    }
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        ThreadUtils.postOnBackgroundThread(() -> {
+            final BatteryDatabaseManager batteryDatabaseManager =
+                    BatteryDatabaseManager.getInstance(this);
+            final BatteryTipPolicy policy = new BatteryTipPolicy(this);
+            final BatteryUtils batteryUtils = BatteryUtils.getInstance(this);
+            final ContentResolver contentResolver = getContentResolver();
+            final BatteryStatsHelper batteryStatsHelper = new BatteryStatsHelper(this,
+                    true /* collectBatteryBroadcast */);
+            final UserManager userManager = getSystemService(UserManager.class);
+
+            for (JobWorkItem item = params.dequeueWork(); item != null;
+                    item = params.dequeueWork()) {
+                saveAnomalyToDatabase(batteryStatsHelper, userManager, batteryDatabaseManager,
+                        batteryUtils, policy, contentResolver,
+                        item.getIntent().getExtras());
+            }
+            jobFinished(params, false /* wantsReschedule */);
+        });
+
+        return true;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters jobParameters) {
+        return false;
+    }
+
+    @VisibleForTesting
+    void saveAnomalyToDatabase(BatteryStatsHelper batteryStatsHelper, UserManager userManager,
+            BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
+            BatteryTipPolicy policy, ContentResolver contentResolver, Bundle bundle) {
+        // The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
+        final StatsDimensionsValue intentDimsValue =
+                bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE);
+        final long subscriptionId = bundle.getLong(StatsManager.EXTRA_STATS_SUBSCRIPTION_ID,
+                -1);
+        final long timeMs = bundle.getLong(AnomalyDetectionReceiver.KEY_ANOMALY_TIMESTAMP,
+                System.currentTimeMillis());
+        Log.i(TAG, "Extra stats value: " + intentDimsValue.toString());
+
+        try {
+            final int uid = extractUidFromStatsDimensionsValue(intentDimsValue);
+            final int anomalyType = StatsManagerConfig.getAnomalyTypeFromSubscriptionId(
+                    subscriptionId);
+            final boolean smartBatteryOn = Settings.Global.getInt(contentResolver,
+                    Settings.Global.APP_STANDBY_ENABLED, ON) == ON;
+            final String packageName = batteryUtils.getPackageName(uid);
+
+            if (anomalyType == StatsManagerConfig.AnomalyType.EXCESSIVE_BG) {
+                // TODO(b/72385333): check battery percentage draining in batterystats
+                if (batteryUtils.isLegacyApp(packageName) && batteryUtils.isAppHeavilyUsed(
+                        batteryStatsHelper, userManager, uid,
+                        policy.excessiveBgDrainPercentage)) {
+                    Log.e(TAG, "Excessive detected uid=" + uid);
+                    batteryUtils.setForceAppStandby(uid, packageName,
+                            AppOpsManager.MODE_IGNORED);
+                    databaseManager.insertAnomaly(packageName, anomalyType,
+                            smartBatteryOn
+                                    ? AnomalyDatabaseHelper.State.AUTO_HANDLED
+                                    : AnomalyDatabaseHelper.State.NEW,
+                            timeMs);
+                }
+            } else {
+                databaseManager.insertAnomaly(packageName, anomalyType,
+                        AnomalyDatabaseHelper.State.NEW, timeMs);
+            }
+        } catch (NullPointerException | IndexOutOfBoundsException e) {
+            Log.e(TAG, "Parse stats dimensions value error.", e);
+        }
+    }
+
+    /**
+     * Extract the uid from {@link StatsDimensionsValue}
+     *
+     * The uid dimension has the format: 1:<int> inside the tuple list. Here are some examples:
+     * 1. Excessive bg anomaly: 27:{1:10089|}
+     * 2. Wakeup alarm anomaly: 35:{1:{1:{1:10013|}|}|}
+     * 3. Bluetooth anomaly:    3:{1:{1:{1:10140|}|}|}
+     */
+    @VisibleForTesting
+    final int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) {
+        //TODO(b/73172999): Add robo test for this method
+        if (statsDimensionsValue == null) {
+            return UID_NULL;
+        }
+        if (statsDimensionsValue.isValueType(INT_VALUE_TYPE)
+                && statsDimensionsValue.getField() == STATSD_UID_FILED) {
+            // Find out the real uid
+            return statsDimensionsValue.getIntValue();
+        }
+        if (statsDimensionsValue.isValueType(TUPLE_VALUE_TYPE)) {
+            final List<StatsDimensionsValue> values = statsDimensionsValue.getTupleValueList();
+            for (int i = 0, size = values.size(); i < size; i++) {
+                int uid = extractUidFromStatsDimensionsValue(values.get(i));
+                if (uid != UID_NULL) {
+                    return uid;
+                }
+            }
+        }
+
+        return UID_NULL;
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java
new file mode 100644
index 0000000..0a24b00
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import android.app.StatsManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+/**
+ * Receive the anomaly info from {@link StatsManager}
+ */
+public class AnomalyDetectionReceiver extends BroadcastReceiver {
+    private static final String TAG = "SettingsAnomalyReceiver";
+
+    public static final String KEY_ANOMALY_TIMESTAMP = "key_anomaly_timestamp";
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        final long configUid = intent.getLongExtra(StatsManager.EXTRA_STATS_CONFIG_UID, -1);
+        final long configKey = intent.getLongExtra(StatsManager.EXTRA_STATS_CONFIG_KEY, -1);
+        final long subscriptionId = intent.getLongExtra(StatsManager.EXTRA_STATS_SUBSCRIPTION_ID,
+                -1);
+        Log.i(TAG, "Anomaly intent received.  configUid = " + configUid + " configKey = "
+                + configKey + " subscriptionId = " + subscriptionId);
+
+        final Bundle bundle = intent.getExtras();
+        bundle.putLong(KEY_ANOMALY_TIMESTAMP, System.currentTimeMillis());
+
+        AnomalyDetectionJobService.scheduleAnomalyDetection(context, intent);
+        AnomalyCleanUpJobService.scheduleCleanUp(context);
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
index 87c2488..935d493 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
@@ -60,18 +60,19 @@
 
     /**
      * Insert an anomaly log to database.
-     *
-     * @param packageName the package name of the app
-     * @param type        the type of the anomaly
-     * @param timestampMs the time when it is happened
+     * @param packageName   the package name of the app
+     * @param type          the type of the anomaly
+     * @param anomalyState  the state of the anomaly
+     * @param timestampMs   the time when it is happened
      */
-    public synchronized void insertAnomaly(String packageName, int type, long timestampMs) {
+    public synchronized void insertAnomaly(String packageName, int type, int anomalyState,
+            long timestampMs) {
         try (SQLiteDatabase db = mDatabaseHelper.getWritableDatabase()) {
             ContentValues values = new ContentValues();
             values.put(PACKAGE_NAME, packageName);
             values.put(ANOMALY_TYPE, type);
+            values.put(ANOMALY_STATE, anomalyState);
             values.put(TIME_STAMP_MS, timestampMs);
-            values.put(ANOMALY_STATE, AnomalyDatabaseHelper.State.NEW);
             db.insert(TABLE_ANOMALY, null, values);
         }
     }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
index d93b589..0c9c8a9 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java
@@ -29,6 +29,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
+import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController.BatteryTipListener;
 import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
@@ -141,7 +142,8 @@
             return;
         }
         final BatteryTipAction action = BatteryTipUtils.getActionForBatteryTip(mBatteryTip,
-                (SettingsActivity) getActivity(), this);
+                (SettingsActivity) getActivity(),
+                (InstrumentedPreferenceFragment) getTargetFragment());
         if (action != null) {
             action.handlePositiveAction();
         }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
index a580db1..fcdbb3a 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.provider.Settings;
 import android.support.annotation.VisibleForTesting;
-import android.text.format.DateUtils;
 import android.util.KeyValueListParser;
 import android.util.Log;
 
@@ -44,6 +43,8 @@
     private static final String KEY_REDUCED_BATTERY_PERCENT = "reduced_battery_percent";
     private static final String KEY_LOW_BATTERY_ENABLED = "low_battery_enabled";
     private static final String KEY_LOW_BATTERY_HOUR = "low_battery_hour";
+    private static final String KEY_DATA_HISTORY_RETAIN_HOUR = "data_history_retain_hour";
+    private static final String KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE = "excessive_bg_drain_percentage";
 
     /**
      * {@code true} if general battery tip is enabled
@@ -143,6 +144,24 @@
      */
     public final int lowBatteryHour;
 
+    /**
+     * TTL hour for anomaly data stored in database
+     *
+     * @see Settings.Global#BATTERY_TIP_CONSTANTS
+     * @see #KEY_DATA_HISTORY_RETAIN_HOUR
+     */
+    public final int dataHistoryRetainHour;
+
+    /**
+     * Battery drain percentage threshold for excessive background anomaly(i.e. 10%)
+     *
+     * This is an additional check for excessive background, to check whether battery drain
+     * for an app is larger than x%
+     * @see Settings.Global#BATTERY_TIP_CONSTANTS
+     * @see #KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE
+     */
+    public final int excessiveBgDrainPercentage;
+
     private final KeyValueListParser mParser;
 
     public BatteryTipPolicy(Context context) {
@@ -174,6 +193,8 @@
         reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50);
         lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, false);
         lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 16);
+        dataHistoryRetainHour = mParser.getInt(KEY_DATA_HISTORY_RETAIN_HOUR, 72);
+        excessiveBgDrainPercentage = mParser.getInt(KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE, 10);
     }
 
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
index 9ab4c51..db273c0 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -25,6 +25,7 @@
 
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
@@ -48,14 +49,14 @@
     PreferenceGroup mPreferenceGroup;
     @VisibleForTesting
     Context mPrefContext;
-    PreferenceFragment mFragment;
+    InstrumentedPreferenceFragment mFragment;
 
     public BatteryTipPreferenceController(Context context, String preferenceKey) {
         this(context, preferenceKey, null, null, null);
     }
 
     public BatteryTipPreferenceController(Context context, String preferenceKey,
-            SettingsActivity settingsActivity, PreferenceFragment fragment,
+            SettingsActivity settingsActivity, InstrumentedPreferenceFragment fragment,
             BatteryTipListener batteryTipListener) {
         super(context, preferenceKey);
         mBatteryTipListener = batteryTipListener;
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
index 5eec322..5c0147a 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
@@ -17,11 +17,12 @@
 package com.android.settings.fuelgauge.batterytip;
 
 import android.app.Fragment;
-import android.content.Context;
 
 import com.android.settings.SettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.fuelgauge.batterytip.actions.BatterySaverAction;
 import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
+import com.android.settings.fuelgauge.batterytip.actions.OpenRestrictAppFragmentAction;
 import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
 import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction;
 import com.android.settings.fuelgauge.batterytip.actions.UnrestrictAppAction;
@@ -42,14 +43,19 @@
      * @return an action for {@code batteryTip}
      */
     public static BatteryTipAction getActionForBatteryTip(BatteryTip batteryTip,
-            SettingsActivity settingsActivity, Fragment fragment) {
+            SettingsActivity settingsActivity, InstrumentedPreferenceFragment fragment) {
         switch (batteryTip.getType()) {
             case BatteryTip.TipType.SMART_BATTERY_MANAGER:
                 return new SmartBatteryAction(settingsActivity, fragment);
             case BatteryTip.TipType.BATTERY_SAVER:
                 return new BatterySaverAction(settingsActivity);
             case BatteryTip.TipType.APP_RESTRICTION:
-                return new RestrictAppAction(settingsActivity, (RestrictAppTip) batteryTip);
+                if (batteryTip.getState() == BatteryTip.StateType.HANDLED) {
+                    return new OpenRestrictAppFragmentAction(settingsActivity, fragment,
+                            (RestrictAppTip) batteryTip);
+                } else {
+                    return new RestrictAppAction(settingsActivity, (RestrictAppTip) batteryTip);
+                }
             case BatteryTip.TipType.REMOVE_APP_RESTRICTION:
                 return new UnrestrictAppAction(settingsActivity, (UnrestrictAppTip) batteryTip);
             default:
diff --git a/src/com/android/settings/fuelgauge/batterytip/StatsManagerConfig.java b/src/com/android/settings/fuelgauge/batterytip/StatsManagerConfig.java
new file mode 100644
index 0000000..62eb7ee
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/StatsManagerConfig.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import android.support.annotation.IntDef;
+
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hashing;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class provides all the configs needed if we want to use {@link android.app.StatsManager}
+ */
+public class StatsManagerConfig {
+    /**
+     * The key that represents the anomaly config.
+     * This value is used in {@link android.app.StatsManager#addConfiguration(long, byte[])}
+     */
+    public static final long ANOMALY_CONFIG_KEY = 1;
+
+    /**
+     * The key that represents subscriber, which is settings app.
+     */
+    public static final long SUBSCRIBER_ID = 1;
+
+    private static final Map<Long, Integer> ANOMALY_TYPE;
+
+    private static final HashFunction HASH_FUNCTION = Hashing.sha256();
+
+    static {
+        ANOMALY_TYPE = new HashMap<>();
+        ANOMALY_TYPE.put(hash("SUBSCRIPTION:SETTINGS_EXCESSIVE_BACKGROUND_SERVICE"),
+                AnomalyType.EXCESSIVE_BG);
+        ANOMALY_TYPE.put(hash("SUBSCRIPTION:SETTINGS_LONG_UNOPTIMIZED_BLE_SCAN"),
+                AnomalyType.BLUETOOTH_SCAN);
+        ANOMALY_TYPE.put(hash("SUBSCRIPTION:SETTINGS_EXCESSIVE_WAKEUPS_IN_BACKGROUND"),
+                AnomalyType.WAKEUP_ALARM);
+        ANOMALY_TYPE.put(hash("SUBSCRIPTION:SETTINGS_EXCESSIVE_WAKELOCK_ALL_SCREEN_OFF"),
+                AnomalyType.WAKE_LOCK);
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({AnomalyType.NULL,
+            AnomalyType.WAKE_LOCK,
+            AnomalyType.WAKEUP_ALARM,
+            AnomalyType.BLUETOOTH_SCAN,
+            AnomalyType.EXCESSIVE_BG})
+    public @interface AnomalyType {
+        int NULL = -1;
+        int WAKE_LOCK = 0;
+        int WAKEUP_ALARM = 1;
+        int BLUETOOTH_SCAN = 2;
+        int EXCESSIVE_BG = 3;
+    }
+
+    public static int getAnomalyTypeFromSubscriptionId(long subscriptionId) {
+        return ANOMALY_TYPE.getOrDefault(subscriptionId, AnomalyType.NULL);
+    }
+
+    private static long hash(CharSequence value) {
+        return HASH_FUNCTION.hashUnencodedChars(value).asLong();
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/actions/OpenRestrictAppFragmentAction.java b/src/com/android/settings/fuelgauge/batterytip/actions/OpenRestrictAppFragmentAction.java
new file mode 100644
index 0000000..77bf861
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterytip/actions/OpenRestrictAppFragmentAction.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip.actions;
+
+import android.app.Fragment;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.RestrictedAppDetails;
+import com.android.settings.fuelgauge.batterytip.AppInfo;
+import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
+
+import java.util.List;
+
+/**
+ * Action to open the {@link com.android.settings.fuelgauge.RestrictedAppDetails}
+ */
+public class OpenRestrictAppFragmentAction extends BatteryTipAction {
+    private final RestrictAppTip mRestrictAppTip;
+    private final BatteryUtils mBatteryUtils;
+    private final SettingsActivity mSettingsActivity;
+    private final InstrumentedPreferenceFragment mFragment;
+
+    public OpenRestrictAppFragmentAction(SettingsActivity settingsActivity,
+            InstrumentedPreferenceFragment fragment, RestrictAppTip tip) {
+        super(fragment.getContext());
+        mSettingsActivity = settingsActivity;
+        mFragment = fragment;
+        mRestrictAppTip = tip;
+        mBatteryUtils = BatteryUtils.getInstance(mContext);
+    }
+
+    /**
+     * Handle the action when user clicks positive button
+     */
+    @Override
+    public void handlePositiveAction() {
+        final List<AppInfo> mAppInfos = mRestrictAppTip.getRestrictAppList();
+        RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mFragment,
+                mAppInfos);
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java
index f8d8fa1..7b8f624 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTip.java
@@ -62,13 +62,17 @@
 
     @Override
     public void updateState(BatteryTip tip) {
-        final EarlyWarningTip earlyHeadsUpTip = (EarlyWarningTip) tip;
-        if (mPowerSaveModeOn != earlyHeadsUpTip.mPowerSaveModeOn) {
-            mPowerSaveModeOn = earlyHeadsUpTip.mPowerSaveModeOn;
-            mState = earlyHeadsUpTip.mPowerSaveModeOn ? StateType.HANDLED : StateType.NEW;
-        } else if (mState != StateType.HANDLED) {
-            mState = earlyHeadsUpTip.getState();
+        final EarlyWarningTip earlyWarningTip = (EarlyWarningTip) tip;
+        if (earlyWarningTip.mState == StateType.NEW) {
+            // Display it if there is early warning
+            mState = StateType.NEW;
+        } else if (mState == StateType.NEW && earlyWarningTip.mState == StateType.INVISIBLE) {
+            // If powerSaveMode is really on, show it as handled, otherwise just dismiss it.
+            mState = earlyWarningTip.mPowerSaveModeOn ? StateType.HANDLED : StateType.INVISIBLE;
+        } else {
+            mState = earlyWarningTip.getState();
         }
+        mPowerSaveModeOn = earlyWarningTip.mPowerSaveModeOn;
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
index a40f292..4d286be 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/RestrictAppTip.java
@@ -35,12 +35,12 @@
     private List<AppInfo> mRestrictAppList;
 
     public RestrictAppTip(@StateType int state, List<AppInfo> restrictApps) {
-        super(TipType.APP_RESTRICTION, state, true /* showDialog */);
+        super(TipType.APP_RESTRICTION, state, state == StateType.NEW /* showDialog */);
         mRestrictAppList = restrictApps;
     }
 
     public RestrictAppTip(@StateType int state, AppInfo appInfo) {
-        super(TipType.APP_RESTRICTION, state, true /* showDialog */);
+        super(TipType.APP_RESTRICTION, state, state == StateType.NEW /* showDialog */);
         mRestrictAppList = new ArrayList<>();
         mRestrictAppList.add(appInfo);
     }
@@ -85,9 +85,11 @@
             // Display it if new anomaly comes
             mState = StateType.NEW;
             mRestrictAppList = ((RestrictAppTip) tip).mRestrictAppList;
+            mShowDialog = true;
         } else if (mState == StateType.NEW && tip.mState == StateType.INVISIBLE) {
             // If anomaly becomes invisible, show it as handled
             mState = StateType.HANDLED;
+            mShowDialog = false;
         }
     }
 
diff --git a/src/com/android/settings/gestures/AssistGestureSettings.java b/src/com/android/settings/gestures/AssistGestureSettings.java
index 8878f47..84f4ab2 100644
--- a/src/com/android/settings/gestures/AssistGestureSettings.java
+++ b/src/com/android/settings/gestures/AssistGestureSettings.java
@@ -51,7 +51,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -75,7 +75,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
index 0dca805..6b15923 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
@@ -66,7 +66,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -89,7 +89,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
index f2148b4..1f0ff03 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
@@ -73,7 +73,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -97,7 +97,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
index ac9de88..69517fe 100644
--- a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
+++ b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
@@ -66,7 +66,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -88,7 +88,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index 4d38b09..1efac5b 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -63,7 +63,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         if (mAmbientDisplayConfig == null) {
             mAmbientDisplayConfig = new AmbientDisplayConfiguration(context);
         }
@@ -100,7 +100,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null,
                             new AmbientDisplayConfiguration(context));
diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java
index 1762ba8..78ae9c4 100644
--- a/src/com/android/settings/gestures/PickupGestureSettings.java
+++ b/src/com/android/settings/gestures/PickupGestureSettings.java
@@ -73,7 +73,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -96,7 +96,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/gestures/SwipeToNotificationSettings.java b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
index c6f346a..9ddf0d4 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
@@ -67,7 +67,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -89,7 +89,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index cb60ef5..c69938c 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -21,7 +21,6 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.PackageManager;
-import android.os.Bundle;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.speech.tts.TtsEngines;
@@ -88,7 +87,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -188,7 +187,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null);
                 }
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 3e9c8af..153403a 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -100,7 +100,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, this, getLifecycle());
     }
 
@@ -178,7 +178,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context, null /* fragment */,
                             null /* lifecycle */);
diff --git a/src/com/android/settings/location/ScanningSettings.java b/src/com/android/settings/location/ScanningSettings.java
index 4585870..91359520 100644
--- a/src/com/android/settings/location/ScanningSettings.java
+++ b/src/com/android/settings/location/ScanningSettings.java
@@ -52,7 +52,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context);
     }
 
@@ -77,7 +77,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context);
                 }
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 74c1910..7d8ea18 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -90,7 +90,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(), mMetricsFeatureProvider, this
                 /* fragment */,
                 this /* mobilePlanHost */);
@@ -140,7 +140,7 @@
         switch (dialogId) {
             case MANAGE_MOBILE_PLAN_DIALOG_ID:
                 final MobilePlanPreferenceController controller =
-                        getPreferenceController(MobilePlanPreferenceController.class);
+                        use(MobilePlanPreferenceController.class);
                 return new AlertDialog.Builder(getActivity())
                         .setMessage(controller.getMobilePlanDialogMessage())
                         .setCancelable(false)
@@ -230,7 +230,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context, null /* lifecycle */,
                             null /* metricsFeatureProvider */, null /* fragment */,
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 78139dc..d334b92 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -110,7 +110,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mControllers = new ArrayList<>();
         mControllers.add(new HeaderPreferenceController(context, this));
         mControllers.add(new BlockPreferenceController(context, mImportanceListener, mBackend));
diff --git a/src/com/android/settings/notification/ChannelGroupNotificationSettings.java b/src/com/android/settings/notification/ChannelGroupNotificationSettings.java
index 707a559..d641df7 100644
--- a/src/com/android/settings/notification/ChannelGroupNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelGroupNotificationSettings.java
@@ -65,7 +65,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mControllers = new ArrayList<>();
         mControllers.add(new HeaderPreferenceController(context, this));
         mControllers.add(new BlockPreferenceController(context, mImportanceListener, mBackend));
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index 23451ec..a138429 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -75,7 +75,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mControllers = new ArrayList<>();
         mControllers.add(new HeaderPreferenceController(context, this));
         mControllers.add(new BlockPreferenceController(context, mImportanceListener, mBackend));
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index a3af471..0e47ed8 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -76,7 +76,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final Activity activity = getActivity();
         final Application app;
         if (activity != null) {
@@ -165,7 +165,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null, null, null);
                 }
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 032a5cb..239bb49 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -107,7 +107,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, this, mVolumeCallback, getLifecycle());
     }
 
@@ -255,7 +255,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* fragment */,
                             null /* callback */, null /* lifecycle */);
                 }
@@ -273,7 +274,7 @@
 
     void enableWorkSync() {
         final WorkSoundPreferenceController workSoundController =
-                getPreferenceController(WorkSoundPreferenceController.class);
+                use(WorkSoundPreferenceController.class);
         if (workSoundController != null) {
             workSoundController.enableWorkSync();
         }
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index 6ce13c1..1bb6fc6 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -37,7 +37,7 @@
     protected final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         ZenServiceListing serviceListing = new ZenServiceListing(getContext(), CONFIG);
         serviceListing.reloadApprovedServices();
         return buildPreferenceControllers(context, this, serviceListing, getLifecycle());
@@ -98,7 +98,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null, null, null);
                 }
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
index e2e85f3..2dd5ebd 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
@@ -32,7 +32,7 @@
 public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -97,7 +97,7 @@
                 }
 
             @Override
-            public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+            public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
                 return buildPreferenceControllers(context, null);
             }
         };
diff --git a/src/com/android/settings/notification/ZenModeEventRuleSettings.java b/src/com/android/settings/notification/ZenModeEventRuleSettings.java
index cf6d7b5..9263d3a 100644
--- a/src/com/android/settings/notification/ZenModeEventRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeEventRuleSettings.java
@@ -78,7 +78,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         mHeader = new ZenAutomaticRuleHeaderPreferenceController(context, this,
                 getLifecycle());
diff --git a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
index 9ef1128..4633f88 100644
--- a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
@@ -196,7 +196,7 @@
 
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         mHeader = new ZenAutomaticRuleHeaderPreferenceController(context, this,
                 getLifecycle());
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 2b48301..272bb41 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -50,7 +50,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(), getFragmentManager());
     }
 
@@ -230,7 +230,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context, null, null);
                 }
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 0df1a11..75a78f8 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -452,8 +452,15 @@
             final GlifLayout layout = (GlifLayout) inflater.inflate(
                     R.layout.choose_lock_pattern, container, false);
             layout.setHeaderText(getActivity().getTitle());
-            if (mForFingerprint) {
-                layout.setIcon(getActivity().getDrawable(R.drawable.ic_fingerprint_header));
+            if (getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
+                View iconView = layout.findViewById(R.id.suw_layout_icon);
+                if (iconView != null) {
+                    iconView.setVisibility(View.GONE);
+                }
+            } else {
+                if (mForFingerprint) {
+                    layout.setIcon(getActivity().getDrawable(R.drawable.ic_fingerprint_header));
+                }
             }
             return layout;
         }
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 4ae5839..864c5c2 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -57,11 +57,13 @@
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
-            Button optionsButton = (Button) view.findViewById(R.id.screen_lock_options);
-            optionsButton.setVisibility(View.VISIBLE);
-            optionsButton.setOnClickListener((btn) ->
-                    ChooseLockTypeDialogFragment.newInstance(mUserId)
-                            .show(getChildFragmentManager(), null));
+            if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
+                Button optionsButton = view.findViewById(R.id.screen_lock_options);
+                optionsButton.setVisibility(View.VISIBLE);
+                optionsButton.setOnClickListener((btn) ->
+                        ChooseLockTypeDialogFragment.newInstance(mUserId)
+                                .show(getChildFragmentManager(), null));
+            }
         }
 
         @Override
diff --git a/src/com/android/settings/print/PrintSettingPreferenceController.java b/src/com/android/settings/print/PrintSettingPreferenceController.java
index bb8a81e..1f85c4c 100644
--- a/src/com/android/settings/print/PrintSettingPreferenceController.java
+++ b/src/com/android/settings/print/PrintSettingPreferenceController.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.UserManager;
 import android.print.PrintJob;
 import android.print.PrintJobId;
 import android.print.PrintJobInfo;
@@ -29,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.wrapper.PrintManagerWrapper;
+import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -41,12 +43,14 @@
 public class PrintSettingPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart, OnStop, PrintManager.PrintJobStateChangeListener {
 
+    private static final String KEY_PRINTING_SETTINGS = "connected_device_printing";
+
     private final PackageManager mPackageManager;
     private PrintManagerWrapper mPrintManager;
     private Preference mPreference;
 
     public PrintSettingPreferenceController(Context context) {
-        super(context, "connected_device_printing" /* preferenceKey */);
+        super(context, KEY_PRINTING_SETTINGS);
         mPackageManager = context.getPackageManager();
         mPrintManager = new PrintManagerWrapper(context);
     }
@@ -84,6 +88,8 @@
             return;
         }
         preference.setSummary(getSummary());
+        ((RestrictedPreference) preference).checkRestrictionAndSetDisabled(
+                UserManager.DISALLOW_PRINTING);
     }
 
     @Override
diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java
index f75aa85..a2953b8 100644
--- a/src/com/android/settings/search/BaseSearchIndexProvider.java
+++ b/src/com/android/settings/search/BaseSearchIndexProvider.java
@@ -28,6 +28,7 @@
 import android.util.Xml;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerListHelper;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.PreferenceXmlParserUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -89,6 +90,33 @@
 
     @Override
     public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllersFromCode =
+                createPreferenceControllers(context);
+        final List<SearchIndexableResource> res = getXmlResourcesToIndex(context, true);
+        if (res == null || res.isEmpty()) {
+            return controllersFromCode;
+        }
+        List<BasePreferenceController> controllersFromXml = new ArrayList<>();
+        for (SearchIndexableResource sir : res) {
+            controllersFromXml.addAll(PreferenceControllerListHelper
+                    .getPreferenceControllersFromXml(context, sir.xmlResId));
+        }
+        controllersFromXml = PreferenceControllerListHelper.filterControllers(controllersFromXml,
+                controllersFromCode);
+        final List<AbstractPreferenceController> allControllers = new ArrayList<>();
+        if (controllersFromCode != null) {
+            allControllers.addAll(controllersFromCode);
+        }
+        allControllers.addAll(controllersFromXml);
+        return allControllers;
+    }
+
+    /**
+     * Creates a list of {@link AbstractPreferenceController} programatically.
+     * <p/>
+     * This list should create controllers that are not defined in xml as a Slice controller.
+     */
+    public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
diff --git a/src/com/android/settings/search/DatabaseIndexingUtils.java b/src/com/android/settings/search/DatabaseIndexingUtils.java
index c7c2320..eaf69b7 100644
--- a/src/com/android/settings/search/DatabaseIndexingUtils.java
+++ b/src/com/android/settings/search/DatabaseIndexingUtils.java
@@ -77,8 +77,7 @@
      * @return A map between {@link Uri}s and {@link PreferenceControllerMixin}s to get the payload
      * types for Settings.
      */
-    public static Map<String, ResultPayload> getPayloadKeyMap(
-            String className, Context context) {
+    public static Map<String, ResultPayload> getPayloadKeyMap(String className, Context context) {
         ArrayMap<String, ResultPayload> map = new ArrayMap<>();
         if (context == null) {
             return map;
@@ -96,7 +95,7 @@
         // SEARCH_INDEX_DATA_PROVIDER field
         final Indexable.SearchIndexProvider provider = getSearchIndexProvider(clazz);
 
-        List<AbstractPreferenceController> controllers =
+        final List<AbstractPreferenceController> controllers =
                 provider.getPreferenceControllers(context);
 
         if (controllers == null) {
diff --git a/src/com/android/settings/search/Indexable.java b/src/com/android/settings/search/Indexable.java
index 505f41b..e157fac 100644
--- a/src/com/android/settings/search/Indexable.java
+++ b/src/com/android/settings/search/Indexable.java
@@ -18,7 +18,7 @@
 
 import android.content.Context;
 import android.provider.SearchIndexableResource;
-import com.android.settings.core.PreferenceControllerMixin;
+
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.List;
@@ -31,7 +31,6 @@
  * {@link Indexable.SearchIndexProvider} interface.
  *
  * See {@link android.provider.SearchIndexableResource} and {@link SearchIndexableRaw}.
- *
  */
 public interface Indexable {
 
@@ -41,12 +40,11 @@
          *
          * See {@link android.provider.SearchIndexableResource}
          *
-         *
          * @param context the context.
          * @param enabled hint telling if the data needs to be considered into the search results
          *                or not.
          * @return a list of {@link android.provider.SearchIndexableResource} references.
-         *         Can be null.
+         * Can be null.
          */
         List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled);
 
@@ -69,7 +67,6 @@
         List<String> getNonIndexableKeys(Context context);
 
         /**
-         * @param context
          * @return a list of {@link AbstractPreferenceController} for ResultPayload data during
          * Indexing.
          */
diff --git a/src/com/android/settings/security/EncryptionAndCredential.java b/src/com/android/settings/security/EncryptionAndCredential.java
index 627cf3e..6dae9b7 100644
--- a/src/com/android/settings/security/EncryptionAndCredential.java
+++ b/src/com/android/settings/security/EncryptionAndCredential.java
@@ -53,7 +53,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -101,7 +101,7 @@
         }
 
         @Override
-        public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
             return buildPreferenceControllers(context, null /* lifecycle */);
         }
 
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index c400645..c438d81 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -76,7 +76,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         final Lifecycle lifecycle = getLifecycle();
         final LockScreenNotificationPreferenceController notificationController =
@@ -114,7 +114,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     final List<AbstractPreferenceController> controllers = new ArrayList<>();
                     controllers.add(new LockScreenNotificationPreferenceController(context));
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 313b483..e4d5ef5 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -77,7 +77,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(), this /* host*/);
     }
 
@@ -86,11 +86,11 @@
      */
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (getPreferenceController(TrustAgentListPreferenceController.class)
+        if (use(TrustAgentListPreferenceController.class)
                 .handleActivityResult(requestCode, resultCode)) {
             return;
         }
-        if (getPreferenceController(LockUnificationPreferenceController.class)
+        if (use(LockUnificationPreferenceController.class)
                 .handleActivityResult(requestCode, resultCode, data)) {
             return;
         }
@@ -98,16 +98,16 @@
     }
 
     void launchConfirmDeviceLockForUnification() {
-        getPreferenceController(LockUnificationPreferenceController.class)
+        use(LockUnificationPreferenceController.class)
                 .launchConfirmDeviceLockForUnification();
     }
 
     void unifyUncompliantLocks() {
-        getPreferenceController(LockUnificationPreferenceController.class).unifyUncompliantLocks();
+        use(LockUnificationPreferenceController.class).unifyUncompliantLocks();
     }
 
     void updateUnificationPreference() {
-        getPreferenceController(LockUnificationPreferenceController.class).updateState(null);
+        use(LockUnificationPreferenceController.class).updateState(null);
     }
 
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
@@ -164,7 +164,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context
+                public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
                     return buildPreferenceControllers(context, null /* lifecycle */,
                             null /* host*/);
diff --git a/src/com/android/settings/security/screenlock/ScreenLockSettings.java b/src/com/android/settings/security/screenlock/ScreenLockSettings.java
index 7a01aa2..2fa4124 100644
--- a/src/com/android/settings/security/screenlock/ScreenLockSettings.java
+++ b/src/com/android/settings/security/screenlock/ScreenLockSettings.java
@@ -60,7 +60,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         mLockPatternUtils = new LockPatternUtils(context);
         return buildPreferenceControllers(context, this /* parent */, getLifecycle(),
                 mLockPatternUtils);
@@ -68,7 +68,7 @@
 
     @Override
     public void onOwnerInfoUpdated() {
-        getPreferenceController(OwnerInfoPreferenceController.class).updateSummary();
+        use(OwnerInfoPreferenceController.class).updateSummary();
     }
 
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
@@ -99,7 +99,7 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
+                public List<AbstractPreferenceController> createPreferenceControllers(
                         Context context) {
                     return buildPreferenceControllers(context, null /* parent */,
                             null /* lifecycle */, new LockPatternUtils(context));
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index 433bdf3..d8ba991 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -35,6 +35,7 @@
 
 import androidx.app.slice.Slice;
 import androidx.app.slice.SliceProvider;
+import androidx.app.slice.builders.SliceAction;
 import androidx.app.slice.builders.ListBuilder;
 
 /**
@@ -173,8 +174,9 @@
                         .setTitle(getContext().getString(R.string.wifi_settings))
                         .setTitleItem(Icon.createWithResource(getContext(), R.drawable.wifi_signal))
                         .setSubtitle(state)
-                        .addToggle(getBroadcastIntent(ACTION_WIFI_CHANGED), finalWifiEnabled)
-                        .setContentIntent(getIntent(Intent.ACTION_MAIN)))
+                        .addEndItem(new SliceAction(getBroadcastIntent(ACTION_WIFI_CHANGED),
+                                null, finalWifiEnabled))
+                        .setPrimaryAction(new SliceAction(getIntent(Intent.ACTION_MAIN), null, null)))
                 .build();
     }
 
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index 11ff1c1..3df24ed 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -33,10 +33,8 @@
 import com.android.settings.search.DatabaseIndexingUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
 import androidx.app.slice.Slice;
+import androidx.app.slice.builders.SliceAction;
 import androidx.app.slice.builders.ListBuilder;
 import androidx.app.slice.builders.ListBuilder.RowBuilder;
 
@@ -66,7 +64,7 @@
                 .setTitle(sliceData.getTitle())
                 .setTitleItem(icon)
                 .setSubtitle(subtitleText)
-                .setContentIntent(contentIntent);
+                .setPrimaryAction(new SliceAction(contentIntent, null, null));
 
         // TODO (b/71640747) Respect setting availability.
 
@@ -87,53 +85,23 @@
     public static BasePreferenceController getPreferenceController(Context context,
             SliceData sliceData) {
         try {
-            return getController(context, sliceData, true /* isContextOnly */);
+            return BasePreferenceController.createInstance(context,
+                    sliceData.getPreferenceController());
         } catch (IllegalStateException e) {
             // Do nothing
             Log.d(TAG, "Could not find Context-only controller for preference controller: "
                     + sliceData.getKey());
         }
 
-        return getController(context, sliceData, false /* isContextOnly */);
-    }
-
-    /**
-     * Attempts to build a {@link BasePreferenceController} from {@param SliceData}.
-     *
-     * @param sliceData     Backing data for the Slice.
-     * @param contextOnlyCtor {@code true} when the constructor for the
-     *                      {@link BasePreferenceController}
-     *                      only takes a {@link Context}. Else the constructor will be ({@link
-     *                      Context}, {@code String}.
-     */
-    private static BasePreferenceController getController(Context context, SliceData sliceData,
-            boolean contextOnlyCtor) {
-        try {
-            Class<?> clazz = Class.forName(sliceData.getPreferenceController());
-            Constructor<?> preferenceConstructor;
-            Object[] params;
-
-            if (contextOnlyCtor) {
-                preferenceConstructor = clazz.getConstructor(Context.class);
-                params = new Object[]{context};
-            } else {
-                preferenceConstructor = clazz.getConstructor(Context.class, String.class);
-                params = new Object[]{context, sliceData.getKey()};
-            }
-
-            return (BasePreferenceController) preferenceConstructor.newInstance(params);
-        } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
-                IllegalArgumentException | InvocationTargetException | IllegalAccessException e) {
-            throw new IllegalStateException(
-                    "Invalid preference controller: " + sliceData.getPreferenceController(), e);
-        }
+        return BasePreferenceController.createInstance(context, sliceData.getPreferenceController(),
+                sliceData.getKey());
     }
 
     private static void addToggleAction(Context context, RowBuilder builder, boolean isChecked,
             String key) {
         PendingIntent actionIntent = getActionIntent(context,
                 SettingsSliceProvider.ACTION_TOGGLE_CHANGED, key);
-        builder.addToggle(actionIntent, isChecked);
+        builder.addEndItem(new SliceAction(actionIntent, null, isChecked));
     }
 
     private static PendingIntent getActionIntent(Context context, String action, String key) {
diff --git a/src/com/android/settings/system/ResetDashboardFragment.java b/src/com/android/settings/system/ResetDashboardFragment.java
index b7b6b77..03543cc 100644
--- a/src/com/android/settings/system/ResetDashboardFragment.java
+++ b/src/com/android/settings/system/ResetDashboardFragment.java
@@ -52,7 +52,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle());
     }
 
@@ -79,7 +79,8 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
             };
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index deabf54..1556659 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -26,12 +26,9 @@
 import com.android.settings.R;
 import com.android.settings.backup.BackupSettingsActivityPreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.gestures.GesturesSettingPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settingslib.core.AbstractPreferenceController;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -72,20 +69,6 @@
         return R.string.help_url_system_dashboard;
     }
 
-    @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
-        return buildPreferenceControllers(context);
-    }
-
-    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
-        final List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new SystemUpdatePreferenceController(context));
-        controllers.add(new AdditionalSystemUpdatePreferenceController(context));
-        controllers.add(new BackupSettingsActivityPreferenceController(context));
-        controllers.add(new GesturesSettingPreferenceController(context));
-        return controllers;
-    }
-
     private int getVisiblePreferenceCount(PreferenceGroup group) {
         int visibleCount = 0;
         for (int i = 0; i < group.getPreferenceCount(); i++) {
@@ -113,12 +96,6 @@
                 }
 
                 @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
-                        Context context) {
-                    return buildPreferenceControllers(context);
-                }
-
-                @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     List<String> keys = super.getNonIndexableKeys(context);
                     keys.add((new BackupSettingsActivityPreferenceController(
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index 0e9fc39..a5fef46 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -30,9 +30,9 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
 import com.android.settings.wrapper.UserPackageWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java
index b3e8746..069d461 100644
--- a/src/com/android/settings/widget/RadioButtonPickerFragment.java
+++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java
@@ -17,7 +17,6 @@
 package com.android.settings.widget;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -34,6 +33,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settingslib.widget.CandidateInfo;
 
 import java.util.List;
 import java.util.Map;
@@ -223,19 +223,4 @@
         return 0;
     }
 
-    public static abstract class CandidateInfo {
-
-        public final boolean enabled;
-
-        public CandidateInfo(boolean enabled) {
-            this.enabled = enabled;
-        }
-
-        public abstract CharSequence loadLabel();
-
-        public abstract Drawable loadIcon();
-
-        public abstract String getKey();
-    }
-
 }
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 3fd2171..b7e01c8 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -73,7 +73,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final NetworkScoreManagerWrapper networkScoreManagerWrapper =
                 new NetworkScoreManagerWrapper(context.getSystemService(NetworkScoreManager.class));
         mWifiWakeupPreferenceController = new WifiWakeupPreferenceController(context);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 9fbeabe..3972b85 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -353,32 +353,6 @@
     }
 
     /**
-     * Only update the AP list if there are not any APs currently shown.
-     *
-     * <p>Thus forceUpdate will only be called during cold start or when toggling between wifi on
-     * and off. In other use cases, the previous APs will remain until the next update is received
-     * from {@link WifiTracker}.
-     */
-    private void conditionallyForceUpdateAPs() {
-        if (mAccessPointsPreferenceCategory.getPreferenceCount() > 0
-                && mAccessPointsPreferenceCategory.getPreference(0) instanceof
-                        AccessPointPreference) {
-            // Make sure we don't update due to callbacks initiated by sticky broadcasts in
-            // WifiTracker.
-            Log.d(TAG, "Did not force update APs due to existing APs displayed");
-            getView().removeCallbacks(mUpdateAccessPointsRunnable);
-            return;
-        }
-        setProgressBarVisible(true);
-        mWifiTracker.forceUpdate();
-        if (isVerboseLoggingEnabled()) {
-            Log.i(TAG, "WifiSettings force update APs: " + mWifiTracker.getAccessPoints());
-        }
-        getView().removeCallbacks(mUpdateAccessPointsRunnable);
-        updateAccessPointPreferences();
-    }
-
-    /**
      * @return new WifiEnabler or null (as overridden by WifiSettingsForSetupWizard)
      */
     private WifiEnabler createWifiEnabler() {
@@ -682,7 +656,7 @@
         final int wifiState = mWifiManager.getWifiState();
         switch (wifiState) {
             case WifiManager.WIFI_STATE_ENABLED:
-                conditionallyForceUpdateAPs();
+                updateAccessPointPreferences();
                 break;
 
             case WifiManager.WIFI_STATE_ENABLING:
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index 9a5430b..b2e56b9 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -124,7 +124,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
         mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index fa276d9..b8710c9 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -168,7 +168,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mPersistentCategoryController =
                 new P2pPersistentCategoryPreferenceController(context);
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index e9533b1..996c73c 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -125,7 +125,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         mSSIDPreferenceController = new WifiTetherSSIDPreferenceController(context, this);
         mPasswordPreferenceController = new WifiTetherPasswordPreferenceController(context, this);
@@ -174,11 +174,11 @@
     }
 
     private void updateDisplayWithNewConfig() {
-        getPreferenceController(WifiTetherSSIDPreferenceController.class)
+        use(WifiTetherSSIDPreferenceController.class)
                 .updateDisplay();
-        getPreferenceController(WifiTetherPasswordPreferenceController.class)
+        use(WifiTetherPasswordPreferenceController.class)
                 .updateDisplay();
-        getPreferenceController(WifiTetherApBandPreferenceController.class)
+        use(WifiTetherApBandPreferenceController.class)
                 .updateDisplay();
     }
 
diff --git a/src/com/android/settings/wrapper/UsbManagerWrapper.java b/src/com/android/settings/wrapper/UsbManagerWrapper.java
new file mode 100644
index 0000000..5626660
--- /dev/null
+++ b/src/com/android/settings/wrapper/UsbManagerWrapper.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2018 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.wrapper;
+
+import android.hardware.usb.UsbManager;
+
+public class UsbManagerWrapper {
+    private UsbManager mUsbManager;
+
+    public UsbManagerWrapper(UsbManager manager) {
+        mUsbManager = manager;
+    }
+
+    public long getCurrentFunctions() {
+        return mUsbManager.getCurrentFunctions();
+    }
+
+    public long usbFunctionsFromString(String str) {
+        return UsbManager.usbFunctionsFromString(str);
+    }
+}
diff --git a/src/com/android/settings/wrapper/UserManagerWrapper.java b/src/com/android/settings/wrapper/UserManagerWrapper.java
index 4b4d2f4..8c3a01d 100644
--- a/src/com/android/settings/wrapper/UserManagerWrapper.java
+++ b/src/com/android/settings/wrapper/UserManagerWrapper.java
@@ -17,6 +17,7 @@
 package com.android.settings.wrapper;
 
 import android.content.pm.UserInfo;
+import android.os.UserHandle;
 import android.os.UserManager;
 
 import java.util.List;
@@ -45,4 +46,22 @@
     public List<UserInfo> getProfiles(int userHandle) {
         return mUserManager.getProfiles(userHandle);
     }
+
+    public boolean isUsbFileTransferRestricted() {
+        return mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER);
+    }
+
+    public boolean isUsbTetheringRestricted() {
+        return mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING);
+    }
+
+    public boolean isUsbFileTransferRestrictedBySystem() {
+        return mUserManager.hasBaseUserRestriction(
+                UserManager.DISALLOW_USB_FILE_TRANSFER, UserHandle.of(UserHandle.myUserId()));
+    }
+
+    public boolean isUsbTetheringRestrictedBySystem() {
+        return mUserManager.hasBaseUserRestriction(
+                UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.of(UserHandle.myUserId()));
+    }
 }
diff --git a/tests/anomaly-tester/Android.mk b/tests/anomaly-tester/Android.mk
index ade37db..9a0a875 100644
--- a/tests/anomaly-tester/Android.mk
+++ b/tests/anomaly-tester/Android.mk
@@ -4,7 +4,7 @@
 LOCAL_MODULE_TAGS := tests
 LOCAL_CERTIFICATE := platform
 
-LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle
+LOCAL_JAVA_LIBRARIES := android.test.runner
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-support-test \
@@ -17,9 +17,10 @@
 LOCAL_PROGUARD_ENABLED := disabled
 
 LOCAL_PACKAGE_NAME := AnomalyTester
+LOCAL_PRIVATE_PLATFORM_APIS := true
 
 LOCAL_INSTRUMENTATION_FOR := Settings
 
 LOCAL_USE_AAPT2 := true
 
-include $(BUILD_PACKAGE)
\ No newline at end of file
+include $(BUILD_PACKAGE)
diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
index 666b224..948b14a 100644
--- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
+++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
@@ -1,2 +1 @@
 com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
-com.android.settings.search.indexing.FakeSettingsFragment
\ No newline at end of file
diff --git a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
index a71b040..da541e2 100644
--- a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
+++ b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
@@ -1 +1,5 @@
-com.android.settings.fuelgauge.PowerUsageSummary
\ No newline at end of file
+com.android.settings.datausage.DataUsageSummaryLegacy
+com.android.settings.fuelgauge.PowerUsageSummary
+com.android.settings.fuelgauge.PowerUsageAdvanced
+com.android.settings.search.indexing.FakeSettingsFragment
+com.android.settings.system.SystemDashboardFragment
\ No newline at end of file
diff --git a/tests/robotests/res/xml-mcc999/location_settings.xml b/tests/robotests/res/xml-mcc999/location_settings.xml
index de77bfa..5619c77 100644
--- a/tests/robotests/res/xml-mcc999/location_settings.xml
+++ b/tests/robotests/res/xml-mcc999/location_settings.xml
@@ -17,7 +17,8 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:key="fake_title_key"
-                  android:title="screen_title">
+                  android:title="screen_title"
+                  settings:controller="com.android.settings.slices.FakePreferenceController">
 
     <Preference
         android:key="key"
diff --git a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
index 6f34a2e..6274373 100644
--- a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
@@ -32,7 +32,7 @@
                 fragment.getPreferenceScreenResId());
         final List<String> preferenceKeys = new ArrayList<>();
 
-        for (AbstractPreferenceController controller : fragment.getPreferenceControllers(context)) {
+        for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
             preferenceKeys.add(controller.getPreferenceKey());
         }
         // Nightmode is currently hidden
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index c9efe8e..7d76444 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -24,6 +24,7 @@
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -33,7 +34,6 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.app.Activity;
-import android.app.Fragment;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -41,11 +41,11 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
-import android.os.Bundle;
 import android.provider.Settings;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.widget.CheckBox;
+import android.view.ViewTreeObserver;
+import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 
@@ -61,7 +61,6 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowAccountManager;
 import org.robolectric.shadows.ShadowActivity;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -77,8 +76,6 @@
     private static final String TEST_ACCOUNT_NAME = "test@example.com";
 
     @Mock
-    private MasterClear mMasterClear;
-    @Mock
     private ScrollView mScrollView;
     @Mock
     private LinearLayout mLinearLayout;
@@ -95,8 +92,8 @@
     @Mock
     private Intent mMockIntent;
 
+    private MasterClear mMasterClear;
     private ShadowActivity mShadowActivity;
-    private ShadowAccountManager mShadowAccountManager;
     private Activity mActivity;
     private View mContentView;
 
@@ -355,6 +352,7 @@
         assertEquals(TEST_CONFIRMATION_CLASS, actualIntent.getComponent().getClassName());
     }
 
+    @Test
     public void testShowAccountCredentialConfirmation() {
         // Finally mock out the startActivityForResultCall
         doNothing().when(mMasterClear)
@@ -371,6 +369,19 @@
         assertThat(mMasterClear.isValidRequestCode(0)).isFalse();
     }
 
+    @Test
+    public void testOnGlobalLayout_shouldNotRemoveListener() {
+        final ViewTreeObserver viewTreeObserver = mock(ViewTreeObserver.class);
+        mMasterClear.mScrollView = mScrollView;
+        mMasterClear.mInitiateButton = mock(Button.class);
+        doReturn(true).when(mMasterClear).hasReachedBottom(any());
+        when(mScrollView.getViewTreeObserver()).thenReturn(viewTreeObserver);
+
+        mMasterClear.onGlobalLayout();
+
+        verify(viewTreeObserver, never()).removeOnGlobalLayoutListener(mMasterClear);
+    }
+
     private void initScrollView(int height, int scrollY, int childBottom) {
         when(mScrollView.getHeight()).thenReturn(height);
         when(mScrollView.getScrollY()).thenReturn(scrollY);
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceFragmentTest.java
index f6a5a82..9729d66 100644
--- a/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationPreferenceFragmentTest.java
@@ -35,7 +35,7 @@
 import com.android.settings.accessibility.VibrationPreferenceFragment.VibrationIntensityCandidateInfo;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.widget.RadioButtonPickerFragment.CandidateInfo;
+import com.android.settingslib.widget.CandidateInfo;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
index 50cd979..99e662b 100644
--- a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
@@ -30,6 +30,8 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.os.Bundle;
+import android.os.UserHandle;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
 
@@ -116,12 +118,66 @@
         assertThat(mAppInfoWithHeader.mPackageRemovedCalled).isTrue();
     }
 
+    @Test
+    public void noExtraUserHandleInIntent_retrieveAppEntryWithMyUsedId()
+            throws PackageManager.NameNotFoundException {
+        final String packageName = "com.android.settings";
+
+        mAppInfoWithHeader.mIntent.setData(Uri.fromParts("package",
+                packageName, null));
+        final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
+        entry.info = new ApplicationInfo();
+        entry.info.packageName = packageName;
+
+        when(mAppInfoWithHeader.mState.getEntry(packageName,
+                UserHandle.myUserId())).thenReturn(entry);
+        when(mAppInfoWithHeader.mPm.getPackageInfoAsUser(entry.info.packageName,
+                PackageManager.MATCH_DISABLED_COMPONENTS |
+                        PackageManager.GET_SIGNING_CERTIFICATES |
+                        PackageManager.GET_PERMISSIONS, UserHandle.myUserId())).thenReturn(
+                mAppInfoWithHeader.mPackageInfo);
+
+        mAppInfoWithHeader.retrieveAppEntry();
+
+        assertThat(mAppInfoWithHeader.mUserId).isEqualTo(UserHandle.myUserId());
+        assertThat(mAppInfoWithHeader.mPackageInfo).isNotNull();
+        assertThat(mAppInfoWithHeader.mAppEntry).isNotNull();
+    }
+
+    @Test
+    public void extraUserHandleInIntent_retrieveAppEntryWithMyUsedId()
+            throws PackageManager.NameNotFoundException {
+        final int USER_ID = 1002;
+        final String packageName = "com.android.settings";
+
+        mAppInfoWithHeader.mIntent.putExtra(Intent.EXTRA_USER_HANDLE, new UserHandle(USER_ID));
+        mAppInfoWithHeader.mIntent.setData(Uri.fromParts("package",
+                packageName, null));
+        final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
+        entry.info = new ApplicationInfo();
+        entry.info.packageName = packageName;
+
+        when(mAppInfoWithHeader.mState.getEntry(packageName, USER_ID)).thenReturn(entry);
+        when(mAppInfoWithHeader.mPm.getPackageInfoAsUser(entry.info.packageName,
+                PackageManager.MATCH_DISABLED_COMPONENTS |
+                        PackageManager.GET_SIGNING_CERTIFICATES |
+                        PackageManager.GET_PERMISSIONS, USER_ID)).thenReturn(
+                mAppInfoWithHeader.mPackageInfo);
+
+        mAppInfoWithHeader.retrieveAppEntry();
+
+        assertThat(mAppInfoWithHeader.mUserId).isEqualTo(USER_ID);
+        assertThat(mAppInfoWithHeader.mPackageInfo).isNotNull();
+        assertThat(mAppInfoWithHeader.mAppEntry).isNotNull();
+    }
+
     public static class TestFragment extends AppInfoWithHeader {
 
         PreferenceManager mManager;
         PreferenceScreen mScreen;
         Context mShadowContext;
         boolean mPackageRemovedCalled;
+        Intent mIntent;
 
         public TestFragment() {
             mPm = mock(PackageManager.class);
@@ -129,6 +185,8 @@
             mScreen = mock(PreferenceScreen.class);
             mPackageInfo = new PackageInfo();
             mPackageInfo.applicationInfo = new ApplicationInfo();
+            mState = mock(ApplicationsState.class);
+            mIntent = new Intent();
             mShadowContext = ShadowApplication.getInstance().getApplicationContext();
             ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
                     (InstantAppDataProvider) (info -> false));
@@ -169,6 +227,8 @@
         protected void onPackageRemoved() {
             mPackageRemovedCalled = true;
         }
-    }
 
+        @Override
+        protected Intent getIntent() { return mIntent; }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
index 1abbed5..01bfda6 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
@@ -24,8 +24,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
-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.doReturn;
@@ -255,7 +253,7 @@
     public void getPreferenceControllers_noPackageInfo_shouldReturnNull() {
         doNothing().when(mFragment).retrieveAppEntry();
 
-        assertThat(mFragment.getPreferenceControllers(mShadowContext)).isNull();
+        assertThat(mFragment.createPreferenceControllers(mShadowContext)).isNull();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java
index a33a6b8..7ac112a 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.applications.appinfo;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Matchers.nullable;
 import static org.mockito.Mockito.verify;
@@ -27,6 +28,8 @@
 import android.content.Context;
 
 import android.view.Window;
+import android.view.WindowManager.LayoutParams;
+
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
@@ -37,9 +40,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
-import org.mockito.InOrder;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.mockito.Spy;
 import org.robolectric.annotation.Config;
@@ -55,6 +57,8 @@
     @Mock
     private Window mWindow;
 
+    private LayoutParams layoutParams;
+
     private FakeFeatureFactory mFeatureFactory;
 
     @Spy
@@ -65,6 +69,7 @@
         MockitoAnnotations.initMocks(this);
 
         mFeatureFactory = FakeFeatureFactory.setupForTest();
+        layoutParams = new LayoutParams();
     }
 
     @Test
@@ -86,13 +91,17 @@
     public void hideNonSystemOverlaysWhenResumed() {
         when(mFragment.getActivity()).thenReturn(mActivity);
         when(mActivity.getWindow()).thenReturn(mWindow);
+        when(mWindow.getAttributes()).thenReturn(layoutParams);
 
         mFragment.onResume();
+        verify(mWindow).addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+
         mFragment.onPause();
 
-        InOrder inOrder = Mockito.inOrder(mWindow);
-        inOrder.verify(mWindow).addFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        inOrder.verify(mWindow).clearFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        inOrder.verifyNoMoreInteractions();
+        // There's no Window.clearPrivateFlags() method, so the Window.attributes are updated.
+        ArgumentCaptor<LayoutParams> paramCaptor = ArgumentCaptor.forClass(LayoutParams.class);
+        verify(mWindow).setAttributes(paramCaptor.capture());
+        assertEquals(0,
+                paramCaptor.getValue().privateFlags & PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java
index eb8a082..24823fe 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java
@@ -18,28 +18,40 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.app.AlertDialog;
-import android.app.Fragment;
+import android.content.ComponentName;
 import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
+import android.widget.Button;
 
+import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.applications.LayoutPreference;
-import com.android.settings.applications.instantapps.InstantAppButtonsController;
-import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -54,27 +66,48 @@
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class InstantAppButtonsPreferenceControllerTest {
 
+    private static final String TEST_INSTALLER_PACKAGE_NAME = "com.installer";
+    private static final String TEST_INSTALLER_ACTIVITY_NAME = "com.installer.InstallerActivity";
+    private static final String TEST_AIA_PACKAGE_NAME = "test.aia.package";
+
     @Mock
     private PackageManager mPackageManager;
     @Mock
     private ApplicationInfo mAppInfo;
     @Mock
     private AppInfoDashboardFragment mFragment;
+    @Mock
+    private LayoutPreference mPreference;
 
     private Context mContext;
+    private PreferenceScreen mScreen;
+    private PreferenceManager mPreferenceManager;
+    private Button mLaunchButton;
+    private Button mInstallButton;
+    private Button mClearAppButton;
     private InstantAppButtonsPreferenceController mController;
-    private FakeFeatureFactory mFeatureFactory;
 
     @Before
     public void setUp() throws PackageManager.NameNotFoundException {
         MockitoAnnotations.initMocks(this);
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
         mContext = spy(RuntimeEnvironment.application);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
         final PackageInfo packageInfo = mock(PackageInfo.class);
         packageInfo.applicationInfo = mAppInfo;
         when(mFragment.getPackageInfo()).thenReturn(packageInfo);
-        mController =
-                spy(new InstantAppButtonsPreferenceController(mContext, mFragment, "Package1"));
+        mPreferenceManager = new PreferenceManager(mContext);
+        mScreen = mPreferenceManager.createPreferenceScreen(mContext);
+        when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
+        final View buttons = View.inflate(
+            RuntimeEnvironment.application, R.layout.instant_app_buttons, null /* parent */);
+        mLaunchButton = buttons.findViewById(R.id.launch);
+        mInstallButton = buttons.findViewById(R.id.install);
+        mClearAppButton = buttons.findViewById(R.id.clear_data);
+        mController = spy(new InstantAppButtonsPreferenceController(
+            mContext, mFragment, TEST_AIA_PACKAGE_NAME, null /* lifecycle */));
+        when(mPreference.getKey()).thenReturn("instant_app_buttons");
+        mScreen.addPreference(mPreference);
+        when(mPreference.findViewById(R.id.instant_app_button_container)).thenReturn(buttons);
     }
 
     @Test
@@ -94,39 +127,173 @@
     }
 
     @Test
-    public void displayPreference_shouldSetPreferenceTitle() {
-        final PreferenceScreen screen = mock(PreferenceScreen.class);
-        final LayoutPreference preference = mock(LayoutPreference.class);
-        when(screen.findPreference(mController.getPreferenceKey())).thenReturn(preference);
-        when(mController.getApplicationFeatureProvider())
-                .thenReturn(mFeatureFactory.applicationFeatureProvider);
-        final InstantAppButtonsController buttonsController =
-                mock(InstantAppButtonsController.class);
-        when(buttonsController.setPackageName(nullable(String.class)))
-                .thenReturn(buttonsController);
-        when(mFeatureFactory.applicationFeatureProvider.newInstantAppButtonsController(
-                nullable(Fragment.class), nullable(View.class),
-                nullable(InstantAppButtonsController.ShowDialogDelegate.class)))
-                .thenReturn(buttonsController);
+    public void onCreateOptionsMenu_noLaunchUri_shouldNotAddInstallInstantAppMenu() {
+        final Menu menu = mock(Menu.class);
+        when(menu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mock(MenuItem.class));
 
-        mController.displayPreference(screen);
+        mController.onCreateOptionsMenu(menu, null /* inflater */);
 
-        verify(buttonsController).setPackageName(nullable(String.class));
-        verify(buttonsController).show();
+        verify(menu, never()).add(anyInt(), eq(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU),
+            anyInt(), eq(R.string.install_text));
     }
 
     @Test
-    public void createDialog_shouldReturnDialogFromButtonController() {
-        final InstantAppButtonsController buttonsController =
-                mock(InstantAppButtonsController.class);
-        ReflectionHelpers.setField(
-                mController, "mInstantAppButtonsController", buttonsController);
-        final AlertDialog mockDialog = mock(AlertDialog.class);
-        when(buttonsController.createDialog(InstantAppButtonsController.DLG_CLEAR_APP))
-                .thenReturn(mockDialog);
+    public void onCreateOptionsMenu_hasLaunchUri_shouldAddForceStop() {
+        ReflectionHelpers.setField(mController, "mLaunchUri", "www.test.launch");
+        final Menu menu = mock(Menu.class);
+        when(menu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mock(MenuItem.class));
 
-        assertThat(mController.createDialog(InstantAppButtonsController.DLG_CLEAR_APP))
-                .isEqualTo(mockDialog);
+        mController.onCreateOptionsMenu(menu, null /* inflater */);
+
+        verify(menu).add(anyInt(), eq(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU),
+            anyInt(), eq(R.string.install_text));
+    }
+
+    @Test
+    public void onPrepareOptionsMenu_noAppStoreLink_shoulDisableInstallInstantAppMenu() {
+        ReflectionHelpers.setField(mController, "mLaunchUri", "www.test.launch");
+        final Menu menu = mock(Menu.class);
+        final MenuItem menuItem = mock(MenuItem.class);
+        when(menu.findItem(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU)).thenReturn(menuItem);
+
+        mController.onPrepareOptionsMenu(menu);
+
+        verify(menuItem).setEnabled(false);
+    }
+
+    @Test
+    public void onPrepareOptionsMenu_hasAppStoreLink_shoulNotDisableInstallInstantAppMenu() {
+        ReflectionHelpers.setField(mController, "mLaunchUri", "www.test.launch");
+        final ResolveInfo resolveInfo = mock(ResolveInfo.class);
+        final ActivityInfo activityInfo = mock(ActivityInfo.class);
+        resolveInfo.activityInfo = activityInfo;
+        activityInfo.packageName = TEST_INSTALLER_PACKAGE_NAME;
+        activityInfo.name = TEST_INSTALLER_ACTIVITY_NAME;
+        when(mPackageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
+        final Menu menu = mock(Menu.class);
+        final MenuItem menuItem = mock(MenuItem.class);
+        when(menu.findItem(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU)).thenReturn(menuItem);
+
+        mController.onPrepareOptionsMenu(menu);
+
+        verify(menuItem, never()).setEnabled(false);
+    }
+
+    @Test
+    public void onPrepareOptionsMenu_installMenuNotFound_shoulNotCrash() {
+        final Menu menu = mock(Menu.class);
+
+        mController.onPrepareOptionsMenu(menu);
+
+        // no crash
+    }
+
+    @Test
+    public void onOptionsItemSelected_shouldOpenAppStore() {
+        final ResolveInfo resolveInfo = mock(ResolveInfo.class);
+        final ActivityInfo activityInfo = mock(ActivityInfo.class);
+        resolveInfo.activityInfo = activityInfo;
+        activityInfo.packageName = TEST_INSTALLER_PACKAGE_NAME;
+        activityInfo.name = TEST_INSTALLER_ACTIVITY_NAME;
+        when(mPackageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
+        mController.displayPreference(mScreen);
+        final ComponentName componentName =
+            new ComponentName(TEST_INSTALLER_PACKAGE_NAME, TEST_INSTALLER_ACTIVITY_NAME);
+        final MenuItem menu = mock(MenuItem.class);
+        when(menu.getItemId()).thenReturn(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU);
+
+        mController.onOptionsItemSelected(menu);
+
+        verify(mFragment).startActivity(argThat(intent-> intent != null
+            && intent.getAction().equals(Intent.ACTION_SHOW_APP_INFO)
+            && intent.getComponent().equals(componentName)));
+    }
+
+    @Test
+    public void displayPreference_noLaunchUri_shouldShowHideLaunchButton() {
+        mController.displayPreference(mScreen);
+
+        assertThat(mLaunchButton.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void displayPreference_hasLaunchUri_shouldShowHideInstallButton() {
+        ReflectionHelpers.setField(mController, "mLaunchUri", "www.test.launch");
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mInstallButton.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void displayPreference_noAppStoreLink_shoulDisableInstallButton() {
+        mController.displayPreference(mScreen);
+
+        assertThat(mInstallButton.isEnabled()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_hasAppStoreLink_shoulSetClickListenerForInstallButton() {
+        final ResolveInfo resolveInfo = mock(ResolveInfo.class);
+        final ActivityInfo activityInfo = mock(ActivityInfo.class);
+        resolveInfo.activityInfo = activityInfo;
+        activityInfo.packageName = TEST_INSTALLER_PACKAGE_NAME;
+        activityInfo.name = TEST_INSTALLER_ACTIVITY_NAME;
+        when(mPackageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mInstallButton.hasOnClickListeners()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_shoulSetClickListenerForClearButton() {
+        mController.displayPreference(mScreen);
+
+        assertThat(mClearAppButton.hasOnClickListeners()).isTrue();
+    }
+
+    @Test
+    public void clickLaunchButton_shouldLaunchViewIntent() {
+        final String launchUri = "www.test.launch";
+        ReflectionHelpers.setField(mController, "mLaunchUri", launchUri);
+        mController.displayPreference(mScreen);
+
+        mLaunchButton.callOnClick();
+
+        verify(mFragment).startActivity(argThat(intent-> intent != null
+            && intent.getAction().equals(Intent.ACTION_VIEW)
+            && TextUtils.equals(intent.getDataString(), launchUri)));
+    }
+
+    @Test
+    public void clickInstallButton_shouldOpenAppStore() {
+        final ResolveInfo resolveInfo = mock(ResolveInfo.class);
+        final ActivityInfo activityInfo = mock(ActivityInfo.class);
+        resolveInfo.activityInfo = activityInfo;
+        activityInfo.packageName = TEST_INSTALLER_PACKAGE_NAME;
+        activityInfo.name = TEST_INSTALLER_ACTIVITY_NAME;
+        when(mPackageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
+        mController.displayPreference(mScreen);
+        final ComponentName componentName =
+            new ComponentName(TEST_INSTALLER_PACKAGE_NAME, TEST_INSTALLER_ACTIVITY_NAME);
+
+        mInstallButton.callOnClick();
+
+        verify(mFragment).startActivity(argThat(intent-> intent != null
+            && intent.getAction().equals(Intent.ACTION_SHOW_APP_INFO)
+            && intent.getComponent().equals(componentName)));
+    }
+
+    @Test
+    public void onClick_shouldDeleteApp() {
+        PackageManagerWrapper packageManagerWrapper = mock(PackageManagerWrapper.class);
+        ReflectionHelpers.setField(mController, "mPackageManagerWrapper", packageManagerWrapper);
+
+        mController.onClick(mock(DialogInterface.class), DialogInterface.BUTTON_POSITIVE);
+
+        verify(packageManagerWrapper)
+            .deletePackageAsUser(eq(TEST_AIA_PACKAGE_NAME), any(), anyInt(),anyInt());
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java
index cf37b36..9322966 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java
@@ -24,7 +24,6 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.os.UserManager;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
@@ -44,8 +43,6 @@
 public class PictureInPictureDetailPreferenceControllerTest {
 
     @Mock
-    private UserManager mUserManager;
-    @Mock
     private AppInfoDashboardFragment mFragment;
     @Mock
     private Preference mPreference;
@@ -57,7 +54,6 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
 
         mController = spy(
                 new PictureInPictureDetailPreferenceController(mContext, mFragment, "Package1"));
@@ -66,15 +62,7 @@
     }
 
     @Test
-    public void getAvailabilityStatus_managedProfile_shouldReturnDisabled() {
-        when(mUserManager.isManagedProfile()).thenReturn(true);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(mController.DISABLED_FOR_USER);
-    }
-
-    @Test
     public void getAvailabilityStatus_noPictureInPictureActivities_shouldReturnDisabled() {
-        when(mUserManager.isManagedProfile()).thenReturn(false);
         doReturn(false).when(mController).hasPictureInPictureActivites();
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(mController.DISABLED_FOR_USER);
@@ -82,7 +70,6 @@
 
     @Test
     public void getAvailabilityStatus_hasPictureInPictureActivities_shouldReturnAvailable() {
-        when(mUserManager.isManagedProfile()).thenReturn(false);
         doReturn(true).when(mController).hasPictureInPictureActivites();
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(mController.AVAILABLE);
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
index 2ec9c96..c93dbd1 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java
@@ -35,6 +35,7 @@
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -76,6 +77,7 @@
         when(mUserManager.getProfiles(anyInt())).thenReturn(mUsers);
     }
 
+    @Ignore("b/73892555")
     @Test
     public void testCollectPipApps() {
         PackageInfo primaryP1 = createPackage("Calculator", true);
@@ -89,10 +91,11 @@
         mProfileUserPackages.add(profileP2);
 
         ArrayList<Pair<ApplicationInfo, Integer>> apps = mFragment.collectPipApps(PRIMARY_USER_ID);
-        assertThat(containsPackages(apps, primaryP1, profileP2));
-        assertThat(!containsPackages(apps, primaryP2, profileP1));
+        assertThat(containsPackages(apps, primaryP1, profileP2)).isTrue();
+        assertThat(containsPackages(apps, primaryP2, profileP1)).isFalse();
     }
 
+    @Ignore("b/73892683")
     @Test
     public void testAppSort() {
         PackageInfo primaryP1 = createPackage("Android", true);
@@ -111,7 +114,7 @@
 
         ArrayList<Pair<ApplicationInfo, Integer>> apps = mFragment.collectPipApps(PRIMARY_USER_ID);
         Collections.sort(apps, new PictureInPictureSettings.AppComparator(null));
-        assertThat(isOrdered(apps, primaryP1, profileP1, primaryP2, profileP2));
+        assertThat(isOrdered(apps, primaryP1, profileP1, primaryP2, profileP2)).isTrue();
     }
 
     private boolean containsPackages(ArrayList<Pair<ApplicationInfo, Integer>> apps,
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
index eeaba21..fc1adef 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
@@ -40,9 +40,9 @@
 
 import com.android.internal.app.AssistUtils;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
deleted file mode 100644
index 8d28e05..0000000
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.defaultapps;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class DefaultAppInfoTest {
-
-    @Mock
-    private PackageItemInfo mPackageItemInfo;
-    @Mock
-    private ComponentName mComponentName;
-    @Mock
-    private PackageManager mPackageManager;
-    @Mock
-    private PackageManagerWrapper mPackageManagerWrapper;
-    @Mock
-    private ApplicationInfo mApplicationInfo;
-    @Mock
-    private Drawable mIcon;
-
-    private Context mContext;
-    private DefaultAppInfo mInfo;
-
-    @Before
-    public void setUp() throws PackageManager.NameNotFoundException {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        doReturn(mPackageManager).when(mContext).getPackageManager();
-        when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager);
-        when(mPackageManagerWrapper.getApplicationInfoAsUser(anyString(), anyInt(),
-                anyInt())).thenReturn(mApplicationInfo);
-        when(mPackageManager.loadUnbadgedItemIcon(mPackageItemInfo, mApplicationInfo)).thenReturn(
-                mIcon);
-    }
-
-    @Test
-    public void initInfoWithActivityInfo_shouldLoadInfo() {
-        mPackageItemInfo.packageName = "test";
-        mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, mPackageItemInfo);
-        mInfo.loadLabel();
-        Drawable icon = mInfo.loadIcon();
-
-        assertThat(mInfo.getKey()).isEqualTo(mPackageItemInfo.packageName);
-        assertThat(icon).isNotNull();
-        verify(mPackageItemInfo).loadLabel(mPackageManager);
-    }
-
-    @Test
-    public void initInfoWithComponent_shouldLoadInfo() {
-        when(mComponentName.getPackageName()).thenReturn("com.android.settings");
-
-        mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, 0 /* uid */, mComponentName);
-        mInfo.getKey();
-
-        verify(mComponentName).flattenToString();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
index 2cbe19f..26802ee 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
@@ -37,6 +37,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.RadioButtonPreference;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
index a02a2de..7a82f30 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
@@ -28,6 +28,7 @@
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.TwoTargetPreference;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
index 11323c4..5b8807c 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
@@ -29,6 +29,7 @@
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
index 4e8a79e..4adebe0 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
@@ -27,6 +27,7 @@
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.wrapper.AutofillManagerWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
index eeed152..0aab5fb 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
@@ -31,6 +31,7 @@
 
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/applications/instantapps/InstantAppButtonsControllerTest.java b/tests/robotests/src/com/android/settings/applications/instantapps/InstantAppButtonsControllerTest.java
deleted file mode 100644
index f85d43a..0000000
--- a/tests/robotests/src/com/android/settings/applications/instantapps/InstantAppButtonsControllerTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications.instantapps;
-
-import static com.android.settings.applications.instantapps.InstantAppButtonsController
-        .ShowDialogDelegate;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-import android.annotation.SuppressLint;
-import android.app.Fragment;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.view.View;
-import android.widget.Button;
-
-import com.android.settings.R;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
-
-/** Tests for the InstantAppButtonsController. */
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = 23)
-public class InstantAppButtonsControllerTest {
-
-    private static final String TEST_INSTALLER_PACKAGE_NAME = "com.installer";
-    private static final String TEST_INSTALLER_ACTIVITY_NAME = "com.installer.InstallerActivity";
-    private static final String TEST_AIA_PACKAGE_NAME = "test.aia.package";
-    private static ComponentName sTestInstallerComponent;
-
-    @BeforeClass
-    public static void beforeClass() {
-        sTestInstallerComponent =
-                new ComponentName(
-                        TEST_INSTALLER_PACKAGE_NAME,
-                        TEST_INSTALLER_ACTIVITY_NAME);
-    }
-
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    Context mockContext;
-    @Mock
-    PackageManager mockPackageManager;
-    @Mock
-    PackageManagerWrapper mockPackageManagerWrapper;
-    @Mock
-    View mockView;
-    @Mock
-    ShowDialogDelegate mockShowDialogDelegate;
-    @Mock
-    Button mockInstallButton;
-    @Mock
-    Button mockClearButton;
-    @Mock
-    MetricsFeatureProvider mockMetricsFeatureProvider;
-    @Mock
-    ResolveInfo mockResolveInfo;
-    @Mock
-    ActivityInfo mockActivityInfo;
-
-    private PackageManager stubPackageManager;
-
-    private FakeFeatureFactory fakeFeatureFactory;
-    private TestFragment testFragment;
-    private InstantAppButtonsController controller;
-
-
-    private View.OnClickListener receivedListener;
-
-    @Before
-    public void init() {
-        MockitoAnnotations.initMocks(this);
-        testFragment = new TestFragment();
-        when(mockView.findViewById(R.id.install)).thenReturn(mockInstallButton);
-        when(mockView.findViewById(R.id.clear_data)).thenReturn(mockClearButton);
-        mockResolveInfo.activityInfo = mockActivityInfo;
-        mockActivityInfo.packageName = TEST_INSTALLER_PACKAGE_NAME;
-        mockActivityInfo.name = TEST_INSTALLER_ACTIVITY_NAME;
-        when(mockContext.getPackageManager()).thenReturn(mockPackageManager);
-        when(mockPackageManager.resolveActivity(any(), anyInt())).thenReturn(mockResolveInfo);
-        controller = new InstantAppButtonsController(
-                mockContext, testFragment, mockView, mockShowDialogDelegate);
-        controller.setPackageName(TEST_AIA_PACKAGE_NAME);
-        ReflectionHelpers.setField(
-                controller, "mPackageManagerWrapper", mockPackageManagerWrapper);
-        FakeFeatureFactory.setupForTest();
-    }
-
-    @Test
-    public void testInstallListenerTriggersInstall() {
-        doAnswer(invocation -> {
-            receivedListener = (View.OnClickListener) invocation.getArguments()[0];
-            return null;
-        }).when(mockInstallButton).setOnClickListener(any());
-        controller.bindButtons();
-
-        assertThat(receivedListener).isNotNull();
-        receivedListener.onClick(mockInstallButton);
-        assertThat(testFragment.getStartActivityIntent()).isNotNull();
-        assertThat(testFragment.getStartActivityIntent().getComponent())
-                .isEqualTo(sTestInstallerComponent);
-    }
-
-    @Test
-    public void testClearListenerShowsDialog() {
-        doAnswer(invocation -> {
-            receivedListener = (View.OnClickListener) invocation.getArguments()[0];
-            return null;
-        }).when(mockClearButton).setOnClickListener(any());
-        controller.bindButtons();
-        assertThat(receivedListener).isNotNull();
-        receivedListener.onClick(mockClearButton);
-        verify(mockShowDialogDelegate).showDialog(InstantAppButtonsController.DLG_CLEAR_APP);
-    }
-
-    @Test
-    public void testDialogInterfaceOnClick_positiveClearsApp() {
-        controller.onClick(mock(DialogInterface.class), DialogInterface.BUTTON_POSITIVE);
-        verify(mockPackageManagerWrapper)
-                .deletePackageAsUser(eq(TEST_AIA_PACKAGE_NAME), any(), anyInt(),anyInt());
-    }
-
-    @Test
-    public void testDialogInterfaceOnClick_nonPositiveDoesNothing() {
-        controller.onClick(mock(DialogInterface.class), DialogInterface.BUTTON_NEGATIVE);
-        controller.onClick(mock(DialogInterface.class), DialogInterface.BUTTON_NEUTRAL);
-        verifyZeroInteractions(mockPackageManagerWrapper);
-    }
-    @SuppressLint("ValidFragment")
-    private class TestFragment extends Fragment {
-
-        private Intent startActivityIntent;
-
-        public Intent getStartActivityIntent() {
-            return startActivityIntent;
-        }
-
-        @Override
-        public void startActivity(Intent intent) {
-            startActivityIntent = intent;
-        }
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
index 982fb56..7e19d57 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
@@ -47,7 +47,8 @@
                 R.string.filter_all_apps);
 
         // Same instance, should be same
-        assertThat(item).isEqualTo(item);
+        // (Use isTrue as isEqualsTo will prioritize reference equality!)
+        assertThat(item.equals(item)).isTrue();
 
         // Same content, should be same
         assertThat(item).isEqualTo(item2);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
index 80b4810..a617fc4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
@@ -155,7 +155,8 @@
 
         // check that showSoftInput was called to make input method appear when the dialog was shown
         assertThat(view.isFocused()).isTrue();
-        assertThat(imm.isActive());
+        // TODO(b/73892004): Figure out why this is failing.
+        // assertThat(imm.isActive()).isTrue();
         verify(imm).showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
     }
 
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
index 49efecb..94c6add 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
@@ -208,7 +208,7 @@
         }
 
         @Override
-        protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
             return null;
         }
     }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragmentTest.java
index 9f1409c..5c1c132 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragmentTest.java
@@ -16,10 +16,8 @@
 package com.android.settings.connecteddevice;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.TestConfig;
@@ -30,8 +28,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
@@ -41,13 +37,6 @@
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AdvancedConnectedDeviceDashboardFragmentTest {
-
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-
-    @Mock
-    private PackageManager mManager;
-
     private AdvancedConnectedDeviceDashboardFragment mFragment;
 
     @Before
@@ -55,7 +44,6 @@
         MockitoAnnotations.initMocks(this);
 
         mFragment = new AdvancedConnectedDeviceDashboardFragment();
-        when(mContext.getApplicationContext().getPackageManager()).thenReturn(mManager);
     }
 
     @Test
@@ -66,7 +54,8 @@
     @Test
     public void testSearchIndexProvider_shouldIndexResource() {
         final List<SearchIndexableResource> indexRes =
-                mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
+                mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
+                        RuntimeEnvironment.application,
                         true /* enabled */);
 
         assertThat(indexRes).isNotNull();
@@ -81,9 +70,8 @@
     @Test
     public void testNonIndexableKeys_existInXmlLayout() {
         final Context context = RuntimeEnvironment.application;
-        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
         final List<String> niks = ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(mContext);
+                .getNonIndexableKeys(context);
         final int xmlId = (new ConnectedDeviceDashboardFragment()).getPreferenceScreenResId();
 
         final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
deleted file mode 100644
index 5aa3933..0000000
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2016 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.connecteddevice;
-
-import static android.content.Context.NFC_SERVICE;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.nfc.NfcAdapter;
-import android.nfc.NfcManager;
-import android.provider.SearchIndexableResource;
-
-import com.android.settings.R;
-import com.android.settings.TestConfig;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.nfc.NfcPreferenceController;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.XmlTestUtils;
-import com.android.settingslib.drawer.CategoryKey;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-import java.util.List;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ConnectedDeviceDashboardFragment2Test {
-
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    Context mContext;
-
-    @Mock
-    private PackageManager mManager;
-
-    private FakeFeatureFactory mFeatureFactory;
-    private ConnectedDeviceDashboardFragmentOld mFragment;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
-
-        mFragment = new ConnectedDeviceDashboardFragmentOld();
-        when(mContext.getPackageManager()).thenReturn(mManager);
-    }
-
-    @Test
-    public void testSearchIndexProvider_shouldIndexResource() {
-        final List<SearchIndexableResource> indexRes =
-                mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
-                        true /* enabled */);
-
-        assertThat(indexRes).isNotNull();
-        assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
-    }
-
-    @Test
-    public void testSearchIndexProvider_NoNfc_KeyAdded() {
-        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
-        final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(
-                mContext);
-
-        assertThat(keys).isNotNull();
-        assertThat(keys).contains(NfcPreferenceController.KEY_TOGGLE_NFC);
-        assertThat(keys).contains(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
-    }
-
-    @Test
-    public void testSearchIndexProvider_NFC_KeyNotAdded() {
-        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
-        final List<String> keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(
-                mContext);
-
-        assertThat(keys).isNotNull();
-        assertThat(keys).doesNotContain(NfcPreferenceController.KEY_TOGGLE_NFC);
-        assertThat(keys).doesNotContain(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
-    }
-
-    @Test
-    public void testNonIndexableKeys_existInXmlLayout() {
-        final Context context = RuntimeEnvironment.application;
-        when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
-        final List<String> niks = ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
-                .getNonIndexableKeys(mContext);
-        final int xmlId = (new ConnectedDeviceDashboardFragment()).getPreferenceScreenResId();
-
-        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
-
-        assertThat(keys).containsAllIn(niks);
-    }
-
-    @Test
-    public void testSummaryProvider_hasNfc_shouldReturnNfcSummary() {
-        final NfcManager nfcManager = mock(NfcManager.class);
-        final SummaryLoader summaryLoader = mock(SummaryLoader.class);
-
-        when(mContext.getApplicationContext()).thenReturn(mContext);
-        when(mContext.getSystemService(NFC_SERVICE)).thenReturn(nfcManager);
-        when(nfcManager.getDefaultAdapter()).thenReturn(mock(NfcAdapter.class));
-
-        SummaryLoader.SummaryProvider provider =
-                new ConnectedDeviceDashboardFragment.SummaryProvider(mContext, summaryLoader);
-
-        provider.setListening(false);
-
-        verifyZeroInteractions(summaryLoader);
-
-        provider.setListening(true);
-
-        verify(mContext).getString(R.string.connected_devices_dashboard_summary);
-    }
-
-    @Test
-    public void testSummaryProvider_noNfc_shouldReturnNoNfcSummary() {
-        final SummaryLoader summaryLoader = mock(SummaryLoader.class);
-
-        when(mContext.getApplicationContext()).thenReturn(mContext);
-        when(mContext.getSystemService(NFC_SERVICE)).thenReturn(null);
-
-        SummaryLoader.SummaryProvider provider =
-                new ConnectedDeviceDashboardFragment.SummaryProvider(mContext, summaryLoader);
-
-        provider.setListening(false);
-
-        verifyZeroInteractions(summaryLoader);
-
-        provider.setListening(true);
-
-        verify(mContext).getString(R.string.connected_devices_dashboard_no_nfc_summary);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java
index 40cfd73..01d4b82 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbBackendTest.java
@@ -27,9 +27,9 @@
 import android.hardware.usb.UsbManager;
 import android.net.ConnectivityManager;
 
-import com.android.settings.connecteddevice.usb.UsbBackend;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.wrapper.UserManagerWrapper;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -47,7 +47,7 @@
     @Mock
     private UsbManager mUsbManager;
     @Mock
-    private UsbBackend.UserRestrictionUtil mUserRestrictionUtil;
+    private UserManagerWrapper mUserManagerWrapper;
     @Mock
     private ConnectivityManager mConnectivityManager;
 
@@ -63,7 +63,7 @@
 
     @Test
     public void constructor_noUsbPort_shouldNotCrash() {
-        UsbBackend usbBackend = new UsbBackend(mContext, mUserRestrictionUtil, null);
+        UsbBackend usbBackend = new UsbBackend(mContext, mUserManagerWrapper, null);
         // Should not crash
     }
 }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
new file mode 100644
index 0000000..0f6adbe
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2018 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.connecteddevice.usb;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.hardware.usb.UsbManager;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class UsbDefaultFragmentTest {
+
+    @Mock
+    private UsbBackend mUsbBackend;
+
+    private UsbDefaultFragment mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mFragment = new UsbDefaultFragment();
+        mFragment.mUsbBackend = mUsbBackend;
+    }
+
+    @Test
+    public void testGetDefaultKey_isNone_shouldReturnNone() {
+        when(mUsbBackend.getDefaultUsbMode()).thenReturn(UsbBackend.MODE_DATA_NONE);
+        assertThat(mFragment.getDefaultKey()).isEqualTo(UsbManager.USB_FUNCTION_NONE);
+    }
+
+    @Test
+    public void testGetDefaultKey_isMtp_shouldReturnMtp() {
+        when(mUsbBackend.getDefaultUsbMode()).thenReturn(UsbBackend.MODE_DATA_MTP);
+        assertThat(mFragment.getDefaultKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
+    }
+
+    @Test
+    public void testGetDefaultKey_isPtp_shouldReturnPtp() {
+        when(mUsbBackend.getDefaultUsbMode()).thenReturn(UsbBackend.MODE_DATA_PTP);
+        assertThat(mFragment.getDefaultKey()).isEqualTo(UsbManager.USB_FUNCTION_PTP);
+    }
+
+    @Test
+    public void testGetDefaultKey_isRndis_shouldReturnRndis() {
+        when(mUsbBackend.getDefaultUsbMode()).thenReturn(UsbBackend.MODE_DATA_TETHER);
+        assertThat(mFragment.getDefaultKey()).isEqualTo(UsbManager.USB_FUNCTION_RNDIS);
+    }
+
+    @Test
+    public void testGetDefaultKey_isMidi_shouldReturnMidi() {
+        when(mUsbBackend.getDefaultUsbMode()).thenReturn(UsbBackend.MODE_DATA_MIDI);
+        assertThat(mFragment.getDefaultKey()).isEqualTo(UsbManager.USB_FUNCTION_MIDI);
+    }
+
+    @Test
+    public void testSetDefaultKey_isNone_shouldSetNone() {
+        mFragment.setDefaultKey(UsbManager.USB_FUNCTION_NONE);
+        verify(mUsbBackend).setDefaultUsbMode(UsbBackend.MODE_DATA_NONE);
+    }
+
+    @Test
+    public void testSetDefaultKey_isMtp_shouldSetMtp() {
+        mFragment.setDefaultKey(UsbManager.USB_FUNCTION_MTP);
+        verify(mUsbBackend).setDefaultUsbMode(UsbBackend.MODE_DATA_MTP);
+    }
+
+    @Test
+    public void testSetDefaultKey_isPtp_shouldSetPtp() {
+        mFragment.setDefaultKey(UsbManager.USB_FUNCTION_PTP);
+        verify(mUsbBackend).setDefaultUsbMode(UsbBackend.MODE_DATA_PTP);
+    }
+
+    @Test
+    public void testSetDefaultKey_isRndis_shouldSetRndis() {
+        mFragment.setDefaultKey(UsbManager.USB_FUNCTION_RNDIS);
+        verify(mUsbBackend).setDefaultUsbMode(UsbBackend.MODE_DATA_TETHER);
+    }
+
+    @Test
+    public void testSetDefaultKey_isMidi_shouldSetMidi() {
+        mFragment.setDefaultKey(UsbManager.USB_FUNCTION_MIDI);
+        verify(mUsbBackend).setDefaultUsbMode(UsbBackend.MODE_DATA_MIDI);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsProfilesControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsProfilesControllerTest.java
index c733078..234be88 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsProfilesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDetailsProfilesControllerTest.java
@@ -108,7 +108,7 @@
         List<SwitchPreference> switches = getProfileSwitches();
 
         for (int i = 0; i < switches.size(); i++) {
-            assertThat(switches.get(i).getKey().equals(mOptions.get(i)));
+            assertThat(switches.get(i).getKey()).isEqualTo(mOptions.get(i));
         }
     }
 
@@ -138,8 +138,8 @@
         mDetailsProfilesController.refresh(UsbBackend.MODE_DATA_MTP);
         List<SwitchPreference> switches = getProfileSwitches();
 
-        assertThat(switches.get(0).getKey().equals(UsbManager.USB_FUNCTION_MTP));
-        assertThat(switches.get(0).isChecked());
+        assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
+        assertThat(switches.get(0).isChecked()).isTrue();
     }
 
     @Test
@@ -153,9 +153,9 @@
         List<SwitchPreference> switches = getProfileSwitches();
 
         assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
-        assertThat(switches.get(0).isChecked());
+        assertThat(switches.get(0).isChecked()).isTrue();
         assertThat(switches.get(3).getKey()).isEqualTo(UsbDetailsProfilesController.KEY_POWER);
-        assertThat(switches.get(3).isChecked());
+        assertThat(switches.get(3).isChecked()).isTrue();
     }
 
     @Test
@@ -171,7 +171,7 @@
 
         assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
         verify(mUsbBackend).setMode(UsbBackend.MODE_DATA_MTP);
-        assertThat(switches.get(0).isChecked());
+        assertThat(switches.get(0).isChecked()).isTrue();
     }
 
     @Test
@@ -188,9 +188,9 @@
 
         assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
         verify(mUsbBackend).setMode(UsbBackend.MODE_DATA_MTP | UsbBackend.MODE_POWER_SOURCE);
-        assertThat(switches.get(0).isChecked());
+        assertThat(switches.get(0).isChecked()).isTrue();
         assertThat(switches.get(3).getKey()).isEqualTo(UsbDetailsProfilesController.KEY_POWER);
-        assertThat(switches.get(3).isChecked());
+        assertThat(switches.get(3).isChecked()).isTrue();
     }
 
     @Test
@@ -207,9 +207,10 @@
 
         assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
         verify(mUsbBackend).setMode(UsbBackend.MODE_DATA_MTP);
-        assertThat(switches.get(0).isChecked());
+        mDetailsProfilesController.refresh(UsbBackend.MODE_DATA_MTP);
+        assertThat(switches.get(0).isChecked()).isTrue();
         assertThat(switches.get(1).getKey()).isEqualTo(UsbManager.USB_FUNCTION_PTP);
-        assertThat(!switches.get(1).isChecked());
+        assertThat(switches.get(1).isChecked()).isFalse();
     }
 
     @Test
@@ -226,7 +227,7 @@
 
         assertThat(switches.get(0).getKey()).isEqualTo(UsbManager.USB_FUNCTION_MTP);
         verify(mUsbBackend).setMode(UsbBackend.MODE_DATA_NONE);
-        assertThat(!switches.get(0).isChecked());
+        assertThat(switches.get(0).isChecked()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
index c0ac961..3c0740b 100644
--- a/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/core/BasePreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -45,6 +46,17 @@
         MockitoAnnotations.initMocks(this);
     }
 
+
+    @Test(expected = IllegalArgumentException.class)
+    public void newController_noKey_shouldCrash() {
+        new BasePreferenceController(RuntimeEnvironment.application, null /* key */) {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        };
+    }
+
     @Test
     public void isAvailable_availableStatusAvailable_returnsTrue() {
         when(mPreferenceController.getAvailabilityStatus()).thenReturn(AVAILABLE);
diff --git a/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java b/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java
new file mode 100644
index 0000000..c0bc3ef
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2018 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.core;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.slices.FakePreferenceController;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PreferenceControllerListHelperTest {
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+    }
+
+    @Test
+    @Config(qualifiers = "mcc999")
+    public void getControllers_shouldReturnAList() {
+        final List<BasePreferenceController> controllers =
+                PreferenceControllerListHelper.getPreferenceControllersFromXml(mContext,
+                        R.xml.location_settings);
+
+        assertThat(controllers).isNotEmpty();
+        for (BasePreferenceController controller : controllers) {
+            assertThat(controller).isInstanceOf(FakePreferenceController.class);
+        }
+    }
+
+    @Test
+    public void filterControllers_noFilter_shouldReturnSameList() {
+        final List<BasePreferenceController> controllers = new ArrayList<>();
+        controllers.add(new BasePreferenceController(mContext, "key") {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        });
+        final List<BasePreferenceController> result = PreferenceControllerListHelper
+                .filterControllers(controllers, null /* filter */);
+        assertThat(result).containsExactlyElementsIn(controllers);
+    }
+
+    @Test
+    public void filterControllers_noDuplicationFromFilter_shouldReturnSameList() {
+        final List<BasePreferenceController> controllers = new ArrayList<>();
+        controllers.add(new BasePreferenceController(mContext, "key") {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        });
+        final List<AbstractPreferenceController> filter = new ArrayList<>();
+        filter.add(new BasePreferenceController(mContext, "key2") {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        });
+        final List<BasePreferenceController> result = PreferenceControllerListHelper
+                .filterControllers(controllers, filter);
+        assertThat(result).containsExactlyElementsIn(controllers);
+    }
+
+    @Test
+    public void filterControllers_hasDuplicationFromFilter_shouldReturnSameList() {
+        final List<BasePreferenceController> controllers = new ArrayList<>();
+        controllers.add(new BasePreferenceController(mContext, "key") {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        });
+        final List<AbstractPreferenceController> filter = new ArrayList<>();
+        filter.add(new BasePreferenceController(mContext, "key") {
+            @Override
+            public int getAvailabilityStatus() {
+                return AVAILABLE;
+            }
+        });
+        final List<BasePreferenceController> result = PreferenceControllerListHelper
+                .filterControllers(controllers, filter);
+        assertThat(result).isEmpty();
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
index cc25b5d..b85afaa 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
@@ -47,6 +47,7 @@
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.utils.IconCache;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -244,7 +245,7 @@
             new DashboardAdapter.DashboardItemHolder(view);
         final Tile tile = new Tile();
         tile.icon = Icon.createWithResource(context, R.drawable.ic_settings);
-        final DashboardAdapter.IconCache iconCache = mock(DashboardAdapter.IconCache.class);
+        final IconCache iconCache = mock(IconCache.class);
         when(iconCache.getIcon(tile.icon)).thenReturn(context.getDrawable(R.drawable.ic_settings));
 
         mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
@@ -265,7 +266,7 @@
         tile.icon = mock(Icon.class);
         when(tile.icon.getResPackage()).thenReturn("another.package");
 
-        final DashboardAdapter.IconCache iconCache = mock(DashboardAdapter.IconCache.class);
+        final IconCache iconCache = mock(IconCache.class);
         when(iconCache.getIcon(tile.icon)).thenReturn(context.getDrawable(R.drawable.ic_settings));
 
         mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentSearchIndexProviderInspector.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentSearchIndexProviderInspector.java
index 3d9783d..80083ed 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentSearchIndexProviderInspector.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentSearchIndexProviderInspector.java
@@ -57,7 +57,7 @@
         }
         try {
             controllersFromFragment =
-                    ((DashboardFragment) fragment).getPreferenceControllers(context);
+                    ((DashboardFragment) fragment).createPreferenceControllers(context);
         } catch (Throwable e) {
             // Can't do much with exception, assume the test passed.
             return true;
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 40e590a..49734b6 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -19,6 +19,8 @@
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -44,11 +46,10 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
@@ -58,24 +59,25 @@
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class DashboardFragmentTest {
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
+
     @Mock
     private FakeFeatureFactory mFakeFeatureFactory;
     private DashboardCategory mDashboardCategory;
+    private Context mContext;
     private TestFragment mTestFragment;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
         mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
         mDashboardCategory = new DashboardCategory();
         mDashboardCategory.addTile(new Tile());
-        mTestFragment = new TestFragment(ShadowApplication.getInstance().getApplicationContext());
+        mTestFragment = new TestFragment(mContext);
         when(mFakeFeatureFactory.dashboardFeatureProvider
                 .getTilesForCategory(nullable(String.class)))
                 .thenReturn(mDashboardCategory);
-        mTestFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+        mTestFragment.onAttach(mContext);
         when(mContext.getPackageName()).thenReturn("TestPackage");
     }
 
@@ -84,7 +86,7 @@
         final TestPreferenceController controller = new TestPreferenceController(mContext);
         mTestFragment.addPreferenceController(controller);
 
-        final TestPreferenceController retrievedController = mTestFragment.getPreferenceController
+        final TestPreferenceController retrievedController = mTestFragment.use
                 (TestPreferenceController.class);
 
         assertThat(controller).isSameAs(retrievedController);
@@ -97,7 +99,7 @@
         final TestPreferenceController controller2 = new TestPreferenceController(mContext);
         mTestFragment.addPreferenceController(controller2);
 
-        final TestPreferenceController retrievedController = mTestFragment.getPreferenceController
+        final TestPreferenceController retrievedController = mTestFragment.use
                 (TestPreferenceController.class);
 
         assertThat(controller1).isSameAs(retrievedController);
@@ -133,7 +135,7 @@
 
     @Test
     public void onAttach_shouldCreatePlaceholderPreferenceController() {
-        final AbstractPreferenceController controller = mTestFragment.getPreferenceController(
+        final AbstractPreferenceController controller = mTestFragment.use(
                 DashboardTilePlaceholderPreferenceController.class);
 
         assertThat(controller).isNotNull();
@@ -146,16 +148,18 @@
                 mock(AbstractPreferenceController.class);
         final AbstractPreferenceController mockController2 =
                 mock(AbstractPreferenceController.class);
+        when(mockController1.getPreferenceKey()).thenReturn("key1");
+        when(mockController2.getPreferenceKey()).thenReturn("key2");
         preferenceControllers.add(mockController1);
         preferenceControllers.add(mockController2);
         when(mockController1.isAvailable()).thenReturn(false);
         when(mockController2.isAvailable()).thenReturn(true);
 
-        mTestFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+        mTestFragment.onAttach(mContext);
         mTestFragment.onResume();
 
-        verify(mockController1, never()).getPreferenceKey();
-        verify(mockController2).getPreferenceKey();
+        verify(mockController1).getPreferenceKey();
+        verify(mockController2, times(2)).getPreferenceKey();
     }
 
     @Test
@@ -205,9 +209,7 @@
         final Intent intent = new Intent();
         tile.intent = intent;
 
-        intent.setComponent(new ComponentName(
-                ShadowApplication.getInstance().getApplicationContext().getPackageName(),
-                "TestClass"));
+        intent.setComponent(new ComponentName(mContext.getPackageName(), "TestClass"));
         assertThat(mTestFragment.tintTileIcon(tile)).isFalse();
 
         intent.setComponent(new ComponentName("OtherPackage", "TestClass"));
@@ -287,7 +289,7 @@
         }
 
         @Override
-        protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
             return mControllers;
         }
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/WorkModeConditionTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/WorkModeConditionTest.java
new file mode 100644
index 0000000..dff7700
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/WorkModeConditionTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2018 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.dashboard.conditional;
+
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+
+import com.android.settings.Settings;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WorkModeConditionTest {
+
+    @Mock
+    private ConditionManager mConditionManager;
+
+    private Context mContext;
+    private WorkModeCondition mCondition;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        FakeFeatureFactory.setupForTest();
+        when(mConditionManager.getContext()).thenReturn(mContext);
+        mCondition = new WorkModeCondition(mConditionManager);
+    }
+
+    @Test
+    public void onPrimaryClick_shouldLaunchAccountsSetting() {
+        final ComponentName componentName =
+            new ComponentName(mContext, Settings.AccountDashboardActivity.class);
+
+        mCondition.onPrimaryClick();
+
+        verify(mContext).startActivity(
+            argThat(intent-> intent.getComponent().equals(componentName)));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
index 4ff09c1..512ac64 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
@@ -48,6 +48,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.suggestions.SuggestionControllerMixin;
+import com.android.settingslib.utils.IconCache;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -252,7 +253,7 @@
         mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
             new FrameLayout(RuntimeEnvironment.application),
             mSuggestionAdapter.getItemViewType(0));
-        DashboardAdapter.IconCache cache = mock(DashboardAdapter.IconCache.class);
+        IconCache cache = mock(IconCache.class);
         final Drawable drawable = mock(Drawable.class);
         when(cache.getIcon(icon)).thenReturn(drawable);
         ReflectionHelpers.setField(mSuggestionAdapter, "mCache", cache);
@@ -280,7 +281,7 @@
         mSuggestionHolder = mSuggestionAdapter.onCreateViewHolder(
             new FrameLayout(RuntimeEnvironment.application),
             mSuggestionAdapter.getItemViewType(0));
-        DashboardAdapter.IconCache cache = mock(DashboardAdapter.IconCache.class);
+        IconCache cache = mock(IconCache.class);
         final Drawable drawable = mock(Drawable.class);
         when(cache.getIcon(icon)).thenReturn(drawable);
         ReflectionHelpers.setField(mSuggestionAdapter, "mCache", cache);
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothDelayReportsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothDelayReportsPreferenceControllerTest.java
new file mode 100644
index 0000000..e8dfba3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothDelayReportsPreferenceControllerTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2018 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.development;
+
+
+import static com.android.settings.development.BluetoothDelayReportsPreferenceController
+        .BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH,
+        sdk = TestConfig.SDK_VERSION,
+        shadows = {SettingsShadowSystemProperties.class})
+public class BluetoothDelayReportsPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+
+    private Context mContext;
+    private SwitchPreference mPreference;
+    private BluetoothDelayReportsPreferenceController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mPreference = new SwitchPreference(mContext);
+        mController = spy(new BluetoothDelayReportsPreferenceController(mContext));
+        when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
+                mPreference);
+        mController.displayPreference(mPreferenceScreen);
+    }
+
+    @Test
+    public void onPreferenceChanged_settingEnabled_turnOnDelayReports() {
+        mController.onPreferenceChange(mPreference, true /* new value */);
+
+        final boolean mode = SettingsShadowSystemProperties.getBoolean(
+                BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, false /* default */);
+
+        assertThat(mode).isTrue();
+    }
+
+    @Test
+    public void onPreferenceChanged_settingDisabled_turnOffDelayReports() {
+        mController.onPreferenceChange(mPreference, false /* new value */);
+
+        final boolean mode = SettingsShadowSystemProperties.getBoolean(
+                BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, false /* default */);
+
+        assertThat(mode).isFalse();
+    }
+
+    @Test
+    public void updateState_settingEnabled_preferenceShouldBeChecked() {
+        SettingsShadowSystemProperties.set(BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY,
+                Boolean.toString(true));
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
+        SettingsShadowSystemProperties.set(BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY,
+                Boolean.toString(false));
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onDeveloperOptionsDisabled_shouldDisablePreference() {
+        mController.onDeveloperOptionsDisabled();
+
+        final boolean mode = SettingsShadowSystemProperties.getBoolean(
+                BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, false /* default */);
+
+        assertThat(mode).isFalse();
+        assertThat(mPreference.isEnabled()).isFalse();
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onDeveloperOptionsEnabled_shouldEnablePreference() {
+        mController.onDeveloperOptionsEnabled();
+
+        final boolean mode = SettingsShadowSystemProperties.getBoolean(
+                BLUETOOTH_ENABLE_AVDTP_DELAY_REPORTS_PROPERTY, false /* default */);
+
+        assertThat(mode).isFalse();
+        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/development/DarkUIPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DarkUIPreferenceControllerTest.java
new file mode 100644
index 0000000..47b966a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/DarkUIPreferenceControllerTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2018 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.development;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.UiModeManager;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH,
+        sdk = TestConfig.SDK_VERSION)
+public class DarkUIPreferenceControllerTest {
+
+    private Context mContext;
+    @Mock
+    private ListPreference mPreference;
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private UiModeManager mUiModeManager;
+    private DarkUIPreferenceController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mController = new DarkUIPreferenceController(mContext, mUiModeManager);
+        when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
+                mPreference);
+        mController.displayPreference(mPreferenceScreen);
+    }
+
+    @Test
+    public void onPreferenceChanged_setAuto() {
+        mController.onPreferenceChange(mPreference, "auto");
+        verify(mUiModeManager).setNightMode(eq(UiModeManager.MODE_NIGHT_AUTO));
+    }
+
+    @Test
+    public void onPreferenceChanged_setNightMode() {
+        mController.onPreferenceChange(mPreference, "yes");
+        verify(mUiModeManager).setNightMode(eq(UiModeManager.MODE_NIGHT_YES));
+    }
+
+    @Test
+    public void onPreferenceChanged_setDayMode() {
+        mController.onPreferenceChange(mPreference, "no");
+        verify(mUiModeManager).setNightMode(eq(UiModeManager.MODE_NIGHT_NO));
+    }
+
+    public int getCurrentMode() {
+        final UiModeManager uiModeManager = mContext.getSystemService(UiModeManager.class);
+        return uiModeManager.getNightMode();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
index 67a6d6b..c0200c3 100644
--- a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
@@ -44,7 +44,7 @@
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
-import com.android.settings.connecteddevice.usb.UsbBackend;
+import com.android.settings.wrapper.UsbManagerWrapper;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -73,7 +73,7 @@
     @Mock
     private PackageManager mPackageManager;
     @Mock
-    private UsbBackend.UsbManagerPassThrough mUsbManagerPassThrough;
+    private UsbManagerWrapper mUsbManagerWrapper;
 
     private Context mContext;
     private LifecycleOwner mLifecycleOwner;
@@ -106,12 +106,12 @@
         mController = spy(new SelectUsbConfigPreferenceController(mContext, mLifecycle));
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
         mController.displayPreference(mScreen);
-        mController.mUsbManagerPassThrough = mUsbManagerPassThrough;
+        mController.mUsbManagerWrapper = mUsbManagerWrapper;
 
-        when(mUsbManagerPassThrough.usbFunctionsFromString("mtp")).thenReturn(UsbManagerExtras.MTP);
-        when(mUsbManagerPassThrough.usbFunctionsFromString("rndis"))
+        when(mUsbManagerWrapper.usbFunctionsFromString("mtp")).thenReturn(UsbManagerExtras.MTP);
+        when(mUsbManagerWrapper.usbFunctionsFromString("rndis"))
                 .thenReturn(UsbManagerExtras.RNDIS);
-        when(mUsbManagerPassThrough.usbFunctionsFromString("none"))
+        when(mUsbManagerWrapper.usbFunctionsFromString("none"))
                 .thenReturn(UsbManagerExtras.NONE);
 
     }
@@ -123,7 +123,7 @@
 
     @Test
     public void onPreferenceChange_setCharging_shouldEnableCharging() {
-        when(mUsbManagerPassThrough.getCurrentFunctions()).thenReturn(
+        when(mUsbManagerWrapper.getCurrentFunctions()).thenReturn(
                 UsbManagerExtras.usbFunctionsFromString(mValues[0]));
         doNothing().when(mController).setCurrentFunctions(anyLong());
         mController.onPreferenceChange(mPreference, mValues[0]);
@@ -158,7 +158,7 @@
 
     @Test
     public void onPreferenceChange_setMtp_shouldEnableMtp() {
-        when(mUsbManagerPassThrough.getCurrentFunctions())
+        when(mUsbManagerWrapper.getCurrentFunctions())
                 .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[1]));
         doNothing().when(mController).setCurrentFunctions(anyLong());
         mController.onPreferenceChange(mPreference, mValues[1]);
@@ -169,7 +169,7 @@
 
     @Test
     public void onPreferenceChange_monkeyUser_shouldReturnFalse() {
-        when(mUsbManagerPassThrough.getCurrentFunctions())
+        when(mUsbManagerWrapper.getCurrentFunctions())
                 .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[1]));
         ShadowUtils.setIsUserAMonkey(true);
         doNothing().when(mController).setCurrentFunctions(anyLong());
@@ -182,7 +182,7 @@
 
     @Test
     public void updateState_chargingEnabled_shouldSetPreferenceToCharging() {
-        when(mUsbManagerPassThrough.getCurrentFunctions())
+        when(mUsbManagerWrapper.getCurrentFunctions())
                 .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[0]));
 
         mController.updateState(mPreference);
@@ -193,7 +193,7 @@
 
     @Test
     public void updateState_RndisEnabled_shouldEnableRndis() {
-        when(mUsbManagerPassThrough.getCurrentFunctions())
+        when(mUsbManagerWrapper.getCurrentFunctions())
                 .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[3]));
 
         mController.updateState(mPreference);
@@ -204,7 +204,7 @@
 
     @Test
     public void updateState_noValueSet_shouldEnableChargingAsDefault() {
-        when(mUsbManagerPassThrough.getCurrentFunctions()).thenReturn(UsbManagerExtras.NONE);
+        when(mUsbManagerWrapper.getCurrentFunctions()).thenReturn(UsbManagerExtras.NONE);
         mController.updateState(mPreference);
 
         verify(mPreference).setValue(mValues[0]);
diff --git a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
index 59f6e35..c2727cc 100644
--- a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
@@ -27,9 +27,9 @@
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.webview.WebViewUpdateServiceWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java
index 1cdff20..e107344 100644
--- a/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java
@@ -17,19 +17,25 @@
 package com.android.settings.development.qstile;
 
 import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.spy;
 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.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.os.RemoteException;
 import android.service.quicksettings.TileService;
+import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
+import com.android.internal.statusbar.IStatusBarService;
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -37,22 +43,28 @@
 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.RuntimeEnvironment;
 import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowPackageManager;
+import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class DevelopmentTilePreferenceControllerTest {
 
+    private static final String SERVICE_INFO_NAME = "TestName";
     @Mock
     private PreferenceScreen mScreen;
+    @Mock
+    private IStatusBarService mStatusBarService;
     private Context mContext;
     private DevelopmentTilePreferenceController mController;
     private ShadowPackageManager mShadowPackageManager;
+    private DevelopmentTilePreferenceController.OnChangeHandler mOnChangeHandler;
 
     @Before
     public void setUp() {
@@ -63,6 +75,9 @@
 
         mController = new DevelopmentTilePreferenceController(mContext);
         assertThat(mController.getPreferenceKey()).isNull();
+
+        mOnChangeHandler = spy(new DevelopmentTilePreferenceController.OnChangeHandler(mContext));
+        ReflectionHelpers.setField(mOnChangeHandler, "mStatusBarService", mStatusBarService);
     }
 
     @Test
@@ -86,6 +101,38 @@
         verify(mScreen).addPreference(any(Preference.class));
     }
 
+    @Test
+    public void preferenceChecked_shouldAddTile() throws RemoteException {
+        SwitchPreference preference = createPreference(/* defaultCheckedState = */ false);
+        preference.performClick();
+
+        ArgumentCaptor<ComponentName> argument = ArgumentCaptor.forClass(ComponentName.class);
+        verify(mStatusBarService).addTile(argument.capture());
+        assertThat(argument.getValue().getClassName()).isEqualTo(SERVICE_INFO_NAME);
+        assertThat(argument.getValue().getPackageName()).isEqualTo(mContext.getPackageName());
+    }
+
+    @Test
+    public void preferenceUnchecked_shouldRemoveTile() throws RemoteException {
+        SwitchPreference preference = createPreference(/* defaultCheckedState = */ true);
+        preference.performClick();
+
+        ArgumentCaptor<ComponentName> argument = ArgumentCaptor.forClass(ComponentName.class);
+        verify(mStatusBarService).remTile(argument.capture());
+        assertThat(argument.getValue().getClassName()).isEqualTo(SERVICE_INFO_NAME);
+        assertThat(argument.getValue().getPackageName()).isEqualTo(mContext.getPackageName());
+    }
+
+    private SwitchPreference createPreference(boolean defaultCheckedState) {
+        SwitchPreference preference = new SwitchPreference(mContext);
+        preference.setTitle("Test Pref");
+        preference.setIcon(R.drawable.ic_settings_24dp);
+        preference.setKey(SERVICE_INFO_NAME);
+        preference.setChecked(defaultCheckedState);
+        preference.setOnPreferenceChangeListener(mOnChangeHandler);
+        return preference;
+    }
+
     public static class FakeServiceInfo extends ServiceInfo {
 
         public String loadLabel(PackageManager mgr) {
diff --git a/tests/robotests/src/com/android/settings/development/qstile/LayerTraceTest.java b/tests/robotests/src/com/android/settings/development/qstile/LayerTraceTest.java
deleted file mode 100644
index 0e42759..0000000
--- a/tests/robotests/src/com/android/settings/development/qstile/LayerTraceTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2018 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.development.qstile;
-
-import static com.android.settings.development.qstile.DevelopmentTiles.LayerTrace
-        .SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE;
-import static com.android.settings.development.qstile.DevelopmentTiles.LayerTrace
-        .SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.isNull;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.widget.Toast;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.ShadowParcel;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class LayerTraceTest {
-    @Mock
-    private IBinder mSurfaceFlinger;
-    @Mock
-    private Toast mToast;
-
-    private DevelopmentTiles.LayerTrace mLayerTraceTile;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mLayerTraceTile = spy(new DevelopmentTiles.LayerTrace());
-        ReflectionHelpers.setField(mLayerTraceTile, "mSurfaceFlinger", mSurfaceFlinger);
-        ReflectionHelpers.setField(mLayerTraceTile, "mToast", mToast);
-    }
-
-    @After
-    public void after() {
-        verifyNoMoreInteractions(mSurfaceFlinger);
-        verifyNoMoreInteractions(mToast);
-    }
-
-    @Test
-    @Config(shadows = {ShadowParcel.class})
-    public void sfReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
-        ShadowParcel.sReadBoolResult = true;
-        assertThat(mLayerTraceTile.isEnabled()).isTrue();
-        verify(mSurfaceFlinger)
-                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
-                        eq(0 /* flags */));
-    }
-
-    @Test
-    @Config(shadows = {ShadowParcel.class})
-    public void sfReturnsTraceDisabled_shouldReturnDisabled() throws RemoteException {
-        ShadowParcel.sReadBoolResult = false;
-        assertThat(mLayerTraceTile.isEnabled()).isFalse();
-        verify(mSurfaceFlinger)
-                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
-                        eq(0 /* flags */));
-    }
-
-    @Test
-    public void sfUnavailable_shouldReturnDisabled() throws RemoteException {
-        ReflectionHelpers.setField(mLayerTraceTile, "mSurfaceFlinger", null);
-        assertThat(mLayerTraceTile.isEnabled()).isFalse();
-    }
-
-    @Test
-    @Config(shadows = {ShadowParcel.class})
-    public void setIsEnableTrue_shouldEnableLayerTrace() throws RemoteException {
-        mLayerTraceTile.setIsEnabled(true);
-        assertThat(ShadowParcel.sWriteIntResult).isEqualTo(1);
-        verify(mSurfaceFlinger)
-                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(),
-                        eq(0 /* flags */));
-    }
-
-    @Test
-    @Config(shadows = {ShadowParcel.class})
-    public void setIsEnableFalse_shouldDisableLayerTraceAndShowToast() throws RemoteException {
-        mLayerTraceTile.setIsEnabled(false);
-        assertThat(ShadowParcel.sWriteIntResult).isEqualTo(0);
-        verify(mSurfaceFlinger)
-                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(),
-                        eq(0 /* flags */));
-        verify(mToast).show();
-    }
-
-    @Test
-    public void setIsEnableAndSfUnavailable_shouldDoNothing() throws RemoteException {
-        ReflectionHelpers.setField(mLayerTraceTile, "mSurfaceFlinger", null);
-        mLayerTraceTile.setIsEnabled(true);
-        mLayerTraceTile.setIsEnabled(false);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/qstile/WindowTraceTest.java b/tests/robotests/src/com/android/settings/development/qstile/WindowTraceTest.java
deleted file mode 100644
index d8a8084..0000000
--- a/tests/robotests/src/com/android/settings/development/qstile/WindowTraceTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2018 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.development.qstile;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.os.RemoteException;
-import android.widget.Toast;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.ShadowParcel;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.wrapper.IWindowManagerWrapper;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class WindowTraceTest {
-    @Mock
-    private IWindowManagerWrapper mWindowManager;
-    @Mock
-    private Toast mToast;
-
-    private DevelopmentTiles.WindowTrace mWindowTrace;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mWindowTrace = spy(new DevelopmentTiles.WindowTrace());
-        ReflectionHelpers.setField(mWindowTrace, "mWindowManager", mWindowManager);
-        ReflectionHelpers.setField(mWindowTrace, "mToast", mToast);
-    }
-
-    @After
-    public void teardown() {
-        verifyNoMoreInteractions(mToast);
-    }
-
-    @Test
-    public void wmReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
-        doReturn(true).when(mWindowManager).isWindowTraceEnabled();
-        assertThat(mWindowTrace.isEnabled()).isTrue();
-    }
-
-    @Test
-    public void wmReturnsTraceDisabled_shouldReturnDisabled() throws RemoteException {
-        doReturn(false).when(mWindowManager).isWindowTraceEnabled();
-        assertThat(mWindowTrace.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void wmThrowsRemoteException_shouldReturnDisabled() throws RemoteException {
-        doThrow(new RemoteException("Unknown"))
-                .when(mWindowManager).isWindowTraceEnabled();
-        assertThat(mWindowTrace.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void setIsEnableTrue_shouldEnableWindowTrace() throws RemoteException {
-        mWindowTrace.setIsEnabled(true);
-        verify(mWindowManager).startWindowTrace();
-        verifyNoMoreInteractions(mWindowManager);
-    }
-
-    @Test
-    @Config(shadows = {ShadowParcel.class})
-    public void setIsEnableFalse_shouldDisableWindowTraceAndShowToast() throws RemoteException {
-        mWindowTrace.setIsEnabled(false);
-        verify(mWindowManager).stopWindowTrace();
-        verify(mToast).show();
-        verifyNoMoreInteractions(mWindowManager);
-    }
-
-    @Test
-    public void setIsEnableAndWmThrowsRemoteException_shouldDoNothing() throws RemoteException {
-        doThrow(new RemoteException("Unknown")).when(mWindowManager).isWindowTraceEnabled();
-        mWindowTrace.setIsEnabled(true);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java b/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java
new file mode 100644
index 0000000..92f5c22
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2018 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.development.qstile;
+
+import static com.android.settings.development.qstile.DevelopmentTiles.WinscopeTrace
+        .SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE;
+import static com.android.settings.development.qstile.DevelopmentTiles.WinscopeTrace
+        .SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.widget.Toast;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.shadow.ShadowParcel;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.wrapper.IWindowManagerWrapper;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WinscopeTraceTest {
+    @Mock
+    private IWindowManagerWrapper mWindowManager;
+    @Mock
+    private IBinder mSurfaceFlinger;
+    @Mock
+    private Toast mToast;
+
+    private DevelopmentTiles.WinscopeTrace mWinscopeTrace;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mWinscopeTrace = spy(new DevelopmentTiles.WinscopeTrace());
+        ReflectionHelpers.setField(mWinscopeTrace, "mWindowManager", mWindowManager);
+        ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", mSurfaceFlinger);
+        ReflectionHelpers.setField(mWinscopeTrace, "mToast", mToast);
+    }
+
+    @After
+    public void teardown() {
+        verifyNoMoreInteractions(mToast);
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void wmReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
+        // Assume Surface Trace is disabled.
+        ShadowParcel.sReadBoolResult = false;
+        doReturn(true).when(mWindowManager).isWindowTraceEnabled();
+        assertThat(mWinscopeTrace.isEnabled()).isTrue();
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void sfReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
+        // Assume Window Trace is disabled.
+        doReturn(false).when(mWindowManager).isWindowTraceEnabled();
+        ShadowParcel.sReadBoolResult = true;
+        assertThat(mWinscopeTrace.isEnabled()).isTrue();
+        verify(mSurfaceFlinger)
+                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
+                        eq(0 /* flags */));
+        verifyNoMoreInteractions(mSurfaceFlinger);
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void sfAndWmReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
+        ShadowParcel.sReadBoolResult = true;
+        doReturn(true).when(mWindowManager).isWindowTraceEnabled();
+        assertThat(mWinscopeTrace.isEnabled()).isTrue();
+    }
+
+    @Test
+    public void wmAndSfReturnsTraceDisabled_shouldReturnDisabled() throws RemoteException {
+        ShadowParcel.sReadBoolResult = false;
+        doReturn(false).when(mWindowManager).isWindowTraceEnabled();
+        assertThat(mWinscopeTrace.isEnabled()).isFalse();
+        verify(mSurfaceFlinger)
+                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
+                        eq(0 /* flags */));
+        verifyNoMoreInteractions(mSurfaceFlinger);
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void wmThrowsRemoteExAndSfReturnsTraceDisabled_shouldReturnDisabled()
+            throws RemoteException {
+        ShadowParcel.sReadBoolResult = false;
+        doThrow(new RemoteException("Unknown"))
+                .when(mWindowManager).isWindowTraceEnabled();
+        assertThat(mWinscopeTrace.isEnabled()).isFalse();
+    }
+
+    @Test
+    public void sfUnavailableAndWmReturnsTraceDisabled_shouldReturnDisabled()
+            throws RemoteException {
+        doReturn(false).when(mWindowManager).isWindowTraceEnabled();
+        ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", null);
+        assertThat(mWinscopeTrace.isEnabled()).isFalse();
+    }
+
+
+    @Test
+    public void setIsEnableTrue_shouldEnableWindowTrace() throws RemoteException {
+        mWinscopeTrace.setIsEnabled(true);
+        verify(mWindowManager).startWindowTrace();
+        verifyNoMoreInteractions(mWindowManager);
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void setIsEnableTrue_shouldEnableLayerTrace() throws RemoteException {
+        mWinscopeTrace.setIsEnabled(true);
+        assertThat(ShadowParcel.sWriteIntResult).isEqualTo(1);
+        verify(mSurfaceFlinger)
+                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(),
+                        eq(0 /* flags */));
+        verifyNoMoreInteractions(mSurfaceFlinger);
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void setIsEnableFalse_shouldDisableWindowTrace() throws RemoteException {
+        mWinscopeTrace.setIsEnabled(false);
+        verify(mWindowManager).stopWindowTrace();
+        verifyNoMoreInteractions(mWindowManager);
+        verify(mToast).show();
+    }
+
+    @Test
+    @Config(shadows = {ShadowParcel.class})
+    public void setIsEnableFalse_shouldDisableLayerTrace() throws RemoteException {
+        mWinscopeTrace.setIsEnabled(false);
+        assertThat(ShadowParcel.sWriteIntResult).isEqualTo(0);
+        verify(mSurfaceFlinger)
+                .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(),
+                        eq(0 /* flags */));
+        verifyNoMoreInteractions(mSurfaceFlinger);
+        verify(mToast).show();
+    }
+
+    @Test
+    public void setIsEnableFalse_shouldShowToast() throws RemoteException {
+        mWinscopeTrace.setIsEnabled(false);
+        verify(mToast).show();
+    }
+
+    /**
+     * Verify when window manager call throws a remote exception, it is handled without
+     * re-throwing the exception.
+     */
+    @Test
+    public void setIsEnableAndWmThrowsRemoteException_shouldFailGracefully()
+            throws RemoteException {
+        doThrow(new RemoteException("Unknown")).when(mWindowManager).isWindowTraceEnabled();
+        mWinscopeTrace.setIsEnabled(true);
+    }
+
+    /**
+     * Verify is surface flinger is not available not calls are made to it.
+     */
+    @Test
+    public void setIsEnableAndSfUnavailable_shouldFailGracefully() throws RemoteException {
+        ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", null);
+        mWinscopeTrace.setIsEnabled(true);
+        verifyNoMoreInteractions(mSurfaceFlinger);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
index dc3d27a..68937b2 100644
--- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
@@ -32,6 +32,7 @@
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
 import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.widget.CandidateInfo;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -72,8 +73,7 @@
     @Test
     public void getCandidates() {
         when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
-        List<? extends RadioButtonPickerFragment.CandidateInfo> candidates =
-                mFragment.getCandidates();
+        List<? extends CandidateInfo> candidates = mFragment.getCandidates();
 
         assertThat(candidates.size()).isEqualTo(3);
         assertThat(candidates.get(0).getKey())
diff --git a/tests/robotests/src/com/android/settings/enterprise/ApplicationListFragmentTest.java b/tests/robotests/src/com/android/settings/enterprise/ApplicationListFragmentTest.java
index 80d4aaf..7d1aecd 100644
--- a/tests/robotests/src/com/android/settings/enterprise/ApplicationListFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/ApplicationListFragmentTest.java
@@ -84,7 +84,7 @@
 
     @Test
     public void getPreferenceControllers() {
-        final List<AbstractPreferenceController> controllers = mFragment.getPreferenceControllers(
+        final List<AbstractPreferenceController> controllers = mFragment.createPreferenceControllers(
                 mContext);
         assertThat(controllers).isNotNull();
         assertThat(controllers.size()).isEqualTo(1);
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
index b38b0f0..5e80f66 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
@@ -90,7 +90,7 @@
 
     @Test
     public void getPreferenceControllers() throws Exception {
-        final List<AbstractPreferenceController> controllers = mSettings.getPreferenceControllers(
+        final List<AbstractPreferenceController> controllers = mSettings.createPreferenceControllers(
                 ShadowApplication.getInstance().getApplicationContext());
         verifyPreferenceControllers(controllers);
     }
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragmentTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragmentTest.java
index 567c06f..033d399 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragmentTest.java
@@ -80,7 +80,7 @@
 
     @Test
     public void getPreferenceControllers() {
-        final List<AbstractPreferenceController> controllers = mFragment.getPreferenceControllers(mContext);
+        final List<AbstractPreferenceController> controllers = mFragment.createPreferenceControllers(mContext);
         assertThat(controllers).isNotNull();
         assertThat(controllers.size()).isEqualTo(1);
         int position = 0;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
index e835e65..498cd58 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDatabaseManagerTest.java
@@ -51,6 +51,7 @@
     private static long NOW = System.currentTimeMillis();
     private static long ONE_DAY_BEFORE = NOW - DateUtils.DAY_IN_MILLIS;
     private static long TWO_DAYS_BEFORE = NOW - 2 * DateUtils.DAY_IN_MILLIS;
+
     private Context mContext;
     private BatteryDatabaseManager mBatteryDatabaseManager;
 
@@ -69,8 +70,10 @@
 
     @Test
     public void testAllFunctions() {
-        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW, NOW);
-        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD, TWO_DAYS_BEFORE);
+        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW,
+                AnomalyDatabaseHelper.State.NEW, NOW);
+        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD,
+                AnomalyDatabaseHelper.State.NEW, TWO_DAYS_BEFORE);
 
         // In database, it contains two record
         List<AppInfo> totalAppInfos = mBatteryDatabaseManager.queryAllAnomalies(0 /* timeMsAfter */,
@@ -96,8 +99,10 @@
 
     @Test
     public void testUpdateAnomalies_updateSuccessfully() {
-        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW, NOW);
-        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD, NOW);
+        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_NEW, TYPE_NEW,
+                AnomalyDatabaseHelper.State.NEW, NOW);
+        mBatteryDatabaseManager.insertAnomaly(PACKAGE_NAME_OLD, TYPE_OLD,
+                AnomalyDatabaseHelper.State.NEW, NOW);
         final AppInfo appInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME_OLD).build();
         final List<AppInfo> updateAppInfos = new ArrayList<>();
         updateAppInfos.add(appInfo);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index c75a6a6..6cc3310 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -53,7 +53,7 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
-        mBatterySaverController = spy(new BatterySaverController(mContext, mLifecycle));
+        mBatterySaverController = spy(new BatterySaverController(mContext));
         ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
         ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
         doNothing().when(mBatterySaverController).refreshConditionManager();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 6bc6ee7..9d3fb7a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -177,9 +177,9 @@
         mHighApplicationInfo.targetSdkVersion = Build.VERSION_CODES.O;
         mLowApplicationInfo.targetSdkVersion = Build.VERSION_CODES.L;
 
-
         mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
         mNormalBatterySipper.totalPowerMah = TOTAL_BATTERY_USAGE;
+        doReturn(UID).when(mNormalBatterySipper).getUid();
 
         mWifiBatterySipper.drainType = BatterySipper.DrainType.WIFI;
         mWifiBatterySipper.totalPowerMah = BATTERY_WIFI_USAGE;
@@ -216,6 +216,10 @@
         mUsageList.add(mScreenBatterySipper);
         mUsageList.add(mCellBatterySipper);
         doReturn(mUsageList).when(mBatteryStatsHelper).getUsageList();
+        doReturn(TOTAL_BATTERY_USAGE + BATTERY_SCREEN_USAGE).when(
+                mBatteryStatsHelper).getTotalPower();
+        when(mBatteryStatsHelper.getStats().getDischargeAmount(anyInt())).thenReturn(
+                DISCHARGE_AMOUNT);
     }
 
     @Test
@@ -547,4 +551,16 @@
         verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
                 HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
     }
+
+    @Test
+    public void testIsAppHeavilyUsed_usageMoreThanThreshold_returnTrue() {
+        assertThat(mBatteryUtils.isAppHeavilyUsed(mBatteryStatsHelper, mUserManager, UID,
+                10 /* threshold */ )).isTrue();
+    }
+
+    @Test
+    public void testIsAppHeavilyUsed_usageLessThanThreshold_returnFalse() {
+        assertThat(mBatteryUtils.isAppHeavilyUsed(mBatteryStatsHelper, mUserManager, UID,
+                DISCHARGE_AMOUNT /* threshold */ )).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java
index eb5d8cf..9a55ef0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java
@@ -94,7 +94,7 @@
         }
 
         @Override
-        protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
             return null;
         }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
index a3786c2..c4b6aea 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
@@ -67,6 +67,7 @@
 import com.android.settingslib.utils.StringUtil;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -408,7 +409,7 @@
                 fragment.getPreferenceScreenResId());
         final List<String> preferenceKeys = new ArrayList<>();
 
-        for (AbstractPreferenceController controller : fragment.getPreferenceControllers(context)) {
+        for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
             preferenceKeys.add(controller.getPreferenceKey());
         }
 
@@ -444,6 +445,7 @@
                 eq(Bundle.EMPTY), any());
     }
 
+    @Ignore("b/73892008")
     @Test
     public void testShowBothEstimates_summariesAreBothModified() {
         doReturn(new TextView(mRealContext)).when(mBatteryLayoutPref).findViewById(R.id.summary2);
@@ -452,8 +454,8 @@
         TextView summary1 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary1);
         TextView summary2 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary2);
         Robolectric.flushBackgroundThreadScheduler();
-        assertThat(summary2.getText().toString().contains(NEW_ML_EST_SUFFIX));
-        assertThat(summary1.getText().toString().contains(OLD_EST_SUFFIX));
+        assertThat(summary2.getText().toString()).contains(NEW_ML_EST_SUFFIX);
+        assertThat(summary1.getText().toString()).contains(OLD_EST_SUFFIX);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 32e2b0b..336df87 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -37,19 +37,14 @@
 import android.os.PowerManager;
 import android.support.v7.preference.PreferenceScreen;
 import android.util.SparseArray;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
 import android.view.View;
 import android.widget.TextView;
 
-import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
-import com.android.settings.Utils;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.fuelgauge.anomaly.Anomaly;
 import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
@@ -61,6 +56,7 @@
 
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -222,7 +218,7 @@
                 fragment.getPreferenceScreenResId());
         final List<String> preferenceKeys = new ArrayList<>();
 
-        for (AbstractPreferenceController controller : fragment.getPreferenceControllers(context)) {
+        for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
             preferenceKeys.add(controller.getPreferenceKey());
         }
 
@@ -257,6 +253,7 @@
                 eq(Bundle.EMPTY), any());
     }
 
+    @Ignore("b/73892008")
     @Test
     public void testShowBothEstimates_summariesAreBothModified() {
         doReturn(new TextView(mRealContext)).when(mBatteryLayoutPref).findViewById(R.id.summary2);
@@ -265,8 +262,8 @@
         TextView summary1 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary1);
         TextView summary2 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary2);
         Robolectric.flushBackgroundThreadScheduler();
-        assertThat(summary2.getText().toString().contains(NEW_ML_EST_SUFFIX));
-        assertThat(summary1.getText().toString().contains(OLD_EST_SUFFIX));
+        assertThat(summary2.getText().toString()).contains(NEW_ML_EST_SUFFIX);
+        assertThat(summary1.getText().toString()).contains(OLD_EST_SUFFIX);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
index 521ead4..1d4d71e 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
@@ -18,24 +18,30 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 
-import android.app.AppOpsManager;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.os.Bundle;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceManager;
 import android.util.IconDrawableFactory;
 
+import com.android.settings.SettingsActivity;
 import com.android.settings.TestConfig;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.batterytip.AppInfo;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
@@ -43,13 +49,13 @@
 import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
+import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class RestrictedAppDetailsTest {
     private static final String PACKAGE_NAME = "com.android.app";
     private static final String APP_NAME = "app";
-    private static final int UID = 1234;
     @Mock
     private PackageManager mPackageManager;
     @Mock
@@ -58,25 +64,33 @@
     private IconDrawableFactory mIconDrawableFactory;
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private PreferenceManager mPreferenceManager;
-    private RestrictedAppDetails mFragment;
+    @Mock
+    private SettingsActivity mSettingsActivity;
+    @Mock
+    private InstrumentedPreferenceFragment mFragment;
+    private RestrictedAppDetails mRestrictedAppDetails;
     private Context mContext;
+    private Intent mIntent;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = spy(RuntimeEnvironment.application);
-        mFragment = spy(new RestrictedAppDetails());
+        mRestrictedAppDetails = spy(new RestrictedAppDetails());
 
-        doReturn(mPreferenceManager).when(mFragment).getPreferenceManager();
+        doReturn(mPreferenceManager).when(mRestrictedAppDetails).getPreferenceManager();
         doReturn(mContext).when(mPreferenceManager).getContext();
-        mFragment.mPackageManager = mPackageManager;
-        mFragment.mIconDrawableFactory = mIconDrawableFactory;
-        mFragment.mPackageOpsList = new ArrayList<>();
-        mFragment.mPackageOpsList.add(
-                new AppOpsManager.PackageOps(PACKAGE_NAME, UID, null /* entries */));
-        mFragment.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
-        doReturn(mPreferenceManager).when(mFragment.mRestrictedAppListGroup).getPreferenceManager();
+        mRestrictedAppDetails.mPackageManager = mPackageManager;
+        mRestrictedAppDetails.mIconDrawableFactory = mIconDrawableFactory;
+        mRestrictedAppDetails.mAppInfos = new ArrayList<>();
+        mRestrictedAppDetails.mAppInfos.add(new AppInfo.Builder()
+                .setPackageName(PACKAGE_NAME)
+                .build());
+        mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
+        mRestrictedAppDetails.mBatteryUtils = new BatteryUtils(mContext);
+        doReturn(mPreferenceManager).when(
+                mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager();
     }
 
     @Test
@@ -84,12 +98,33 @@
         doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, 0);
         doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
 
-        mFragment.refreshUi();
+        mRestrictedAppDetails.refreshUi();
 
-        assertThat(mFragment.mRestrictedAppListGroup.getPreferenceCount()).isEqualTo(1);
-        final Preference preference = mFragment.mRestrictedAppListGroup.getPreference(0);
+        assertThat(mRestrictedAppDetails.mRestrictedAppListGroup.getPreferenceCount()).isEqualTo(1);
+        final Preference preference = mRestrictedAppDetails.mRestrictedAppListGroup.getPreference(
+                0);
         assertThat(preference.getKey()).isEqualTo(PACKAGE_NAME);
         assertThat(preference.getTitle()).isEqualTo(APP_NAME);
     }
 
+    @Test
+    public void testStartRestrictedAppDetails_startWithCorrectData() {
+        final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+        doAnswer(invocation -> {
+            // Get the intent in which it has the app info bundle
+            mIntent = captor.getValue();
+            return true;
+        }).when(mSettingsActivity).startActivity(captor.capture());
+
+        RestrictedAppDetails.startRestrictedAppDetails(mSettingsActivity, mFragment,
+                mRestrictedAppDetails.mAppInfos);
+
+        final Bundle bundle = mIntent.getBundleExtra(
+                SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
+        // Verify the bundle has the correct info
+        final List<AppInfo> appInfos = bundle.getParcelableArrayList(
+                RestrictedAppDetails.EXTRA_APP_INFO_LIST);
+        assertThat(appInfos).hasSize(1);
+        assertThat(appInfos.get(0).packageName).isEqualTo(PACKAGE_NAME);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceControllerTest.java
index cabcdcf..af0f855 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySaverPreferenceControllerTest.java
@@ -25,6 +25,7 @@
 
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -34,7 +35,8 @@
 import org.robolectric.annotation.Config;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows =
+        SettingsShadowResources.class)
 public class AutoBatterySaverPreferenceControllerTest {
 
     private AutoBatterySaverPreferenceController mController;
@@ -45,6 +47,8 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.integer.config_lowBatteryWarningLevel, 15);
         mContext = RuntimeEnvironment.application;
         mPreference = new SwitchPreference(mContext);
         mController = new AutoBatterySaverPreferenceController(mContext);
@@ -84,4 +88,9 @@
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0)).isEqualTo(0);
     }
 
+    @Test
+    public void testIsChecked_useDefaultValue_returnTrue() {
+        assertThat(mController.isChecked()).isTrue();
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
index 32a4fac..d3c2752 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceControllerTest.java
@@ -24,6 +24,7 @@
 
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.widget.SeekBarPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -35,9 +36,11 @@
 import org.robolectric.annotation.Config;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows =
+        SettingsShadowResources.class)
 public class AutoBatterySeekBarPreferenceControllerTest {
-    private static final int TRIGGER_LEVEL = 15;
+    private static final int TRIGGER_LEVEL = 20;
+    private static final int DEFAULT_LEVEL = 15;
 
     private AutoBatterySeekBarPreferenceController mController;
     private Context mContext;
@@ -51,6 +54,8 @@
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
 
+        SettingsShadowResources.overrideResource(
+                com.android.internal.R.integer.config_lowBatteryWarningLevel, DEFAULT_LEVEL);
         mContext = RuntimeEnvironment.application;
         mPreference = new SeekBarPreference(mContext);
         mPreference.setMax(100);
@@ -68,13 +73,21 @@
     }
 
     @Test
+    public void testPreference_defaultValue_preferenceVisible() {
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isVisible()).isTrue();
+        assertThat(mPreference.getProgress()).isEqualTo(DEFAULT_LEVEL);
+    }
+
+    @Test
     public void testPreference_lowPowerLevelNotZero_updatePreference() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, TRIGGER_LEVEL);
         mController.updateState(mPreference);
 
         assertThat(mPreference.isVisible()).isTrue();
-        assertThat(mPreference.getTitle()).isEqualTo("Turn on automatically at 15%");
+        assertThat(mPreference.getTitle()).isEqualTo("Turn on automatically at 20%");
         assertThat(mPreference.getProgress()).isEqualTo(TRIGGER_LEVEL);
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java
new file mode 100644
index 0000000..3da7bbd
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.robolectric.RuntimeEnvironment.application;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowJobScheduler;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AnomalyCleanUpJobServiceTest {
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testScheduleCleanUp() {
+        AnomalyCleanUpJobService.scheduleCleanUp(application);
+
+        ShadowJobScheduler shadowJobScheduler = Shadows.shadowOf(
+                application.getSystemService(JobScheduler.class));
+        List<JobInfo> pendingJobs = shadowJobScheduler.getAllPendingJobs();
+        assertEquals(1, pendingJobs.size());
+        JobInfo pendingJob = pendingJobs.get(0);
+        assertThat(pendingJob.getId()).isEqualTo(R.id.job_anomaly_clean_up);
+        assertThat(pendingJob.getMinLatencyMillis()).isEqualTo(TimeUnit.DAYS.toMillis(1));
+        assertThat(pendingJob.isRequireDeviceIdle()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
new file mode 100644
index 0000000..48c99c5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.robolectric.RuntimeEnvironment.application;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.content.Intent;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowJobScheduler;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AnomalyDetectionJobServiceTest {
+
+    @Test
+    public void testScheduleCleanUp() {
+        AnomalyDetectionJobService.scheduleAnomalyDetection(application,
+                new Intent());
+
+        ShadowJobScheduler shadowJobScheduler = Shadows.shadowOf(
+                application.getSystemService(JobScheduler.class));
+        List<JobInfo> pendingJobs = shadowJobScheduler.getAllPendingJobs();
+        assertThat(pendingJobs).hasSize(1);
+        JobInfo pendingJob = pendingJobs.get(0);
+        assertThat(pendingJob.getId()).isEqualTo(R.id.job_anomaly_detection);
+        assertThat(pendingJob.getMaxExecutionDelayMillis()).isEqualTo(
+                TimeUnit.MINUTES.toMillis(30));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
index 78c86f8..abf04cd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java
@@ -49,7 +49,9 @@
             + ",reduced_battery_enabled=true"
             + ",reduced_battery_percent=30"
             + ",low_battery_enabled=false"
-            + ",low_battery_hour=10";
+            + ",low_battery_hour=10"
+            + ",data_history_retain_hour=24"
+            + ",excessive_bg_drain_percentage=25";
     private Context mContext;
 
     @Before
@@ -76,6 +78,8 @@
         assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(30);
         assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse();
         assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(10);
+        assertThat(batteryTipPolicy.dataHistoryRetainHour).isEqualTo(24);
+        assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(25);
     }
 
     @Test
@@ -97,6 +101,7 @@
         assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50);
         assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse();
         assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(16);
+        assertThat(batteryTipPolicy.dataHistoryRetainHour).isEqualTo(72);
+        assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(10);
     }
-
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
new file mode 100644
index 0000000..c7865d8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2018 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.fuelgauge.batterytip;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.TestConfig;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.batterytip.actions.OpenRestrictAppFragmentAction;
+import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
+import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
+import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BatteryTipUtilsTest {
+    @Mock
+    private SettingsActivity mSettingsActivity;
+    @Mock
+    private InstrumentedPreferenceFragment mFragment;
+    private RestrictAppTip mRestrictAppTip;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        FakeFeatureFactory.setupForTest();
+        doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
+        mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
+    }
+
+    @Test
+    public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() {
+        doReturn(BatteryTip.StateType.NEW).when(mRestrictAppTip).getState();
+
+        assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
+                mFragment)).isInstanceOf(RestrictAppAction.class);
+    }
+
+    @Test
+    public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() {
+        doReturn(BatteryTip.StateType.HANDLED).when(mRestrictAppTip).getState();
+
+        assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
+                mFragment)).isInstanceOf(OpenRestrictAppFragmentAction.class);
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java
index 66d5f81..7dfe42e 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/EarlyWarningTipTest.java
@@ -83,4 +83,38 @@
 
         assertThat(mEarlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.HANDLED);
     }
+
+    @Test
+    public void testUpdate_devicePluggedIn_typeBecomeInvisible() {
+        final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE,
+                false /* powerModeOn */);
+
+        mEarlyWarningTip.updateState(nextTip);
+
+        assertThat(mEarlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE);
+    }
+
+    @Test
+    public void testUpdate_turnOnLowPowerModeExplicitly_typeStillInvisible() {
+        final EarlyWarningTip earlyWarningTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE,
+                false /* powerModeOn */);
+        final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE,
+                true /* powerModeOn */);
+
+        earlyWarningTip.updateState(nextTip);
+
+        assertThat(earlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE);
+    }
+
+    @Test
+    public void testUpdate_turnOffLowPowerModeExplicitly_typeBecomeInvisible() {
+        final EarlyWarningTip earlyWarningTip = new EarlyWarningTip(BatteryTip.StateType.HANDLED,
+                true /* powerModeOn */);
+        final EarlyWarningTip nextTip = new EarlyWarningTip(BatteryTip.StateType.INVISIBLE,
+                false /* powerModeOn */);
+
+        earlyWarningTip.updateState(nextTip);
+
+        assertThat(earlyWarningTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationSettingsTest.java
index 0b329d3..d6ecb1c 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationSettingsTest.java
@@ -59,7 +59,7 @@
     @Test
     public void testGetPreferenceControllers_shouldAllBeCreated() {
         final List<AbstractPreferenceController> controllers =
-                mFragment.getPreferenceControllers(mContext);
+                mFragment.createPreferenceControllers(mContext);
 
         assertThat(controllers.isEmpty()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
index 905d2d6..4d82356 100644
--- a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
@@ -107,7 +107,7 @@
     @Test
     public void testGetPreferenceControllers_shouldRegisterLifecycleObservers() {
         final List<AbstractPreferenceController> controllers =
-                mFragment.getPreferenceControllers(mActivity);
+                mFragment.createPreferenceControllers(mActivity);
         int lifecycleObserverCount = 0;
         for (AbstractPreferenceController controller : controllers) {
             if (controller instanceof LifecycleObserver) {
@@ -121,7 +121,7 @@
     @Test
     public void testGetPreferenceControllers_shouldAllBeCreated() {
         final List<AbstractPreferenceController> controllers =
-                mFragment.getPreferenceControllers(mActivity);
+                mFragment.createPreferenceControllers(mActivity);
 
         assertThat(controllers.isEmpty()).isFalse();
     }
@@ -189,7 +189,7 @@
                 fragment.getPreferenceScreenResId());
         final List<String> preferenceKeys = new ArrayList<>();
 
-        for (AbstractPreferenceController controller : fragment.getPreferenceControllers(context)) {
+        for (AbstractPreferenceController controller : fragment.createPreferenceControllers(context)) {
             preferenceKeys.add(controller.getPreferenceKey());
         }
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index e17136e..f3af2df 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -22,6 +22,7 @@
 
 import android.content.Intent;
 import android.os.UserHandle;
+import android.view.View;
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
@@ -102,15 +103,27 @@
                 .isEqualTo(123);
     }
 
+    @Config(qualifiers = "sw400dp")
     @Test
-    public void assertThat_chooseLockIconChanged_WhenFingerprintExtraSet() {
+    public void fingerprintExtraSet_shouldDisplayFingerprintIcon() {
         ChooseLockPattern activity = createActivity(true);
         ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
                 activity.getFragmentManager().findFragmentById(R.id.main_content);
+
         ShadowDrawable drawable = Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon());
         assertThat(drawable.getCreatedFromResId()).isEqualTo(R.drawable.ic_fingerprint_header);
     }
 
+    @Test
+    public void smallScreens_shouldHideIcon() {
+        ChooseLockPattern activity = createActivity(true);
+        ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
+                activity.getFragmentManager().findFragmentById(R.id.main_content);
+
+        View iconView = fragment.getView().findViewById(R.id.suw_layout_icon);
+        assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
+    }
+
     private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
         return Robolectric.buildActivity(
                 ChooseLockPattern.class,
diff --git a/tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java
rename to tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 81a6bb31..ea32641 100644
--- a/tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.settings;
+package com.android.settings.password;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -28,9 +28,11 @@
 import android.view.View;
 import android.widget.Button;
 
+import com.android.settings.R;
+import com.android.settings.SetupRedactionInterstitial;
+import com.android.settings.TestConfig;
 import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment;
 import com.android.settings.password.ChooseLockPattern.IntentBuilder;
-import com.android.settings.password.SetupChooseLockPattern;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
@@ -89,8 +91,9 @@
                 .isEqualTo(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
     }
 
+    @Config(qualifiers = "sw400dp")
     @Test
-    public void screenLockOptions_shouldBeVisible() {
+    public void sw400dp_shouldShowScreenLockOptions() {
         Button button = mActivity.findViewById(R.id.screen_lock_options);
         assertThat(button).isNotNull();
         assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
@@ -103,6 +106,13 @@
     }
 
     @Test
+    public void smallScreens_shouldHideScreenLockOptions() {
+        Button button = mActivity.findViewById(R.id.screen_lock_options);
+        assertThat(button).isNotNull();
+        assertThat(button.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
     public void skipButton_shouldBeVisible_duringNonFingerprintFlow() {
         Button button = mActivity.findViewById(R.id.footerLeftButton);
         assertThat(button).isNotNull();
diff --git a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
index de1625b..bf4733a 100644
--- a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
@@ -20,26 +20,29 @@
 import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
 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.arch.lifecycle.LifecycleOwner;
 import android.content.Context;
+import android.os.UserManager;
 import android.print.PrintJob;
 import android.print.PrintJobInfo;
 import android.print.PrintManager;
 import android.printservice.PrintServiceInfo;
-import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.wrapper.PrintManagerWrapper;
+import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
@@ -57,8 +60,11 @@
 
     @Mock
     private PrintManagerWrapper mPrintManager;
+    @Mock
+    private UserManager mUserManager;
     private Context mContext;
-    private Preference mPreference;
+    @Mock
+    private RestrictedPreference mPreference;
     private PrintSettingPreferenceController mController;
     private LifecycleOwner mLifecycleOwner;
     private Lifecycle mLifecycle;
@@ -66,8 +72,9 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mPreference = new Preference(mContext);
+        mContext = spy(RuntimeEnvironment.application);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        mPreference = spy(new RestrictedPreference(mContext));
         mController = new PrintSettingPreferenceController(mContext);
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
@@ -122,4 +129,10 @@
         assertThat(mPreference.getSummary())
                 .isEqualTo(mContext.getString(R.string.print_settings_summary_no_service));
     }
+
+    @Test
+    public void updateState_shouldCheckRestriction() {
+        mController.updateState(mPreference);
+        verify(mPreference).checkRestrictionAndSetDisabled(UserManager.DISALLOW_PRINTING);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
index 260e3ae..f5d3793 100644
--- a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
+++ b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
@@ -18,7 +18,6 @@
 
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 
@@ -26,15 +25,15 @@
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 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.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
@@ -50,13 +49,13 @@
 
     private static final String TEST_PREF_KEY = "test_pref_key";
 
-    @Mock
     private Context mContext;
     private BaseSearchIndexProvider mIndexProvider;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
         mIndexProvider = spy(BaseSearchIndexProvider.class);
     }
 
@@ -86,11 +85,43 @@
     public void getNonIndexableKeys_preferenceIsAvailable_shouldReturnEmptyList() {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new AvailablePreferenceController(mContext));
-        doReturn(controllers).when(mIndexProvider).getPreferenceControllers(mContext);
+        doReturn(controllers).when(mIndexProvider).createPreferenceControllers(mContext);
 
         assertThat(mIndexProvider.getNonIndexableKeys(mContext)).isEqualTo(Collections.EMPTY_LIST);
     }
 
+    @Test
+    @Config(qualifiers = "mcc999")
+    public void getAllPreferenceControllers_shouldCreateControllerFromCodeAndXml() {
+
+        final BaseSearchIndexProvider provider = new BaseSearchIndexProvider() {
+            @Override
+            public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                    boolean enabled) {
+                final SearchIndexableResource sir = new SearchIndexableResource(context);
+                sir.xmlResId = R.xml.location_settings;
+                return Arrays.asList(sir);
+            }
+
+            @Override
+            public List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+                final List<AbstractPreferenceController> controllersFromCode = new ArrayList<>();
+                controllersFromCode.add(new BasePreferenceController(mContext, "TEST_KEY") {
+                    @Override
+                    public int getAvailabilityStatus() {
+                        return AVAILABLE;
+                    }
+                });
+                return controllersFromCode;
+            }
+        };
+
+        final List<AbstractPreferenceController> controllers =
+                provider.getPreferenceControllers(mContext);
+
+        assertThat(controllers).hasSize(3);
+    }
+
     public static class NotAvailablePreferenceController extends AbstractPreferenceController
             implements PreferenceControllerMixin {
         public NotAvailablePreferenceController(Context context) {
@@ -112,7 +143,7 @@
     public void getNonIndexableKeys_preferenceIsNotAvailable_shouldReturnKey() {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new NotAvailablePreferenceController(mContext));
-        doReturn(controllers).when(mIndexProvider).getPreferenceControllers(mContext);
+        doReturn(controllers).when(mIndexProvider).createPreferenceControllers(mContext);
 
         assertThat(mIndexProvider.getNonIndexableKeys(mContext)).contains(TEST_PREF_KEY);
     }
diff --git a/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java b/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java
index 466f5a9..e5f1631 100644
--- a/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java
+++ b/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java
@@ -21,7 +21,6 @@
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.R;
-import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,12 +47,6 @@
                     result.add(KEY);
                     return result;
                 }
-
-                @Override
-                public List<AbstractPreferenceController> getPreferenceControllers(
-                        Context context) {
-                    return null;
-                }
             };
 
 }
diff --git a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java b/tests/robotests/src/com/android/settings/search/PreferenceXmlParserUtilTest.java
similarity index 89%
rename from tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
rename to tests/robotests/src/com/android/settings/search/PreferenceXmlParserUtilTest.java
index 2d1a232..999e93a 100644
--- a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
+++ b/tests/robotests/src/com/android/settings/search/PreferenceXmlParserUtilTest.java
@@ -21,6 +21,7 @@
 
 import android.content.Context;
 import android.content.res.XmlResourceParser;
+import android.os.Bundle;
 import android.util.AttributeSet;
 import android.util.Xml;
 
@@ -32,9 +33,13 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
 import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
 
 /**
  * These tests use a series of preferences that have specific attributes which are sometimes
@@ -45,13 +50,13 @@
  */
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class XmlParserUtilTest {
+public class PreferenceXmlParserUtilTest {
 
     private Context mContext;
 
     @Before
     public void setUp() {
-        mContext = ShadowApplication.getInstance().getApplicationContext();
+        mContext = RuntimeEnvironment.application;
     }
 
     @Test
@@ -91,7 +96,6 @@
         String summary = PreferenceXmlParserUtils.getDataSummary(mContext, attrs);
         String expSummary = mContext.getString(R.string.summary_placeholder);
         assertThat(summary).isEqualTo(expSummary);
-
     }
 
     @Test
@@ -163,6 +167,20 @@
         assertThat(entries).isNull();
     }
 
+    @Test
+    @Config(qualifiers = "mcc999")
+    public void extractMetadata_shouldContainKeyAndControllerName()
+            throws IOException, XmlPullParserException {
+        final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
+                R.xml.location_settings);
+
+        assertThat(metadata).isNotEmpty();
+        for (Bundle bundle : metadata) {
+            assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_KEY)).isNotNull();
+            assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_CONTROLLER)).isNotNull();
+        }
+    }
+
     /**
      * @param resId the ID for the XML preference
      * @return an XML resource parser that points to the start tag
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index 72dd94c..5aa2a24 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -18,9 +18,8 @@
 
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
 import static com.google.common.truth.Truth.assertThat;
-
 import static junit.framework.Assert.fail;
-
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 
@@ -36,6 +35,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -67,7 +67,7 @@
         final int beforeCount =
                 mSearchProvider.getSearchIndexableResources().getProviderValues().size();
 
-        ( (SearchIndexableResourcesImpl) mSearchProvider.getSearchIndexableResources())
+        ((SearchIndexableResourcesImpl) mSearchProvider.getSearchIndexableResources())
                 .addIndex(java.lang.String.class);
 
         assertThat(mSearchProvider.getSearchIndexableResources().getProviderValues())
@@ -86,11 +86,13 @@
     @Test
     public void testNonIndexableKeys_GetsKeyFromProvider() {
         mSearchProvider.getSearchIndexableResources().getProviderValues().clear();
-        ( (SearchIndexableResourcesImpl) mSearchProvider.getSearchIndexableResources())
+        ((SearchIndexableResourcesImpl) mSearchProvider.getSearchIndexableResources())
                 .addIndex(FakeIndexProvider.class);
 
         SettingsSearchIndexablesProvider provider = spy(new SettingsSearchIndexablesProvider());
 
+        doReturn(RuntimeEnvironment.application).when(provider).getContext();
+
         Cursor cursor = provider.queryNonIndexableKeys(null);
         boolean hasTestKey = false;
         while (cursor.moveToNext()) {
@@ -106,8 +108,8 @@
 
     @Test
     public void testAllClassNamesHaveProviders() {
-        for (Class clazz: mSearchProvider.getSearchIndexableResources().getProviderValues()) {
-            if(DatabaseIndexingUtils.getSearchIndexProvider(clazz) == null) {
+        for (Class clazz : mSearchProvider.getSearchIndexableResources().getProviderValues()) {
+            if (DatabaseIndexingUtils.getSearchIndexProvider(clazz) == null) {
                 fail(clazz.getName() + "is not an index provider");
             }
         }
diff --git a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
index cca2794..389b0aa 100644
--- a/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
+++ b/tests/robotests/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
@@ -104,6 +104,7 @@
     }
 
     @Test
+    @Config(qualifiers = "mcc999")
     public void testNonIndexablesColumnFetched() {
         Uri rawUri = Uri.parse("content://" + BASE_AUTHORITY + "/" +
                 SearchIndexablesContract.NON_INDEXABLES_KEYS_PATH);
diff --git a/tests/robotests/src/com/android/settings/search/indexing/FakeSettingsFragment.java b/tests/robotests/src/com/android/settings/search/indexing/FakeSettingsFragment.java
index e857ae4..c314fc2 100644
--- a/tests/robotests/src/com/android/settings/search/indexing/FakeSettingsFragment.java
+++ b/tests/robotests/src/com/android/settings/search/indexing/FakeSettingsFragment.java
@@ -68,7 +68,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return null;
     }
 
@@ -116,11 +116,5 @@
                     keys.add("pref_key_3");
                     return keys;
                 }
-
-                @Override
-                public List<AbstractPreferenceController>
-                getPreferenceControllers(Context context) {
-                    return null;
-                }
             };
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
index b986e4f..f71ae93 100644
--- a/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/system/FactoryResetPreferenceControllerTest.java
@@ -16,15 +16,14 @@
 package com.android.settings.system;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Answers.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.when;
 
 import android.accounts.AccountManager;
 import android.content.Context;
 import android.os.UserManager;
 
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 import com.android.settings.testutils.shadow.ShadowUtils;
 
@@ -34,7 +33,9 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(
@@ -46,20 +47,20 @@
 
     private static final String FACTORY_RESET_KEY = "factory_reset";
 
-    @Mock(answer = RETURNS_DEEP_STUBS)
-    private Context mContext;
     @Mock
     private UserManager mUserManager;
     @Mock
     private AccountManager mAccountManager;
 
+    private Context mContext;
     private FactoryResetPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-        when(mContext.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager);
+        mContext = RuntimeEnvironment.application;
+        ShadowApplication.getInstance().setSystemService(Context.USER_SERVICE, mUserManager);
+        ShadowApplication.getInstance().setSystemService(Context.ACCOUNT_SERVICE, mAccountManager);
         mController = new FactoryResetPreferenceController(mContext);
     }
 
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index 59a08ae..a381075 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -43,10 +43,10 @@
 import android.os.UserManager;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.widget.RadioButtonPreference;
 import com.android.settings.wrapper.UserPackageWrapper;
+import com.android.settingslib.applications.DefaultAppInfo;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.wrapper.PackageManagerWrapper;
 
diff --git a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
index fd1d79e..c8b3ef6 100644
--- a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
@@ -28,9 +28,9 @@
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.TestConfig;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index b200639..e9b6146 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -199,15 +199,6 @@
         assertThat(mView.findViewById(R.id.eap).getVisibility()).isEqualTo(View.GONE);
     }
 
-    @Test
-    public void ssidGetFocus_addNewNetwork_shouldReturnTrue() {
-        mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */,
-                WifiConfigUiBase.MODE_CONNECT);
-        final TextView ssid = mView.findViewById(R.id.ssid);
-        // Verify ssid text get focus when add new network
-        assertThat(ssid.isFocused()).isTrue();
-    }
-
     public class TestWifiConfigController extends WifiConfigController {
 
         public TestWifiConfigController(WifiConfigUiBase parent, View view,
diff --git a/tests/unit/Android.mk b/tests/unit/Android.mk
index cbf91db..1981a63 100644
--- a/tests/unit/Android.mk
+++ b/tests/unit/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := SettingsUnitTests
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_COMPATIBILITY_SUITE := device-tests
 
 LOCAL_INSTRUMENTATION_FOR := Settings
diff --git a/tests/unit/src/com/android/settings/core/PreferenceControllerContractTest.java b/tests/unit/src/com/android/settings/core/PreferenceControllerContractTest.java
index b16c700..802a3a7 100644
--- a/tests/unit/src/com/android/settings/core/PreferenceControllerContractTest.java
+++ b/tests/unit/src/com/android/settings/core/PreferenceControllerContractTest.java
@@ -20,7 +20,6 @@
 
 import android.content.Context;
 import android.platform.test.annotations.Presubmit;
-import android.provider.SearchIndexableResource;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.MediumTest;
 import android.support.test.runner.AndroidJUnit4;
diff --git a/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java b/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
index e44a596..bc6caf6 100644
--- a/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
+++ b/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
@@ -51,6 +51,7 @@
 import android.support.test.runner.AndroidJUnit4;
 
 import com.android.settings.Settings.WifiSettingsActivity;
+import com.android.settingslib.utils.ThreadUtils;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.TestAccessPointBuilder;
 import com.android.settingslib.wifi.WifiTracker;
@@ -60,6 +61,7 @@
 import com.google.common.collect.Lists;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -261,26 +263,6 @@
     }
 
     @Test
-    public void resumingAp_shouldNotForceUpdateWhenExistingAPsAreListed() {
-        setWifiState(WifiManager.WIFI_STATE_ENABLED);
-        setupConnectedAccessPoint();
-        when(mWifiTracker.isConnected()).thenReturn(true);
-
-        launchActivity();
-
-        onView(withText(resourceString(WIFI_DISPLAY_STATUS_CONNECTED))).check(
-                matches(isDisplayed()));
-        verify(mWifiTracker).forceUpdate();
-
-        Activity activity = mActivityRule.getActivity();
-        activity.finish();
-        getInstrumentation().waitForIdleSync();
-
-        getInstrumentation().callActivityOnStart(activity);
-        verify(mWifiTracker, atMost(1)).forceUpdate();
-    }
-
-    @Test
     public void changingSecurityStateOnApShouldNotCauseMultipleListItems() {
         setWifiState(WifiManager.WIFI_STATE_ENABLED);
         TestAccessPointBuilder builder = new TestAccessPointBuilder(mContext)
@@ -305,10 +287,10 @@
 
         onView(withText(TEST_SSID)).check(matches(isDisplayed()));
 
-        mWifiListener.onAccessPointsChanged();
+        ThreadUtils.postOnMainThread(() -> mWifiListener.onAccessPointsChanged());
         onView(withText(TEST_SSID)).check(matches(isDisplayed()));
 
-        mWifiListener.onAccessPointsChanged();
+        ThreadUtils.postOnMainThread(() -> mWifiListener.onAccessPointsChanged());
         onView(withText(TEST_SSID)).check(matches(isDisplayed()));
     }
 
@@ -361,13 +343,14 @@
         onView(withId(resourceId(ID, PASSWORD))).check(matches(isDisplayed()));
     }
 
+    @Ignore("b/73796195")
+    @Test
     public void onConnectedChanged_shouldNotFetchAPs() {
         setWifiState(WifiManager.WIFI_STATE_ENABLED);
         when(mWifiTracker.isConnected()).thenReturn(true);
 
         launchActivity();
 
-        verify(mWifiTracker, atMost(1)).forceUpdate();
         verify(mWifiTracker, times(1)).getAccessPoints();
         onView(withText(WIFI_DISPLAY_STATUS_CONNECTED)).check(matches(isDisplayed()));
 
