Merge "Use BatteryStatsLoader in InstalledAppDetails" into oc-dev
diff --git a/res/drawable-hdpi/empty_search_results.png b/res/drawable-hdpi/empty_search_results.png
new file mode 100644
index 0000000..290f0ed
--- /dev/null
+++ b/res/drawable-hdpi/empty_search_results.png
Binary files differ
diff --git a/res/drawable-mdpi/empty_search_results.png b/res/drawable-mdpi/empty_search_results.png
new file mode 100644
index 0000000..9ef49a6
--- /dev/null
+++ b/res/drawable-mdpi/empty_search_results.png
Binary files differ
diff --git a/res/drawable-xhdpi/empty_search_results.png b/res/drawable-xhdpi/empty_search_results.png
new file mode 100644
index 0000000..92a9392
--- /dev/null
+++ b/res/drawable-xhdpi/empty_search_results.png
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_search_results.png b/res/drawable-xxhdpi/empty_search_results.png
new file mode 100644
index 0000000..894ed7b
--- /dev/null
+++ b/res/drawable-xxhdpi/empty_search_results.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/empty_search_results.png b/res/drawable-xxxhdpi/empty_search_results.png
new file mode 100644
index 0000000..8f12e96
--- /dev/null
+++ b/res/drawable-xxxhdpi/empty_search_results.png
Binary files differ
diff --git a/res/drawable/no_search_results.xml b/res/drawable/no_search_results.xml
deleted file mode 100644
index a75a443..0000000
--- a/res/drawable/no_search_results.xml
+++ /dev/null
@@ -1,59 +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.
-
-  -->
-
-<vector android:height="24dp" android:viewportHeight="267.9"
-    android:viewportWidth="236.3" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="0.9" android:fillColor="#00000000"
-        android:pathData="M18,-19c0,-0.4 0,-0.5 -0.3,-0.3l-12,7c-0.3,0.2 -0.2,0.5 0.1,0.6l11.9,7C18,-4.5 18,-4.7 18,-5V-19z"
-        android:strokeColor="#FFFFFF" android:strokeWidth="2"/>
-    <path android:fillAlpha="0.9" android:fillColor="#00000000"
-        android:pathData="M18.9,-12c0,-3.8 -3.1,-6.9 -6.9,-6.9c-3.8,0 -6.9,3.1 -6.9,6.9c0,3.8 3.1,6.9 6.9,6.9C15.8,-5.1 18.9,-8.2 18.9,-12z"
-        android:strokeColor="#FFFFFF" android:strokeWidth="1.8033"/>
-    <path android:fillAlpha="0.9" android:fillColor="#00000000"
-        android:pathData="M19,-5.7C19,-5.4 18.6,-5 18.2,-5H5.8C5.4,-5 5,-5.4 5,-5.7v-12.6C5,-18.6 5.4,-19 5.8,-19h12.4c0.4,0 0.8,0.4 0.8,0.7V-5.7z"
-        android:strokeColor="#FFFFFF" android:strokeWidth="2"/>
-    <path android:fillColor="#FAFAFA" android:pathData="M118.2,134.4m-118.2,0a118.2,118.2 0,1 1,236.4 0a118.2,118.2 0,1 1,-236.4 0"/>
-    <path android:fillColor="#F5F5F5" android:pathData="M22.8,239L96,206.2c0.2,-0.1 0.3,-0.1 0.5,-0.1l117.3,23c0.7,0.2 0.9,1.2 0.2,1.5l-75.9,37.2c-0.2,0.1 -0.3,0.1 -0.5,0.1L23,240.5C22.2,240.3 22.1,239.3 22.8,239z"/>
-    <path android:fillColor="#E8E8E8" android:pathData="M35.6,76.5l102,17.3l0,167.4l-102,-23.2z"/>
-    <path android:fillColor="#E8E8E8" android:pathData="M35.7,19.6l102,17.3l0,79.2l-102,-23.2z"/>
-    <path android:fillColor="#EFEFEF" android:pathData="M35.7,19.6l66.6,-19.6l100.5,19.1l-65.1,18.5z"/>
-    <path android:fillColor="#00000000"
-        android:pathData="M37.6,131.9L135.2,150"
-        android:strokeColor="#E0E0E0" android:strokeWidth="0.1816"/>
-    <path android:fillAlpha="0.5" android:fillColor="#00000000"
-        android:pathData="M39.1,185.3L132.3,204.8"
-        android:strokeColor="#C1C1C1" android:strokeWidth="0.1816"/>
-    <path android:fillColor="#00000000"
-        android:pathData="M137.7,147.6L116.5,154.5"
-        android:strokeColor="#E0E0E0" android:strokeWidth="0.1816"/>
-    <path android:fillColor="#00000000" android:pathData="M35.7,142.2"
-        android:strokeColor="#E0E0E0" android:strokeWidth="0.1816"/>
-    <path android:fillAlpha="5.000000e-02" android:fillColor="#FF000000" android:pathData="M35.7,140.9l101.7,9.2l0,33.1l-101.8,-21.3z"/>
-    <path android:fillColor="#CECECE" android:pathData="M71,36.9l28.8,5l0,5.8l-28.8,-5.3z"/>
-    <path android:fillAlpha="0.1" android:fillColor="#1F1F1F" android:pathData="M71,36.9l28.8,5l0,1.7l-28.8,-5.3z"/>
-    <path android:fillAlpha="0.5" android:fillColor="#CECECE" android:pathData="M68.4,147.3l28.8,5.1l0,5.8l-28.8,-5.4z"/>
-    <path android:fillAlpha="0.1" android:fillColor="#1F1F1F" android:pathData="M68.4,147.3l28.8,5.1l0,1.7l-28.8,-5.4z"/>
-    <path android:fillAlpha="0.7" android:fillColor="#CECECE" android:pathData="M68.4,201.2l28.8,5.4l0,5.8l-28.8,-5.7z"/>
-    <path android:fillAlpha="0.1" android:fillColor="#1F1F1F" android:pathData="M68.4,201.2l28.8,5.4l0,1.6l-28.8,-5.6z"/>
-    <path android:fillColor="#EAEAEA" android:pathData="M16.2,80.3l100.3,18.1l0,58.5l-100.3,-20.2z"/>
-    <path android:fillColor="#EFEFEF" android:pathData="M137.7,37.6l0,53.9l-21.2,6.9l0,58.5l21.2,-6.9l0,111.1l65.1,-30l0,-212z"/>
-    <path android:fillColor="#E57373" android:pathData="M16.2,80.3l19.5,-8.2l0,11.7z"/>
-    <path android:fillAlpha="0.6" android:fillColor="#E57373" android:pathData="M137.7,91.5l-102,-19.4l0,11.7l80.8,14.6z"/>
-    <path android:fillColor="#CECECE" android:pathData="M47.2,95.5l28.8,5l0,5.8l-28.8,-5.2z"/>
-    <path android:fillAlpha="0.1" android:fillColor="#1F1F1F" android:pathData="M47.2,95.5l28.8,5l0,1.7l-28.8,-5.2z"/>
-    <path android:fillColor="#EAEAEA" android:pathData="M35.7,72.1L35.7,72.1l-19.6,8.1l0,0.1l0,0l100.3,18.1l0,0l0,0l21.6,-7L35.7,72.1zM116.5,97.5L19.4,80l16.4,-6.8L134,91.8L116.5,97.5z"/>
-</vector>
diff --git a/res/layout/search_panel.xml b/res/layout/search_panel.xml
index 8f72847..9445e0c 100644
--- a/res/layout/search_panel.xml
+++ b/res/layout/search_panel.xml
@@ -61,18 +61,20 @@
             android:id="@+id/no_results_layout"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:gravity="center"
+            android:paddingTop="80dp"
             android:orientation="vertical"
             android:visibility="gone">
 
             <ImageView
-            android:layout_height="112dp"
-            android:layout_width="112dp"
-            android:src="@drawable/no_search_results"/>
+            android:layout_height="160dp"
+            android:layout_width="160dp"
+            android:layout_gravity="center_horizontal"
+            android:src="@drawable/empty_search_results"/>
 
             <TextView
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
+            android:paddingTop="24dp"
             android:textSize="18sp"
             android:text="@string/search_settings_no_results"
             android:gravity="center"/>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 9416bfe..f6d7562 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -34,7 +34,7 @@
     <string name="header_category_wireless_networks" msgid="5110914332313954940">"Bežična veza i mreže"</string>
     <string name="header_category_connections" msgid="6471513040815680662">"Veze"</string>
     <string name="header_category_device" msgid="4544026001618307754">"Uređaj"</string>
-    <string name="header_category_personal" msgid="3310195187905720823">"Lično"</string>
+    <string name="header_category_personal" msgid="3310195187905720823">"Lični"</string>
     <string name="header_category_access" msgid="7580499097416970962">"Pristup"</string>
     <string name="header_category_system" msgid="2816866961183068977">"Sistem"</string>
     <string name="radio_info_data_connection_enable" msgid="8656750679353982712">"Omogući vezu za prenos podataka"</string>
@@ -584,7 +584,7 @@
       <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> aktivne aplikacije</item>
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> aktivnih aplikacija</item>
     </plurals>
-    <string name="manage_trust_agents" msgid="4629279457536987768">"Trust agents"</string>
+    <string name="manage_trust_agents" msgid="4629279457536987768">"Pouzdani agenti"</string>
     <string name="disabled_because_no_backup_security" msgid="6877660253409580377">"Da biste ga koristili, prvo podesite zaključavanje ekrana"</string>
     <string name="manage_trust_agents_summary" msgid="1475819820389620546">"Ništa"</string>
     <plurals name="manage_trust_agents_summary_on" formatted="false" msgid="3935182396726101824">
@@ -962,7 +962,7 @@
     <string name="search_settings" msgid="1910951467596035063">"Pretraga"</string>
     <string name="search_settings_summary" msgid="9205656546570654169">"Upravljanje podešavanjima pretrage i istorijom"</string>
     <string name="search_settings_no_results" msgid="8799027492641230999">"Nema rezultata"</string>
-    <string name="display_settings" msgid="7965901687241669598">"Prikaz"</string>
+    <string name="display_settings" msgid="7965901687241669598">"Ekran"</string>
     <string name="accelerometer_title" msgid="7854608399547349157">"Automatsko rotiranje ekrana"</string>
     <string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"Promeni položaj automatski prilikom rotiranja tableta"</string>
     <string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Automatska promena položaja prilikom rotacije telefona"</string>
@@ -2190,7 +2190,7 @@
     <string name="no_device_admins" msgid="4846602835339095768">"Nema dostupnih aplikacija za administratora uređaja"</string>
     <string name="personal_device_admin_title" msgid="2849617316347669861">"Lični"</string>
     <string name="managed_device_admin_title" msgid="7853955652864478435">"Posao"</string>
-    <string name="no_trust_agents" msgid="7450273545568977523">"Trust agents - Nedostupno"</string>
+    <string name="no_trust_agents" msgid="7450273545568977523">"Nema dostupnih pouzdanih agenata"</string>
     <string name="add_device_admin_msg" msgid="1501847129819382149">"Aktiviraj aplikaciju za administratore?"</string>
     <string name="add_device_admin" msgid="4192055385312215731">"Aktiviraj ovu aplikaciju za administratore uređaja"</string>
     <string name="device_admin_add_title" msgid="3140663753671809044">"Administrator uređaja"</string>
@@ -3035,7 +3035,7 @@
     <string name="storage_used" msgid="7128074132917008743">"Memorijski prostor u upotrebi"</string>
     <string name="change" msgid="6657848623929839991">"Promeni"</string>
     <string name="change_storage" msgid="600475265207060436">"Promenite memoriju"</string>
-    <string name="notifications_label" msgid="8543457911148619898">"Obaveštenja aplikacije"</string>
+    <string name="notifications_label" msgid="8543457911148619898">"Obaveštenja o aplikaciji"</string>
     <string name="notifications_enabled" msgid="6983396130566021385">"Uključena"</string>
     <string name="notifications_disabled" msgid="334416731283131597">"Sve je isključeno"</string>
     <string name="notifications_partly_blocked" msgid="592071133950126656">"Uključenih kategorija: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
@@ -3155,12 +3155,12 @@
     <string name="usb_use_power_only" msgid="6426550616883919530">"Napajanje"</string>
     <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Punite povezani uređaj. Radi samo sa uređajima koji podržavaju punjenje preko USB-a."</string>
     <string name="usb_use_file_transfers" msgid="7409600791007250137">"Prenos datoteka"</string>
-    <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Prenosi datoteke na drugi uređaj"</string>
+    <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Prenosite datoteke na drugi uređaj"</string>
     <string name="usb_use_photo_transfers" msgid="7794775645350330454">"Prenos slika (PTP)"</string>
-    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Prenosi slike ili datoteke ako MTP nije podržan (PTP)"</string>
+    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Prenosite slike ili datoteke ako MTP nije podržan (PTP)"</string>
     <string name="usb_use_MIDI" msgid="870922185938298263">"Korišćenje uređaja u MIDI režimu"</string>
-    <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Koristi ovaj uređaj kao MIDI"</string>
-    <string name="usb_use" msgid="3256040963685055320">"Upotrebite USB za:"</string>
+    <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Koristite ovaj uređaj kao MIDI"</string>
+    <string name="usb_use" msgid="3256040963685055320">"Koristite USB za:"</string>
     <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="3629517713817003738">"Napajanje"</string>
@@ -3264,7 +3264,7 @@
     <string name="screen_zoom_conversation_timestamp_3" msgid="3785674344762707688">"Uto 18:02"</string>
     <string name="screen_zoom_conversation_timestamp_4" msgid="2511469395448561259">"Uto 18:03"</string>
     <string name="disconnected" msgid="4836600637485526329">"Nije povezano"</string>
-    <string name="data_usage_summary_format" msgid="7507047900192160585">"Koristi se <xliff:g id="AMOUNT">%1$s</xliff:g> podataka"</string>
+    <string name="data_usage_summary_format" msgid="7507047900192160585">"Iskorišćeno je <xliff:g id="AMOUNT">%1$s</xliff:g> podataka"</string>
     <plurals name="notification_summary" formatted="false" msgid="3941492005316143599">
       <item quantity="one">Isključeno za <xliff:g id="COUNT">%d</xliff:g> aplikaciju</item>
       <item quantity="few">Isključeno za <xliff:g id="COUNT">%d</xliff:g> aplikacije</item>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index dcf1762..d36f152 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"বিজ্ঞপ্তি"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"উন্নত"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"কর্মস্থলের বিজ্ঞপ্তিগুলি"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"আইকন ব্যাজের অনুমতি দিন"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"মিটমিট করা আলো"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"লক স্ক্রীনে"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"সমস্ত বিজ্ঞপ্তির সামগ্রীগুলি দেখান"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 7007974..e48441f 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -1759,12 +1759,12 @@
     <string name="allow_bind_app_widget_activity_allow_bind_title" msgid="2538303018392590627">"Kreirati vidžet i omogućiti pristup?"</string>
     <string name="allow_bind_app_widget_activity_allow_bind" msgid="1584388129273282080">"Nakon što kreirate vidžet, <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> može pristupiti svim podacima koje prikazuje."</string>
     <string name="allow_bind_app_widget_activity_always_allow_bind" msgid="7037503685859688034">"Uvijek dopusti da aplikacija <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> kreira vidžete i koristi njihove podatke"</string>
-    <string name="battery_history_days" msgid="7110262897769622564">"<xliff:g id="DAYS">%1$d</xliff:g>d <xliff:g id="HOURS">%2$d</xliff:g>h <xliff:g id="MINUTES">%3$d</xliff:g>m <xliff:g id="SECONDS">%4$d</xliff:g>s"</string>
-    <string name="battery_history_hours" msgid="7525170329826274999">"<xliff:g id="HOURS">%1$d</xliff:g>h <xliff:g id="MINUTES">%2$d</xliff:g>m <xliff:g id="SECONDS">%3$d</xliff:g>s"</string>
-    <string name="battery_history_minutes" msgid="1467775596084148610">"<xliff:g id="MINUTES">%1$d</xliff:g>m <xliff:g id="SECONDS">%2$d</xliff:g>s"</string>
-    <string name="battery_history_seconds" msgid="4283492130945761685">"<xliff:g id="SECONDS">%1$d</xliff:g>s"</string>
-    <string name="battery_history_days_no_seconds" msgid="703063770554334710">"<xliff:g id="DAYS">%1$d</xliff:g>d <xliff:g id="HOURS">%2$d</xliff:g>h <xliff:g id="MINUTES">%3$d</xliff:g>m"</string>
-    <string name="battery_history_hours_no_seconds" msgid="663342892615646712">"<xliff:g id="HOURS">%1$d</xliff:g> s <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
+    <string name="battery_history_days" msgid="7110262897769622564">"<xliff:g id="DAYS">%1$d</xliff:g> d, <xliff:g id="HOURS">%2$d</xliff:g> h, <xliff:g id="MINUTES">%3$d</xliff:g> min, <xliff:g id="SECONDS">%4$d</xliff:g> s"</string>
+    <string name="battery_history_hours" msgid="7525170329826274999">"<xliff:g id="HOURS">%1$d</xliff:g> h, <xliff:g id="MINUTES">%2$d</xliff:g> min, <xliff:g id="SECONDS">%3$d</xliff:g> s"</string>
+    <string name="battery_history_minutes" msgid="1467775596084148610">"<xliff:g id="MINUTES">%1$d</xliff:g> min, <xliff:g id="SECONDS">%2$d</xliff:g> s"</string>
+    <string name="battery_history_seconds" msgid="4283492130945761685">"<xliff:g id="SECONDS">%1$d</xliff:g> s"</string>
+    <string name="battery_history_days_no_seconds" msgid="703063770554334710">"<xliff:g id="DAYS">%1$d</xliff:g> d, <xliff:g id="HOURS">%2$d</xliff:g> h, <xliff:g id="MINUTES">%3$d</xliff:g> min"</string>
+    <string name="battery_history_hours_no_seconds" msgid="663342892615646712">"<xliff:g id="HOURS">%1$d</xliff:g> h, <xliff:g id="MINUTES">%2$d</xliff:g> min"</string>
     <string name="battery_history_minutes_no_seconds" msgid="7780294302606853082">"<xliff:g id="MINUTES">%1$d</xliff:g> min"</string>
     <string name="usage_stats_label" msgid="5890846333487083609">"Statistika korištenja"</string>
     <string name="testing_usage_stats" msgid="7823048598893937339">"Statistika korištenja"</string>
@@ -1950,7 +1950,7 @@
     <string name="battery_stats_screen_on_label" msgid="7150221809877509708">"Ekran uključen"</string>
     <string name="battery_stats_gps_on_label" msgid="1193657533641951256">"GPS uključen"</string>
     <string name="battery_stats_camera_on_label" msgid="4935637383628414968">"Kamera je uključena"</string>
