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/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/strings.xml b/res/values-bs/strings.xml
index 942999a..5e24ffe 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -3403,6 +3403,10 @@
     <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>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 9d319da..7873012 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -3358,6 +3358,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>
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/strings.xml b/res/values-en-rAU/strings.xml
index 15e68ae..3a7e863 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -3358,6 +3358,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-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 35a548b..fe607e0 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -3358,6 +3358,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-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 15e68ae..3a7e863 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -3358,6 +3358,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-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 15e68ae..3a7e863 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -3358,6 +3358,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-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/strings.xml b/res/values-es/strings.xml
index 9d3ad01..a6e5498 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/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 USB también 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">"Cargando el dispositivo"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Cargando dispositivo conectado"</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/strings.xml b/res/values-iw/strings.xml
index 140ac32..c87460c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -3450,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>
@@ -3936,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-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/strings.xml b/res/values-lt/strings.xml
index e466f90..ed6de46 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>
@@ -948,8 +947,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 +1515,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>
@@ -3454,6 +3448,10 @@
     <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>
+    <!-- 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">"Šio įrenginio įkrovimas"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Įkraunamas prijungtas įrenginys"</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/strings.xml b/res/values-my/strings.xml
index b346f2e..2eade68 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/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-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/strings.xml b/res/values-sk/strings.xml
index a9fdc50..906ce8b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -3448,6 +3448,10 @@
     <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>
+    <!-- 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íjanie zariadenia"</string>
     <string name="usb_summary_power_only" msgid="1996391096369798526">"Nabíja sa pripojené zariadenie"</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/strings.xml b/res/values-zh-rTW/strings.xml
index 7a510dd..5397d25 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>
@@ -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>
@@ -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">"為了安全起見，請設定 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>
@@ -3368,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>
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 73e643a..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 -->
@@ -8410,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>
@@ -8882,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/development_settings.xml b/res/xml/development_settings.xml
index a9e4722..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"
@@ -256,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/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/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/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 8c998e9..b878bc8 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -212,7 +212,7 @@
     }
 
     @Override
-    protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         retrieveAppEntry();
         if (mPackageInfo == null) {
             return null;
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 dcae5ef..df64d76 100644
--- a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java
@@ -112,9 +112,10 @@
     @Override
     public void onPrepareOptionsMenu(Menu menu) {
         mInstallMenu = menu.findItem(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU);
-        final Intent appStoreIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName);
-        if (appStoreIntent == null) {
-            mInstallMenu.setEnabled(false);
+        if (mInstallMenu != null) {
+            if (AppStoreUtil.getAppStoreLink(mContext, mPackageName) == null) {
+                mInstallMenu.setEnabled(false);
+            }
         }
     }
 
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/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/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
index b2e1de5..4c2a9b1 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
@@ -26,6 +26,7 @@
 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;
 
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 1bbee0c..76250fa 100644
--- a/src/com/android/settings/core/BasePreferenceController.java
+++ b/src/com/android/settings/core/BasePreferenceController.java
@@ -116,6 +116,9 @@
     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/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index a4f9a6b..90c781b 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -29,9 +29,13 @@
 import android.util.Log;
 
 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;
@@ -63,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);
@@ -181,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) {
@@ -217,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
@@ -327,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/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 8636ef5..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));
@@ -404,6 +405,7 @@
         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));
@@ -452,7 +454,7 @@
 
     @VisibleForTesting
     <T extends AbstractPreferenceController> T getDevelopmentOptionsController(Class<T> clazz) {
-        return getPreferenceController(clazz);
+        return use(clazz);
     }
 
     /**
@@ -476,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/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/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/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 e6fd449..07f4a2c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -228,7 +228,7 @@
     }
 
     @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<>();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
index 75e3d38..ab7863c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java
@@ -307,7 +307,7 @@
     }
 
     @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());
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/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/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 a01ea1b..3df24ed 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -34,6 +34,7 @@
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import androidx.app.slice.Slice;
+import androidx.app.slice.builders.SliceAction;
 import androidx.app.slice.builders.ListBuilder;
 import androidx.app.slice.builders.ListBuilder.RowBuilder;
 
@@ -63,7 +64,7 @@
                 .setTitle(sliceData.getTitle())
                 .setTitleItem(icon)
                 .setSubtitle(subtitleText)
-                .setContentIntent(contentIntent);
+                .setPrimaryAction(new SliceAction(contentIntent, null, null));
 
         // TODO (b/71640747) Respect setting availability.
 
@@ -100,7 +101,7 @@
             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/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/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 935389c..24823fe 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java
@@ -180,6 +180,15 @@
     }
 
     @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);
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/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/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/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/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/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/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/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/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/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..79c7fd0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacyTest.java
@@ -408,7 +408,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/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 32e2b0b..1debe85 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;
@@ -222,7 +217,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/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/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/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 e1005ea..bc6caf6 100644
--- a/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
+++ b/tests/unit/src/com/android/settings/wifi/WifiSettingsUiTest.java
@@ -61,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;
@@ -342,6 +343,8 @@
         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);