-    <string name="battery_stats_flashlight_on_label" msgid="4319637669889411307">"Lampa je uključena"</string>
+    <string name="battery_stats_flashlight_on_label" msgid="4319637669889411307">"Svjetiljka je uključena"</string>
     <string name="battery_stats_wifi_running_label" msgid="1845839195549226252">"Wi-Fi"</string>
     <string name="battery_stats_wake_lock_label" msgid="1908942681902324095">"Aktivan"</string>
     <!-- no translation found for battery_stats_phone_signal_label (4137799310329041341) -->
@@ -1967,7 +1967,7 @@
     <string name="controls_subtitle" msgid="390468421138288702">"Podesite potrošnju energije"</string>
     <string name="packages_subtitle" msgid="4736416171658062768">"Uključeni paketi"</string>
     <string name="power_screen" msgid="3023346080675904613">"Ekran"</string>
-    <string name="power_flashlight" msgid="7794409781003567614">"Lampa"</string>
+    <string name="power_flashlight" msgid="7794409781003567614">"Svjetiljka"</string>
     <string name="power_camera" msgid="4976286950934622605">"Fotoaparat"</string>
     <string name="power_wifi" msgid="1135085252964054957">"Wi‑Fi"</string>
     <string name="power_bluetooth" msgid="4373329044379008289">"Bluetooth"</string>
@@ -1996,7 +1996,7 @@
     <string name="usage_type_audio" msgid="6957269406840886290">"Zvuk"</string>
     <string name="usage_type_video" msgid="4295357792078579944">"Video"</string>
     <string name="usage_type_camera" msgid="8299433109956769757">"Kamera"</string>
-    <string name="usage_type_flashlight" msgid="1516392356962208230">"Lampa"</string>
+    <string name="usage_type_flashlight" msgid="1516392356962208230">"Svjetiljka"</string>
     <string name="usage_type_on_time" msgid="3351200096173733159">"Vrijeme rada"</string>
     <string name="usage_type_no_coverage" msgid="3797004252954385053">"Vrijeme bez signala"</string>
     <string name="usage_type_total_battery_capacity" msgid="3798285287848675346">"Ukupni kapacitet baterije"</string>
@@ -2013,7 +2013,7 @@
     <string name="battery_desc_standby" product="default" msgid="3009080001948091424">"Potrošnja baterije kada je telefon u stanju pripravnosti"</string>
     <string name="battery_desc_radio" msgid="5479196477223185367">"Potrošnja baterije za mobilni radio"</string>
     <string name="battery_sugg_radio" msgid="8211336978326295047">"Prebacite se na način rada u avionu kako biste štedili napajanje na područjima u kojima nema pokrivenosti mobilnom mrežom"</string>
-    <string name="battery_desc_flashlight" msgid="2908579430841025494">"Potrošnja baterije upotrebom baterijske lampe"</string>
+    <string name="battery_desc_flashlight" msgid="2908579430841025494">"Potrošnja baterije upotrebom svjetiljke"</string>
     <string name="battery_desc_camera" msgid="7375389919760613499">"Potrošnja baterije upotrebom kamere"</string>
     <string name="battery_desc_display" msgid="5432795282958076557">"Potrošnja baterije na prikaz i pozadinsko osvjetljenje"</string>
     <string name="battery_sugg_display" msgid="3370202402045141760">"Smanjite osvjetljenje ekrana i/ili trajanje perioda do isključivanja ekrana"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index c33d5a9..84db437 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -1488,7 +1488,7 @@
     <string name="applications_settings" msgid="5281808652705396152">"Informació d\'aplicacions"</string>
     <string name="applications_settings_summary" msgid="6683465446264515367">"Gestiona les aplicacions i configura les dreceres d\'inici ràpid"</string>
     <string name="applications_settings_header" msgid="1014813055054356646">"Configuració de l\'aplicació"</string>
-    <string name="install_applications" msgid="4872012136210802181">"Orígens desconeguts"</string>
+    <string name="install_applications" msgid="4872012136210802181">"Fonts desconegudes"</string>
     <string name="install_applications_title" msgid="4987712352256508946">"Permet totes les fonts d\'apl."</string>
     <string name="install_all_warning" product="tablet" msgid="8310489909586138165">"La tauleta i les dades personals són més vulnerables a atacs d\'aplicacions desconegudes. En instal·lar aplicacions d\'aquesta font, acceptes que ets responsable de qualsevol dany a la tauleta i qualsevol pèrdua de dades que es pugui produir per l\'ús d\'aquestes aplicacions."</string>
     <string name="install_all_warning" product="default" msgid="1952257127370115988">"El telèfon i les dades personals són més vulnerables a atacs d\'aplicacions desconegudes. En instal·lar aplicacions d\'aquesta font, acceptes que ets responsable de qualsevol dany al telèfon i qualsevol pèrdua de dades que es pugui produir per l\'ús d\'aquestes aplicacions."</string>
@@ -2859,7 +2859,7 @@
     <string name="app_notification_block_summary" msgid="4744020456943215352">"No mostris mai aquestes notificacions"</string>
     <string name="notification_content_block_title" msgid="5854232570963006360">"Mostra notificacions"</string>
     <string name="notification_content_block_summary" msgid="7746185794438882389">"No mostris mai notificacions a l\'àrea de notificacions ni en dispositius perifèrics"</string>
-    <string name="notification_badge_title" msgid="7734903868300369178">"Permet l\'etiqueta de la icona"</string>
+    <string name="notification_badge_title" msgid="7734903868300369178">"Permet el símbol de la icona"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Fes prioritària"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permet que aquestes notificacions continuïn interrompent quan el mode No molestis estigui configurat com a Només amb prioritat"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"A la pantalla de bloqueig"</string>
@@ -3189,7 +3189,7 @@
     <string name="system_alert_window_on" msgid="2939489395109048888">"Sí"</string>
     <string name="system_alert_window_off" msgid="6189115687233061992">"No"</string>
     <string name="install_other_apps" msgid="6986686991775883017">"Instal·lar aplicacions desconegudes"</string>
-    <string name="keywords_install_other_apps" msgid="761078076051006558">"instal·lar aplicacions orígens desconeguts"</string>
+    <string name="keywords_install_other_apps" msgid="761078076051006558">"instal·lar aplicacions fonts desconegudes"</string>
     <string name="write_settings" msgid="4797457275727195681">"Modificar configuració sistema"</string>
     <string name="keywords_write_settings" msgid="6415597272561105138">"modifica la configuració del sistema i hi escriu"</string>
     <string name="write_settings_summary" msgid="4302268998611412696">"<xliff:g id="COUNT_0">%1$d</xliff:g> de: <xliff:g id="COUNT_1">%2$d</xliff:g> aplicacions poden modificar configuració del sistema"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index faad3b8..5cab08b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -733,7 +733,7 @@
     <string name="wifi_more" msgid="3195296805089107950">"Mere"</string>
     <string name="wifi_setup_wps" msgid="8128702488486283957">"Automatisk konfig. (WPS)"</string>
     <string name="wifi_show_advanced" msgid="3409422789616520979">"Avancerede valgmuligheder"</string>
-    <string name="wifi_advanced_toggle_description_expanded" msgid="2380600578544493084">"Rullelisten Avancerede indstillinger. Tryk to gange for at skjule listen."</string>
+    <string name="wifi_advanced_toggle_description_expanded" msgid="2380600578544493084">"Rullelisten Avancerede valgmuligheder. Tryk to gange for at skjule listen."</string>
     <string name="wifi_advanced_toggle_description_collapsed" msgid="1463812308429197263">"Rullelisten Avancerede valgmuligheder. Tryk to gange for at udvide listen."</string>
     <string name="wifi_wps_setup_title" msgid="8207552222481570175">"Wi-Fi Protected Setup"</string>
     <string name="wifi_wps_setup_msg" msgid="315174329121275092">"Starter WPS..."</string>
@@ -1012,7 +1012,7 @@
     <string name="screensaver_settings_summary_dock" msgid="2072657401664633283">"Når enheden er tilsluttet en dockingstation"</string>
     <string name="screensaver_settings_summary_never" msgid="5165622985174349585">"Aldrig"</string>
     <string name="screensaver_settings_summary_off" msgid="2481581696365146473">"Fra"</string>
-    <string name="screensaver_settings_disabled_prompt" msgid="1239088321034437608">"Aktivér pauseskærmen for at kontrollere, hvad der sker, når telefonen er sat i dockingstationen og/eller går i dvale."</string>
+    <string name="screensaver_settings_disabled_prompt" msgid="1239088321034437608">"Aktivér pauseskærmen for at administrere, hvad der sker, når telefonen er sat i dockingstationen og/eller går i dvale."</string>
     <string name="screensaver_settings_when_to_dream" msgid="7262410541382890146">"Starttidspunkt"</string>
     <string name="screensaver_settings_current" msgid="4663846038247130023">"Aktuel pauseskærm"</string>
     <string name="screensaver_settings_dream_start" msgid="4998187847985120168">"Start nu"</string>
@@ -1527,7 +1527,7 @@
     <string name="always_allow_bind_appwidgets_text" msgid="566822577792032925">"Du har valgt at tillade, at denne app opretter widgets og får adgang til deres data."</string>
     <string name="auto_launch_disable_text" msgid="7800385822185540166">"Der er ikke angivet nogen standarder."</string>
     <string name="clear_activities" msgid="7408923511535174430">"Ryd standarder"</string>
-    <string name="screen_compatibility_text" msgid="1616155457673106022">"Denne app er muligvis ikke beregnet til din skærm. Her kan du kontrollere, hvordan den skal tilpasses til din skærm."</string>
+    <string name="screen_compatibility_text" msgid="1616155457673106022">"Denne app er muligvis ikke beregnet til din skærm. Her kan du administrere, hvordan den skal tilpasses til din skærm."</string>
     <string name="ask_compatibility" msgid="7225195569089607846">"Spørg, når der startes"</string>
     <string name="enable_compatibility" msgid="5806819252068617811">"Skaler app"</string>
     <string name="unknown" msgid="1592123443519355854">"Ukendt"</string>
@@ -2374,7 +2374,7 @@
     <string name="vpn_ipsec_user_cert" msgid="6880651510020187230">"IPSec-brugercertifikat"</string>
     <string name="vpn_ipsec_ca_cert" msgid="91338213449148229">"IPSec CA-certifikat"</string>
     <string name="vpn_ipsec_server_cert" msgid="6599276718456935010">"IPSec-servercertifikat"</string>
-    <string name="vpn_show_options" msgid="7182688955890457003">"Vis avancerede indstillinger"</string>
+    <string name="vpn_show_options" msgid="7182688955890457003">"Vis avancerede valgmuligheder"</string>
     <string name="vpn_search_domains" msgid="5391995501541199624">"DNS-søgedomæner"</string>
     <string name="vpn_dns_servers" msgid="5570715561245741829">"DNS-servere (f.eks. 8.8.8.8)"</string>
     <string name="vpn_routes" msgid="3818655448226312232">"Videresendelsesruter (f.eks. 10.0.0.0/8)"</string>
@@ -3380,7 +3380,7 @@
     <string name="button_confirm_convert_fbe" msgid="7101855374850373091">"Ryd og konvertér"</string>
     <string name="reset_shortcut_manager_throttling" msgid="6495066467198668994">"Nulstil antalsbegrænsning i ShortcutManager"</string>
     <string name="reset_shortcut_manager_throttling_complete" msgid="1826770872063707900">"Antalsbegrænsning i ShortcutManager er nulstillet"</string>
-    <string name="notification_suggestion_title" msgid="4506524937307816475">"Kontrollér underretninger for låseskærm"</string>
+    <string name="notification_suggestion_title" msgid="4506524937307816475">"Konfigurer underretninger for låseskærm"</string>
     <string name="notification_suggestion_summary" msgid="8521159741445416875">"Vis eller skjul indhold i underretninger"</string>
     <string name="page_tab_title_summary" msgid="4070309266374993258">"Alle"</string>
     <string name="page_tab_title_support" msgid="6330657582897417458">"Support"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index da22430..2eada5e 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1294,7 +1294,7 @@
     <string name="master_clear_desc" product="default" msgid="4800386183314202571">"Cette action effacera toutes les données du "<b>"stockage interne"</b>" de votre téléphone, y compris :\n\n"<li>"Votre compte Google"</li>\n<li>"Les données et paramètres du système et des applications"</li>\n<li>"Les applications téléchargées"</li></string>
     <string name="master_clear_accounts" product="default" msgid="6412857499147999073">\n\n"Vous êtes actuellement connecté aux comptes suivants :\n"</string>
     <string name="master_clear_other_users_present" product="default" msgid="5161423070702470742">\n\n"D\'autres personnes utilisent cet appareil.\n"</string>
-    <string name="master_clear_desc_also_erases_external" msgid="1903185203791274237"><li>"Musique"</li>\n<li>"Photos"</li>\n<li>"Autres données utilisateur"</li></string>
+    <string name="master_clear_desc_also_erases_external" msgid="1903185203791274237"><li>"La musique"</li>\n<li>"Les photos"</li>\n<li>"Les autres données utilisateur"</li>"."</string>
     <string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="7744115866662613411">\n\n"Pour supprimer la musique, les photos et les autres données utilisateur, vous devez effacer la "<b>"mémoire de stockage USB"</b>"."</string>
     <string name="master_clear_desc_erase_external_storage" product="default" msgid="4801026652617377093">\n\n"Pour supprimer la musique, les photos et les autres données utilisateur, vous devez formater la "<b>"carte SD"</b>"."</string>
     <string name="erase_external_storage" product="nosdcard" msgid="969364037450286809">"Effacer la mémoire USB"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 3c9d43d..f693ad8 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -1485,7 +1485,7 @@
     <string name="lock_settings_profile_unified_summary" msgid="9008819078132993492">"O mesmo que o bloqueo da pantalla do dispositivo"</string>
     <string name="manageapplications_settings_title" msgid="7041951105633616745">"Xestionar aplicacións"</string>
     <string name="manageapplications_settings_summary" msgid="1794401500935451259">"Xestiona e elimina as aplicacións instaladas"</string>
-    <string name="applications_settings" msgid="5281808652705396152">"Información da aplicación"</string>
+    <string name="applications_settings" msgid="5281808652705396152">"Información das aplicacións"</string>
     <string name="applications_settings_summary" msgid="6683465446264515367">"Xestiona aplicacións e configura atallos de inicio rápido"</string>
     <string name="applications_settings_header" msgid="1014813055054356646">"Configuración da aplicación"</string>
     <string name="install_applications" msgid="4872012136210802181">"Fontes descoñecidas"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 64f77ea..e968c5c 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -2537,7 +2537,7 @@
     <string name="user_enable_calling_confirm_message" msgid="8061594235219352787">"発信履歴がこのユーザーと共有されます。"</string>
     <string name="user_enable_calling_and_sms_confirm_title" msgid="7243308401401932681">"通話とSMSをONにしますか?"</string>
     <string name="user_enable_calling_and_sms_confirm_message" msgid="4025082715546544967">"通話とSMSの履歴がこのユーザーと共有されます。"</string>
-    <string name="emergency_info_title" msgid="208607506217060337">"緊急情報"</string>
+    <string name="emergency_info_title" msgid="208607506217060337">"緊急時情報"</string>
     <string name="emergency_info_summary" msgid="5062945162967838521">"<xliff:g id="USER_NAME">%1$s</xliff:g>の情報と連絡先"</string>
     <string name="application_restrictions" msgid="8207332020898004394">"アプリとコンテンツの許可"</string>
     <string name="apps_with_restrictions_header" msgid="3660449891478534440">"制限のあるアプリ"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 556c72d..97e01ab 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"ಸುಧಾರಿತ"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"ಕೆಲಸದ ಅಧಿಸೂಚನೆಗಳು"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"ಐಕಾನ್ ಬ್ಯಾಡ್ಜ್‌ಗಳಿಗೆ ಅನುಮತಿಸಿ"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"ಮಿನುಗುವ ಬೆಳಕು"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"ಲಾಕ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"ಅಧಿಸೂಚನೆ ವಿಷಯವನ್ನು ಪೂರ್ತಿ ತೋರಿಸು"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index d8141a5..5b47d8d 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"അറിയിപ്പുകൾ"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"വിപുലമായത്"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"ഔദ്യോഗിക അറിയിപ്പുകൾ"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"ഐക്കൺ ബാഡ്‌ജുകൾ അനുവദിക്കുക"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"ലൈറ്റ് മിന്നുക"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"ലോക്ക് സ്ക്രീനിൽ"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"എല്ലാ അറിയിപ്പുകളും കാണിക്കുക"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index b82e4b6..23a89e5 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"सूचनाहरू"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"उन्‍नत"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"कार्यका सूचनाहरू"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"आइकनका ब्याजहरूलाई अनुमति दिनुहोस्"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"झिम झिम गर्ने बत्ती"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"लक स्क्रिनमा"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"सबै सूचना सामग्री देखाउनुहोस्"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index dcb5ef1..8dd5f70 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"ਸੂਚਨਾਵਾਂ"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"ਉੱਨਤ"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"ਕੰਮ ਸਬੰਧੀ ਸੂਚਨਾਵਾਂ"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"ਪ੍ਰਤੀਕ ਬੈਜਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਦਿਓ"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"ਲਾਈਟ ਨੂੰ ਟਿਮ-ਟਿਮਾਓ"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"ਲੌਕ ਸਕ੍ਰੀਨ \'ਤੇ"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"ਸਾਰੀ ਸੂਚਨਾ ਸਮੱਗਰੀ ਦਿਖਾਓ"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 76d5435..5a70258 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -2831,8 +2831,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"Upozornenia"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"Rozšírené"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"Pracovné upozornenia"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"Povoliť odznaky na ikonách"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"Blikanie"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"Na uzamknutej obrazovke"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"Zobrazovať všetok obsah upozornení"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5de847b..8519b16 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -34,7 +34,7 @@
     <string name="header_category_wireless_networks" msgid="5110914332313954940">"Бежична веза и мреже"</string>
     <string name="header_category_connections" msgid="6471513040815680662">"Везе"</string>
     <string name="header_category_device" msgid="4544026001618307754">"Уређај"</string>
-    <string name="header_category_personal" msgid="3310195187905720823">"Лично"</string>
+    <string name="header_category_personal" msgid="3310195187905720823">"Лични"</string>
     <string name="header_category_access" msgid="7580499097416970962">"Приступ"</string>
     <string name="header_category_system" msgid="2816866961183068977">"Систем"</string>
     <string name="radio_info_data_connection_enable" msgid="8656750679353982712">"Омогући везу за пренос података"</string>
@@ -584,7 +584,7 @@
       <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> активне апликације</item>
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> активних апликација</item>
     </plurals>
-    <string name="manage_trust_agents" msgid="4629279457536987768">"Trust agents"</string>
+    <string name="manage_trust_agents" msgid="4629279457536987768">"Поуздани агенти"</string>
     <string name="disabled_because_no_backup_security" msgid="6877660253409580377">"Да бисте га користили, прво подесите закључавање екрана"</string>
     <string name="manage_trust_agents_summary" msgid="1475819820389620546">"Ништа"</string>
     <plurals name="manage_trust_agents_summary_on" formatted="false" msgid="3935182396726101824">
@@ -962,7 +962,7 @@
     <string name="search_settings" msgid="1910951467596035063">"Претрага"</string>
     <string name="search_settings_summary" msgid="9205656546570654169">"Управљање подешавањима претраге и историјом"</string>
     <string name="search_settings_no_results" msgid="8799027492641230999">"Нема резултата"</string>
-    <string name="display_settings" msgid="7965901687241669598">"Приказ"</string>
+    <string name="display_settings" msgid="7965901687241669598">"Екран"</string>
     <string name="accelerometer_title" msgid="7854608399547349157">"Аутоматско ротирање екрана"</string>
     <string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"Промени положај аутоматски приликом ротирања таблета"</string>
     <string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Аутоматска промена положаја приликом ротације телефона"</string>
@@ -2190,7 +2190,7 @@
     <string name="no_device_admins" msgid="4846602835339095768">"Нема доступних апликација за администратора уређаја"</string>
     <string name="personal_device_admin_title" msgid="2849617316347669861">"Лични"</string>
     <string name="managed_device_admin_title" msgid="7853955652864478435">"Посао"</string>
-    <string name="no_trust_agents" msgid="7450273545568977523">"Trust agents - Недоступно"</string>
+    <string name="no_trust_agents" msgid="7450273545568977523">"Нема доступних поузданих агената"</string>
     <string name="add_device_admin_msg" msgid="1501847129819382149">"Активирај апликацију за администраторе?"</string>
     <string name="add_device_admin" msgid="4192055385312215731">"Активирај ову апликацију за администраторе уређаја"</string>
     <string name="device_admin_add_title" msgid="3140663753671809044">"Администратор уређаја"</string>
@@ -3035,7 +3035,7 @@
     <string name="storage_used" msgid="7128074132917008743">"Меморијски простор у употреби"</string>
     <string name="change" msgid="6657848623929839991">"Промени"</string>
     <string name="change_storage" msgid="600475265207060436">"Промените меморију"</string>
-    <string name="notifications_label" msgid="8543457911148619898">"Обавештења апликације"</string>
+    <string name="notifications_label" msgid="8543457911148619898">"Обавештења о апликацији"</string>
     <string name="notifications_enabled" msgid="6983396130566021385">"Укључена"</string>
     <string name="notifications_disabled" msgid="334416731283131597">"Све је искључено"</string>
     <string name="notifications_partly_blocked" msgid="592071133950126656">"Укључених категорија: <xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
@@ -3155,12 +3155,12 @@
     <string name="usb_use_power_only" msgid="6426550616883919530">"Напајање"</string>
     <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Пуните повезани уређај. Ради само са уређајима који подржавају пуњење преко USB-а."</string>
     <string name="usb_use_file_transfers" msgid="7409600791007250137">"Пренос датотека"</string>
-    <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Преноси датотеке на други уређај"</string>
+    <string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Преносите датотеке на други уређај"</string>
     <string name="usb_use_photo_transfers" msgid="7794775645350330454">"Пренос слика (PTP)"</string>
-    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Преноси слике или датотеке ако MTP није подржан (PTP)"</string>
+    <string name="usb_use_photo_transfers_desc" msgid="2963034811151325996">"Преносите слике или датотеке ако MTP није подржан (PTP)"</string>
     <string name="usb_use_MIDI" msgid="870922185938298263">"Коришћење уређаја у MIDI режиму"</string>
-    <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Користи овај уређај као MIDI"</string>
-    <string name="usb_use" msgid="3256040963685055320">"Употребите USB за:"</string>
+    <string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Користите овај уређај као MIDI"</string>
+    <string name="usb_use" msgid="3256040963685055320">"Користите USB за:"</string>
     <string name="usb_pref" msgid="1400617804525116158">"USB"</string>
     <string name="usb_summary_charging_only" msgid="7544327009143659751">"Пуњење уређаја"</string>
     <string name="usb_summary_power_only" msgid="3629517713817003738">"Напајање"</string>
@@ -3264,7 +3264,7 @@
     <string name="screen_zoom_conversation_timestamp_3" msgid="3785674344762707688">"Уто 18:02"</string>
     <string name="screen_zoom_conversation_timestamp_4" msgid="2511469395448561259">"Уто 18:03"</string>
     <string name="disconnected" msgid="4836600637485526329">"Није повезано"</string>
-    <string name="data_usage_summary_format" msgid="7507047900192160585">"Користи се <xliff:g id="AMOUNT">%1$s</xliff:g> података"</string>
+    <string name="data_usage_summary_format" msgid="7507047900192160585">"Искоришћено је <xliff:g id="AMOUNT">%1$s</xliff:g> података"</string>
     <plurals name="notification_summary" formatted="false" msgid="3941492005316143599">
       <item quantity="one">Искључено за <xliff:g id="COUNT">%d</xliff:g> апликацију</item>
       <item quantity="few">Искључено за <xliff:g id="COUNT">%d</xliff:g> апликације</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index d300f72..ad2adc2 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"నోటిఫికేషన్‌లు"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"అధునాతనం"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"కార్యాలయ నోటిఫికేషన్‌లు"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"చిహ్నం బ్యాడ్జ్‌లను అనుమతించండి"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"కాంతి మిణుకుమిణుకు అనేలా ఉంచు"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"లాక్ స్క్రీన్‌పై"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"మొత్తం నోటిఫికేషన్ కంటెంట్‌ను చూపు"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 199bf64..d1fc04c 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -2775,8 +2775,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"اطلاعات"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"جدید ترین"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"دفتری اطلاعات"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"آئیکن بیجز کی اجازت دیں"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"بلنک لائٹ"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"قفل اسکرین پر"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"سبھی اطلاعی مواد دکھائیں"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index b179ffa..1dbf691 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1735,9 +1735,9 @@
     <string name="builtin_keyboard_settings_title" msgid="7688732909551116798">"物理键盘"</string>
     <string name="builtin_keyboard_settings_summary" msgid="2392531685358035899">"物理键盘设置"</string>
     <string name="gadget_picker_title" msgid="98374951396755811">"选择小工具"</string>
-    <string name="widget_picker_title" msgid="9130684134213467557">"选择小部件"</string>
-    <string name="allow_bind_app_widget_activity_allow_bind_title" msgid="2538303018392590627">"是否允许该应用创建小部件并查看其数据?"</string>
-    <string name="allow_bind_app_widget_activity_allow_bind" msgid="1584388129273282080">"当您创建小部件后,“<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g>”将能查看其显示的所有数据。"</string>
+    <string name="widget_picker_title" msgid="9130684134213467557">"选择微件"</string>
+    <string name="allow_bind_app_widget_activity_allow_bind_title" msgid="2538303018392590627">"是否允许该应用创建微件并查看其数据?"</string>
+    <string name="allow_bind_app_widget_activity_allow_bind" msgid="1584388129273282080">"当您创建微件后,“<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g>”将能查看其显示的所有数据。"</string>
     <string name="allow_bind_app_widget_activity_always_allow_bind" msgid="7037503685859688034">"始终允许“<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g>”创建微件并查看其数据"</string>
     <string name="battery_history_days" msgid="7110262897769622564">"<xliff:g id="DAYS">%1$d</xliff:g>天<xliff:g id="HOURS">%2$d</xliff:g>小时<xliff:g id="MINUTES">%3$d</xliff:g>分<xliff:g id="SECONDS">%4$d</xliff:g>秒"</string>
     <string name="battery_history_hours" msgid="7525170329826274999">"<xliff:g id="HOURS">%1$d</xliff:g>小时<xliff:g id="MINUTES">%2$d</xliff:g>分<xliff:g id="SECONDS">%3$d</xliff:g>秒"</string>
@@ -2777,8 +2777,7 @@
     <string name="configure_notification_settings" msgid="7616737397127242615">"通知"</string>
     <string name="advanced_section_header" msgid="8833934850242546903">"高级"</string>
     <string name="profile_section_header" msgid="2320848161066912001">"工作通知"</string>
-    <!-- no translation found for notification_badging_title (5125022693565388760) -->
-    <skip />
+    <string name="notification_badging_title" msgid="5125022693565388760">"允许在图标上显示标记"</string>
     <string name="notification_pulse_title" msgid="1905382958860387030">"闪烁指示灯"</string>
     <string name="lock_screen_notifications_title" msgid="6173076173408887213">"屏幕锁定时"</string>
     <string name="lock_screen_notifications_summary_show" msgid="6407527697810672847">"显示所有通知内容"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8e3fbe2..dc7e567 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4686,6 +4686,8 @@
 
     <!-- Description for battery usage time for an app, i.e. Used for 30min. Note: ^1 should be used in all translations [CHAR LIMIT=60] -->
     <string name="battery_used_for">Used for <xliff:g id="time">^1</xliff:g></string>
+    <!-- Description for battery screen usage time for an app, i.e. Screen usage 30min. Note: ^1 should be used in all translations [CHAR LIMIT=60] -->
+    <string name="battery_screen_usage">Screen usage <xliff:g id="time">^1</xliff:g></string>
     <!-- Description for battery usage info for an app, i.e. 60% used by facebook. [CHAR LIMIT=60] -->
     <string name="battery_used_by"><xliff:g id="percent">%1$s</xliff:g> used by <xliff:g id="app">%2$s</xliff:g></string>
     <!-- Description for percentage of battery usage for an app, i.e. Screen: 30% of overall battery. [CHAR LIMIT=60] -->
@@ -8618,10 +8620,6 @@
     <!-- Preference label for the Files storage section. [CHAR LIMIT=50] -->
     <string name="storage_files">Files</string>
 
-    <!-- Main settings screen item's title to go into the storage settings screen [CHAR LIMIT=25] -->
-    <string name="storage_settings_2" product="tablet">Tablet storage</string>
-    <string name="storage_settings_2" product="default">Phone storage</string>
-
     <!-- Summary of a single storage volume used space. [CHAR LIMIT=24] -->
     <string name="storage_size_large_alternate"><xliff:g id="number" example="128">^1</xliff:g><small> <xliff:g id="unit" example="KB">^2</xliff:g></small></string>
     <!-- Summary of a single storage volume total space. [CHAR LIMIT=48]-->
diff --git a/res/xml/about_legal.xml b/res/xml/about_legal.xml
index 596effe..55faad3 100644
--- a/res/xml/about_legal.xml
+++ b/res/xml/about_legal.xml
@@ -15,7 +15,8 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:title="@string/legal_information">
+                  android:title="@string/legal_information"
+                  android:key="legal_screen">
 
     <!-- Note: The titles given here probably won't be used.  Instead, we programmatically
        fill the title with the label of the activity with the corresponding action.
diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index 52f6793..1720c73 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -22,6 +22,6 @@
     <DropDownPreference
             android:key="turn_on_automatically"
             android:title="@string/battery_saver_turn_on_automatically_title"
-            android:summary="@string/summary_placeholder" />
+            android:summary="%s" />
 
 </PreferenceScreen>
diff --git a/res/xml/configure_notification_settings.xml b/res/xml/configure_notification_settings.xml
index bed3aa6..718bb23 100644
--- a/res/xml/configure_notification_settings.xml
+++ b/res/xml/configure_notification_settings.xml
@@ -39,7 +39,7 @@
         android:summary="@string/summary_placeholder"/>
 
     <SwitchPreference
-        android:key="gesture_swipe_down_fingerprint"
+        android:key="gesture_swipe_down_fingerprint_notifications"
         android:title="@string/fingerprint_swipe_for_notifications_title"
         android:summary="@string/fingerprint_swipe_for_notifications_summary"/>
 
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 7f740f3..50e6891 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -97,12 +97,12 @@
         android:title="@string/lift_to_wake_title" />
 
     <Preference
-        android:key="gesture_double_tap_screen"
+        android:key="gesture_double_tap_screen_display_summary"
         android:title="@string/ambient_display_title"
         android:fragment="com.android.settings.gestures.DoubleTapScreenSettings" />
 
     <Preference
-        android:key="gesture_pick_up"
+        android:key="gesture_pick_up_display_summary"
         android:title="@string/ambient_display_pickup_title"
         android:fragment="com.android.settings.gestures.PickupGestureSettings" />
 
diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml
index ca5ce45..6e65da6 100644
--- a/res/xml/language_and_input.xml
+++ b/res/xml/language_and_input.xml
@@ -66,32 +66,32 @@
         android:title="@string/gesture_preference_title">
 
         <Preference
-            android:key="gesture_assist"
+            android:key="gesture_assist_input_summary"
             android:title="@string/assist_gesture_title"
             android:fragment="com.android.settings.gestures.AssistGestureSettings"/>
 
         <Preference
-            android:key="gesture_swipe_down_fingerprint"
+            android:key="gesture_swipe_down_fingerprint_input_summary"
             android:title="@string/fingerprint_swipe_for_notifications_title"
             android:fragment="com.android.settings.gestures.SwipeToNotificationSettings"/>
 
         <Preference
-            android:key="gesture_double_tap_power"
+            android:key="gesture_double_tap_power_input_summary"
             android:title="@string/double_tap_power_for_camera_title"
             android:fragment="com.android.settings.gestures.DoubleTapPowerSettings"/>
 
         <Preference
-            android:key="gesture_double_twist"
+            android:key="gesture_double_twist_input_summary"
             android:title="@string/double_twist_for_camera_mode_title"
             android:fragment="com.android.settings.gestures.DoubleTwistGestureSettings"/>
 
         <Preference
-            android:key="gesture_double_tap_screen"
+            android:key="gesture_double_tap_screen_input_summary"
             android:title="@string/ambient_display_title"
             android:fragment="com.android.settings.gestures.DoubleTapScreenSettings"/>
 
         <Preference
-            android:key="gesture_pick_up"
+            android:key="gesture_pick_up_input_summary"
             android:title="@string/ambient_display_pickup_title"
             android:fragment="com.android.settings.gestures.PickupGestureSettings"/>
 
@@ -105,7 +105,7 @@
             android:dialogTitle="@string/pointer_speed"/>
 
         <Preference
-            android:key="tts_settings"
+            android:key="tts_settings_summary"
             android:title="@string/tts_settings_title"
             android:fragment="com.android.settings.tts.TextToSpeechSettings"/>
 
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index eadf45f..a96fb6b 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -26,7 +26,7 @@
         android:fragment="com.android.settings.applications.assist.DefaultAssistPicker"/>
 
     <Preference
-        android:key="gesture_assist"
+        android:key="gesture_assist_application"
         android:title="@string/assist_gesture_title"
         android:fragment="com.android.settings.gestures.AssistGestureSettings"/>
 
diff --git a/res/xml/reset_dashboard_fragment.xml b/res/xml/reset_dashboard_fragment.xml
index c769d5d..1fd45db 100644
--- a/res/xml/reset_dashboard_fragment.xml
+++ b/res/xml/reset_dashboard_fragment.xml
@@ -18,7 +18,8 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-    android:title="@string/reset_dashboard_title">
+    android:title="@string/reset_dashboard_title"
+    android:key="reset_dashboard_fragment_screen">
 
     <!-- Network reset -->
     <com.android.settingslib.RestrictedPreference
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 33c1b0a..d288a9d 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -124,7 +124,7 @@
         <DropDownPreference
           android:key="dock_audio_media"
           android:title="@string/dock_audio_media_title"
-          android:summary="@string/summary_placeholder" />
+          android:summary="%s" />
 
         <!-- Boot sounds -->
         <SwitchPreference
@@ -135,7 +135,7 @@
         <DropDownPreference
           android:key="emergency_tone"
           android:title="@string/emergency_tone_title"
-          android:summary="@string/summary_placeholder" />
+          android:summary="%s" />
 
         <com.android.settingslib.RestrictedPreference
           android:key="cell_broadcast_settings"
diff --git a/res/xml/zen_mode_visual_interruptions_settings.xml b/res/xml/zen_mode_visual_interruptions_settings.xml
index 012dd95..64c79ec 100644
--- a/res/xml/zen_mode_visual_interruptions_settings.xml
+++ b/res/xml/zen_mode_visual_interruptions_settings.xml
@@ -16,7 +16,8 @@
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-                  android:title="@string/zen_mode_visual_interruptions_settings_title" >
+                  android:title="@string/zen_mode_visual_interruptions_settings_title"
+                  android:key="zen_mode_visual_interruptions_screen">
 
     <SwitchPreference android:key="screenOn"
                       android:title="@string/zen_mode_screen_on"
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 546b11e..49784f6 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -722,15 +722,16 @@
                                 @Override
                                 public void onRemovalError(Fingerprint fp, int errMsgId,
                                         CharSequence errString) {
-                                    Log.v(TAG, "Fingerprint removed: " + fp.getFingerId());
-                                    if (fp.getFingerId() == 0) {
-                                        removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
-                                    }
+                                    Log.e(TAG, String.format(
+                                            "Can't remove fingerprint %d in group %d. Reason: %s",
+                                            fp.getFingerId(), fp.getGroupId(), errString));
+                                    // TODO: need to proceed with the removal of managed profile
+                                    // fingerprints and finish() gracefully.
                                 }
 
                                 @Override
-                                public void onRemovalSucceeded(Fingerprint fingerprint) {
-                                    if (fingerprint.getFingerId() == 0) {
+                                public void onRemovalSucceeded(Fingerprint fp, int remaining) {
+                                    if (remaining == 0) {
                                         removeManagedProfileFingerprintsAndFinishIfNecessary(userId);
                                     }
                                 }
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 109fb0e..8dfb02b 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -51,6 +51,8 @@
 
     private static final String LOG_TAG = "DeviceInfoSettings";
 
+    private static final String KEY_LEGAL_CONTAINER = "legal_container";
+
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.DEVICEINFO;
@@ -151,5 +153,12 @@
                     return buildPreferenceControllers(context, null /*activity */,
                             null /* fragment */, null /* lifecycle */);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    keys.add(KEY_LEGAL_CONTAINER);
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 98844fa..b70a133 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -54,6 +54,8 @@
 
     private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
     private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
+    private static final String KEY_PICK_UP = "gesture_pick_up_display_summary";
+    private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen_display_summary";
 
     @Override
     public int getMetricsCategory() {
@@ -100,9 +102,10 @@
         controllers.add(new ScreenSaverPreferenceController(context));
         AmbientDisplayConfiguration ambientDisplayConfig = new AmbientDisplayConfiguration(context);
         controllers.add(new PickupGesturePreferenceController(
-                context, lifecycle, ambientDisplayConfig, UserHandle.myUserId()));
+                context, lifecycle, ambientDisplayConfig, UserHandle.myUserId(), KEY_PICK_UP));
         controllers.add(new DoubleTapScreenPreferenceController(
-                context, lifecycle, ambientDisplayConfig, UserHandle.myUserId()));
+                context, lifecycle, ambientDisplayConfig, UserHandle.myUserId(),
+                KEY_DOUBLE_TAP_SCREEN));
         controllers.add(new TapToWakePreferenceController(context));
         controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
         controllers.add(new VrDisplayPreferenceController(context));
diff --git a/src/com/android/settings/LegalSettings.java b/src/com/android/settings/LegalSettings.java
index e40152a..d5b9988 100644
--- a/src/com/android/settings/LegalSettings.java
+++ b/src/com/android/settings/LegalSettings.java
@@ -40,6 +40,7 @@
     private static final String KEY_LICENSE = "license";
     private static final String KEY_COPYRIGHT = "copyright";
     private static final String KEY_WEBVIEW_LICENSE = "webview_license";
+    private static final String KEY_WALLPAPER_ATTRIBUTIONS = "wallpaper_attributions";
 
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -76,7 +77,7 @@
 
             @Override
             public List<String> getNonIndexableKeys(Context context) {
-                final List<String> keys = new ArrayList<String>();
+                final List<String> keys = super.getNonIndexableKeys(context);
                 if (!checkIntentAction(context, "android.settings.TERMS")) {
                     keys.add(KEY_TERMS);
                 }
@@ -89,6 +90,7 @@
                 if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) {
                     keys.add(KEY_WEBVIEW_LICENSE);
                 }
+                keys.add(KEY_WALLPAPER_ATTRIBUTIONS);
                 return keys;
             }
 
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index 66fc4d6..6b15770 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -35,7 +35,7 @@
 import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS;
 
 /**
- * Listens to {@link Intent.ACTION_BOOT_COMPLETED} and {@link Intent.ACTION_PRE_BOOT_COMPLETED}
+ * Listens to {@link Intent.ACTION_PRE_BOOT_COMPLETED} and {@link Intent.ACTION_USER_INITIALIZED}
  * performs setup steps for a managed profile (disables the launcher icon of the Settings app,
  * adds cross-profile intent filters for the appropriate Settings activities), and disables the
  * webview setting for non-admin users.
@@ -89,11 +89,13 @@
         }
 
         // Disable launcher icon
-        // Note: This needs to happen after forwarding intents, otherwise the main Settings
-        // intent gets lost
         ComponentName settingsComponentName = new ComponentName(context, Settings.class);
         pm.setComponentEnabledSetting(settingsComponentName,
                 PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+        // Disable shortcut picker.
+        ComponentName shortcutComponentName = new ComponentName(context, CreateShortcut.class);
+        pm.setComponentEnabledSetting(shortcutComponentName,
+                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
     }
 
     // Disable WebView Setting if the current user is not an admin
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index a782a7d..6ed2c34 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -123,9 +123,9 @@
          */
         public boolean pendingRemoval;
         /**
-         * The map from account name to account preference
+         * The map from account key to account preference
          */
-        public ArrayMap<CharSequence, AccountTypePreference> accountPreferences = new ArrayMap<>();
+        public ArrayMap<String, AccountTypePreference> accountPreferences = new ArrayMap<>();
     }
 
     public AccountPreferenceController(Context context, SettingsPreferenceFragment parent,
@@ -426,7 +426,7 @@
             return;
         }
         if (profileData.userInfo.isEnabled()) {
-            final ArrayMap<CharSequence, AccountTypePreference> preferenceToRemove =
+            final ArrayMap<String, AccountTypePreference> preferenceToRemove =
                     new ArrayMap<>(profileData.accountPreferences);
             final ArrayList<AccountTypePreference> preferences = getAccountTypePreferences(
                     profileData.authenticatorHelper, profileData.userInfo.getUserHandle(),
@@ -435,18 +435,19 @@
             for (int i = 0; i < count; i++) {
                 final AccountTypePreference preference = preferences.get(i);
                 preference.setOrder(i);
-                if (!profileData.accountPreferences.containsValue(preference)) {
-                    profileData.preferenceGroup.addPreference(preferences.get(i));
-                    profileData.accountPreferences.put(preference.getTitle(), preference);
+                final String key = preference.getKey();
+                if (!profileData.accountPreferences.containsKey(key)) {
+                    profileData.preferenceGroup.addPreference(preference);
+                    profileData.accountPreferences.put(key, preference);
                 }
             }
             if (profileData.addAccountPreference != null) {
                 profileData.preferenceGroup.addPreference(profileData.addAccountPreference);
             }
-            for (CharSequence name : preferenceToRemove.keySet()) {
+            for (String key : preferenceToRemove.keySet()) {
                 profileData.preferenceGroup.removePreference(
-                    profileData.accountPreferences.get(name));
-                profileData.accountPreferences.remove(name);
+                    profileData.accountPreferences.get(key));
+                profileData.accountPreferences.remove(key);
             }
         } else {
             profileData.preferenceGroup.removeAll();
@@ -471,8 +472,7 @@
     }
 
     private ArrayList<AccountTypePreference> getAccountTypePreferences(AuthenticatorHelper helper,
-            UserHandle userHandle,
-            ArrayMap<CharSequence, AccountTypePreference> preferenceToRemove) {
+            UserHandle userHandle, ArrayMap<String, AccountTypePreference> preferenceToRemove) {
         final String[] accountTypes = helper.getEnabledAccountTypes();
         final ArrayList<AccountTypePreference> accountTypePreferences =
                 new ArrayList<>(accountTypes.length);
@@ -497,7 +497,8 @@
 
             // Add a preference row for each individual account
             for (Account account : accounts) {
-                final AccountTypePreference preference = preferenceToRemove.remove(account.name);
+                final AccountTypePreference preference =
+                        preferenceToRemove.remove(AccountTypePreference.buildKey(account));
                 if (preference != null) {
                     accountTypePreferences.add(preference);
                     continue;
@@ -521,7 +522,7 @@
                 fragmentArguments.putParcelable(EXTRA_USER, userHandle);
                 accountTypePreferences.add(new AccountTypePreference(
                     prefContext, mMetricsFeatureProvider.getMetricsCategory(mParent),
-                    account.name, titleResPackageName, titleResId, label,
+                    account, titleResPackageName, titleResId, label,
                     AccountDetailDashboardFragment.class.getName(), fragmentArguments, icon));
             }
             helper.preloadDrawableForType(mContext, accountType);
diff --git a/src/com/android/settings/accounts/AccountTypePreference.java b/src/com/android/settings/accounts/AccountTypePreference.java
index 0abfb50..4f92829 100644
--- a/src/com/android/settings/accounts/AccountTypePreference.java
+++ b/src/com/android/settings/accounts/AccountTypePreference.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.accounts;
 
+import android.accounts.Account;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -67,18 +68,11 @@
 
     private final int mMetricsCategory;
 
-    public AccountTypePreference(Context context, int metricsCategory, CharSequence title,
-            String titleResPackageName, int titleResId, String fragment, Bundle fragmentArguments,
-            Drawable icon) {
-        this(context, metricsCategory, title, titleResPackageName, titleResId, null, fragment,
-                fragmentArguments, icon);
-    }
-
-    public AccountTypePreference(Context context, int metricsCategory, CharSequence title,
+    public AccountTypePreference(Context context, int metricsCategory, Account account,
             String titleResPackageName, int titleResId, CharSequence summary, String fragment,
             Bundle fragmentArguments, Drawable icon) {
         super(context);
-        mTitle = title;
+        mTitle = account.name;
         mTitleResPackageName = titleResPackageName;
         mTitleResId = titleResId;
         mSummary = summary;
@@ -87,7 +81,8 @@
         mMetricsCategory = metricsCategory;
         setWidgetLayoutResource(R.layout.account_type_preference);
 
-        setTitle(title);
+        setKey(buildKey(account));
+        setTitle(mTitle);
         setSummary(summary);
         setIcon(icon);
 
@@ -115,6 +110,13 @@
         return false;
     }
 
+    /**
+     * Build a unique preference key based on account.
+     */
+    public static String buildKey(Account account) {
+        return String.valueOf(account.hashCode());
+    }
+
     public CharSequence getTitle() {
         return mTitle;
     }
@@ -122,5 +124,4 @@
     public CharSequence getSummary() {
         return mSummary;
     }
-
 }
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index caa9da1..cce8b7d 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -43,6 +43,8 @@
 
     static final String TAG = "AdvancedAppSettings";
 
+    private static final String KEY_ASSIST_VOICE_INPUT = "assist_and_voice_input";
+
     @Override
     protected String getLogTag() {
         return TAG;
@@ -80,6 +82,18 @@
                     sir.xmlResId = R.xml.app_default_settings;
                     return Arrays.asList(sir);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    keys.add(KEY_ASSIST_VOICE_INPUT);
+                    // TODO (b/38230148) Remove these keys when we can differentiate work results
+                    keys.add((new DefaultWorkPhonePreferenceController(context))
+                            .getPreferenceKey());
+                    keys.add((new DefaultWorkBrowserPreferenceController(context))
+                            .getPreferenceKey());
+                    return keys;
+                }
             };
 
     static class SummaryProvider implements SummaryLoader.SummaryProvider {
diff --git a/src/com/android/settings/applications/assist/ManageAssist.java b/src/com/android/settings/applications/assist/ManageAssist.java
index 824c0b1..aa71c9a 100644
--- a/src/com/android/settings/applications/assist/ManageAssist.java
+++ b/src/com/android/settings/applications/assist/ManageAssist.java
@@ -38,6 +38,7 @@
 public class ManageAssist extends DashboardFragment {
 
     private static final String TAG = "ManageAssist";
+    private static final String KEY_ASSIST = "gesture_assist_application";
 
     @Override
     protected String getLogTag() {
@@ -71,7 +72,7 @@
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new DefaultAssistPreferenceController(context));
-        controllers.add(new AssistGesturePreferenceController(context, lifecycle));
+        controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST));
         controllers.add(new AssistContextPreferenceController(context, lifecycle));
         controllers.add(new AssistScreenshotPreferenceController(context, lifecycle));
         controllers.add(new AssistFlashScreenPreferenceController(context, lifecycle));
@@ -94,5 +95,13 @@
                 public List<PreferenceController> getPreferenceControllers(Context context) {
                     return buildPreferenceControllers(context, null /* lifecycle */);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    keys.add(KEY_ASSIST);
+                    return keys;
+                }
+
             };
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
index 7eb7fdd..59496dd 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
@@ -17,6 +17,7 @@
 package com.android.settings.bluetooth;
 
 import android.app.Notification;
+import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.bluetooth.BluetoothDevice;
@@ -45,6 +46,12 @@
     private static final String NOTIFICATION_TAG_PBAP = "Phonebook Access" ;
     private static final String NOTIFICATION_TAG_MAP = "Message Access";
     private static final String NOTIFICATION_TAG_SAP = "SIM Access";
+    /* TODO: Consolidate this multiple defined but common channel ID with other
+     * handlers that declare and use the same channel ID */
+    private static final String BLUETOOTH_NOTIFICATION_CHANNEL =
+        "bluetooth_notification_channel";
+
+    private NotificationChannel mNotificationChannel = null;
 
     Context mContext;
     int mRequestType;
@@ -151,7 +158,16 @@
                                 deviceAlias, deviceAlias);
                         break;
                 }
-                Notification notification = new Notification.Builder(context)
+                NotificationManager notificationManager =
+                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+                if (mNotificationChannel == null) {
+                    mNotificationChannel = new NotificationChannel(BLUETOOTH_NOTIFICATION_CHANNEL,
+                            context.getString(R.string.bluetooth),
+                            NotificationManager.IMPORTANCE_HIGH);
+                    notificationManager.createNotificationChannel(mNotificationChannel);
+                }
+                Notification notification = new Notification.Builder(context,
+                        BLUETOOTH_NOTIFICATION_CHANNEL)
                         .setContentTitle(title)
                         .setTicker(message)
                         .setContentText(message)
@@ -169,9 +185,6 @@
 
                 notification.flags |= Notification.FLAG_NO_CLEAR; // Cannot be set with the builder.
 
-                NotificationManager notificationManager =
-                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
-
                 notificationManager.notify(getNotificationTag(mRequestType), NOTIFICATION_ID,
                         notification);
             }
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index a6dfa9b..a76ed46 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.support.annotation.VisibleForTesting;
 import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
@@ -37,6 +38,7 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settingslib.bluetooth.A2dpProfile;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -55,6 +57,8 @@
     private static final String KEY_PROFILE_CONTAINER = "profile_container";
     private static final String KEY_UNPAIR = "unpair";
     private static final String KEY_PBAP_SERVER = "PBAP Server";
+    @VisibleForTesting
+    static final String HIGH_QUALITY_AUDIO_PREF_TAG = "A2dpProfileHighQualityAudio";
 
     private CachedBluetoothDevice mCachedDevice;
     private LocalBluetoothManager mManager;
@@ -169,6 +173,21 @@
         for (LocalBluetoothProfile profile : mCachedDevice.getConnectableProfiles()) {
             CheckBox pref = createProfilePreference(profile);
             mProfileContainer.addView(pref);
+
+            if (profile instanceof A2dpProfile) {
+                BluetoothDevice device = mCachedDevice.getDevice();
+                A2dpProfile a2dpProfile = (A2dpProfile) profile;
+                if (a2dpProfile.supportsHighQualityAudio(device)) {
+                    CheckBox highQualityPref = new CheckBox(getActivity());
+                    highQualityPref.setTag(HIGH_QUALITY_AUDIO_PREF_TAG);
+                    highQualityPref.setOnClickListener(v -> {
+                        a2dpProfile.setHighQualityAudioEnabled(device, highQualityPref.isChecked());
+                    });
+                    highQualityPref.setVisibility(View.GONE);
+                    mProfileContainer.addView(highQualityPref);
+                }
+                refreshProfilePreference(pref, profile);
+            }
         }
 
         final int pbapPermission = mCachedDevice.getPhonebookPermissionChoice();
@@ -356,6 +375,22 @@
         } else {
             profilePref.setChecked(profile.isPreferred(device));
         }
+        if (profile instanceof A2dpProfile) {
+            A2dpProfile a2dpProfile = (A2dpProfile) profile;
+            View v = mProfileContainer.findViewWithTag(HIGH_QUALITY_AUDIO_PREF_TAG);
+            if (v instanceof CheckBox) {
+                CheckBox highQualityPref = (CheckBox) v;
+                highQualityPref.setText(a2dpProfile.getHighQualityAudioOptionLabel(device));
+                highQualityPref.setChecked(a2dpProfile.isHighQualityAudioEnabled(device));
+
+                if (a2dpProfile.isPreferred(device)) {
+                    v.setVisibility(View.VISIBLE);
+                    v.setEnabled(!mCachedDevice.isBusy());
+                } else {
+                    v.setVisibility(View.GONE);
+                }
+            }
+        }
     }
 
     private LocalBluetoothProfile getProfileOf(View v) {
diff --git a/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
index 69f174b..d1c7c7a 100644
--- a/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
+++ b/src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java
@@ -111,6 +111,9 @@
             mPreferenceKeySet.add(prefKey);
             return;
         }
+        // TODO: Remove count logging to save some resource.
+        mMetricsFeature.count(mContext, prefKey + "|" + value, 1);
+
         // Pref key exists in set, log it's change in metrics.
         mMetricsFeature.action(mContext, MetricsEvent.ACTION_SETTINGS_PREFERENCE_CHANGE,
                 Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME, prefKey),
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index 16172bd..5a84d13 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -71,10 +71,11 @@
     public static final boolean TEST_RADIOS = false;
     public static final String TEST_RADIOS_PROP = "test.radios";
 
+    public static final String KEY_RESTRICT_BACKGROUND = "restrict_background";
+    public static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions";
+
     private static final String KEY_STATUS_HEADER = "status_header";
     private static final String KEY_LIMIT_SUMMARY = "limit_summary";
-    private static final String KEY_RESTRICT_BACKGROUND = "restrict_background";
-    private static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions";
     private static final String KEY_WIFI_USAGE_TITLE = "wifi_category";
 
     private DataUsageController mDataUsageController;
@@ -465,7 +466,7 @@
             @Override
             public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
                     boolean enabled) {
-                ArrayList<SearchIndexableResource> resources = new ArrayList<>();
+                List<SearchIndexableResource> resources = new ArrayList<>();
                 SearchIndexableResource resource = new SearchIndexableResource(context);
                 resource.xmlResId = R.xml.data_usage;
                 resources.add(resource);
@@ -485,13 +486,14 @@
 
             @Override
             public List<String> getNonIndexableKeys(Context context) {
-                ArrayList<String> keys = new ArrayList<>();
-                boolean hasMobileData = ConnectivityManager.from(context).isNetworkSupported(
-                        ConnectivityManager.TYPE_MOBILE);
+                List<String> keys = super.getNonIndexableKeys(context);
 
-                if (hasMobileData) {
+                if (hasMobileData(context)) {
                     keys.add(KEY_RESTRICT_BACKGROUND);
                 }
+                if (hasWifiRadio(context)) {
+                    keys.add(KEY_NETWORK_RESTRICTIONS);
+                }
                 keys.add(KEY_WIFI_USAGE_TITLE);
 
                 return keys;
diff --git a/src/com/android/settings/development/TelephonyMonitorPreferenceController.java b/src/com/android/settings/development/TelephonyMonitorPreferenceController.java
index 135af7d..c21ccda 100644
--- a/src/com/android/settings/development/TelephonyMonitorPreferenceController.java
+++ b/src/com/android/settings/development/TelephonyMonitorPreferenceController.java
@@ -23,15 +23,27 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.widget.Toast;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.R;
 
 public class TelephonyMonitorPreferenceController extends PreferenceController {
 
     private static final String KEY_TELEPHONY_MONITOR_SWITCH = "telephony_monitor_switch";
+    @VisibleForTesting
     static final String BUILD_TYPE = "ro.build.type";
+    @VisibleForTesting
     static final String PROPERTY_TELEPHONY_MONITOR = "persist.radio.enable_tel_mon";
 
+    @VisibleForTesting
+    static final String ENABLED_STATUS = "enabled";
+    @VisibleForTesting
+    static final String DISABLED_STATUS = "disabled";
+    @VisibleForTesting
+    static final String USER_ENABLED_STATUS = "user_enabled";
+    @VisibleForTesting
+    static final String USER_DISABLED_STATUS = "user_disabled";
+
     private SwitchPreference mPreference;
 
     public TelephonyMonitorPreferenceController(Context context) {
@@ -43,7 +55,7 @@
         super.displayPreference(screen);
         if (isAvailable()) {
             mPreference = (SwitchPreference) screen.findPreference(KEY_TELEPHONY_MONITOR_SWITCH);
-            mPreference.setChecked(SystemProperties.getBoolean(PROPERTY_TELEPHONY_MONITOR, false));
+            mPreference.setChecked(isTelephonyMonitorEnabled());
         }
     }
 
@@ -69,7 +81,7 @@
         if (KEY_TELEPHONY_MONITOR_SWITCH.equals(preference.getKey())) {
             final SwitchPreference switchPreference = (SwitchPreference) preference;
             SystemProperties.set(PROPERTY_TELEPHONY_MONITOR,
-                    switchPreference.isChecked() ? "true" : "false");
+                    switchPreference.isChecked() ? USER_ENABLED_STATUS : USER_DISABLED_STATUS);
             Toast.makeText(mContext, R.string.telephony_monitor_toast,
                     Toast.LENGTH_LONG).show();
             return true;
@@ -87,9 +99,14 @@
         if (!isAvailable()) {
             return false;
         }
-        final boolean enabled = SystemProperties.getBoolean(PROPERTY_TELEPHONY_MONITOR, false);
+        final boolean enabled = isTelephonyMonitorEnabled();
         mPreference.setChecked(enabled);
         return enabled;
     }
 
+    private boolean isTelephonyMonitorEnabled() {
+        final String tmStatus = SystemProperties.get(PROPERTY_TELEPHONY_MONITOR, DISABLED_STATUS);
+        return ENABLED_STATUS.equals(tmStatus) || USER_ENABLED_STATUS.equals(tmStatus);
+    }
+
 }
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index b2bad3a..ce9ea9b 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -235,7 +235,7 @@
             args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
             Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
                     StorageDashboardFragment.class.getName(), args, null,
-                    R.string.storage_settings_2, null, false, getMetricsCategory());
+                    R.string.storage_settings, null, false, getMetricsCategory());
             intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
             getActivity().startActivity(intent);
             finish();
@@ -280,7 +280,7 @@
 
                 if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())) {
                     startFragment(this, StorageDashboardFragment.class.getCanonicalName(),
-                            R.string.storage_settings_2, 0, args);
+                            R.string.storage_settings, 0, args);
                 } else {
                     // TODO: Go to the StorageDashboardFragment once it fully handles all of the
                     //       SD card cases and other private internal storage cases.
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index e6e6bcd..8078ad6 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -159,6 +159,14 @@
         startIconAnimation();
     }
 
+    @Override
+    protected void onPause() {
+        super.onPause();
+        if (mSidecar != null) {
+            mSidecar.setListener(null);
+        }
+    }
+
     private void startIconAnimation() {
         mIconAnimationDrawable.start();
     }
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
index 107838c..5152d31 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
@@ -134,7 +134,7 @@
                     return;
                 }
             }
-            getFragmentManager().beginTransaction().remove(mSidecar).commit();
+            getFragmentManager().beginTransaction().remove(mSidecar).commitAllowingStateLoss();
             mSidecar = null;
             startActivityForResult(getEnrollingIntent(), ENROLLING);
         }
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
index 7fc7a04..cbfec0c 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollSidecar.java
@@ -31,6 +31,8 @@
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.password.IFingerprintManager;
 
+import java.util.ArrayList;
+
 /**
  * Sidecar fragment to handle the state around fingerprint enrollment.
  */
@@ -46,6 +48,57 @@
     private boolean mDone;
     private int mUserId;
     private IFingerprintManager mFingerprintManager;
+    private ArrayList<QueuedEvent> mQueuedEvents;
+
+    private abstract class QueuedEvent {
+        public abstract void send(Listener listener);
+    }
+
+    private class QueuedEnrollmentProgress extends QueuedEvent {
+        int enrollmentSteps;
+        int remaining;
+        public QueuedEnrollmentProgress(int enrollmentSteps, int remaining) {
+            this.enrollmentSteps = enrollmentSteps;
+            this.remaining = remaining;
+        }
+
+        @Override
+        public void send(Listener listener) {
+            listener.onEnrollmentProgressChange(enrollmentSteps, remaining);
+        }
+    }
+
+    private class QueuedEnrollmentHelp extends QueuedEvent {
+        int helpMsgId;
+        CharSequence helpString;
+        public QueuedEnrollmentHelp(int helpMsgId, CharSequence helpString) {
+            this.helpMsgId = helpMsgId;
+            this.helpString = helpString;
+        }
+
+        @Override
+        public void send(Listener listener) {
+            listener.onEnrollmentHelp(helpString);
+        }
+    }
+
+    private class QueuedEnrollmentError extends QueuedEvent {
+        int errMsgId;
+        CharSequence errString;
+        public QueuedEnrollmentError(int errMsgId, CharSequence errString) {
+            this.errMsgId = errMsgId;
+            this.errString = errString;
+        }
+
+        @Override
+        public void send(Listener listener) {
+            listener.onEnrollmentError(errMsgId, errString);
+        }
+    }
+
+    public FingerprintEnrollSidecar() {
+        mQueuedEvents = new ArrayList<>();
+    }
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -103,6 +156,13 @@
 
     public void setListener(Listener listener) {
         mListener = listener;
+        if (mListener != null) {
+            for (int i=0; i<mQueuedEvents.size(); i++) {
+                QueuedEvent event = mQueuedEvents.get(i);
+                event.send(mListener);
+            }
+            mQueuedEvents.clear();
+        }
     }
 
     public int getEnrollmentSteps() {
@@ -129,6 +189,8 @@
             mDone = remaining == 0;
             if (mListener != null) {
                 mListener.onEnrollmentProgressChange(mEnrollmentSteps, remaining);
+            } else {
+                mQueuedEvents.add(new QueuedEnrollmentProgress(mEnrollmentSteps, remaining));
             }
         }
 
@@ -136,6 +198,8 @@
         public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
             if (mListener != null) {
                 mListener.onEnrollmentHelp(helpString);
+            } else {
+                mQueuedEvents.add(new QueuedEnrollmentHelp(helpMsgId, helpString));
             }
         }
 
@@ -143,6 +207,8 @@
         public void onEnrollmentError(int errMsgId, CharSequence errString) {
             if (mListener != null) {
                 mListener.onEnrollmentError(errMsgId, errString);
+            } else {
+                mQueuedEvents.add(new QueuedEnrollmentError(errMsgId, errString));
             }
             mEnrolling = false;
         }
diff --git a/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java b/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java
index eda4c82..462d09e 100644
--- a/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java
+++ b/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java
@@ -53,7 +53,7 @@
     private FingerprintManager.RemovalCallback
             mRemoveCallback = new FingerprintManager.RemovalCallback() {
         @Override
-        public void onRemovalSucceeded(Fingerprint fingerprint) {
+        public void onRemovalSucceeded(Fingerprint fingerprint, int remaining) {
             if (mListener != null) {
                 mListener.onRemovalSucceeded(fingerprint);
             } else {
diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java
index 969f886..c450b90 100644
--- a/src/com/android/settings/fuelgauge/BatteryMeterView.java
+++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java
@@ -38,8 +38,6 @@
     @VisibleForTesting
     ColorFilter mAccentColorFilter;
 
-    private int mLevel;
-
     public BatteryMeterView(Context context) {
         this(context, null, 0);
     }
@@ -66,7 +64,6 @@
     }
 
     public void setBatteryLevel(int level) {
-        mLevel = level;
         mDrawable.setBatteryLevel(level);
         if (level < mDrawable.getCriticalLevel()) {
             mDrawable.setBatteryColorFilter(mErrorColorFilter);
@@ -75,10 +72,6 @@
         }
     }
 
-    public int getBatteryLevel() {
-        return mLevel;
-    }
-
     public void setCharging(boolean charging) {
         mDrawable.setCharging(charging);
     }
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
index 45d0db2..6b7ddf9 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -99,6 +99,7 @@
             }
         };
         mTriggerPref.init(this);
+
         mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
     }
 
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 86cb203..849144a 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -22,7 +22,9 @@
 import android.support.annotation.IntDef;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import android.text.format.DateUtils;
 import android.util.Log;
+import android.util.SparseLongArray;
 
 import com.android.internal.os.BatterySipper;
 import com.android.settings.overlay.FeatureFactory;
@@ -115,25 +117,64 @@
     }
 
     /**
-     * Remove the {@link BatterySipper} that we should hide.
+     * Remove the {@link BatterySipper} that we should hide and smear the screen usage based on
+     * foreground activity time.
      *
      * @param sippers sipper list that need to check and remove
      * @return the total power of the hidden items of {@link BatterySipper}
+     * for proportional smearing
      */
     public double removeHiddenBatterySippers(List<BatterySipper> sippers) {
-        double totalPowerMah = 0;
+        double proportionalSmearPowerMah = 0;
+        BatterySipper screenSipper = null;
         for (int i = sippers.size() - 1; i >= 0; i--) {
             final BatterySipper sipper = sippers.get(i);
             if (shouldHideSipper(sipper)) {
                 sippers.remove(i);
-                if (sipper.drainType != BatterySipper.DrainType.OVERCOUNTED) {
-                    // Don't add it if it is overcounted
-                    totalPowerMah += sipper.totalPowerMah;
+                if (sipper.drainType != BatterySipper.DrainType.OVERCOUNTED
+                        && sipper.drainType != BatterySipper.DrainType.SCREEN
+                        && sipper.drainType != BatterySipper.DrainType.UNACCOUNTED) {
+                    // Don't add it if it is overcounted, unaccounted or screen
+                    proportionalSmearPowerMah += sipper.totalPowerMah;
                 }
             }
+
+            if (sipper.drainType == BatterySipper.DrainType.SCREEN) {
+                screenSipper = sipper;
+            }
         }
 
-        return totalPowerMah;
+        smearScreenBatterySipper(sippers, screenSipper);
+
+        return proportionalSmearPowerMah;
+    }
+
+    /**
+     * Smear the screen on power usage among {@code sippers}, based on ratio of foreground activity
+     * time.
+     */
+    @VisibleForTesting
+    void smearScreenBatterySipper(List<BatterySipper> sippers, BatterySipper screenSipper) {
+        final long rawRealtimeMs = SystemClock.elapsedRealtime();
+        long totalActivityTimeMs = 0;
+        final SparseLongArray activityTimeArray = new SparseLongArray();
+        for (int i = 0, size = sippers.size(); i < size; i++) {
+            final BatteryStats.Uid uid = sippers.get(i).uidObj;
+            if (uid != null) {
+                final long timeMs = getForegroundActivityTotalTimeMs(uid, rawRealtimeMs);
+                activityTimeArray.put(uid.getUid(), timeMs);
+                totalActivityTimeMs += timeMs;
+            }
+        }
+
+        if (totalActivityTimeMs >= 10 * DateUtils.MINUTE_IN_MILLIS) {
+            final double screenPowerMah = screenSipper.totalPowerMah;
+            for (int i = 0, size = sippers.size(); i < size; i++) {
+                final BatterySipper sipper = sippers.get(i);
+                sipper.totalPowerMah += screenPowerMah * activityTimeArray.get(sipper.getUid(), 0)
+                        / totalActivityTimeMs;
+            }
+        }
     }
 
     /**
@@ -144,9 +185,7 @@
 
         return drainType == BatterySipper.DrainType.IDLE
                 || drainType == BatterySipper.DrainType.CELL
-                || drainType == BatterySipper.DrainType.WIFI
                 || drainType == BatterySipper.DrainType.SCREEN
-                || drainType == BatterySipper.DrainType.BLUETOOTH
                 || drainType == BatterySipper.DrainType.UNACCOUNTED
                 || drainType == BatterySipper.DrainType.OVERCOUNTED
                 || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP
@@ -186,5 +225,15 @@
         return mPackageManager == null;
     }
 
+    @VisibleForTesting
+    long getForegroundActivityTotalTimeMs(BatteryStats.Uid uid, long rawRealtimeMs) {
+        final BatteryStats.Timer timer = uid.getForegroundActivityTimer();
+        if (timer != null) {
+            return timer.getTotalTimeLocked(rawRealtimeMs, BatteryStats.STATS_SINCE_CHARGED);
+        }
+
+        return 0;
+    }
+
 }
 
diff --git a/src/com/android/settings/fuelgauge/FakeUid.java b/src/com/android/settings/fuelgauge/FakeUid.java
index 6f92b3d..6cb5c64 100644
--- a/src/com/android/settings/fuelgauge/FakeUid.java
+++ b/src/com/android/settings/fuelgauge/FakeUid.java
@@ -45,6 +45,11 @@
     }
 
     @Override
+    public Timer getAggregatedPartialWakelockTimer() {
+        return null;
+    }
+
+    @Override
     public ArrayMap<String, ? extends Timer> getSyncStats() {
         return null;
     }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java
index aee55d6..060abdd 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java
@@ -57,7 +57,7 @@
 
         mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(getContext());
         mBatteryBroadcastReceiver.setBatteryChangedListener(() -> {
-            getLoaderManager().restartLoader(0, null, this);
+            restartBatteryStatsLoader();
         });
 
         getLoaderManager().initLoader(0, icicle, this);
@@ -95,6 +95,10 @@
         }
     }
 
+    protected void restartBatteryStatsLoader() {
+        getLoaderManager().restartLoader(0, Bundle.EMPTY, this);
+    }
+
     protected abstract void refreshUi();
 
     protected void updatePreference(BatteryHistoryPreference historyPref) {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 0309296..b3d07b8 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.fuelgauge;
 
-import android.animation.Animator;
-import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
@@ -43,7 +41,6 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
-import android.view.animation.AnimationUtils;
 import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -87,10 +84,6 @@
     private static final String KEY_BATTERY_HEADER = "battery_header";
     private static final int MAX_ITEMS_TO_LIST = USE_FAKE_DATA ? 30 : 10;
     private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
-    private static final int BATTERY_ANIMATION_DURATION_MS_PER_LEVEL = 30;
-
-    @VisibleForTesting
-    static final String ARG_BATTERY_LEVEL = "key_battery_level";
 
     private static final String KEY_SCREEN_USAGE = "screen_usage";
     private static final String KEY_TIME_SINCE_LAST_FULL_CHARGE = "last_full_charge";
@@ -112,8 +105,6 @@
             new FooterPreferenceMixin(this, getLifecycle());
 
     @VisibleForTesting
-    int mBatteryLevel;
-    @VisibleForTesting
     boolean mShowAllApps = false;
     @VisibleForTesting
     PowerGaugePreference mScreenUsagePref;
@@ -133,8 +124,6 @@
         super.onCreate(icicle);
         setAnimationAllowed(true);
 
-        mBatteryLevel = getContext().getResources().getInteger(
-                com.android.internal.R.integer.config_criticalBatteryWarningLevel) + 1;
         mBatteryLayoutPref = (LayoutPreference) findPreference(KEY_BATTERY_HEADER);
         mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
         mScreenUsagePref = (PowerGaugePreference) findPreference(KEY_SCREEN_USAGE);
@@ -148,14 +137,6 @@
     }
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        if (savedInstanceState != null) {
-            mBatteryLevel = savedInstanceState.getInt(ARG_BATTERY_LEVEL);
-        }
-    }
-
-    @Override
     public int getMetricsCategory() {
         return MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY;
     }
@@ -163,8 +144,6 @@
     @Override
     public void onResume() {
         super.onResume();
-
-        initHeaderPreference();
     }
 
     @Override
@@ -183,12 +162,6 @@
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putInt(ARG_BATTERY_LEVEL, mBatteryLevel);
-    }
-
-    @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (KEY_BATTERY_HEADER.equals(preference.getKey())) {
             performBatteryHeaderClick();
@@ -287,7 +260,7 @@
                 item.setTitle(mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
                 metricsFeatureProvider.action(context,
                         MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_APPS_TOGGLE, mShowAllApps);
-                refreshUi();
+                restartBatteryStatsLoader();
                 return true;
             default:
                 return super.onOptionsItemSelected(item);
@@ -596,46 +569,15 @@
                 .findViewById(R.id.battery_header_icon);
         final TextView timeText = (TextView) mBatteryLayoutPref.findViewById(R.id.battery_percent);
         final TextView summary1 = (TextView) mBatteryLayoutPref.findViewById(R.id.summary1);
+        timeText.setText(Utils.formatPercentage(info.batteryLevel));
         if (info.remainingLabel == null ) {
             summary1.setText(info.statusLabel);
         } else {
             summary1.setText(info.remainingLabel);
         }
+
+        batteryView.setBatteryLevel(info.batteryLevel);
         batteryView.setCharging(!info.discharging);
-        startBatteryHeaderAnimationIfNecessary(batteryView, timeText, mBatteryLevel,
-                info.batteryLevel);
-    }
-
-    @VisibleForTesting
-    void initHeaderPreference() {
-        final BatteryMeterView batteryView = (BatteryMeterView) mBatteryLayoutPref
-                .findViewById(R.id.battery_header_icon);
-        final TextView timeText = (TextView) mBatteryLayoutPref.findViewById(R.id.battery_percent);
-
-        batteryView.setBatteryLevel(mBatteryLevel);
-        timeText.setText(Utils.formatPercentage(mBatteryLevel));
-    }
-
-    @VisibleForTesting
-    void startBatteryHeaderAnimationIfNecessary(BatteryMeterView batteryView, TextView timeTextView,
-            int prevLevel, int currentLevel) {
-        mBatteryLevel = currentLevel;
-        final int diff = Math.abs(prevLevel - currentLevel);
-        if (diff != 0) {
-            final ValueAnimator animator = ValueAnimator.ofInt(prevLevel, currentLevel);
-            animator.setDuration(BATTERY_ANIMATION_DURATION_MS_PER_LEVEL * diff);
-            animator.setInterpolator(AnimationUtils.loadInterpolator(getContext(),
-                    android.R.interpolator.fast_out_slow_in));
-            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animation) {
-                    final Integer level = (Integer) animation.getAnimatedValue();
-                    batteryView.setBatteryLevel(level);
-                    timeTextView.setText(Utils.formatPercentage(level));
-                }
-            });
-            animator.start();
-        }
     }
 
     @VisibleForTesting
@@ -652,7 +594,7 @@
             final CharSequence timeSequence = Utils.formatElapsedTime(getContext(), usageTimeMs,
                     false);
             preference.setSummary(
-                    TextUtils.expandTemplate(getText(R.string.battery_used_for), timeSequence));
+                    TextUtils.expandTemplate(getText(R.string.battery_screen_usage), timeSequence));
         }
     }
 
diff --git a/src/com/android/settings/gestures/AssistGesturePreferenceController.java b/src/com/android/settings/gestures/AssistGesturePreferenceController.java
index f0ba888..c858511 100644
--- a/src/com/android/settings/gestures/AssistGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/AssistGesturePreferenceController.java
@@ -35,7 +35,7 @@
         implements OnPause, OnResume {
 
     private static final String PREF_KEY_VIDEO = "gesture_assist_video";
-    private static final String PREF_KEY_ASSIST_GESTURE = "gesture_assist";
+    private final String mAssistGesturePrefKey;
 
     private final AssistGestureFeatureProvider mFeatureProvider;
     private final SettingObserver mSettingObserver;
@@ -44,11 +44,12 @@
     private PreferenceScreen mScreen;
     private Preference mPreference;
 
-    public AssistGesturePreferenceController(Context context, Lifecycle lifecycle) {
+    public AssistGesturePreferenceController(Context context, Lifecycle lifecycle, String key) {
         super(context, lifecycle);
         mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider();
         mSettingObserver = new SettingObserver();
         mWasAvailable = isAvailable();
+        mAssistGesturePrefKey = key;
     }
 
     @Override
@@ -110,7 +111,7 @@
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_ASSIST_GESTURE;
+        return mAssistGesturePrefKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/AssistGestureSettings.java b/src/com/android/settings/gestures/AssistGestureSettings.java
index 238b8b6..0c4f278 100644
--- a/src/com/android/settings/gestures/AssistGestureSettings.java
+++ b/src/com/android/settings/gestures/AssistGestureSettings.java
@@ -34,6 +34,8 @@
 
     private static final String TAG = "AssistGesture";
 
+    private static final String KEY_ASSIST = "gesture_assist";
+
     @Override
     public int getMetricsCategory() {
         return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
@@ -57,7 +59,7 @@
     private static List<PreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
-        controllers.add(new AssistGesturePreferenceController(context, lifecycle));
+        controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST));
         controllers.add(new AssistGestureSensitivityPreferenceController(context, lifecycle));
         return controllers;
     }
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index d38902e..ba1d0f6 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -20,18 +20,16 @@
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
 
-import android.util.ArrayMap;
 import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.search2.InlineSwitchPayload;
-import com.android.settings.search2.ResultPayload;
 
 public class DoubleTapPowerPreferenceController extends GesturePreferenceController {
 
     private static final String PREF_KEY_VIDEO = "gesture_double_tap_power_video";
-    private static final String PREF_KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
+    private final String mDoubleTapPowerKey;
 
-    public DoubleTapPowerPreferenceController(Context context, Lifecycle lifecycle) {
+    public DoubleTapPowerPreferenceController(Context context, Lifecycle lifecycle, String key) {
         super(context, lifecycle);
+        mDoubleTapPowerKey = key;
     }
 
     @Override
@@ -47,7 +45,7 @@
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_DOUBLE_TAP_POWER;
+        return mDoubleTapPowerKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
index 467cec8..a880c32 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
@@ -33,6 +33,7 @@
 public class DoubleTapPowerSettings extends DashboardFragment {
 
     private static final String TAG = "DoubleTapPower";
+    private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
 
     @Override
     public int getMetricsCategory() {
@@ -57,7 +58,8 @@
     private static List<PreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
-        controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle));
+        controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle,
+                KEY_DOUBLE_TAP_POWER));
         return controllers;
     }
 
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 49e8f51..5f8dfb4 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -21,26 +21,24 @@
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
 
-import android.util.ArrayMap;
 import com.android.internal.hardware.AmbientDisplayConfiguration;
 import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.search2.InlineSwitchPayload;
-import com.android.settings.search2.ResultPayload;
 
 public class DoubleTapScreenPreferenceController extends GesturePreferenceController {
 
     private static final String PREF_KEY_VIDEO = "gesture_double_tap_screen_video";
-    private static final String PREF_KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen";
+    private final String mDoubleTapScreenPrefKey;
 
     private final AmbientDisplayConfiguration mAmbientConfig;
     @UserIdInt
     private final int mUserId;
 
     public DoubleTapScreenPreferenceController(Context context, Lifecycle lifecycle,
-            AmbientDisplayConfiguration config, @UserIdInt int userId) {
+            AmbientDisplayConfiguration config, @UserIdInt int userId, String key) {
         super(context, lifecycle);
         mAmbientConfig = config;
         mUserId = userId;
+        mDoubleTapScreenPrefKey = key;
     }
 
     @Override
@@ -50,7 +48,7 @@
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_DOUBLE_TAP_SCREEN;
+        return mDoubleTapScreenPrefKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
index 887ac80..0804e7b 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
@@ -35,6 +35,7 @@
 public class DoubleTapScreenSettings extends DashboardFragment {
 
     private static final String TAG = "DoubleTapScreen";
+    private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen";
 
     @Override
     public int getMetricsCategory() {
@@ -60,7 +61,8 @@
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle,
-                new AmbientDisplayConfiguration(context), UserHandle.myUserId()));
+                new AmbientDisplayConfiguration(context), UserHandle.myUserId(),
+                KEY_DOUBLE_TAP_SCREEN));
         return controllers;
     }
 
diff --git a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
index 46a8cbb..cf5cfab 100644
--- a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
+++ b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
@@ -33,6 +33,7 @@
 public class DoubleTwistGestureSettings extends DashboardFragment {
 
     private static final String TAG = "DoubleTwistGesture";
+    private static final String KEY_DOUBLE_TWIST = "gesture_double_twist";
 
     @Override
     public int getMetricsCategory() {
@@ -57,7 +58,7 @@
     private static List<PreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
-        controllers.add(new DoubleTwistPreferenceController(context, lifecycle));
+        controllers.add(new DoubleTwistPreferenceController(context, lifecycle, KEY_DOUBLE_TWIST));
         return controllers;
     }
 
diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
index c5174fd..f1c7455 100644
--- a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
@@ -24,19 +24,17 @@
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 
-import android.util.ArrayMap;
 import com.android.settings.R;
 import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.search2.InlineSwitchPayload;
-import com.android.settings.search2.ResultPayload;
 
 public class DoubleTwistPreferenceController extends GesturePreferenceController {
 
     private static final String PREF_KEY_VIDEO = "gesture_double_twist_video";
-    private static final String PREF_KEY_DOUBLE_TWIST = "gesture_double_twist";
+    private final String mDoubleTwistPrefKey;
 
-    public DoubleTwistPreferenceController(Context context, Lifecycle lifecycle) {
+    public DoubleTwistPreferenceController(Context context, Lifecycle lifecycle, String key) {
         super(context, lifecycle);
+        mDoubleTwistPrefKey = key;
     }
 
     @Override
@@ -52,7 +50,7 @@
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_DOUBLE_TWIST;
+        return mDoubleTwistPrefKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index ce20f15..c0e6009 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -21,26 +21,24 @@
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
 
-import android.util.ArrayMap;
 import com.android.internal.hardware.AmbientDisplayConfiguration;
 import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.search2.InlineSwitchPayload;
-import com.android.settings.search2.ResultPayload;
 
 public class PickupGesturePreferenceController extends GesturePreferenceController {
 
     private static final String PREF_VIDEO_KEY = "gesture_pick_up_video";
-    private static final String PREF_KEY_PICK_UP = "gesture_pick_up";
+    private final String mPickUpPrefKey;
 
     private final AmbientDisplayConfiguration mAmbientConfig;
     @UserIdInt
     private final int mUserId;
 
     public PickupGesturePreferenceController(Context context, Lifecycle lifecycle,
-            AmbientDisplayConfiguration config, @UserIdInt int userId) {
+            AmbientDisplayConfiguration config, @UserIdInt int userId, String key) {
         super(context, lifecycle);
         mAmbientConfig = config;
         mUserId = userId;
+        mPickUpPrefKey = key;
     }
 
     @Override
@@ -60,7 +58,7 @@
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_PICK_UP;
+        return mPickUpPrefKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java
index 0fe6097..874f690 100644
--- a/src/com/android/settings/gestures/PickupGestureSettings.java
+++ b/src/com/android/settings/gestures/PickupGestureSettings.java
@@ -35,6 +35,7 @@
 public class PickupGestureSettings extends DashboardFragment {
 
     private static final String TAG = "PickupGestureSettings";
+    private static final String KEY_PICK_UP = "gesture_pick_up";
 
     @Override
     public int getMetricsCategory() {
@@ -60,7 +61,7 @@
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new PickupGesturePreferenceController(context, lifecycle,
-                new AmbientDisplayConfiguration(context), UserHandle.myUserId()));
+                new AmbientDisplayConfiguration(context), UserHandle.myUserId(), KEY_PICK_UP));
         return controllers;
     }
 
diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
index 22b88fc..2a62674 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
@@ -20,23 +20,22 @@
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
 
-import android.util.ArrayMap;
 import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.search2.InlineSwitchPayload;
-import com.android.settings.search2.ResultPayload;
 
 public class SwipeToNotificationPreferenceController extends GesturePreferenceController {
 
     private static final String PREF_KEY_VIDEO = "gesture_swipe_down_fingerprint_video";
-    private static final String PREF_KEY_SWIPE_DOWN_FINGERPRINT = "gesture_swipe_down_fingerprint";
+    private final String mSwipeDownFingerPrefKey;
 
-    public SwipeToNotificationPreferenceController(Context context, Lifecycle lifecycle) {
+    public SwipeToNotificationPreferenceController(Context context, Lifecycle lifecycle,
+            String key) {
         super(context, lifecycle);
+        mSwipeDownFingerPrefKey = key;
     }
 
     @Override
     public String getPreferenceKey() {
-        return PREF_KEY_SWIPE_DOWN_FINGERPRINT;
+        return mSwipeDownFingerPrefKey;
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/SwipeToNotificationSettings.java b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
index 6c136c2..f19565a 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
@@ -34,6 +34,8 @@
 
     private static final String TAG = "SwipeToNotifSettings";
 
+    private static final String KEY = "gesture_swipe_down_fingerprint";
+
     @Override
     public int getMetricsCategory() {
         return MetricsProto.MetricsEvent.SETTINGS_GESTURE_SWIPE_TO_NOTIFICATION;
@@ -57,7 +59,7 @@
     private static List<PreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
-        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
+        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle, KEY));
         return controllers;
     }
 
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index 1999970..1c4d642 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -58,6 +58,14 @@
 
     private static final String TAG = "LangAndInputSettings";
 
+    private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary";
+    private static final String KEY_ASSIST = "gesture_assist_input_summary";
+    private static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint_input_summary";
+    private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power_input_summary";
+    private static final String KEY_DOUBLE_TWIST = "gesture_double_twist_input_summary";
+    private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen_input_summary";
+    private static final String KEY_PICK_UP = "gesture_pick_up_input_summary";
+
     private AmbientDisplayConfiguration mAmbientDisplayConfig;
 
     @Override
@@ -110,14 +118,16 @@
 
         controllers.add(gameControllerPreferenceController);
         // Gestures
-        controllers.add(new AssistGesturePreferenceController(context, lifecycle));
-        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
-        controllers.add(new DoubleTwistPreferenceController(context, lifecycle));
-        controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle));
-        controllers.add(new PickupGesturePreferenceController(
-                context, lifecycle, ambientDisplayConfiguration, UserHandle.myUserId()));
-        controllers.add(new DoubleTapScreenPreferenceController(
-                context, lifecycle, ambientDisplayConfiguration, UserHandle.myUserId()));
+        controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST));
+        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle,
+                KEY_SWIPE_DOWN));
+        controllers.add(new DoubleTwistPreferenceController(context, lifecycle, KEY_DOUBLE_TWIST));
+        controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle,
+                KEY_DOUBLE_TAP_POWER));
+        controllers.add(new PickupGesturePreferenceController(context, lifecycle,
+                ambientDisplayConfiguration, UserHandle.myUserId(), KEY_PICK_UP));
+        controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle,
+                ambientDisplayConfiguration, UserHandle.myUserId(), KEY_DOUBLE_TAP_SCREEN));
         controllers.add(new DefaultAutofillPreferenceController(context));
         return controllers;
     }
@@ -179,5 +189,20 @@
                     return buildPreferenceControllers(context, null,
                             new AmbientDisplayConfiguration(context));
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    // Duplicates in summary and details pages.
+                    keys.add(KEY_TEXT_TO_SPEECH);
+                    keys.add(KEY_ASSIST);
+                    keys.add(KEY_SWIPE_DOWN);
+                    keys.add(KEY_DOUBLE_TAP_POWER);
+                    keys.add(KEY_DOUBLE_TWIST);
+                    keys.add(KEY_DOUBLE_TAP_SCREEN);
+                    keys.add(KEY_PICK_UP);
+
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/language/TtsPreferenceController.java b/src/com/android/settings/language/TtsPreferenceController.java
index 0d1c753..a734e4b 100644
--- a/src/com/android/settings/language/TtsPreferenceController.java
+++ b/src/com/android/settings/language/TtsPreferenceController.java
@@ -23,7 +23,8 @@
 
 public class TtsPreferenceController extends PreferenceController {
 
-    private static final String KEY_TTS_SETTINGS = "tts_settings";
+    private static final String KEY_VOICE_CATEGORY = "voice_category";
+    private static final String KEY_TTS_SETTINGS = "tts_settings_summary";
 
     private final TtsEngines mTtsEngines;
 
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index a1c5263..d9da051 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -35,6 +35,8 @@
 public class ConfigureNotificationSettings extends DashboardFragment {
     private static final String TAG = "ConfigNotiSettings";
 
+    private static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint_notifications";
+
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.CONFIGURE_NOTIFICATION;
@@ -68,7 +70,8 @@
             lifecycle.addObserver(pulseController);
             lifecycle.addObserver(lockScreenNotificationController);
         }
-        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
+        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle,
+                KEY_SWIPE_DOWN));
         controllers.add(badgeController);
         controllers.add(pulseController);
         controllers.add(lockScreenNotificationController);
diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java
index cdbd5b3..18efc33 100644
--- a/src/com/android/settings/notification/SettingPref.java
+++ b/src/com/android/settings/notification/SettingPref.java
@@ -121,19 +121,6 @@
         if (mTwoState != null) {
             mTwoState.setChecked(val != 0);
         } else if (mDropDown != null) {
-            if (mValues != null) {
-                int index = 0;
-                for (int len = mValues.length; index < len; index++) {
-                    if (mValues[index] == val) {
-                        break;
-                    }
-                }
-
-                if (index < mValues.length) {
-                    CharSequence entry = mDropDown.getEntries()[index];
-                    mDropDown.setSummary(entry);
-                }
-            }
             mDropDown.setValue(Integer.toString(val));
         }
     }
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index a92c5dd..ec7351a 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -43,6 +43,7 @@
 public class SoundSettings extends DashboardFragment {
     private static final String TAG = "SoundSettings";
 
+    private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
     private static final String SELECTED_PREFERENCE_KEY = "selected_preference";
     private static final int REQUEST_CODE = 200;
 
@@ -187,7 +188,7 @@
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new ZenModePreferenceController(context));
         controllers.add(new EmergencyBroadcastPreferenceController(
-                context, "cell_broadcast_settings"));
+                context, KEY_CELL_BROADCAST_SETTINGS));
         controllers.add(new VibrateWhenRingPreferenceController(context));
 
         // === Volumes ===
@@ -236,6 +237,16 @@
                     return buildPreferenceControllers(context, null /* fragment */,
                             null /* callback */, null /* lifecycle */);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    // Duplicate results
+                    keys.add((new ZenModePreferenceController(context)).getPreferenceKey());
+                    keys.add(ZenModeSettings.KEY_VISUAL_SETTINGS);
+                    keys.add(KEY_CELL_BROADCAST_SETTINGS);
+                    return keys;
+                }
             };
 
     // === Work Sound Settings ===
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index bbcaa9c..854857a 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -53,8 +53,10 @@
 import java.util.Map.Entry;
 
 public class ZenModeSettings extends ZenModeSettingsBase {
+
+    public static final String KEY_VISUAL_SETTINGS = "visual_interruptions_settings";
+
     private static final String KEY_PRIORITY_SETTINGS = "priority_settings";
-    private static final String KEY_VISUAL_SETTINGS = "visual_interruptions_settings";
     private static final String KEY_AUTOMATIC_RULES = "automatic_rules";
 
     static final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java
index 8732227..f5e06ca 100644
--- a/src/com/android/settings/search/BaseSearchIndexProvider.java
+++ b/src/com/android/settings/search/BaseSearchIndexProvider.java
@@ -72,7 +72,7 @@
             }
             return nonIndexableKeys;
         } else {
-            return EMPTY_LIST;
+            return new ArrayList<>();
         }
     }
 
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index 4c4ed21..1a5a182 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -37,6 +37,8 @@
 
     private static final String TAG = "SystemDashboardFrag";
 
+    private static final String KEY_RESET = "reset_dashboard";
+
     @Override
     public int getMetricsCategory() {
         return MetricsProto.MetricsEvent.SETTINGS_SYSTEM_CATEGORY;
@@ -82,5 +84,14 @@
                 public List<PreferenceController> getPreferenceControllers(Context context) {
                     return buildPreferenceControllers(context);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    keys.add((new BackupSettingsActivityPreferenceController(context)
+                            .getPreferenceKey()));
+                    keys.add(KEY_RESET);
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index dd1e4a4..a5d922d 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -225,7 +225,7 @@
 
         mButtonsPref = (LayoutPreference) screen.findPreference(KEY_BUTTONS_PREF);
         mSignInButton = (Button) mButtonsPref.findViewById(R.id.right_button);
-        mSignInButton.setText(com.android.internal.R.string.network_available_sign_in);
+        mSignInButton.setText(R.string.support_sign_in_button_text);
         mSignInButton.setOnClickListener(
             view -> mConnectivityManagerWrapper.startCaptivePortalApp(mNetwork));
 
diff --git a/tests/robotests/assets/whitelist_duplicate_index_key b/tests/robotests/assets/whitelist_duplicate_index_key
index 5b5153c..6ced706 100644
--- a/tests/robotests/assets/whitelist_duplicate_index_key
+++ b/tests/robotests/assets/whitelist_duplicate_index_key
@@ -1,12 +1,6 @@
 add_users_when_locked
 additional_system_update_settings
 dashboard_tile_placeholder
-gesture_assist
-gesture_double_tap_power
-gesture_double_tap_screen
-gesture_double_twist
-gesture_pick_up
-gesture_swipe_down_fingerprint
 lock_screen_notifications
 screen_zoom
 usage_access
\ No newline at end of file
diff --git a/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
new file mode 100644
index 0000000..40b76df
--- /dev/null
+++ b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
@@ -0,0 +1,23 @@
+/*
+ * 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 android.bluetooth;
+
+/**
+ * A placeholder class to prevent ClassNotFound exceptions caused by lack of visibility.
+ */
+public class BluetoothCodecConfig {
+}
diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
index c43ad3c..c64e582 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -28,6 +28,8 @@
 import android.support.v7.preference.PreferenceScreen;
 
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settingslib.DeviceInfoUtils;
 
 import org.junit.Before;
@@ -36,8 +38,11 @@
 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 DeviceInfoSettingsTest {
@@ -75,4 +80,17 @@
 
         verify(mSummaryLoader).setSummary(mProvider, Build.MODEL + DeviceInfoUtils.getMsvSuffix());
     }
+
+    @Test
+    @Config(shadows = ShadowUtils.class)
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = RuntimeEnvironment.application;
+        final List<String> niks = DeviceInfoSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final int xmlId = (new DeviceInfoSettings()).getPreferenceScreenResId();
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
+
+        assertThat(keys).containsAllIn(niks);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
new file mode 100644
index 0000000..f0c87cf
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
@@ -0,0 +1,36 @@
+package com.android.settings;
+
+import android.content.Context;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.testutils.XmlTestUtils;
+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;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DisplaySettingsTest {
+
+    @Test
+    public void testPreferenceControllers_getPreferenceKeys_existInPreferenceScreen() {
+        final Context context = RuntimeEnvironment.application;
+        final DisplaySettings fragment = new DisplaySettings();
+        final List<String> preferenceScreenKeys = XmlTestUtils.getKeysFromPreferenceXml(context,
+                fragment.getPreferenceScreenResId());
+        final List<String> preferenceKeys = new ArrayList<>();
+
+        for (PreferenceController controller : fragment.getPreferenceControllers(context)) {
+            preferenceKeys.add(controller.getPreferenceKey());
+        }
+        // Nightmode is currently hidden
+        preferenceKeys.remove("night_mode");
+
+        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/LegalSettingsTest.java b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
new file mode 100644
index 0000000..6cfe211
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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;
+
+import android.content.Context;
+
+import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.spy;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class LegalSettingsTest {
+
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = RuntimeEnvironment.application;
+        final List<String> niks = LegalSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context,
+                R.xml.about_legal);
+
+        assertThat(keys).containsAllIn(niks);
+    }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
index 8453da5..66f5549 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
@@ -26,8 +26,8 @@
 import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
-
 import android.text.TextUtils;
+
 import com.android.settings.AccessiblePreferenceCategory;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -92,7 +92,7 @@
         when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
         when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
         when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn(
-            new AuthenticatorDescription[0]);
+                new AuthenticatorDescription[0]);
         when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[0]);
         mController = new AccountPreferenceController(mContext, mFragment, null, mAccountHelper);
     }
@@ -367,6 +367,51 @@
 
     @Test
     @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
+    public void onResume_twoAccountsOfSameName_shouldAddFivePreferences() {
+        final List<UserInfo> infos = new ArrayList<>();
+        infos.add(new UserInfo(1, "user 1", 0));
+        when(mUserManager.isManagedProfile()).thenReturn(false);
+        when(mUserManager.isLinkedUser()).thenReturn(false);
+        when(mUserManager.getProfiles(anyInt())).thenReturn(infos);
+
+        final Account[] accountType1 = new Account[2];
+        accountType1[0] = new Account("Account1", "com.acct1");
+        accountType1[1] = new Account("Account2", "com.acct1");
+        final Account[] accountType2 = new Account[2];
+        accountType2[0] = new Account("Account1", "com.acct2");
+        accountType2[1] = new Account("Account2", "com.acct2");
+        final Account[] allAccounts = new Account[4];
+        allAccounts[0] = accountType1[0];
+        allAccounts[1] = accountType1[1];
+        allAccounts[2] = accountType2[0];
+        allAccounts[3] = accountType2[1];
+        final AuthenticatorDescription[] authDescs = {
+                new AuthenticatorDescription("com.acct1", "com.android.settings",
+                        R.string.account_settings_title, 0, 0, 0, false),
+                new AuthenticatorDescription("com.acct2", "com.android.settings",
+                        R.string.account_settings_title, 0, 0, 0, false)
+        };
+
+        when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(allAccounts);
+        when(mAccountManager.getAccountsByTypeAsUser(eq("com.acct1"), any(UserHandle.class)))
+                .thenReturn(accountType1);
+        when(mAccountManager.getAccountsByTypeAsUser(eq("com.acct2"), any(UserHandle.class)))
+                .thenReturn(accountType2);
+        when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn(authDescs);
+
+        AccessiblePreferenceCategory preferenceGroup = mock(AccessiblePreferenceCategory.class);
+        when(preferenceGroup.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
+        when(mAccountHelper.createAccessiblePreferenceCategory(any(Context.class))).thenReturn(
+                preferenceGroup);
+
+        mController.onResume();
+
+        // should add 4 individual account and the Add account preference
+        verify(preferenceGroup, times(5)).addPreference(any(Preference.class));
+    }
+
+    @Test
+    @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
     public void onResume_noAccountChange_shouldNotAddAccountPreference() {
         final List<UserInfo> infos = new ArrayList<>();
         infos.add(new UserInfo(1, "user 1", 0));
diff --git a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
index bedb0a5..0c3c160 100644
--- a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
@@ -26,6 +26,7 @@
 import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
 import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.testutils.XmlTestUtils;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -34,11 +35,14 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.List;
+
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -136,4 +140,16 @@
 
     }
 
+
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = spy(RuntimeEnvironment.application);
+        final List<String> niks = AdvancedAppSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final int xmlId = (new AdvancedAppSettings()).getPreferenceScreenResId();
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
+
+        assertThat(keys).containsAllIn(niks);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
new file mode 100644
index 0000000..c61823c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
@@ -0,0 +1,206 @@
+/*
+ * 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.bluetooth;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.shadow.ShadowEventLogWriter;
+import com.android.settingslib.R;
+import com.android.settingslib.bluetooth.A2dpProfile;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfile;
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+
+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.FragmentTestUtil;
+import org.robolectric.util.ReflectionHelpers;
+import org.robolectric.RuntimeEnvironment;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
+import java.util.ArrayList;
+
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+        ShadowEventLogWriter.class
+})
+public class DeviceProfilesSettingsTest {
+    Context mContext;
+    @Mock Activity mActivity;
+    @Mock LocalBluetoothManager mManager;
+    @Mock LocalBluetoothAdapter mAdapter;
+    @Mock LocalBluetoothProfileManager mProfileManager;
+    @Mock CachedBluetoothDeviceManager mDeviceManager;
+    @Mock CachedBluetoothDevice mCachedDevice;
+    @Mock A2dpProfile mProfile;
+
+    ArrayList<LocalBluetoothProfile> mProfiles;
+    DeviceProfilesSettings mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+
+        when(mProfile.getNameResource(any())).thenReturn(R.string.bluetooth_profile_a2dp);
+        mProfiles = new ArrayList<>();
+        mProfiles.add(mProfile);
+        when(mCachedDevice.getConnectableProfiles()).thenReturn(mProfiles);
+
+        mFragment = new DeviceProfilesSettings();
+        mFragment.setArguments(new Bundle());
+
+        ReflectionHelpers.setStaticField(LocalBluetoothManager.class, "sInstance", mManager);
+        when(mManager.getCachedDeviceManager()).thenReturn(mDeviceManager);
+        when(mManager.getBluetoothAdapter()).thenReturn(mAdapter);
+        when(mManager.getProfileManager()).thenReturn(mProfileManager);
+        when(mProfileManager.getMapProfile()).thenReturn(null);
+        when(mDeviceManager.findDevice(any())).thenReturn(mCachedDevice);
+    }
+
+    @Test
+    public void deviceHasHighQualityAudio() {
+        when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
+        when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
+        when(mProfile.isPreferred(any())).thenReturn(true);
+        FragmentTestUtil.startFragment(mFragment);
+
+        ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
+        CheckBox box = (CheckBox) profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(box).isNotNull();
+        assertThat(box.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(box.isEnabled()).isTrue();
+        assertThat(box.isChecked()).isTrue();
+
+        box.performClick();
+        verify(mProfile).setHighQualityAudioEnabled(any(), eq(false));
+        box.performClick();
+        verify(mProfile).setHighQualityAudioEnabled(any(), eq(true));
+    }
+
+    @Test
+    public void busyDeviceDisablesControl() {
+        when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
+        when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
+        when(mProfile.isPreferred(any())).thenReturn(true);
+        when(mCachedDevice.isBusy()).thenReturn(true);
+        FragmentTestUtil.startFragment(mFragment);
+
+        // Make sure that the high quality audio option is present but disabled when the device
+        // is busy.
+        ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
+        CheckBox box = (CheckBox) profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(box).isNotNull();
+        assertThat(box.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(box.isEnabled()).isFalse();
+    }
+
+    @Test
+    public void mediaAudioGetsDisabledAndReEnabled() {
+        when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
+        when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
+        when(mProfile.isPreferred(any())).thenReturn(true);
+        FragmentTestUtil.startFragment(mFragment);
+
+        ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
+        CheckBox audioBox = profilesGroup.findViewWithTag(mProfile.toString());
+        CheckBox highQualityAudioBox = profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(audioBox).isNotNull();
+        assertThat(audioBox.isChecked()).isTrue();
+        assertThat(highQualityAudioBox).isNotNull();
+        assertThat(highQualityAudioBox.isChecked()).isTrue();
+
+        // Disabling media audio should cause the high quality audio box to disappear.
+        when(mProfile.isPreferred(any())).thenReturn(false);
+        mFragment.onDeviceAttributesChanged();
+        audioBox = profilesGroup.findViewWithTag(mProfile.toString());
+        highQualityAudioBox = profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(audioBox).isNotNull();
+        assertThat(audioBox.isChecked()).isFalse();
+        assertThat(highQualityAudioBox).isNotNull();
+        assertThat(highQualityAudioBox.getVisibility()).isEqualTo(View.GONE);
+
+        // And re-enabling media audio should make it reappear.
+        when(mProfile.isPreferred(any())).thenReturn(true);
+        mFragment.onDeviceAttributesChanged();
+        audioBox = profilesGroup.findViewWithTag(mProfile.toString());
+        highQualityAudioBox = profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(audioBox).isNotNull();
+        assertThat(audioBox.isChecked()).isTrue();
+        assertThat(highQualityAudioBox).isNotNull();
+        assertThat(highQualityAudioBox.isChecked()).isTrue();
+    }
+
+    @Test
+    public void mediaAudioStartsDisabled() {
+        when(mProfile.supportsHighQualityAudio(any())).thenReturn(true);
+        when(mProfile.isHighQualityAudioEnabled(any())).thenReturn(true);
+        when(mProfile.isPreferred(any())).thenReturn(false);
+
+        FragmentTestUtil.startFragment(mFragment);
+        ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
+        CheckBox audioBox = profilesGroup.findViewWithTag(mProfile.toString());
+        CheckBox highQualityAudioBox = profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+
+        assertThat(audioBox).isNotNull();
+        assertThat(audioBox.isChecked()).isFalse();
+        assertThat(highQualityAudioBox).isNotNull();
+        assertThat(highQualityAudioBox.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void deviceDoesntHaveHighQualityAudio() {
+        when(mProfile.supportsHighQualityAudio(any())).thenReturn(false);
+        when(mProfile.isPreferred(any())).thenReturn(true);
+        FragmentTestUtil.startFragment(mFragment);
+
+        // A device that doesn't support high quality audio shouldn't have the checkbox for
+        // high quality audio support.
+        ViewGroup profilesGroup = mFragment.getDialog().findViewById(R.id.profiles_section);
+        CheckBox box = (CheckBox) profilesGroup.findViewWithTag(
+                DeviceProfilesSettings.HIGH_QUALITY_AUDIO_PREF_TAG);
+        assertThat(box).isNull();
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index e1572ab..92ded0d 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -25,8 +25,8 @@
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
-import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 import com.android.settingslib.NetworkPolicyEditor;
 
 import org.junit.Before;
@@ -160,4 +160,16 @@
 
         assertThat(keys).containsAllIn(niks);
     }
+
+    @Test
+    @Config(shadows = ShadowConnectivityManager.class)
+    public void testNonIndexableKeys_hasMobileData_restrictedAccessesAdded() {
+        ShadowConnectivityManager.setIsNetworkSupported(true);
+        List<String> keys = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(mContext);
+
+        assertThat(keys).contains(DataUsageSummary.KEY_RESTRICT_BACKGROUND);
+        assertThat(keys).contains(DataUsageSummary.KEY_NETWORK_RESTRICTIONS);
+        ShadowConnectivityManager.setIsNetworkSupported(false);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/development/TelephonyMonitorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/TelephonyMonitorPreferenceControllerTest.java
index 5167c68..9a1a3b6 100644
--- a/tests/robotests/src/com/android/settings/development/TelephonyMonitorPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/TelephonyMonitorPreferenceControllerTest.java
@@ -134,7 +134,24 @@
         when(mContext.getResources().getBoolean(R.bool.config_show_telephony_monitor))
                 .thenReturn(true);
         SettingsShadowSystemProperties.set(
-                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR, "true");
+                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                TelephonyMonitorPreferenceController.ENABLED_STATUS);
+        SettingsShadowSystemProperties.set(
+                TelephonyMonitorPreferenceController.BUILD_TYPE, "userdebug");
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(true);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void displayPreference_telephonyMonitorUserEnabled_shouldCheckedPreference() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_telephony_monitor))
+                .thenReturn(true);
+        SettingsShadowSystemProperties.set(
+                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                TelephonyMonitorPreferenceController.USER_ENABLED_STATUS);
         SettingsShadowSystemProperties.set(
                 TelephonyMonitorPreferenceController.BUILD_TYPE, "userdebug");
 
@@ -149,7 +166,24 @@
         when(mContext.getResources().getBoolean(R.bool.config_show_telephony_monitor))
                 .thenReturn(true);
         SettingsShadowSystemProperties.set(
-                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR, "false");
+                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                TelephonyMonitorPreferenceController.DISABLED_STATUS);
+        SettingsShadowSystemProperties.set(
+                TelephonyMonitorPreferenceController.BUILD_TYPE, "userdebug");
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(false);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void displayPreference_telephonyMonitorUserDisabled_shouldUncheckedPreference() {
+        when(mContext.getResources().getBoolean(R.bool.config_show_telephony_monitor))
+                .thenReturn(true);
+        SettingsShadowSystemProperties.set(
+                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                TelephonyMonitorPreferenceController.USER_DISABLED_STATUS);
         SettingsShadowSystemProperties.set(
                 TelephonyMonitorPreferenceController.BUILD_TYPE, "userdebug");
 
@@ -168,8 +202,10 @@
 
         mController.handlePreferenceTreeClick(mPreference);
 
-        assertThat(SystemProperties.getBoolean(
-                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR, false)).isTrue();
+        assertThat(TelephonyMonitorPreferenceController.USER_ENABLED_STATUS.equals(
+                SystemProperties.get(
+                        TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                        TelephonyMonitorPreferenceController.DISABLED_STATUS))).isTrue();
     }
 
     @Config(shadows = {SettingsShadowSystemProperties.class})
@@ -182,8 +218,10 @@
 
         mController.handlePreferenceTreeClick(mPreference);
 
-        assertThat(SystemProperties.getBoolean(
-                TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR, false)).isFalse();
+        assertThat(TelephonyMonitorPreferenceController.USER_DISABLED_STATUS.equals(
+                SystemProperties.get(
+                        TelephonyMonitorPreferenceController.PROPERTY_TELEPHONY_MONITOR,
+                        TelephonyMonitorPreferenceController.DISABLED_STATUS))).isTrue();
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index fd89558..03759ec 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -18,6 +18,7 @@
 import android.content.Context;
 import android.os.BatteryStats;
 import android.os.Process;
+import android.text.format.DateUtils;
 
 import com.android.internal.os.BatterySipper;
 import com.android.settings.SettingsRobolectricTestRunner;
@@ -47,8 +48,11 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.spy;
 
@@ -62,6 +66,8 @@
     private static final long TIME_STATE_TOP_SLEEPING = 2500 * UNIT;
     private static final long TIME_STATE_FOREGROUND = 3000 * UNIT;
     private static final long TIME_STATE_BACKGROUND = 6000 * UNIT;
+    private static final long TIME_FOREGROUND_ACTIVITY_ZERO = 0;
+    private static final long TIME_FOREGROUND_ACTIVITY = 100 * DateUtils.MINUTE_IN_MILLIS;
 
     private static final int UID = 123;
     private static final long TIME_EXPECTED_FOREGROUND = 1500;
@@ -71,6 +77,7 @@
     private static final double BATTERY_SYSTEM_USAGE = 600;
     private static final double BATTERY_OVERACCOUNTED_USAGE = 500;
     private static final double BATTERY_UNACCOUNTED_USAGE = 700;
+    private static final double BATTERY_APP_USAGE = 100;
     private static final double TOTAL_BATTERY_USAGE = 1000;
     private static final double HIDDEN_USAGE = 200;
     private static final int DISCHARGE_AMOUNT = 80;
@@ -180,11 +187,12 @@
         sippers.add(mUnaccountedBatterySipper);
         when(mProvider.isTypeSystem(mSystemBatterySipper))
                 .thenReturn(true);
+        doNothing().when(mBatteryUtils).smearScreenBatterySipper(any(), any());
 
         final double totalUsage = mBatteryUtils.removeHiddenBatterySippers(sippers);
+
         assertThat(sippers).containsExactly(mNormalBatterySipper);
-        assertThat(totalUsage).isWithin(PRECISION).of(
-                BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE + BATTERY_UNACCOUNTED_USAGE);
+        assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SYSTEM_USAGE);
     }
 
     @Test
@@ -206,12 +214,6 @@
     }
 
     @Test
-    public void testShouldHideSipper_TypeWifi_ReturnTrue() {
-        mNormalBatterySipper.drainType = BatterySipper.DrainType.WIFI;
-        assertThat(mBatteryUtils.shouldHideSipper(mNormalBatterySipper)).isTrue();
-    }
-
-    @Test
     public void testShouldHideSipper_TypeCell_ReturnTrue() {
         mNormalBatterySipper.drainType = BatterySipper.DrainType.CELL;
         assertThat(mBatteryUtils.shouldHideSipper(mNormalBatterySipper)).isTrue();
@@ -224,12 +226,6 @@
     }
 
     @Test
-    public void testShouldHideSipper_TypeBluetooth_ReturnTrue() {
-        mNormalBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
-        assertThat(mBatteryUtils.shouldHideSipper(mNormalBatterySipper)).isTrue();
-    }
-
-    @Test
     public void testShouldHideSipper_TypeSystem_ReturnTrue() {
         mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
         when(mNormalBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
@@ -259,4 +255,43 @@
                 HIDDEN_USAGE, DISCHARGE_AMOUNT))
                 .isWithin(PRECISION).of(PERCENT_SYSTEM_USAGE);
     }
+
+    @Test
+    public void testSmearScreenBatterySipper() {
+        final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO,
+                BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */);
+        final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO,
+                BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */);
+        final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY,
+                BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */);
+
+        final List<BatterySipper> sippers = new ArrayList<>();
+        sippers.add(sipperNull);
+        sippers.add(sipperBg);
+        sippers.add(sipperFg);
+
+        mBatteryUtils.smearScreenBatterySipper(sippers, mScreenBatterySipper);
+
+        assertThat(sipperNull.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE);
+        assertThat(sipperBg.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE);
+        assertThat(sipperFg.totalPowerMah).isWithin(PRECISION).of(
+                BATTERY_APP_USAGE + BATTERY_SCREEN_USAGE);
+    }
+
+    private BatterySipper createTestSmearBatterySipper(long activityTime, double totalPowerMah,
+            int uidCode, boolean isUidNull) {
+        final BatterySipper sipper = mock(BatterySipper.class);
+        sipper.drainType = BatterySipper.DrainType.APP;
+        sipper.totalPowerMah = totalPowerMah;
+        doReturn(uidCode).when(sipper).getUid();
+        if (!isUidNull) {
+            final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS);
+            doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid),
+                    anyLong());
+            doReturn(uidCode).when(uid).getUid();
+            sipper.uidObj = uid;
+        }
+
+        return sipper;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 3d5d5dc..615424c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -17,7 +17,6 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.os.Bundle;
 import android.os.PowerManager;
 import android.os.Process;
 import android.text.TextUtils;
@@ -68,6 +67,7 @@
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
@@ -129,6 +129,8 @@
     @Mock
     private LayoutPreference mBatteryLayoutPref;
     @Mock
+    private TextView mBatteryPercentText;
+    @Mock
     private TextView mSummary1;
     @Mock
     private BatteryInfo mBatteryInfo;
@@ -139,7 +141,6 @@
     @Mock
     private SettingsActivity mSettingsActivity;
 
-    private TextView mBatteryPercentText;
     private List<BatterySipper> mUsageList;
     private Context mRealContext;
     private TestFragment mFragment;
@@ -163,8 +164,9 @@
         mLastFullChargePref = new PowerGaugePreference(mRealContext);
         mFragment = spy(new TestFragment(mContext));
         mFragment.initFeatureProvider();
-        mBatteryMeterView = spy(new BatteryMeterView(mRealContext));
+        mBatteryMeterView = new BatteryMeterView(mRealContext);
         mBatteryMeterView.mDrawable = new BatteryMeterView.BatteryMeterDrawable(mRealContext, 0);
+        doNothing().when(mFragment).restartBatteryStatsLoader();
 
         when(mFragment.getActivity()).thenReturn(mSettingsActivity);
         when(mAdditionalBatteryInfoMenu.getItemId())
@@ -185,7 +187,6 @@
         mCellBatterySipper.drainType = BatterySipper.DrainType.CELL;
         mCellBatterySipper.totalPowerMah = POWER_MAH;
 
-        mBatteryPercentText = new TextView(mRealContext);
         when(mBatteryLayoutPref.findViewById(R.id.summary1)).thenReturn(mSummary1);
         when(mBatteryLayoutPref.findViewById(R.id.battery_percent)).thenReturn(mBatteryPercentText);
         when(mBatteryLayoutPref.findViewById(R.id.battery_header_icon))
@@ -279,50 +280,6 @@
     }
 
     @Test
-    public void testInitHeaderPreference_initCorrectly() {
-        mFragment.mBatteryLevel = 100;
-
-        mFragment.initHeaderPreference();
-
-        assertThat(mBatteryMeterView.getBatteryLevel()).isEqualTo(100);
-        assertThat(mBatteryPercentText.getText().toString()).isEqualTo("100%");
-    }
-
-    @Test
-    public void testStartBatteryHeaderAnimationIfNecessary_batteryLevelChanged_animationStarted() {
-        final int prevLevel = 100;
-        final int curLevel = 80;
-
-        mFragment.startBatteryHeaderAnimationIfNecessary(mBatteryMeterView, mBatteryPercentText,
-                prevLevel, curLevel);
-
-        assertThat(mBatteryMeterView.getBatteryLevel()).isEqualTo(curLevel);
-        assertThat(mBatteryPercentText.getText().toString()).isEqualTo("80%");
-    }
-
-    @Test
-    public void testOnSaveInstanceState_saveBatteryLevel() {
-        Bundle bundle = new Bundle();
-        mFragment.mBatteryLevel = BATTERY_LEVEL;
-        // mock it to stop crash in getPreferenceScreen
-        doReturn(null).when(mFragment).getPreferenceScreen();
-
-        mFragment.onSaveInstanceState(bundle);
-
-        assertThat(bundle.getInt(PowerUsageSummary.ARG_BATTERY_LEVEL)).isEqualTo(BATTERY_LEVEL);
-    }
-
-    @Test
-    public void testOnActivityCreated_setBatteryLevel() {
-        Bundle bundle = new Bundle();
-        bundle.putInt(PowerUsageSummary.ARG_BATTERY_LEVEL, BATTERY_LEVEL);
-
-        mFragment.onActivityCreated(bundle);
-
-        assertThat(mFragment.mBatteryLevel).isEqualTo(BATTERY_LEVEL);
-    }
-
-    @Test
     public void testExtractKeyFromSipper_typeAPPUidObjectNull_returnPackageNames() {
         mNormalBatterySipper.uidObj = null;
         mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
@@ -360,10 +317,10 @@
     @Test
     public void testSetUsageSummary_timeMoreThanOneMinute_setSummary() {
         final long usageTimeMs = 2 * DateUtils.MINUTE_IN_MILLIS;
-        doReturn(mRealContext.getText(R.string.battery_used_for)).when(mFragment).getText(
-                R.string.battery_used_for);
+        doReturn(mRealContext.getText(R.string.battery_screen_usage)).when(mFragment).getText(
+                R.string.battery_screen_usage);
         doReturn(mRealContext).when(mFragment).getContext();
-        final String expectedSummary = "Used for 2m";
+        final String expectedSummary = "Screen usage 2m";
 
         mFragment.setUsageSummary(mPreference, usageTimeMs);
 
diff --git a/tests/robotests/src/com/android/settings/gestures/AssistGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/AssistGesturePreferenceControllerTest.java
index 9862f83..e83e237 100644
--- a/tests/robotests/src/com/android/settings/gestures/AssistGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/AssistGesturePreferenceControllerTest.java
@@ -52,12 +52,14 @@
     private FakeFeatureFactory mFactory;
     private AssistGesturePreferenceController mController;
 
+    private static final String KEY_ASSIST = "gesture_assist";
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         FakeFeatureFactory.setupForTest(mContext);
         mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
-        mController = new AssistGesturePreferenceController(mContext, null);
+        mController = new AssistGesturePreferenceController(mContext, null, KEY_ASSIST);
     }
 
     @Test
@@ -77,7 +79,7 @@
         // Set the setting to be enabled.
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(), ASSIST_GESTURE_ENABLED, 1);
-        mController = new AssistGesturePreferenceController(context, null);
+        mController = new AssistGesturePreferenceController(context, null, KEY_ASSIST);
 
         assertThat(mController.isSwitchPrefEnabled()).isTrue();
     }
@@ -87,7 +89,7 @@
         // Set the setting to be disabled.
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(), ASSIST_GESTURE_ENABLED, 0);
-        mController = new AssistGesturePreferenceController(context, null);
+        mController = new AssistGesturePreferenceController(context, null, KEY_ASSIST);
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index bdb3522..d7961e3 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -47,11 +47,12 @@
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private PreferenceScreen mScreen;
     private DoubleTapPowerPreferenceController mController;
+    private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power";
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mController = new DoubleTapPowerPreferenceController(mContext, null);
+        mController = new DoubleTapPowerPreferenceController(mContext, null, KEY_DOUBLE_TAP_POWER);
     }
 
     @Test
@@ -78,7 +79,7 @@
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(),
                 CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
-        mController = new DoubleTapPowerPreferenceController(context, null);
+        mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER);
 
         assertThat(mController.isSwitchPrefEnabled()).isTrue();
     }
@@ -89,7 +90,7 @@
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(),
                 CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 1);
-        mController = new DoubleTapPowerPreferenceController(context, null);
+        mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER);
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index adf8b75..442d11d 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -46,11 +46,13 @@
     private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
     private DoubleTapScreenPreferenceController mController;
 
+    private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen";
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mController = new DoubleTapScreenPreferenceController(
-                mContext, null, mAmbientDisplayConfiguration, 0);
+                mContext, null, mAmbientDisplayConfiguration, 0, KEY_DOUBLE_TAP_SCREEN);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
index 9bf6655..8393fc3 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
@@ -53,11 +53,12 @@
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private SensorManager mSensorManager;
     private DoubleTwistPreferenceController mController;
+    private static final String KEY_DOUBLE_TWIST = "gesture_double_twist";
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mController = new DoubleTwistPreferenceController(mContext, null);
+        mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST);
     }
 
     @Test
@@ -98,7 +99,7 @@
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(),
                 CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1);
-        mController = new DoubleTwistPreferenceController(context, null);
+        mController = new DoubleTwistPreferenceController(context, null, KEY_DOUBLE_TWIST);
 
         assertThat(mController.isSwitchPrefEnabled()).isTrue();
     }
@@ -109,7 +110,7 @@
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(),
                 CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0);
-        mController = new DoubleTwistPreferenceController(context, null);
+        mController = new DoubleTwistPreferenceController(context, null, KEY_DOUBLE_TWIST);
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
index 9dce074..46c0f65 100644
--- a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
@@ -47,11 +47,13 @@
 
     private PickupGesturePreferenceController mController;
 
+    private static final String KEY_PICK_UP = "gesture_pick_up";
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mController = new PickupGesturePreferenceController(
-                mContext, null, mAmbientDisplayConfiguration, 0);
+                mContext, null, mAmbientDisplayConfiguration, 0, KEY_PICK_UP);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
index e909667..cf26cb2 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
@@ -45,11 +45,12 @@
     private Context mContext;
 
     private SwipeToNotificationPreferenceController mController;
+    private static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint";
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mController = new SwipeToNotificationPreferenceController(mContext, null);
+        mController = new SwipeToNotificationPreferenceController(mContext, null, KEY_SWIPE_DOWN);
     }
 
     @Test
@@ -75,7 +76,7 @@
         // Set the setting to be enabled.
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(), SYSTEM_NAVIGATION_KEYS_ENABLED, 1);
-        mController = new SwipeToNotificationPreferenceController(context, null);
+        mController = new SwipeToNotificationPreferenceController(context, null, KEY_SWIPE_DOWN);
 
         assertThat(mController.isSwitchPrefEnabled()).isTrue();
     }
@@ -85,7 +86,7 @@
         // Set the setting to be disabled.
         final Context context = ShadowApplication.getInstance().getApplicationContext();
         Settings.System.putInt(context.getContentResolver(), SYSTEM_NAVIGATION_KEYS_ENABLED, 0);
-        mController = new SwipeToNotificationPreferenceController(context, null);
+        mController = new SwipeToNotificationPreferenceController(context, null, KEY_SWIPE_DOWN);
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
index 8c23cbf..527b1cd 100644
--- a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
@@ -18,7 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+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,6 +46,8 @@
 import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.core.lifecycle.LifecycleObserver;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.testutils.XmlTestUtils;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 
 import org.junit.Before;
@@ -52,6 +56,7 @@
 import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
@@ -144,6 +149,37 @@
         verify(loader).setSummary(provider, null);
     }
 
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = spy(RuntimeEnvironment.application);
+        //(InputManager) context.getSystemService(Context.INPUT_SERVICE);
+        InputManager manager = mock(InputManager.class);
+        when(manager.getInputDeviceIds()).thenReturn(new int[]{});
+        doReturn(manager).when(context).getSystemService(Context.INPUT_SERVICE);
+        final List<String> niks = LanguageAndInputSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final int xmlId = (new LanguageAndInputSettings()).getPreferenceScreenResId();
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
+
+        assertThat(keys).containsAllIn(niks);
+    }
+
+    @Test
+    public void testPreferenceControllers_getPreferenceKeys_existInPreferenceScreen() {
+        final Context context = RuntimeEnvironment.application;
+        final LanguageAndInputSettings fragment = new LanguageAndInputSettings();
+        final List<String> preferenceScreenKeys = XmlTestUtils.getKeysFromPreferenceXml(context,
+                fragment.getPreferenceScreenResId());
+        final List<String> preferenceKeys = new ArrayList<>();
+
+        for (PreferenceController controller : fragment.getPreferenceControllers(context)) {
+            preferenceKeys.add(controller.getPreferenceKey());
+        }
+
+        assertThat(preferenceScreenKeys).containsAllIn(preferenceKeys);
+    }
+
     /**
      * Test fragment to expose lifecycle and context so we can verify behavior for observables.
      */
diff --git a/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java b/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java
deleted file mode 100644
index 39f1377..0000000
--- a/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.android.settings.notification;
-
-import android.content.res.Resources;
-
-import android.content.Context;
-import android.provider.Settings;
-import android.support.v7.preference.DropDownPreference;
-import com.android.settings.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.spy;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class SettingPrefTest {
-
-    @Test
-    public void update_setsDropDownSummaryText() {
-        Context context = RuntimeEnvironment.application;
-        String testSetting = "test_setting";
-        int[] values = new int[] {1,2,3};
-        String[] entries = new String[] {"one", "two", "three"};
-        SettingPref settingPref =
-                spy(new SettingPref(SettingPref.TYPE_GLOBAL, "key", testSetting, 0, values) {
-                    @Override
-                    protected String getCaption(Resources res, int value) {
-                        return "temp";
-                    }
-                });
-        DropDownPreference dropdownPref = spy(new DropDownPreference(context));
-        dropdownPref.setEntries(entries);
-        settingPref.mDropDown = dropdownPref;
-        Settings.Global.putInt(context.getContentResolver(), testSetting, values[2]);
-
-        settingPref.update(context);
-
-        assertThat(settingPref.mDropDown.getSummary()).isEqualTo(entries[2]);
-    }
-
-    @Test
-    public void update_setsDropDownSummaryText_noMatch_noError() {
-        Context context = RuntimeEnvironment.application;
-        String testSetting = "test_setting";
-        int[] values = new int[] {1,2,3};
-        String[] entries = new String[] {"one", "two", "three"};
-        SettingPref settingPref =
-                spy(new SettingPref(SettingPref.TYPE_GLOBAL, "key", testSetting, 0, values) {
-                    @Override
-                    protected String getCaption(Resources res, int value) {
-                        return "temp";
-                    }
-                });
-        DropDownPreference dropdownPref = spy(new DropDownPreference(context));
-        dropdownPref.setEntries(entries);
-        settingPref.mDropDown = dropdownPref;
-        Settings.Global.putInt(context.getContentResolver(), testSetting, -1);
-
-        settingPref.update(context);
-
-        assertThat(settingPref.mDropDown.getSummary()).isNull();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java b/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java
new file mode 100644
index 0000000..547117b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SoundSettingsTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.content.Context;
+
+import android.media.AudioManager;
+import android.os.UserManager;
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowAudioHelper;
+import com.android.settings.testutils.shadow.ShadowUserManager;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SoundSettingsTest {
+
+    @Test
+    @Config( shadows = {
+            ShadowUserManager.class,
+            ShadowAudioHelper.class,
+    })
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = spy(RuntimeEnvironment.application);
+        AudioManager audioManager = mock(AudioManager.class);
+        doReturn(audioManager).when(context).getSystemService(Context.AUDIO_SERVICE);
+
+        UserManager userManager = mock(UserManager.class);
+        when(userManager.isAdminUser()).thenReturn(false);
+        doReturn(userManager).when(context).getSystemService(Context.USER_SERVICE);
+
+        final List<String> niks = SoundSettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final int xmlId = (new SoundSettings()).getPreferenceScreenResId();
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
+        keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context,
+                R.xml.zen_mode_settings));
+        // Add keys with hidden resources
+        keys.add("alarm_volume");
+        keys.add("ring_volume");
+        keys.add("notification_volume");
+
+        assertThat(keys).containsAllIn(niks);
+    }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
index 6175093..42c5301 100644
--- a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
+++ b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java
@@ -108,7 +108,7 @@
             public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
                     boolean enabled) {
                 final SearchIndexableResource sir = new SearchIndexableResource(context);
-                sir.xmlResId = R.xml.language_and_input;
+                sir.xmlResId = R.xml.data_usage;
                 return Arrays.asList(sir);
             }
 
@@ -121,13 +121,7 @@
         final List<String> nonIndexableKeys = provider
                 .getNonIndexableKeys(RuntimeEnvironment.application);
 
-        assertThat(nonIndexableKeys).containsAllOf("phone_language", "spellcheckers_settings",
-                "key_user_dictionary_settings", "gesture_settings_category", "gesture_assist",
-                "gesture_swipe_down_fingerprint", "gesture_double_tap_power",
-                "gesture_double_twist", "gesture_double_tap_screen", "gesture_pick_up",
-                "pointer_speed", "tts_settings",
-                "game_controller_settings_category", "vibrate_input_devices");
+        assertThat(nonIndexableKeys).containsAllOf("status_header", "limit_summary",
+                "restrict_background");
     }
-
-
 }
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index b76feff1..6844be5 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -671,9 +671,9 @@
                 new HashMap<String, Set<String>>());
 
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
-        assertThat(cursor.getCount()).isEqualTo(2);
+        assertThat(cursor.getCount()).isEqualTo(1);
         cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
-        assertThat(cursor.getCount()).isEqualTo(4);
+        assertThat(cursor.getCount()).isEqualTo(5);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
new file mode 100644
index 0000000..483dee7
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.system;
+
+import android.content.Context;
+import android.os.UserManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowUserManager;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+        shadows = {
+                ShadowUserManager.class
+        })
+public class SystemDashboardFragmentTest {
+
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = spy(RuntimeEnvironment.application);
+        UserManager manager = mock(UserManager.class);
+        when(manager.isAdminUser()).thenReturn(false);
+        doReturn(manager).when(context).getSystemService(Context.USER_SERVICE);
+        final List<String> niks = SystemDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final int xmlId = (new SystemDashboardFragment()).getPreferenceScreenResId();
+
+        final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlId);
+
+        assertThat(keys).containsAllIn(niks);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAudioHelper.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAudioHelper.java
new file mode 100644
index 0000000..886f941
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAudioHelper.java
@@ -0,0 +1,37 @@
+/*
+ * 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.testutils.shadow;
+
+import android.os.UserHandle;
+import android.os.UserManager;
+import com.android.settings.notification.AudioHelper;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(AudioHelper.class)
+public class ShadowAudioHelper {
+
+    @Implementation
+    public boolean isSingleVolume() {
+        return true;
+    }
+
+    @Implementation
+    public int getManagedProfileId(UserManager um) {
+        return UserHandle.USER_CURRENT;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
index dbf1a65..4c05665 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
@@ -24,9 +24,14 @@
 @Implements(ConnectivityManager.class)
 public class ShadowConnectivityManager extends org.robolectric.shadows.ShadowConnectivityManager {
 
+    private static boolean mIsNetworkSupported;
+
     @Implementation
     public boolean isNetworkSupported(int networkType) {
-        return false;
+        return mIsNetworkSupported;
     }
 
+    public static void setIsNetworkSupported(boolean isNetworkSupported) {
+        mIsNetworkSupported = isNetworkSupported;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
index eb82362..87b9103 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
@@ -46,4 +46,9 @@
     public static void reset() {
         sFingerprintManager = null;
     }
+
+    @Implementation
+    public static boolean isWifiOnly(Context context) {
+        return true;
+    }
 }