Merge "Prompt to start user before choosing a new ringtone"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ed511ef..0de7a4e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -6,6 +6,7 @@
 
     <original-package android:name="com.android.settings" />
 
+    <uses-permission android:name="android.permission.REQUEST_NETWORK_SCORES" />
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@@ -165,11 +166,11 @@
                 android:parentActivityName="Settings">
         </activity>
 
-        <activity android:name="CreateShortcut" android:label="@string/settings_shortcut"
-            android:theme="@style/Theme.SubSettingsDialogWhenLarge">
+        <activity android:name="CreateShortcut"
+                  android:label="@string/settings_shortcut">
             <intent-filter>
-                <action android:name="android.intent.action.CREATE_SHORTCUT" />
-                <category android:name="android.intent.category.DEFAULT" />
+                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
         </activity>
 
@@ -340,7 +341,6 @@
         </activity>
 
         <activity android:name=".Settings$WifiInfoActivity"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:taskAffinity="com.android.settings"
                 android:parentActivityName="Settings$WifiSettingsActivity">
             <intent-filter>
@@ -353,7 +353,6 @@
         </activity>
 
         <activity android:name=".wifi.WifiConfigInfo"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:taskAffinity="com.android.settings"
                 android:parentActivityName="Settings$WifiSettingsActivity">
             <intent-filter>
@@ -363,8 +362,7 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".Settings$WifiAPITestActivity"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge">
+        <activity android:name=".Settings$WifiAPITestActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
@@ -374,8 +372,7 @@
                        android:value="com.android.settings.wifi.WifiAPITest" />
         </activity>
 
-        <activity android:name=".wifi.WifiStatusTest"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge">
+        <activity android:name=".wifi.WifiStatusTest">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEVELOPMENT_PREFERENCE" />
@@ -459,7 +456,6 @@
         </activity-alias>
 
         <activity android:name=".bluetooth.DevicePickerActivity"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:label="@string/device_picker"
                 android:clearTaskOnLaunch="true">
             <intent-filter>
@@ -965,7 +961,6 @@
         </activity>
 
         <activity android:name="Settings$DeviceInfoSettingsActivity"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:label="@string/device_info_settings"
                 android:icon="@drawable/ic_settings_about"
                 android:taskAffinity="com.android.settings"
@@ -1390,7 +1385,6 @@
         </activity>
 
         <activity android:name="SetFullBackupPassword"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:exported="false">
         </activity>
 
@@ -1430,7 +1424,6 @@
 
         <activity android:name="DeviceAdminAdd"
                 android:label="@string/device_admin_add_title"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:clearTaskOnLaunch="true">
             <intent-filter>
                 <action android:name="android.app.action.ADD_DEVICE_ADMIN" />
@@ -1465,7 +1458,6 @@
 
         <activity android:name="Settings$IccLockSettingsActivity"
                 android:label="@string/sim_lock_settings"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:process="com.android.phone">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -1787,7 +1779,6 @@
 
         <activity android:name=".Settings$StatusActivity"
                 android:label="@string/device_status_activity_title"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:taskAffinity="com.android.settings"
                 android:parentActivityName="Settings$DeviceInfoSettingsActivity">
             <intent-filter>
@@ -1802,7 +1793,6 @@
         <!-- Runs in the phone process since it needs access to the Phone object -->
         <activity android:name=".Settings$SimStatusActivity"
                 android:label="@string/sim_status_title"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:process="com.android.phone">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -1816,7 +1806,6 @@
         <!-- Runs in the phone process since it needs access to the Phone object -->
         <activity android:name=".Settings$ImeiInformationActivity"
                 android:label="@string/imei_information_title"
-                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                 android:process="com.android.phone">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -2016,6 +2005,9 @@
         <activity android:name=".AppPicker" android:label="@string/select_application"
                 android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
 
+        <activity android:name=".webview.WebViewAppPicker" android:label="@string/select_webview_provider_dialog_title"
+                android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
+
         <!-- Keep compatibility with old shortcuts. -->
         <activity-alias android:name="UsbSettings"
                   android:exported="true"
@@ -2370,8 +2362,7 @@
 
         <activity android:name="Settings$ChooseAccountActivity"
             android:label="@string/header_add_an_account"
-            android:configChanges="orientation|keyboardHidden|screenSize"
-            android:theme="@style/Theme.SubSettingsDialogWhenLarge">
+            android:configChanges="orientation|keyboardHidden|screenSize">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.accounts.ChooseAccountActivity" />
         </activity>
@@ -2573,6 +2564,20 @@
                        android:value="com.android.settings.applications.VrListenerSettings" />
         </activity>
 
+        <activity android:name="Settings$PictureInPictureSettingsActivity"
+            android:label="@string/picture_in_picture_title"
+            android:taskAffinity="">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.PICTURE_IN_PICTURE_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.applications.PictureInPictureSettings" />
+        </activity>
 
         <activity android:name="Settings$ZenAccessSettingsActivity"
                   android:label="@string/manage_zen_access_title"
@@ -2695,6 +2700,22 @@
                 android:value="com.android.settings.notification.AppNotificationSettings" />
         </activity>
 
+        <!-- Show channel-level notification settings (channel passed in as extras) -->
+        <activity android:name="Settings$ChannelNotificationSettingsActivity"
+                  android:label="@string/app_notifications_title"
+                  android:exported="true">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.CHANNEL_NOTIFICATION_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.notification.ChannelNotificationSettings" />
+        </activity>
+
         <!-- Show Manual (from settings item) -->
         <activity android:name="ManualDisplayActivity"
                   android:label="@string/manual"
@@ -2905,6 +2926,17 @@
                 android:value="com.android.settings.applications.ManageApplications" />
         </activity>
 
+        <activity android:name="Settings$ManageExternalSourcesActivity"
+                android:label="@string/install_other_apps"
+                android:taskAffinity="">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.action.MANAGE_EXTERNAL_SOURCES" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.applications.ManageApplications" />
+        </activity>
+
         <activity android:name="Settings$AppWriteSettingsActivity"
                 android:label="@string/write_settings_title"
                 android:taskAffinity="">
@@ -2941,7 +2973,9 @@
                         android:value="true" />
         </activity>
 
-        <activity android:name=".WebViewImplementation"
+        <!-- Keep compatibility with old WebView-picker implementation -->
+        <activity-alias android:name=".WebViewImplementation"
+                  android:targetActivity=".webview.WebViewAppPicker"
                   android:exported="true"
                   android:excludeFromRecents="true"
                   android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert">
@@ -2951,7 +2985,7 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
-        </activity>
+      </activity-alias>
 
         <!-- activity for gesture settings -->
         <activity android:name="Settings$GestureSettingsActivity"
@@ -3026,20 +3060,6 @@
                        android:value="com.android.settings.network.NetworkDashboardFragment"/>
         </activity>
 
-        <activity-alias android:name="WifiDashboardAlias"
-                        android:targetActivity="Settings$WifiSettingsActivity"
-                        android:configChanges="orientation|keyboardHidden|screenSize">
-            <intent-filter android:priority="20">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.wireless" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.wifi.WifiSettings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-        </activity-alias>
-
         <activity-alias android:name="DataUsageDashboardAlias"
                         android:targetActivity="Settings$DataUsageSummaryActivity">
             <intent-filter android:priority="10">
@@ -3312,17 +3332,6 @@
                        android:value="com.android.settings.applications.ProcessStatsSummary" />
         </activity-alias>
 
-        <activity-alias android:name="BluetoothDashboardAlias"
-                        android:targetActivity="Settings$BluetoothSettingsActivity">
-            <intent-filter android:priority="7">
-                <action android:name="com.android.settings.action.SETTINGS"/>
-            </intent-filter>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.bluetooth.BluetoothSettings" />
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.device" />
-        </activity-alias>
-
         <activity-alias android:name="CastDashboardAlias"
                         android:targetActivity="Settings$WifiDisplaySettingsActivity">
             <intent-filter android:priority="6">
diff --git a/res/drawable/ic_find_device_disabled.xml b/res/drawable/ic_find_device_disabled.xml
new file mode 100644
index 0000000..ac23101
--- /dev/null
+++ b/res/drawable/ic_find_device_disabled.xml
@@ -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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M5,20l0,2l14,0l0,-2z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+    <path
+        android:pathData="M12,5.917C13.15,5.917 14.083,6.85 14.083,8C14.083,8.613 13.813,9.158 13.392,9.542L16.417,12.567C17.229,11.017 17.833,9.404 17.833,8C17.833,4.779 15.221,2.167 12,2.167C10.35,2.167 8.863,2.854 7.804,3.954L10.458,6.608C10.837,6.188 11.387,5.917 12,5.917ZM15.646,13.917L11.792,10.063L11.7,9.971L4.725,3L3.667,4.063L6.317,6.713C6.221,7.125 6.167,7.554 6.167,8C6.167,12.375 12,18.833 12,18.833C12,18.833 13.392,17.292 14.813,15.208L17.604,18L18.667,16.938L15.646,13.917Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_find_device_enabled.xml b/res/drawable/ic_find_device_enabled.xml
new file mode 100644
index 0000000..c47b9f0
--- /dev/null
+++ b/res/drawable/ic_find_device_enabled.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M18,8C18,4.69 15.31,2 12,2C8.69,2 6,4.69 6,8C6,12.5 12,19 12,19C12,19 18,12.5 18,8ZM10,8C10,6.9 10.9,6 12,6C13.1,6 14,6.9 14,8C14,9.1 13.11,10 12,10C10.9,10 10,9.1 10,8ZM5,20L5,22L19,22L19,20L5,20Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#4A90E2"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_friction_lock_closed.xml b/res/drawable/ic_friction_lock_closed.xml
new file mode 100644
index 0000000..7a05ac6
--- /dev/null
+++ b/res/drawable/ic_friction_lock_closed.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:viewportWidth="48"
+        android:viewportHeight="48"
+        android:width="18dp"
+        android:height="18dp">
+    <path
+        android:pathData="M36 16l-2 0 0 -4C34 6.48 29.52 2 24 2 18.48 2 14 6.48 14 12l0 4 -2 0c-2.21 0 -4 1.79 -4 4l0 20c0 2.21 1.79 4 4 4l24 0c2.21 0 4 -1.79 4 -4l0 -20c0 -2.21 -1.79 -4 -4 -4zM24 34c-2.21 0 -4 -1.79 -4 -4 0 -2.21 1.79 -4 4 -4 2.21 0 4 1.79 4 4 0 2.21 -1.79 4 -4 4zm6.2 -18l-12.4 0 0 -4c0 -3.42 2.78 -6.2 6.2 -6.2 3.42 0 6.2 2.78 6.2 6.2l0 4z"
+        android:fillColor="#000000"
+        android:fillAlpha="0.54" />
+</vector>
diff --git a/res/drawable/ic_friction_lock_open.xml b/res/drawable/ic_friction_lock_open.xml
new file mode 100644
index 0000000..957e537
--- /dev/null
+++ b/res/drawable/ic_friction_lock_open.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:viewportWidth="48"
+        android:viewportHeight="48"
+        android:width="18dp"
+        android:height="18dp">
+    <path
+        android:pathData="M24 34c2.21 0 4 -1.79 4 -4 0 -2.21 -1.79 -4 -4 -4 -2.21 0 -4 1.79 -4 4 0 2.21 1.79 4 4 4zm12 -18l-2 0 0 -4C34 6.48 29.52 2 24 2 18.48 2 14 6.48 14 12l3.8 0c0 -3.42 2.78 -6.2 6.2 -6.2 3.42 0 6.2 2.78 6.2 6.2l0 4 -18.2 0c-2.21 0 -4 1.79 -4 4l0 20c0 2.21 1.79 4 4 4l24 0c2.21 0 4 -1.79 4 -4l0 -20c0 -2.21 -1.79 -4 -4 -4zm0 24l-24 0 0 -20 24 0 0 20z"
+        android:fillColor="#000000"
+        android:fillAlpha="0.54" />
+</vector>
diff --git a/res/drawable/ic_ota_update_available.xml b/res/drawable/ic_ota_update_available.xml
new file mode 100644
index 0000000..e2d7f33
--- /dev/null
+++ b/res/drawable/ic_ota_update_available.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3L5,21C5,22.1 5.9,23 7,23L17,23C18.1,23 19,22.1 19,21L19,3C19,1.9 18.1,1.01 17,1.01ZM17,19L7,19L7,5L17,5L17,19ZM16,13L13,13L13,8L11,8L11,13L8,13L12,17L16,13Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#4A90E2"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_ota_update_current.xml b/res/drawable/ic_ota_update_current.xml
new file mode 100644
index 0000000..d7a2f84
--- /dev/null
+++ b/res/drawable/ic_ota_update_current.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3L5,21C5,22.1 5.9,23 7,23L17,23C18.1,23 19,22.1 19,21L19,3C19,1.9 18.1,1.01 17,1.01ZM17,19L7,19L7,5L17,5L17,19ZM10.627,13.093L9.144,11.746L8.054,12.79L10.627,15.181L16.156,10.044L15.066,9L10.627,13.093Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#4A90E2"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_ota_update_none.xml b/res/drawable/ic_ota_update_none.xml
new file mode 100644
index 0000000..a01a459
--- /dev/null
+++ b/res/drawable/ic_ota_update_none.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3L5,21C5,22.1 5.9,23 7,23L17,23C18.1,23 19,22.1 19,21L19,3C19,1.9 18.1,1.01 17,1.01ZM17,19L7,19L7,5L17,5L17,19ZM13.143,17.714L10.857,17.714L10.857,15.429L13.143,15.429L13.143,17.714ZM13.143,13.143L10.857,13.143L10.857,6.286L13.143,6.286L13.143,13.143Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_ota_update_stale.xml b/res/drawable/ic_ota_update_stale.xml
new file mode 100644
index 0000000..9145be8
--- /dev/null
+++ b/res/drawable/ic_ota_update_stale.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3L5,21C5,22.1 5.9,23 7,23L17,23C18.1,23 19,22.1 19,21L19,3C19,1.9 18.1,1.01 17,1.01ZM17,19L7,19L7,5L17,5L17,19ZM16,13L13,13L13,8L11,8L11,13L8,13L12,17L16,13Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_package_verifier_disabled.xml b/res/drawable/ic_package_verifier_disabled.xml
new file mode 100644
index 0000000..5f19fec
--- /dev/null
+++ b/res/drawable/ic_package_verifier_disabled.xml
@@ -0,0 +1,31 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M5.785,3.762L12,1L21,5L21,11C21,13.231 20.381,15.402 19.306,17.283L5.785,3.762ZM4.386,4.384L3,5L3,11C3,16.555 6.835,21.735 12,23C14.622,22.358 16.902,20.706 18.511,18.509L4.386,4.384Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+    <path
+        android:pathData="M2.808,2.808l17.678,17.678l-1.01,1.01l-17.678,-17.678z"
+        android:strokeColor="#00000000"
+        android:fillColor="#F09300"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_package_verifier_enabled.xml b/res/drawable/ic_package_verifier_enabled.xml
new file mode 100644
index 0000000..1059442
--- /dev/null
+++ b/res/drawable/ic_package_verifier_enabled.xml
@@ -0,0 +1,32 @@
+<!--
+    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 xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M0,0l24,0l0,24l-24,0z"
+        android:strokeColor="#000000"
+        android:fillColor="#00000000"
+        android:strokeWidth="1.33333335e-11"
+        android:strokeAlpha="0.00784313771"/>
+    <path
+        android:pathData="M12,1L3,5L3,11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11L21,5L12,1Z"
+        android:strokeColor="#00000000"
+        android:fillColor="#4A90E2"
+        android:strokeWidth="1"/>
+</vector>
diff --git a/res/drawable/ic_restore.xml b/res/drawable/ic_restore.xml
new file mode 100644
index 0000000..737f811
--- /dev/null
+++ b/res/drawable/ic_restore.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2017 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24.0dp"
+    android:height="24.0dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FFFFFFFF"
+        android:pathData="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89 .07 .14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7
+7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13
+21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54 .72 -1.21-3.5-2.08V8H12z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/wifi_friction.xml b/res/drawable/wifi_friction.xml
new file mode 100644
index 0000000..c46f5b4
--- /dev/null
+++ b/res/drawable/wifi_friction.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+    <item
+        settings:state_encrypted="true"
+        settings:state_saved="true"
+        android:drawable="@drawable/ic_friction_lock_closed"/>
+    <item
+        settings:state_encrypted="true"
+        settings:state_saved="false"
+        android:drawable="@drawable/ic_friction_lock_closed"/>
+</selector>
diff --git a/res/layout/preference_tts_engine.xml b/res/layout/preference_tts_engine.xml
index 8f4036b..19401f0 100644
--- a/res/layout/preference_tts_engine.xml
+++ b/res/layout/preference_tts_engine.xml
@@ -31,17 +31,4 @@
         android:maxLines="2"
         android:textAppearance="?android:attr/textAppearanceListItem"
         android:ellipsize="marquee"/>
-
-    <ImageView
-        android:id="@+id/tts_engine_settings"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:src="@drawable/ic_settings"
-        android:contentDescription="@string/tts_engine_settings_button"
-        android:layout_centerVertical="true"
-        android:clickable="true"
-        android:focusable="true"
-        android:background="?android:attr/selectableItemBackground"/>
 </LinearLayout>
diff --git a/res/layout/preference_widget_master_switch.xml b/res/layout/preference_widget_master_switch.xml
new file mode 100644
index 0000000..51d938b
--- /dev/null
+++ b/res/layout/preference_widget_master_switch.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="wrap_content"
+  android:layout_height="match_parent">
+
+    <LinearLayout
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:gravity="start|center_vertical"
+      android:orientation="horizontal"
+      android:paddingStart="20dp"
+      android:paddingEnd="20dp"
+      android:paddingTop="16dp"
+      android:paddingBottom="16dp">
+        <View
+          android:layout_width="1dip"
+          android:layout_height="match_parent"
+          android:background="?android:attr/colorSecondary"/>
+    </LinearLayout>
+
+    <Switch android:id="@+id/switchWidget"
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:gravity="center_vertical" />
+
+</LinearLayout>
diff --git a/res/layout/preview_seek_bar_view_pager.xml b/res/layout/preview_seek_bar_view_pager.xml
index e5dfa94..5eb3543 100644
--- a/res/layout/preview_seek_bar_view_pager.xml
+++ b/res/layout/preview_seek_bar_view_pager.xml
@@ -37,7 +37,6 @@
         android:gravity="start|center"
         android:text="@string/screen_zoom_preview_title"
         android:textAppearance="@android:style/TextAppearance.Material.Widget.ActionBar.Title"
-        android:textColor="@color/seek_bar_preference_preview_text"
         android:importantForAccessibility="no" />
 </LinearLayout>
 
diff --git a/res/layout/search_breadcrumb_view.xml b/res/layout/search_breadcrumb_view.xml
new file mode 100644
index 0000000..a78b745
--- /dev/null
+++ b/res/layout/search_breadcrumb_view.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/breadcrumb"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingTop="8dp"
+    android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+    android:textColor="?android:attr/textColorSecondary"
+    android:ellipsize="marquee"/>
\ No newline at end of file
diff --git a/res/layout/search_icon_view.xml b/res/layout/search_icon_view.xml
new file mode 100644
index 0000000..d7e0205
--- /dev/null
+++ b/res/layout/search_icon_view.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/icon_container"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:minWidth="60dp"
+    android:gravity="center_horizontal|top"
+    android:orientation="horizontal"
+    android:paddingEnd="12dp"
+    android:paddingTop="4dp"
+    android:paddingBottom="4dp">
+    <com.android.internal.widget.PreferenceImageView
+        android:id="@android:id/icon"
+        android:layout_width="36dp"
+        android:layout_height="36dp"
+        android:scaleType="fitCenter"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/search_inline_switch_item.xml b/res/layout/search_inline_switch_item.xml
index 998c09c..75943c4 100644
--- a/res/layout/search_inline_switch_item.xml
+++ b/res/layout/search_inline_switch_item.xml
@@ -15,67 +15,48 @@
 -->
 
 <LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?android:attr/listPreferredItemHeight"
-        android:gravity="center_vertical"
-        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:background="?android:attr/selectableItemBackground"
-        android:clipToPadding="false">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingTop="16dp"
+    android:paddingBottom="16dp"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false">
+
+    <include layout="@layout/search_icon_view"/>
 
     <LinearLayout
-            android:id="@+id/icon_container"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@android:id/title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:minWidth="60dp"
-            android:gravity="start|center_vertical"
-            android:orientation="horizontal"
-            android:paddingEnd="12dp"
-            android:paddingTop="4dp"
-            android:paddingBottom="4dp">
-        <com.android.internal.widget.PreferenceImageView
-                android:id="@android:id/icon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:maxWidth="48dp"
-                android:maxHeight="48dp"/>
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10"/>
+
+        <include layout="@layout/search_breadcrumb_view"/>
     </LinearLayout>
 
-    <RelativeLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:paddingTop="16dp"
-            android:paddingBottom="16dp">
-
-        <TextView
-                android:id="@android:id/title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:textAppearance="?android:attr/textAppearanceListItem"
-                android:ellipsize="marquee"/>
-
-        <TextView
-                android:id="@android:id/summary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@android:id/title"
-                android:layout_alignStart="@android:id/title"
-                android:textAppearance="?android:attr/textAppearanceListItemSecondary"
-                android:textColor="?android:attr/textColorSecondary"
-                android:maxLength="60"
-                android:maxLines="10"/>
-
-    </RelativeLayout>
-
     <Switch
-            android:id="@+id/switchView"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:gravity="end|center_vertical"
-            android:paddingStart="16dp"
-            android:orientation="vertical"/>
-</LinearLayout>
\ No newline at end of file
+        android:id="@+id/switchView"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="top"
+        android:paddingStart="16dp"/>
+</LinearLayout>
diff --git a/res/layout/search_intent_item.xml b/res/layout/search_intent_item.xml
index fcb5532..31f7f26 100644
--- a/res/layout/search_intent_item.xml
+++ b/res/layout/search_intent_item.xml
@@ -15,58 +15,42 @@
 -->
 
 <LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?android:attr/listPreferredItemHeight"
-        android:gravity="center_vertical"
-        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:background="?android:attr/selectableItemBackground"
-        android:clipToPadding="false">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingTop="16dp"
+    android:paddingBottom="16dp"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false">
+
+    <include layout="@layout/search_icon_view"/>
 
     <LinearLayout
-            android:id="@+id/icon_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@android:id/title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:minWidth="60dp"
-            android:gravity="start|center_vertical"
-            android:orientation="horizontal"
-            android:paddingEnd="12dp"
-            android:paddingTop="4dp"
-            android:paddingBottom="4dp">
-        <com.android.internal.widget.PreferenceImageView
-                android:id="@android:id/icon"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:maxWidth="48dp"
-                android:maxHeight="48dp"/>
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="3"
+            android:ellipsize="marquee"/>
+
+        <include layout="@layout/search_breadcrumb_view"/>
     </LinearLayout>
-
-    <RelativeLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:paddingTop="16dp"
-            android:paddingBottom="16dp">
-
-        <TextView
-                android:id="@android:id/title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:textAppearance="?android:attr/textAppearanceListItem"
-                android:ellipsize="marquee"/>
-
-        <TextView
-                android:id="@android:id/summary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@android:id/title"
-                android:layout_alignStart="@android:id/title"
-                android:textAppearance="?android:attr/textAppearanceListItemSecondary"
-                android:textColor="?android:attr/textColorSecondary"
-                android:maxLines="10"/>
-
-    </RelativeLayout>
 </LinearLayout>
diff --git a/res/layout/search_saved_query_item.xml b/res/layout/search_saved_query_item.xml
new file mode 100644
index 0000000..71c8482
--- /dev/null
+++ b/res/layout/search_saved_query_item.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/selectableItemBackground"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingStart="@dimen/preference_no_icon_padding_start"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+    <TextView
+        android:id="@android:id/title"
+        android:textAppearance="?android:attr/textAppearanceListItem"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_weight="1"/>
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="@dimen/search_suggestion_item_image_size"
+        android:layout_height="@dimen/search_suggestion_item_image_size"
+        android:layout_marginStart="@dimen/search_suggestion_item_image_margin_start"
+        android:layout_marginEnd="@dimen/search_suggestion_item_image_margin_end"
+        android:scaleType="centerInside"
+        android:src="@drawable/ic_search_history"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 51e8b58..f9d1329 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Voorbeeldteks"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Die Wonderlike Towenaar van Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Hoofstuk 11: Die Wonderlike Smaragstad van Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Selfs al word hul oë deur die groen brille beskerm, word Dorothy en haar vriende met die eerste oogopslag verblind deur die helderheid van die wonderlike stad. Huise van groen marmer en bedek met vonkelende smaragte staan in rye langs die strate. Hulle stap op \'n sypaadjie van dieselfde groen marmer waar die blokke marmer gelas is met rye smaragte wat dig op mekaar geset is en in die helder son blink. Die vensters is van groen glas; selfs die lug bo die stad het \'n groen skynsel en die son se strale is groen. \n\nDaar beweeg baie mense – mans, vroue en kinders – rond en hulle is almal in groen geklee en het groenerige velle. Hulle staar met verwonderde oë na Dorothy en haar vreemde versameling vriende en die kinders hardloop almal weg en kruip agter hul ma\'s weg toe hulle die Leeu sien, maar niemand praat met hulle nie. Daar is baie winkels in die straat en Dorothy merk op dat alles in hulle groen is. Groen lekkergoed en groen springmielies word te koop aangebied, asook groen skoene, groen hoede en allerlei groen klere. Op een plek verkoop \'n man groen limonade en Dorothy sien dat die kinders met groen pennies betaal. \n\nDit lyk nie of daar enige perde of diere is nie; die mans vervoer goed in klein, groen waentjies wat hulle voor hulle stoot. Almal lyk gelukkig en tevrede en welvarend."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-berging"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kaart"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Fout"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-band is nie in hierdie land beskikbaar nie"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In vliegtuigmodus"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Netwerkkennisgewing"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Stel in kennis altyd as \'n publieke netwerk beskikbaar is"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Vermy swak verbindings"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Moenie \'n Wi-Fi-netwerk gebruik tensy dit \'n goeie internetverbinding het nie"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Gebruik net netwerke wat \'n goeie internetverbinding het"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Verander die voorkeur-installeerligging vir nuwe programme."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Deaktiveer ingeboude program?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Deaktiveer program"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"As jy hierdie program deaktiveer, sal Android en ander programme dalk nie meer soos bedoel werk nie."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vee data uit en deaktiveer program?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"As jy hierdie program deaktiveer, sal Android en ander programme dalk nie meer soos bedoel werk nie. Jou data sal ook uitgevee word."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Wil jy kennisgewings afskakel?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"As jy kennisgewings vir hierdie program afskakel, kan jy moontlik belangrike waarskuwings en opdaterings mis."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Winkel"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Wys %d versteekte items</item>
       <item quantity="one">Wys %d versteekte item</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Netwerk en internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Gekoppelde toestelle"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Programme en kennisgewings"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Gebruiker en rekeninge"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Kennisgewings"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Belangrikheid"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nie gestel nie"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Moet nooit kennisgewings wys nie"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Geen klank of visuele onderbreking nie"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Wys sonder klank"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Maak geluid"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Maak geluid en spring op op skerm"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Stel terug"</string>
     <string name="show_silently" msgid="2222875799232222056">"Wys sonder klank"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Moenie \'n geluid maak, vibreer of hierdie kennisgewings vir \'n kort tyd op die huidige skerm wys nie."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Laai tans programme …"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanale"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokkeer almal"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Moet nooit hierdie kennisgewings wys nie"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Wys kennisgewings"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Moet nooit kennisgewings in die skadu of op randtoestelle wys nie"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Wys kenteken"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Wys kennisgewings as kentekens in die Home-program as dit gesteun word."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ignoreer Moenie steur nie"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Laat hierdie kennisgewings steeds onderbreek wanneer Moenie steur nie na \'Net prioriteit\' gestel is"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Op die sluitskerm"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Moenie weer wys nie"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Versoek tans as"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Voeg rekening by"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Stelselinligting"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Werkprofielinstellings"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaksoektog"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Laat kontaksoektogte deur jou organisasie toe om bellers en kontakte te identifiseer"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Jou mees onlangse foutverslag"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Jou mees onlangse sekuriteitloglêer"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nooit"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto\'s en video\'s"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musiek en oudio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Speletjies"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Ander programme"</string>
     <string name="storage_files" msgid="8581083146777364063">"Lêers"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Foonberging"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> gebruik"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> gratis"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 4f95a41..9ec66d9 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"የናሙና ጽሑፍ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"አስደናቂው የኦዝ ምትሃተኛ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"ምዕራፍ 11፦ ኦዝ፣ አስደናቂዋ የኤምራልድ ከተማ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"ምንም እንኳን ዶርቲ እና ጓደኞችዋ በአረንጓዴ መነጽሮች ዓይኖቻቸው የተጠበቁ የነበሩ ቢሆንም በአስገራሚዋ ከተማ ብርቅርቅታ ገና ከመጀመሪያው ዓይኖቻቸው ተጭበርብረው ነበር። ጎዳናዎቹ ሁሉም ከአረንጓዴ እብነበረድ በተሠሩ በየቦታው ከሚያንጸባርቁ ውድ ኤምራልድ ድንጋዮች ያጌጡ ግድግዳዎች ባለቸው ቆንጆ ቤቶች ሰልፍ ይዘዋል። መልኩ ተመሳሳይ ከሆነ ከአረንጓዴ እብነበረድ ከተሠራው የእግረኛ መንገድ ላይ፣ የእግረኛ መንገዱ ክፍልፋዮች አጠገብ ለአጠገብ ጣል ጣል በተደረጉ እርስበርሳቸው በተጠላለፉ የኤምራልድ ረድፎች፣ በእግራቸው ሲንሸራሸሩ ኤምራሎዶቹ በፀሐይዋ ብርሃን ብርቅርቅ ይሉ ነበር። የአረንጓዴ መስታውቶቹ የመስኮት ክፈፎች፤ ሌላው ሳይቀር ከከተማዋ አናት ላይ ያለው ሰማይ አረንጓዴ ቀለም የተቀባ ይመስል ነበር፤ የፀሐይዋ ጨረሮችም አረንጓዴ ነበሩ። \n\nወዲያ ወዲህ የሚሉ በርካታ ሰዎች፣ ወንዶች፣ ሴቶች እና ሕፃናት ነበሩ፤ ሁሉም ደግሞ አረንጓዴ ልብሶችን ለብሰዋል ቆዳቸውም አረንጓዴ ሆኗል። ዶርቲን እና በግራሞት አፋቸውን የከፈቱ ጀሌዎችዋን በመደነቅ ዓይን እያዩዋቸው ያልፋሉ፤ እና ድንገት አንበሳውን ሲያዩ ሕፃናቱ ሮጠው ከእናቶቻቸው ጀርባ ተደበቁ፤ ግን ማንም ሰው ምን እንደሆኑ አልጠየቃቸውም። በርካታ ሱቆች በጎዳናው ላይ ተደርድረዋል፤ እና ዶርቲ በውስጣቸው ያለው ሁሉም ነገር አረንጓዴ እንደሆነ ተመለከተች። አረንጓዴ ከረሜላ እና አረንጓዴ ፈንድሻ እንዲሁም አረንጓዴ ጫማዎች፣ አረንጓዴ ባርኔጣዎች እና አረንጓዴ ልብሶች በዓይነት በዓይነቱ በቅናሽ ዋጋ ለሽያጭ ቀርበዋል። አንዱ ቦታ ላይ የሆነ ሰውዬ አረንጓዴ ሎሚ ጭማቂዎችን እየሸጠ ነበር፤ ልጆቹ ሲገዙት አረንጓዴ ሳንቲሞች ተጠቀመው እንደሚከፍሉት ዶርቲ ታይ ነበር። \n\nምንም ዓይነት ፈረሶች ወይም ምንም ዓይነት እንስሳቶች በቦታው አይታዩም፤ ሰዎቹ ዕቃዎችን የሚያጓጉዙት አረንጓዴ ጋሪዎችን ተጠቅመው እራሳቸው ከኋላ ሆነው ወደፊት በመግፋት ነበር። ሁሉም ሰው ደስተኛ እና ፍልቅልቅ ያለ እና ባለጠጋ ይመስል ነበር።"</string>
     <string name="font_size_save" msgid="3450855718056759095">"እሺ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"የUSB  ማከማቻ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD ካርድ"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ስህተት"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 ጊኸ ባንድ በዚህ አገር ውስጥ አይገኝም"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"አውሮፕላን ሁኔታ"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"የአውታረ መረብ ማሳወቂያ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"ይፋዊ አውታረ መረብ በተገኘ ጊዜ አሳውቅ"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"ደካማ ግንኙነቶችን አስወግድ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"ጥሩ የበይነመረብ ግንኙነት ከሌለው በስተቀር የWi-Fi አውታረ መረብ አይጠቀሙ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ጥሩ የበይነመረብ ግንኙነት ያላቸው አውታረ መረቦችን ብቻ ተጠቀም"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"ለአዲስ መተግበሪያዎች ተመራጭ መጫኛ ሥፍራዎችን ለውጥ።"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"የውስጠ ግንብ መተግበሪያ አቦዝን?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"መተግበሪያን አሰናክል"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ይህን መተግበሪያ ካሰናከሉት ከዚህ በኋላ Android እና ሌሎች መተግበሪያዎች እንደተፈለገው ላይሠሩ ይችላሉ።"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ውሂብ ይሰረዝና መተግበሪያ ይሰናከል?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ይህን መተግበሪያ ካሰናከሉት ከዚህ በኋላ Android እና ሌሎች መተግበሪያዎች እንደተፈለገው ላይሠሩ ይችላሉ። የእርስዎ ውሂብም ይሰረዛል።"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"ማሳወቂያዎችን አጥፋ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ለእዚህ መተግበሪያ ማሳወቂያዎችን አጥፍተው ከሆነ፣ አስፈላጊ ማንቂያዎችን እና አዘምኖችን ሊያጡ ይችላሉ።"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"መደብር"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%d የተደበቁ ንጥሎችን አሳይ</item>
       <item quantity="other">%d የተደበቁ ንጥሎችን አሳይ</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"አውታረ መረብ እና በይነመረብ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"የተገናኙ መሣሪያዎች"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"መተግበሪያዎች እና ማሳወቂያዎች"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"ተጠቃሚ እና መለያዎች"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"ማሳወቂያዎች"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"አስፈላጊነት"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"አልተዘጋጀም"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"ማሳወቂያዎችን በጭራሽ አታሳይ"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ምንም ድምፅ ወይም የሚታይ ትርጉም የለም"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"በፀጥታ አሳይ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ድምፅ ፍጠር"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ድምፅ ፍጠር እና በማያ ገጽ ላይ ብቅ በል"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ዳግም አስጀምር"</string>
     <string name="show_silently" msgid="2222875799232222056">"በጸጥታ አሳይ"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ድምፅ አታሰማ፣ አትንዘር ወይም እነዚህን ማሳወቂያዎች ወደ የአሁኑ ማያ ገጽ አታሳይ።"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"መተግበሪያዎችን በመጫን ላይ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ሰርጦች"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"ሁሉንም አግድ"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"እነዚህን ማሳወቂያዎች በጭራሽ አታሳይ"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"ማሳወቂያዎች አሳይ"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"በጥላ ወይም በጎን ያሉ ውጫዊ መሣሪያዎች ላይ ማሳወቂያዎችን በጭራሽ አታሳይ"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ባጅ አሳይ"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"በHome መተግበሪያ ላይ የሚደገፍ ከሆነ ማሳወቂያዎችን እንደ ባጆች አሳይ።"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"«አትረብሽ»ን ሻር"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"«አትረብሽ» ወደ ቅድሚያ ብቻ በሚቀናበርበት ጊዜ እነዚህ ማሳወቂያዎች እንዲያቋርጡ ይፍቀዱ"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"በማያ ገጽ ቁልፉ ላይ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"ዳግም አታሳይ"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"እንደሚከተለው በመጠየቅ ላይ"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"መለያ ያክሉ"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"የሥርዓት መረጃ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"የስራ መገለጫ ቅንብሮች"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"የእውቂያ ፍለጋ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"በእርስዎ ድርጅት የሚደረጉ የእውቂያ ፍለጋዎች ደዋዮችን እና እውቂያዎችን እንዲለዩ ፍቀድ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"የእርስዎ በጣም ቅርብ ጊዜ የሳንካ ሪፖርት"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"የእርስዎ የበጣም ቅርብ ጊዜ የደህንነት ምዝግብ ማስታወሻ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"በጭራሽ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ፎቶዎች እና ቪዲዮዎች"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"ሙዚቃ እና ኦዲዮ"</string>
     <string name="storage_games" msgid="7703159201697117621">"ጨዋታዎች"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"ሌሎች መተግበሪያዎች"</string>
     <string name="storage_files" msgid="8581083146777364063">"ፋይሎች"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"የስልክ ማከማቻ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ጥቅም ላይ ውሏል"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ነጻ"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 930eeda..cbd8f8b 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -90,8 +90,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"نموذج نص"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ساحر أوز العجيب"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"الفصل ۱۱: مدينة أوز الزمردية العجيبة"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"على الرغم من احتماء دورثي ورفاقها خلف نظارات خضراء، انبهرت عيونهم للوهلة الأولى بتوهج المدينة العجيبة وتألقها. كانت المنازل الرائعة أمامهم متراصة على الشوارع ومصممة جميعها من الرخام الأخضر المرصع بالزمرّد البرّاق. ساروا على رصيف من الرخام الأخضر نفسه حيث تلتقي المباني الضخمة على صفوف من الزمرد المتلألئ تحت أشعة الشمس الساطعة. كانت ألواح النوافذ الزجاجية خضراء هي أيضًا، حتى أنّ السماء وأشعة الشمس تلوّنت بالأخضر الفاتح. \n\nرأوا الكثير من الرجال والنساء والأطفال يجوبون الشوارع وجميعهم في ثياب خضراء فوق بشرة تميل إلى الأخضر. نظروا إلى دورثي ورفاقها الغريبين بتعجب، في حين أنّ الأطفال اختبأوا وراء أمهاتهم خائفين من الأسد، ولكن لم يتحدث معهم أحد. اصطفّت في الشارع المتاجر الخضراء ولاحظت دورثي أنّ كل ما فيها كان أخضر، من الحلوى الخضراء والفشار الأخضر إلى الأحذية والقبعات والملابس الخضراء. وفي أحد الأركان، وقف رجل يبيع الليموناضة الخضراء ورأت دورثي أنّ الأطفال كانوا يشترون العصير منه بعملة خضراء هي أيضًا. \n\nخلت الشوارع من الأحصنة أو أي نوع آخر من الحيوانات، وكان الرجال ينقلون أمتعتهم في عربات خضراء صغيرة يدفعونها أمامهم. وبدت ملامح السعادة والارتياح على وجوه الجميع."</string>
     <string name="font_size_save" msgid="3450855718056759095">"موافق"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"‏وحدة تخزين USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"‏بطاقة SD"</string>
@@ -707,8 +706,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"خطأ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"لا يتوفر التردد ٥ غيغاهرتز في هذا البلد"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"في وضع الطائرة"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"رسالة تنبيه بالشبكات"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"إرسال إشعارات عند توفر شبكة عامة"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"تجنب الاتصالات الضعيفة"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"‏عدم استخدام شبكات Wi-Fi ما لم يكن لها اتصال إنترنت جيد"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"استخدام الشبكات ذات اتصال الإنترنت الجيد فقط"</string>
@@ -1580,11 +1585,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"تغيير موقع التثبيت المفضل للتطبيقات الجديدة"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"هل تريد تعطيل التطبيق المضمن؟"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"تعطيل التطبيق"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"‏سيؤدي تعطيل هذا التطبيق إلى عدم عمل كل من نظام التشغيل Android وتطبيقات أخرى على النحو المنشود."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"هل تريد حذف البيانات وتعطيل التطبيق؟"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"‏سيؤدي تعطيل هذا التطبيق إلى عدم عمل كل من نظام التشغيل Android وتطبيقات أخرى على النحو المنشود، فضلاً عن حذف بياناتك."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"هل تريد إيقاف الإشعارات؟"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"إذا كنت قد أجريت إيقافًا للإشعارات حول هذا التطبيق، فقد تفوتك اشعارات وتحديثات مهمة."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"المتجر"</string>
@@ -2615,8 +2618,7 @@
       <item quantity="other">‏عرض %d عنصر مخفي</item>
       <item quantity="one">‏عرض %d عنصر مخفي</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"الشبكة والإنترنت"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"الأجهزة المرتبطة"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"التطبيقات والإشعارات"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"المستخدم والحسابات"</string>
@@ -2742,16 +2744,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"الإشعارات"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"الأهمية"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"لم يتم التعيين"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"عدم عرض الإشعارات"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"من دون تنبيه صوتي أو مرئي"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"عرض بدون تنبيه صوتي"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"إصدار تنبيه صوتي"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"إصدار تنبيه صوتي والظهور بسرعة على الشاشة"</string>
     <string name="importance_reset" msgid="7458420788555607007">"إعادة الضبط"</string>
     <string name="show_silently" msgid="2222875799232222056">"عرض بدون تنبيه صوتي"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"لا يُسمح بإصدار تنبيه صوتي أو بالاهتزاز أو بعرض هذه الإشعارات بسرعة على الشاشة الحالية."</string>
@@ -2784,16 +2781,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"جارٍ تحميل التطبيقات..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"القنوات"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"حظر الكل"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"عدم عرض هذه الإشعارات"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"عرض الإشعارات"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"‏عدم عرض الإشعارات في مركز الإشعارات أو على الأجهزة المرتبطة بحساب Google"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"عرض الشارة"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"‏عرض الإشعارات على هيئة شارات على تطبيق Home، إن توفّرت إمكانية ذلك."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"إلغاء وضع \"الرجاء عدم الإزعاج\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"السماح لهذه الإشعارات بمتابعة المقاطعة عند تعيين وضع \"الرجاء عدم الإزعاج\" على \"ذات الأولوية فقط\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"على شاشة التأمين"</string>
@@ -3352,8 +3344,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"عدم عرض ذلك مجددًا"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"الطلب باعتبارك"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"إضافة حساب"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"معلومات النظام"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"إعدادات الملف الشخصي للعمل"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"البحث في جهات الاتصال"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"السماح بعمليات البحث عن جهات اتصال بواسطة مؤسستك لتحديد المتصلين وجهات الاتصال"</string>
@@ -3460,16 +3451,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"أحدث تقرير أخطاء"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"أحدث سجل أمني"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"أبدًا"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"الصور ومقاطع الفيديو"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"الموسيقى والصوت"</string>
     <string name="storage_games" msgid="7703159201697117621">"الألعاب"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"تطبيقات أخرى"</string>
     <string name="storage_files" msgid="8581083146777364063">"الملفات"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"سعة تخزين الهاتف"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> مُستخدَمة"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> خالية"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index af500e0..58fa129 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Mətn nümunəsi"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Ozlu Heyrətamiz Sehrbaz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Fəsil 11: Məftunedici Zümrüd Şəhəri Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Hətta yaşıl eynəklərlə də Şəhərin gözəliiyi Dorothy və onun dostlarının gözlərini qamaşdırdı. Küçələrdə yaşıl mərmərlərdən tikilmiş və parlaq zümrüdlərlə bəzədilmiş gözəl evlər yanbayan düzülmüşdü. Onlar səki ilə gəzirdilər və yaşıl mərmərdən olan səkilərin üstündə, günəş şüaları altında par-par parıldayan zümrüdlər cərgə ilə birləşmişdi. Pəncərənin şüşələri yaşıl idi; hətta səmada yaşıl boya hiss olunurdu və günəşin şüaları da yaşıl idi. \n\nƏtrafda çoxlu adamlar, kişilər, qadınlar və uşaqlar var idi və hər kəs yaşıl paltar geyinmişdi, hətta dəriləri də yaşıl idi. Onlar Dorothy\'yə və ətrafında yad adamlara təəccüblə baxdılar və Aslanı görən kimi uşaqlar tez qaçıb analarının arxasında gizləndilər; amma heç kəs onları dindirmədi. Küçədə çoxlu dükanlar var idi və Dorothy orada hər şeyin yaşıl olduğu gördü. Yaşıl konfetlər, yaşıl popkorn, yaşıl ayaqqabılar, yaşıl papaq və cürbəcür yaşıl paltarlar. Bir kişi yaşıl limonad satırdı və Dorothy gördü ki, uşaqlar onu alanda əvəzində yaşıl pul verdilər. \n\nOrada at yox idi, ümumiyyətlə heç bir heyvan gözə dəymirdi; kişi əşyalarını yaşıl araba ilə daşıyırdı. Hər kəs xoşbəxt, razı və firavan görünürdü."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB yaddaş"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kart"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Xəta"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Bu ölkədə mövcud deyil 5 GHz band"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Uçuş rejimində"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Şəbəkə bildirişi"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"İctimai şəbəkə əlçatan olan zaman bildirilsin"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Keyfiyyətsiz bağlantıdan çəkinin"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Yaxşı İnternet bağlantısı yoxdursa, Wi-Fi şəbəkəsi istifadə etmə"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Yalnız keyfiyyətli internet bağlantısı olan şəbəkələri istifadə edin"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Yeni tətbiq üçün tərcih edilmiş quraşdırma yerini dəyişin"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Quraşdırılmış tətbiqlər deaktiv edilsin?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Tətbiqi deaktiv edin"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Əgər bu tətbiqi deaktiv etsəniz, Android və digər tətbiqlər düzgün işlməyə bilər."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Data silinsin və tətbiq deaktiv edilsin?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Əgər siz bu tətbiqi deaktiv etsəniz, Android və digər tətbiqlər düzgün işləməyə bilər. Həmçinin, datanız da silinəcək."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Bildirişlər deaktiv edilsin?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Əgər bu tətbiq üçün bildirişləri söndürsəniz, əhəmiyyəli xəbərdarlıq və güncəlləmələri əldən buraxmış oa bilərsiniz."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Mağaza"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d gizli element göstərin</item>
       <item quantity="one">%d gizli element göstərin</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Şəbəkə və internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Qoşulmuş cihazlar"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Tətbiq və bildirişlər"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"İstifadəçi və hesablar"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Bildirişlər"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Əhəmiyyət"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ayarlanmayıb"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Bildirişləri heç vaxt göstərməyin"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Səs və ya vizual kəsintisiz"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Sakit səsli"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Səsli"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Səsli və ekranda pəncərə ilə"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Sıfırlayın"</string>
     <string name="show_silently" msgid="2222875799232222056">"Səssiz göstərin"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Səs, vibrasiyanı deaktiv edin və ya bu bildirişlərə cari ekranınızda baxın."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Tətbiqlər endirilir..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanallar"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Hamısını bloklayın"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Bu bildirişlər heç vaxt göstərilməsin"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Bildirişləri göstərin"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Bildirişləri heç vaxt ekranda və ya periferik cihazlarda göstərməyin."</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Nişanı göstərin"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Əgər dəstəkləyirsə, bildirişləri Əsas tətbiqdə nişanlar kimi göstərin."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\"Narahat etməyin\" seçimini əvəzləyin"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Narahat Etməyin seçimi Yalnız Prioritet üçün ayarlandıqda bildirişlərin mane olmasına imkan verin"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Ekran kilidində"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Yenidən göstərməyin"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Sorğulama növü:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Hesab əlavə edin"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Sistem məlumatı"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"İş profil ayarları"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontakt axtarışı"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Zəng edənləri və kontaktları təyin etmək üçün təşkilatınız tərəfindən kontakt axtarışlarına icazə verin"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ən son baq hesabatı"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ən son təhlükəsizlik qeydiyyatı"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Heç vaxt"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto və Videolar"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musiqi və Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Oyunlar"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Digər tətbiqlər"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fayllar"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefon Yaddaşı"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> istifadə"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> pulsuz"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index b2357d2..22d0413 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Primer teksta"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Poglavlje 11: Čudesni Smaragdni grad Oza"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"I pored toga što su im oči bile zaštićene zelenim naočarima, Doroti i njeni prijatelji su u prvom trenutku bili zaslepljeni sjajem čudesnog grada. Ulice su bile pune prelepih kuća sagrađenih od zelenog mermera i ukrašenih svetlucavim smaragdima. Hodali su pločnikom od istog zelenog mermera, a na mestima na kojima su se ploče spajale nalazili su se gusto poređani smaragdi koji su se presijavali na suncu. Čak je i nebo iznad grada bilo zelene boje, kao i sunčevi zraci. \n\nNa ulicama je bilo mnogo ljudi. Muškarci, žene i deca su šetali, pri čemu su svi nosili zelena odela i imali zelenkastu kožu. Posmatrali su Doroti i njeno neobično društvo sa čuđenjem, a deca su bežala i krila se iza svojih majki kad bi videla Lava. Međutim, niko im se nije obraćao. U ulici je bilo mnogo radnji, a Doroti je primetila da je u njima sve bilo zeleno. Prodavale su se zelene bombone i kokice, zelene cipele, zeleni šeširi i zelena odeća svih vrsta. Na jednom mestu je neki čovek prodavao zelenu limunadu, a Doroti je primetila da su je deca plaćala zelenim novčićima. \n\nČinilo se da nema konja niti bilo kakvih drugih životinja. Ljudi su stvari nosili u malim zelenim kolicima koja su gurali ispred sebe. Svi su izgledali srećno, zadovoljno i uspešno."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Potvrdi"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB memorija"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kartica"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Greška"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Opseg od 5 GHz nije dostupan u ovoj zemlji"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"U Režimu rada u avionu"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Obaveštenje mreže"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Obaveštavanje kada god je dostupna javna mreža"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Izbegavaj loše veze"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne koristi Wi-Fi mrežu ako nema dobru internet vezu"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Korišćenje samo onih mreža koje imaju dobru internet vezu"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Menjanje željene lokacije za instalaciju novih aplikacija"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Želite da onemogućite ugrađenu apl.?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Onemogući aplikaciju"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ako onemogućite ovu aplikaciju, Android i druge aplikacije možda više neće funkcionisati ispravno."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Želite li da izbrišete podatke i onemogućite aplikaciju?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ako onemogućite ovu aplikaciju, Android i druge aplikacije možda više neće funkcionisati ispravno. Osim toga, podaci će biti izbrisani."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Želite li da isklj. obaveštenja?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ako isključite obaveštenja za ovu aplikaciju, možete da propustite važna obaveštenja i ažuriranja."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Prodavnica"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="few">Prikaži %d skrivene stavke</item>
       <item quantity="other">Prikaži %d skrivenih stavki</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Mreža i internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Povezani uređaji"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacije i obaveštenja"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Korisnik i nalozi"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Obaveštenja"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Važnost"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nije podešeno"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nikada ne prikazuj obaveštenja"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez zvučnog signala ili vizuelnog obaveštenja"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Prikazuje se bez zvučnog signala"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emituje se zvučni signal"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emituje se zvučni signal i prikazuje se na ekranu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Resetuj"</string>
     <string name="show_silently" msgid="2222875799232222056">"Prikazivanje bez zvuka"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Nema nikakvog zvuka ni vibracije niti se ova obaveštenja nakratko prikazuju na aktuelnom ekranu."</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Učitavaju se aplikacije..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanali"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokiraj sve"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nikada ne prikazuj ova obaveštenja"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Prikazuj obaveštenja"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Obaveštenja se nikada ne prikazuju na traci ili periferijskim uređajima"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Prikazuj značke"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Prikazuje obaveštenja kao značke u aplikaciji Home ako je to podržano."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Zameni režim Ne uznemiravaj"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Omogućava da ova obaveštenja nastave da se prikazuju kada je režim Ne uznemiravaj podešen na opciju Samo prioritetni prekidi"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na zaključanom ekranu"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne prikazuj ponovo"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Zahtevate kao"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Dodaj nalog"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informacije o sistemu"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Podešavanja poslovnog profila"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pretraga kontakata"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Dozvolite da pretraživanje kontakata od strane vaše organizacije identifikuje pozivaoce i kontakte."</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Najnoviji izveštaj o grešci"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Najnovija bezbednosna evidencija"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikada"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Slike i video snimci"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzika i audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Igre"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Druge aplikacije"</string>
     <string name="storage_files" msgid="8581083146777364063">"Datoteke"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Memorijski prostor telefona"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> je iskorišćeno"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> je slobodno"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index f817d84..3e0fd46 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Прыклад тэксту"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Чараўнік краіны Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Раздзел 11. Цудоўны Смарагдавы Горад у краіне Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Нават адзеўшы зялёныя акуляры, Дораці і яе сябры былі ашаломленыя зіхаценнем дзівоснага Горада. Уздоўж вуліц стаялі прыгожыя дамы з зялёнага мармуру, упрыгожаныя бліскучымі смарагдамі. Кампанія ішла па ходніку з зялёнага мармуру, а шчыліны паміж плітамі былі запоўненыя смарагдамі, што ззялі пад праменямі сонца. Шыбы ў вокнах былі з зялёнага шкла, нават неба над Смарагдавым Горадам мела зялёнае адценне, а сонца свяціла зялёнымі праменямі. \n\nВакол хадзілі мужчыны, жанчыны, дзеці, і ўсе яны насілі зялёнае адзенне, і скура ў іх была зеленаватая. Яны са здзіўленнем глядзелі на Дораці і яе дзіўную кампанію, а дзеці ўцякалі і хаваліся за спіны мацярок, калі бачылі Льва; але ніхто не адважваўся загаварыць. На вуліцы было шмат крам, і Дораці заўважыла, што ўсе тавары былі зялёнага колеру. Зялёныя цукеркі і зялёная паветраная кукуруза, зялёныя чаравікі, зялёныя капелюшы і зялёныя касцюмы любых фасонаў. Дораці пабачыла, як прадавец гандляваў зялёным ліманадам, а дзеці расплачваліся за яго зялёнымі манеткамі. \n\nНе было відаць ні коней, ні іншай жывёлы. Мужчыны вазілі грузы ў маленькіх зялёных калясках. Усе выглядалі вясёлымі, задаволенымі і паспяховымі."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ОК"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-назапашвальнік"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-карта"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Памылка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Дыяпазон 5 ГГц недаступны ў гэтай краіне"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"У рэжыме палёту"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Апавяшчэнне сеткі"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Паведамляць, калі даступна публічная сетка"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Пазбягаць дрэнных злучэнняў"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Не выкарыстоўваць сетку Wi-Fi, пакуль не будзе якаснага падлучэння да Інтэрнэту"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Выкарыстоўваць толькі сеткі з добрым падлуч. да Інтэрнэту"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Змяніць пераважнае месца ўсталявання новых прыкладанняў"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Адключыць убудаванае прыкладанне?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Адключыць дадатак"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Калі вы адключыце гэту праграму, іншыя праграмы могуць працаваць неналежным чынам."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Выдаліць дадзеныя і адключыць прыкладанне?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Калі вы адключыце гэту праграму, Android і іншыя праграмы могуць працаваць неналежным чынам. Вашы даныя таксама будуць выдалены."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Выключыць апавяшчэнні?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Калі адключыць паведамлення для гэтага прыкладання, вы можаце прапусціць важныя сігналы і абнаўленні."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Крама"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="many">Паказаць %d схаваных элементаў</item>
       <item quantity="other">Паказаць %d схаванага элемента</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Сетка і інтэрнэт"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Падключаныя прылады"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Праграмы і апавяшчэнні"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Карыстальнік і ўліковыя запісы"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Апавяшчэнні"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Важнасць"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Не зададзена"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ніколі не паказваць апавяшчэнні"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без гуку ці візуальнага перапынення"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Паказваць бязгучна"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Прайграваць гук"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Прайграваць гук і паказваць на экране"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Скінуць"</string>
     <string name="show_silently" msgid="2222875799232222056">"Паказваць бязгучна"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Не прайграваць гук, не вібрыраваць і не паказваць гэтыя апавяшчэнні хутка ў полі зроку на бягучым экране."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Загрузка дадаткаў..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Каналы"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блакіраваць усё"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ніколі не паказваць гэтыя апавяшчэнні"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Паказваць апавяшчэнні"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ніколі не паказваць апавяшчэнні на \"шторцы\" або на перыферыйных прыладах"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Паказаць значок"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Паказваць апавяшчэнні як значкі ў праграме Home, калі падтрымліваецца."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ігнараваць рэжым «Не турбаваць»"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Паказваць гэтыя апавяшчэнні, калі ў рэжыме «Не турбаваць» выбрана «Толькі прыярытэтныя»"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"На экране блакіроўкі"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Больш не паказваць"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Запыт ад"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Дадаць уліковы запіс"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Сістэмная інфармацыя"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Налады працоўнага профілю"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Пошук кантактаў"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Дазволіць вашай арганізацыі пошук кантактаў, каб вызначаць абанентаў і кантакты"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ваша апошняя справаздача пра памылку"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ваш апошні журнал бяспекі"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Ніколі"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Фота і відэа"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музыка і аўдыя"</string>
     <string name="storage_games" msgid="7703159201697117621">"Гульні"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Іншыя праграмы"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файлы"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Сховішча тэлефона"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> выкарыстана"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> свабодна"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index de5580b..285d15e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Примерен текст"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Вълшебникът от Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Глава 11: Удивителният изумруден град на Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Макар зелените очила да предпазваха очите им, отначало Дороти и приятелите й бяха заслепени от блясъка на великолепния град. По улиците се редяха красиви къщи, целите изградени от зелен мрамор и обсипани с искрящи изумруди. Групата се движеше по паваж от същия зелен мрамор, като блокчетата бяха свързани с редици от гъсто разположени изумруди, които блестяха на ярката слънчева светлина. Прозорците на къщите бяха със зелени стъкла. Дори небето над града бе обагрено в зелено, а слънчевите лъчи бяха зелени.\n\nРазхождаха се много хора – мъже, жени и деца. Всички бяха облечени в зелени дрехи и имаха зеленикава кожа. Те гледаха Дороти и странните й спътници с учудени погледи, а децата бягаха и се криеха зад майките си, щом видеха Лъва. Но никой не започваше разговор с тях. На улицата имаше много магазини и Дороти забеляза, че всичко в тях е зелено. Продаваха се зелени бонбони и зелени пуканки, всевъзможни зелени обувки, зелени шапки и зелени дрехи. На едно място някакъв мъж продаваше зелена лимонада и Дороти видя, че децата плащат със зелени монети.\n\nНе се виждаха коне или други животни. За пренасяне мъжете използваха малки зелени колички, които бутаха. Всички изглеждаха доволни, щастливи и благоденстващи."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB хранилище"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD карта"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Грешка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Честотата от 5 ГХц не е налице в тази държава"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"В самолетен режим"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Известие за мрежа"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Известяване, когато е налице обществена мрежа"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Да се избягват лоши връзки"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Да не се използва Wi‑Fi мрежа, освен ако няма добра връзка с интернет"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Да се ползват само мрежи с добра връзка с интернет"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Промяна на предпочитаното място за инсталиране на нови приложения"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Да се деакт. ли вград. прил.?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Деактивиране на приложението"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ако деактивирате това приложение, Android и други приложения може да спрат да работят както трябва."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Да се изтрият ли данните и да се деактивира приложението?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ако деактивирате това приложение, Android и други приложения може да спрат да работят както трябва. Данните ви също ще бъдат изтрити."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Да се изключат ли известията?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ако изключите известията за това приложение, може да пропуснете важни сигнали и актуализации."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"App Store"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Показване на %d скрити елемента</item>
       <item quantity="one">Показване на %d скрит елемент</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Мрежа и интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Свързани устройства"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Приложения и известия"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Потребител и профили"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Известия"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Важност"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Не е зададено"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Без показване на известия"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без звук или визуално прекъсване"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Показване без звук"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Възпроизвеждане на звук"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Възпроизвеждане на звук и показване на изскачащ прозорец на екрана"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Нулиране"</string>
     <string name="show_silently" msgid="2222875799232222056">"Показване без звук"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Без издаване на звук, вибриране или показване на тези известия на текущия екран."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Приложенията се зареждат..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Канали"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блокиране на всички"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Без показване на тези известия"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Показване на известията"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Без показване на известия в падащия панел или на периферни устройства"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Показване на значка"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Показване на известията като значки на началния екран, ако функцията се поддържа."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Отмяна на „Не безпокойте“"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Разрешаване на тези известия да продължат да ви прекъсват, когато за режим „Не безпокойте“ е зададено „Само с приоритет“."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Върху заключения екран"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Да не се показва отново"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Заявка за поддръжка като"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Добавяне на профил"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Системна информация"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Настройки за служебния потребителски профил"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Търсене на контакт"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Разрешете търсене на контакти от организацията ви с цел идентифициране на обаждащите се и контактите"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Най-скорошният ви сигнал за програмна грешка"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Най-скорошният ви регистрационен файл за сигурността"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Никога"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Снимки и видеоклипове"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музика и аудио"</string>
     <string name="storage_games" msgid="7703159201697117621">"Игри"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Други приложения"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файлове"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Хранилище на телефона"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Използвано място: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Свободно място: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 215f411..08aa732 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"নমুনা পাঠ্য"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"দ্যা ওয়ান্ডারফুল উইজার্ড অফ অজ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"অধ্যায় ১১: দ্যা ওয়ান্ডারফুল এমারল্ড সিটি অফ ওজ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"চোখে সবুজ চশমা লাগানো থাকলেও, ডরোথি এবং তার বন্ধু বিস্ময়কর শহরের জাঁকজমক দেখে প্রথমে স্তম্ভিত হয়ে উঠেছিল৷ রাস্তায় সারিবদ্ধভাবে থাকা সুন্দর সুন্দর ঘর, তার সবগুলি সবুজ মার্বেল নির্মিত এবং সর্বত্র চমকদার পান্না দিয়ে খচিত৷ তারা সেই একই সবুজ মার্বেলের তৈরি একটি ফুটপাথ ধরে হেঁটে চলেছিল, যেখানে একটির সাথে আর একটি ব্লগ সারিবদ্ধ পান্না দিয়ে যুক্ত করে কঠিনভাবে সেট করা এবং তা সূর্যের আলোকে চকচক করছিল৷ জানালার ফলকগুলি সবুজ কাচের ছিল; শহরের আকাশে একটি সবুজ ছোপ দেখা যাচ্ছিল, এবং সূর্যের আলোও ছিল সবুজ রঙের৷ \n\nসেখানে অনেক পুরুষ, মহিলা এবং শিশুরা হাঁটা হাঁটি করছিল, সকলে সবুজ রঙের কাপড় পরেছিল, এবং তাদের ত্বকের রঙ ছিল সবুজাভ৷ তারা ডরোথির দিকে তাকিয়ে ছিল এবং বিস্মিত চোখে তার আশ্চর্যজনক নিশ্চিত সহায়ক দৃষ্টি দেখে শিশুদের সবাই পালিয়ে গেল এবং সিংহটিকে দেখার সাথে সাথে তারা তাদের মায়েদের পিছনে লুকিয়ে গেল; কিন্তু কেউ তাদেরকে কিছু বলল না৷ রাস্তার পাশে অনেক দোকান ছিল, ডরোথি দেখল সেখানে রাখা সবকিছুই সবুজ রঙের৷ সবুজ মিছরি এবং সবুজ ভুট্টার খই বিক্রির জন্য সাজানো ছিল, তার সাথে সবুজ জুতা, সবুজ টুপি এবং সব ধরনের সবুজ জামাকাপড়ও ছিল৷ একটা লোক এক জায়গায় দাঁড়িয়ে সবুজ সরবৎ বিক্রি করছিল, এবং যখন একটি শিশু সেটা কিনল, ডরোথি লক্ষ্য করল দামের অর্থ হিসাবে একটি সবুজ পেনি দিতে৷ \n\nদেখে মনে হচ্ছিল সেখানে কোনো ঘোড়া বা অন্য কোনো ধরনের প্রাণী নেই; পুরুষেরা ছোট সবুজ গাড়িতে করে ঠেলে ঠেলে কাছাকাছি জিনিসগুলি বয়ে নিয়ে যাচ্ছিল৷ সবাইকে খুব খুশি, সন্তুষ্ট এবং সমৃদ্ধ বলে মনে হচ্ছিল৷"</string>
     <string name="font_size_save" msgid="3450855718056759095">"ঠিক আছে"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB সঞ্চয়স্থান"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD কার্ড"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ত্রুটি"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"এই দেশে ৫ GHz ব্যান্ড পাওয়া যায় না"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"বিমান মোডে"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"নেটওয়ার্ক বিজ্ঞপ্তি"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"যখনই কোনো সর্বজনীন নেটওয়ার্ক উপলব্ধ হয় তখন বিজ্ঞপ্তি জানান"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"দুর্বল সংযোগগুলি এড়িয়ে চলুন"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"ভালো ইন্টারনেট সংযোগ না হলে ওয়াই-ফাই ব্যবহার করবেন না"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"শুধুমাত্র ভাল ইন্টারনেট সংযোগ আছে এমন নেটওয়ার্ক ব্যবহার করুন"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"নতুন অ্যাপ্লিকেশানগুলির জন্য পছন্দসই ইনস্টলেশানের অবস্থান পরিবর্তন করুন"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"বিল্ট-ইন অ্যাপ্লিকেশান অক্ষম করবেন?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"অ্যাপ্লিকেশান অক্ষম করুন"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"আপনি এই অ্যাপটি অক্ষম করলে, Android এবং অন্যান্য অ্যাপ্লিকেশানকে যে কাজের উদ্দেশ্যে তৈরি করা হয়েছিল সেগুলি আর কাজ নাও করতে পারে৷"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ডেটা মুছে দেবেন এবং অ্যাপ্লিকেশন অক্ষম করবেন?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"আপনি যদি এই অ্যাপ্লিকেশানটিকে অক্ষম করেন, Android এবং অন্যান্য অ্যাপ্লিকেশানকে যে কাজের উদ্দেশ্যে তৈরি করা হয়েছিল সেগুলি আর কাজ নাও করতে পারে৷ আপনার ডেটাও মুছে যাবে।"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"বিজ্ঞপ্তিগুলি বন্ধ করবেন?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"আপনি যদি এই অ্যাপ্লিকেশানের জন্য বিজ্ঞপ্তিগুলিকে বন্ধ করনে তাহলে আপনি গুরুত্বপূর্ণ সতর্কতা এবং আপডেটগুলি নাও পেতে পারেন৷"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"স্টোর"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%dটি লুকানো আইটেম দেখান</item>
       <item quantity="other">%dটি লুকানো আইটেম দেখান</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"নেটওয়ার্ক ও ইন্টারনেট"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"সংযুক্ত ডিভাইস"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"অ্যাপ্স &amp; বিজ্ঞপ্তি"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"ব্যবহারকারি &amp; অ্যাকাউন্টগুলি"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"বিজ্ঞপ্তিগুলি"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"গুরুত্ব"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"সেট করা নেই"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"কখনোই বিজ্ঞপ্তগুলি দেখায় না"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"কোনো শব্দ বা ভিজ্যুয়াল বাধা নেই"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"নিঃশব্দে দেখান"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"শব্দ করে"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"শব্দ করে ও স্ক্রীনে ভেসে ওঠে"</string>
     <string name="importance_reset" msgid="7458420788555607007">"পুনরায় সেট করুন"</string>
     <string name="show_silently" msgid="2222875799232222056">"নিঃশব্দে দেখান"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"শব্দ, কম্পন করে না বা বর্তমান স্ক্রীনে এই বিজ্ঞপ্তিগুলিকে দেখানো হয় না৷"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"অ্যাপ্লিকেশানগুলি লোড করা হচ্ছে..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"চ্যানেল"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"সমস্ত অবরুদ্ধ করুন"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"এই বিজ্ঞপ্তিগুলি কখনোই দেখানো হবে না"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"বিজ্ঞপ্তিগুলি দেখান"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ছায়া বা পেরিফেরাল ডিভাইসে কখনও বিজ্ঞপ্তিগুলি দেখায় না"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ব্যাজ দেখায়"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"সমর্থিত হলে, হোম ট্যাবে ব্যাজ হিসেবে বিজ্ঞপ্তিগুলি দেখায়।"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\'বিরক্ত করবেন না\' ওভাররাইড করুন"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"যখন শুধুমাত্র অগ্রাধিকার সাপেক্ষে \'বিরক্ত করবেন না\' সেট করা থাকবে তখন বাধাদানের ক্ষেত্রে এই বিজ্ঞপ্তিগুলিকে চালু থাকতে দিন"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"লক স্ক্রীনে"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"আর দেখাবেন না"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"এই রূপে অনুরোধ করা হচ্ছে"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"অ্যাকাউন্ট যোগ করুন"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"সিস্টেমের তথ্য"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"কর্মস্থলের প্রোফাইলের সেটিংস"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"পরিচিতির অনুসন্ধান"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"কলারদের এবং পরিচিতিগুলিকে চিহ্নিত করতে আপনার প্রতিষ্ঠান দ্বারা পরিচিতি অনুসন্ধানের অনুমতি দিন"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"আপনার সর্বশেষ ত্রুটির প্রতিবেদন"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"আপনার সর্বশেষ নিরাপত্তা লগ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"কখনই নয়"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ফটো ও ভিডিও"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"সঙ্গীত ও অডিও"</string>
     <string name="storage_games" msgid="7703159201697117621">"গেম্স"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"অন্যান্য অ্যাপ্লিকেশান"</string>
     <string name="storage_files" msgid="8581083146777364063">"ফাইল"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ফোনের সঞ্চয়স্থান"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ব্যবহার করা হয়েছে"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> খালি"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 3ab6d33..f1b2fc8 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Uzorak teksta"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Poglavlje 11: Smaragdni grad Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"I pored toga što su im oči bile zaštićene zelenim naočalama, Dorothy i njeni prijatelji su isprva bili zaslijepljeni blještavilom tog grada. Ulicama su se nizale predivne zelene kuće izgrađene od zelenog mermera i obasute svjetlucavim smaragdima. Hodali su trotoarom od istog zelenog mermera, a na spoju između blokova nalazili su se usko postavljeni redovi smaragda koji su svjetlucali od sunčevog sjaja. Prozorska okna su bila od zelenog stakla. Čak je i nebo iznad grada imalo zelenu nijansu, a sunčeve zrake su bile zelene. \n\nTu je bilo mnogo ljudi, muškaraca, žena i djece, šetali su odjeveni u zelenu odjeću i imali su zelenkastu kožu. S čuđenjem su gledali u Dodorthy i njenu čudnovatu družinu. Kada su vidjeli lava, sva djeca su pobjegla i sakrila se iza svoje majke; ali niko im se nije obraćao. Na ulici je bilo mnogo prodavnica, a Dorothy je vidjela da je u njima sve zeleno. U ponudi su bili zeleni slatkiši i zelene kokice, kao i zelene cipele, zeleni šeširi i raznorazna zelena odjeća. Na jednom mjestu čovjek je prodavao zelenu limunadu, a kada su je djeca kupovala, Dorothy je vidjela da plaćaju zelenim novčićima. \n\nIzgleda da nije bilo konja niti drugih životinja. Muškarci su nosili stvari naokolo u zelenim kolicima koja su gurali ispred sebe. Svi su izgledali sretno, zadovoljno i napredno."</string>
     <string name="font_size_save" msgid="3450855718056759095">"U redu"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB pohrana"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kartica"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Greška"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Opseg od 5 GHz nije dostupan u ovoj zemlji"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"U načinu rada u avionu"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Mrežno obavještenje"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Obavijesti me kada je dostupna javna mreža"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Izbjegavaj slabe veze"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne koristi se Wi-Fi mreža ako njena Internet veza nije dobra"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Koristiti samo mreže koje imaju dobru internet vezu"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Promijenite preferiranu lokaciju za instaliranje novih aplikacija"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Onemogućiti ugrađenu aplikaciju?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Onemogući aplikaciju"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ako onemogućite ovu aplikaciju, moguće je da Android i druge aplikacije više neće funkcionirati ispravno."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Želite li obrisati podatke i onemogućiti aplikaciju?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ako onemogućite ovu aplikaciju, moguće je da Android i druge aplikacije više neće funkcionirati ispravno. Vaši podaci će se također izbrisati."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Isključiti obavještenja?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ako isključite obavještenja za ovu aplikaciju, možete propustiti važna upozorenja i ažuriranja."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Trgovina"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="few">Prikaži %d skrivene stavke</item>
       <item quantity="other">Prikaži %d skrivenih stavki</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Mreža i internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Povezani uređaji"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacije i obavještenja"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Korisnik i računi"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Obavještenja"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Značaj"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nije postavljeno"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nikad ne prikazuj obavještenja"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez ometanja zvukom ili prikazivanjem"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Prikaži bez zvuka"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Pusti zvuk"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Pusti zvuk i prikaži na ekranu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Ponovno pokretanje"</string>
     <string name="show_silently" msgid="2222875799232222056">"Pokaži bez zvuka"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ne oglašavaj ova obavještenja zvukom, vibriranjem niti kratkim prikazom na aktuelnom ekranu."</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Učitavaju se aplikacije..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanali"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokiraj sve"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nikada ne prikazuj ova obavještenja"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Prikaži obavještenja"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nikad ne prikazuj obavještenja u nijansi ili na perifernim uređajima"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Prikži značku"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Prikaži obavještenja kao značke na aplikaciji Home, ukoliko je podržano."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Premosti podešenja usluge Ne ometaj"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Dozvolite da se ova obavještenja i dalje čuju kada je opcija Ne ometaj podešena na Samo prioritetna obavještenja"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na zaključanom ekranu"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne prikazuj ponovo"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Tražite kao"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Dodaj račun"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informacije o sistemu"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Postavke radnog profila"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pretraživanje kontakata"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Dozvolite svojoj organizaciji da pretražuje kontakte kako bi identificirala pozivaoce i kontakte"</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Vaš posljednji izvještaj o greškama"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Vaš najnoviji zapisnik o stanju sigurnosti"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikada"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotografije i videozapisi"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzika i zvuk"</string>
     <string name="storage_games" msgid="7703159201697117621">"Igre"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Druge aplikacije"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fajlovi"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Pohrana telefona"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> je iskorišćeno"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> je slobodno"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 55e0795..e215a48 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Text de mostra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"El meravellós mag d\'Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítol 11: La meravellosa Ciutat Maragda d\'Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Fins i tot amb els ulls protegits per les ulleres verdes, la Dorothy i els seus amics van quedar enlluernats, de moment, per la brillantor de la meravellosa Ciutat. A banda i banda dels carrers es dreçaven cases boniques, totes fetes de marbre verd amb incrustacions de maragdes guspirejants. El terra també era fet del mateix marbre verd, i totes les juntures eren cobertes de rengleres de maragdes, una al costat de l\'altra, que guspirejaven a la llum del sol. Els vidres de les finestres eren verds; i fins i tot el cel, damunt la Ciutat, tenia un to verdós, i els raigs del sol eren verds. \n\nPertot es veia molta gent, homes, dones i criatures, vestits tots de verd i amb la pell verdosa. Tothom mirava la Dorothy i els seus companys amb sorpresa i curiositat, i les criatures fugien per amagar-se rere les seves mares quan veien el Lleó; però ningú no els va adreçar la paraula. Pels carrers hi havia moltes botigues i parades, i la Dorothy es fixà que tot el que hi venien era verd: caramels verds, rosetes de blat de moro verdes, sabates verdes, barrets verds i vestits verds de tota mena. En una de les parades, un home venia gasosa verda, i la Dorothy es va adonar que les criatures que en compraven pagaven amb monedes verdes. \n\nSemblava que en tota la ciutat no hi havia cavalls ni animals de cap mena. Els homes transportaven les coses en petits carretons verds, que empenyien davant seu. Tothom semblava feliç, content i pròsper."</string>
     <string name="font_size_save" msgid="3450855718056759095">"D\'acord"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Emmagatzematge USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Targeta SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"La banda de 5 GHz no està disponible en aquest país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"En mode d\'avió"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificació de xarxa"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notifica\'m si hi ha una xarxa pública disponible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Només connexions estables"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"No utilitzis una xarxa Wi-Fi tret que tingui una bona connexió a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Utilitza només les xarxes amb una bona connexió a Internet."</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Canvia la ubicació d\'instal·lació preferida per a les aplicacions noves"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Desactivar aplicació integrada?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desactiva l\'aplicació"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Si desactives aquesta aplicació, és possible que Android i altres aplicacions deixin de funcionar com és habitual."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vols eliminar les dades i desactivar l\'aplicació?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Si desactives aquesta aplicació, és possible que Android i altres aplicacions deixin de funcionar com és habitual. A més, se suprimiran les teves dades."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vols desactivar les notificacions?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Si desactives les notificacions d\'aquesta aplicació, pots perdre\'t actualitzacions i alertes importants."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Botiga"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostra %d elements amagats</item>
       <item quantity="one">Mostra %d element amagat</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Xarxa i Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositius connectats"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplicacions i notificacions"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Usuari i comptes"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificacions"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importància"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"No s\'ha definit"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"No mostris mai notificacions"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Sense so ni interrupcions visuals"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Es mostren de manera silenciosa"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Amb so"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Amb so i amb una finestra emergent"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Restableix"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostra de manera silenciosa"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"No reprodueix cap so, no vibra ni mostra aquestes notificacions a la pantalla actual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"S\'estan carregant les aplicacions..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canals"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloqueja-ho tot"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <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="5404669445214920178">"Mostra l\'insígnia"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Si és compatible, mostra notificacions com a insígnies a l\'aplicació Inici."</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 molesteu estigui configurat com a Només amb prioritat"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"A la pantalla de bloqueig"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"No ho tornis a mostrar"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Sol·licitud en nom de:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Afegeix un compte"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informació del sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configuració del perfil professional"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Cerca de contactes"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permet que la teva organització cerqui contactes per identificar els remitents i els contactes"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Informe d\'errors més recent"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Registre de seguretat més recent"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Mai"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos i vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música i àudio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jocs"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Altres aplicacions"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fitxers"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Emmagatzematge del telèfon"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966"><small><small>"Espai utilitzat: <xliff:g id="NUMBER">^1</xliff:g> <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Espai disponible: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index d5965ca..dc34d62 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Ukázkový text"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čaroděj ze země Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapitola 11: Smaragdové město v zemi Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"I přestože měli oči chráněné zelenými brýlemi, Dorotka a její přátelé byli oslněni krásou celého města. Ulice byly lemovány nádhernými domy ze zeleného mramoru posetého blyštivými smaragdy. Chodníky byly dlážděny stejným druhem zeleného mramoru a jednotlivé dlaždice od sebe dělily řady úzce sázených smaragdů, které se leskly ve slunečním svitu. Okenní tabule byly ze zeleného skla, dokonce i obloha nad městem měla zelený nádech i sluneční paprsky byly zelené. \n\nKolem procházelo mnoho lidí – muži, ženy i děti. Všichni byli zelení a nosili zelené oblečení. Zraky všech se upíraly na Dorotku a její neobvykle různorodé společníky. Když děti zahlédly i Lva, utíkaly se schovat za své maminky. Nikdo se neodvážil na skupinku promluvit. V ulici bylo mnoho obchodů a Dorotka si všimla, že také v nich je všechno zelené. Bonbony, popcorn, boty, klobouky, oblečení všech druhů.Na jednom místě prodávali zelenou limonádu, a když ji děti kupovaly, platily za ni zelenými mincemi. \n\nZdálo se, že ve městě nejsou koně ani jakákoli zvířata. Lidé k převážení věcí používali zelené vozíky, které tlačili před sebou. Všichni vypadali, že jsou spokojeni a daří se jim."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Úložiště USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Karta SD"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Chyba"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"V této zemi není pásmo 5 GHz k dispozici"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Při režimu Letadlo"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Oznamování sítě"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Upozornit, když bude dostupná veřejná síť"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Ignorovat slabá připojení"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nepoužívat síť Wi-Fi, pokud nemá dostatečně kvalitní internetové připojení"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Použít jen sítě s dobrým připojením k internetu"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Změna preferovaného umístění pro instalaci nových aplikací"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Deaktivovat integrovanou aplikaci"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Deaktivovat aplikaci"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Pokud tuto aplikaci deaktivujete, systém Android a ostatní aplikace nemusejí fungovat správně."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vymazat data a deaktivovat aplikaci?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Pokud tuto aplikaci deaktivujete, systém Android a ostatní aplikace nemusejí fungovat správně. Také budou smazána data."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vypnout oznámení?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Pokud v této aplikaci vypnete oznámení, můžete přijít o důležitá upozornění a aktuality."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Obchod"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="other">Zobrazit %d skrytých položek</item>
       <item quantity="one">Zobrazit %d skrytou položku</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Síť a internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Připojená zařízení"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikace a oznámení"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Uživatel a účty"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Oznámení"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Důležitost"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nenastaveno"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Oznámení nikdy nezobrazovat"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez zvukového a vizuálního vyrušení"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Zobrazovat tiše"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Vydat zvukový signál"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Vydat zvukový signál a vyskočit na obrazovku"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Resetovat"</string>
     <string name="show_silently" msgid="2222875799232222056">"Zobrazovat tiše"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Na tato oznámení nebudete upozorněni zvukem ani vibrací, ani se nebude zobrazovat jejich náhled na aktuální obrazovce."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Načítání aplikací..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanály"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokovat vše"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Tato oznámení nikdy nezobrazovat"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Zobrazovat oznámení"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nezobrazovat oznámení na panelu ani v periferních zařízeních"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Zobrazovat odznaky"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Zobrazovat oznámení jako odznaky ve výchozí aplikaci, je-li tato funkce podporována."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Přepsat nastavení Nerušit"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Umožnit těmto oznámením vyrušit mě, pokud je v nastavení Nerušit vybrána možnost Pouze prioritní"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na obrazovce uzamčení"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Příště již nezobrazovat"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Žádost bude odeslána pomocí účtu"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Přidat účet"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systémové informace"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Nastavení pracovního profilu"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Vyhledávání kontaktů"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Povolit vyhledávání kontaktů organizací za účelem identifikace volajících a kontaktů"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Vaše nejnovější zpráva o chybě"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Váš nejnovější protokol zabezpečení"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikdy"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotky a videa"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Hudba a zvuk"</string>
     <string name="storage_games" msgid="7703159201697117621">"Hry"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Další aplikace"</string>
     <string name="storage_files" msgid="8581083146777364063">"Soubory"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Úložiště telefonu"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> využito"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Volné místo: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index b9743ac..de44152 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Eksempeltekst"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Den vidunderlige troldmand fra Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapitel 11: Den vidunderlige smaragdby i Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Selv med øjnene beskyttet bag de grønne briller blev Dorothy og hendes venner til at starte med forblændet af byens vidunderlige funklen. Langs gaderne stod smukke huse i grøn marmor bestrøet med skinnende smaragder. De gik hen over et fortov, der var lavet af det samme grønne marmor, og der hvor fliserne mødtes, var der rækker af smaragder, der side om side skinnede i lyset fra solen. Ruderne var af grønt glas; selv himlen over byen havde et grønt skær, og solens stråler var grønne. \n\nMange mennesker, både mænd, kvinder og børn, gik omkring, og de var alle klædt i grønt og havde en grønlig hud. De kiggede med undrende øjne på Dorothy og hendes mærkværdige brogede følge, og børnene løb alle hen og gemte sig bag deres mødre, da de så Løven, men der var ingen, der talte til dem. Der var mange butikker på gaden, og Dorothy kunne se, at alle varerne var grønne. Der blev solgt grønt slik og grønne popcorn, grønne sko, grønne hatte og alle slags grønne klæder. En mand solgte grøn lemonade, og da børnene købte det, kunne Dorothy se, at de betalte for det med grønne penge. \n\nDer så ikke ud til at være heste eller dyr af nogen art; mændene kørte med ting i små grønne vogne, som de skubbede foran sig. Alle virkede glade og tilfredse og velstående."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-lager"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kort"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Fejl"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-bånd er ikke tilgængeligt i dette land"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"I flytilstand"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Underretning ved nye netværk"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Giv besked, når et offentligt netværk er tilgængeligt"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Undgå dårlige forbindelser"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Brug kun et Wi-Fi-netværk, hvis det har en god internetforbindelse"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Anvend kun netværk med god internetforbindelse"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Skift den foretrukne installationsplacering for nye apps"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Deaktiver indbygget app?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Deaktiver appen"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Hvis du deaktiverer denne app, kan Android-apps og andre apps forhindres i at fungere korrekt."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vil du slette data og deaktivere appen?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Hvis du deaktiverer denne app, kan Android-apps og andre apps forhindres i at fungere korrekt. Dine data slettes også."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vil du deaktivere underretninger?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Hvis du deaktiverer underretninger for denne app, kan du gå glip af vigtige beskeder og opdateringer."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Butik"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Vis %d skjult element</item>
       <item quantity="other">Vis %d skjulte elementer</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Netværk og internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Tilsluttede enheder"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps og underretninger"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Bruger og konti"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Underretninger"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Vigtighed"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ikke angivet"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Vis aldrig underretninger"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ingen lyd eller pop op-visning"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Vis lydløst"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Med lyd"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Med lyd og pop op-visning"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Nulstil"</string>
     <string name="show_silently" msgid="2222875799232222056">"Vis lydløst"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Undlad at give lyd, vibrere eller vise disse underretninger på den aktuelle skærm."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Indlæser apps..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanaler"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloker alle"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Vis aldrig disse underretninger"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Vis underretninger"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Vis aldrig underretninger i underretningspanelet eller på eksterne enheder"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Vis badge"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Vis underretninger som badges i Home-appen, hvis det understøttes."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Tilsidesæt Forstyr ikke"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Lad disse underretninger fortsætte med at afbryde, når Forstyr ikke er slået til med angivelsen Kun prioritet"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"På låseskærmen"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Vis ikke igen"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Anmoder som"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Tilføj konto"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systemoplysninger"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Indstillinger for arbejdsprofil"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Søgning efter kontaktpersoner"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Tillad søgninger efter kontaktpersoner efter din organisation for at identificere kontaktpersoner og personer, der ringer"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Din seneste fejlrapport"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Din seneste sikkerhedslogfil"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Aldrig"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Billeder og videoer"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musik og lyd"</string>
     <string name="storage_games" msgid="7703159201697117621">"Spil"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Andre apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Filer"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefonens lagerplads"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> anvendt lagerplads"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ledig lagerplads"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 6e2fae2..a4598f9 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -85,8 +85,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Beispieltext"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Der Zauberer von Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapitel 11: Die wundervolle Smaragdstadt von Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Obwohl ihre Augen durch die grünen Gläser der Brillen geschützt waren, wurde den Freunden vom Glanz und vom Schimmer der wundervollen Smaragdstadt beinahe schwindelig. Prächtige Häuser aus grünem Marmor, die mit Smaragden besetzt waren, säumten die Straßen. Auch das Straßenpflaster bestand aus feinstem grünem Marmor, und die Fugen waren mit glitzernden Smaragden bestückt. Sie funkelten und leuchteten in der Sonne. Die Fensterscheiben der Häuser bestanden aus grünem Glas, der Himmel über der Stadt schimmerte hellgrün, und sogar die Strahlen der Sonne wirkten leicht grünlich. \n\nIn der Stadt gab es viel Leben. Männer, Frauen und Kinder liefen geschäftig durch die Straßen. Alle waren grün gekleidet und trugen eine grüne Brille. Ihre Haut schien leicht grün zu sein, und sie sahen Dorothy und ihre Freunde mit großen verwunderten Augen an. Als die Kinder den Löwen sahen, rannten sie davon, um sich hinter ihren Müttern zu verstecken. Niemand richtete das Wort an die Wanderer. Es gab auch viele Geschäfte in der Smaragdstadt, und sogar die Auslagen der Läden waren grün. Da gab es grüne Bonbons, grünes Popcorn, grüne Schuhe, grüne Hüte und viele grüne Kleider. Ein Mann verkaufte grüne Limonade, und Dorothy sah die Kinder mit grünem Geld dafür bezahlen. \n\nPferde oder andere Tiere konnte Dorothy nirgendwo entdecken. Dafür begegneten ihnen immer wieder Männer, die auf ihren kleinen grünen Karren Lasten durch die Stadt schoben. Alle schienen glücklich und zufrieden zu sein."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-Speicher"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-Karte"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Aus"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Nicht verfügbar, weil NFC deaktiviert ist"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Wenn diese Funktion aktiviert ist, kannst du App-Inhalte auf ein anderes NFC-fähiges Gerät beamen, indem du die Geräte dicht nebeneinander hältst. Du kannst beispielsweise Webseiten, YouTube-Videos und Kontakte beamen.\n\nHalte die Geräte einfach dicht nebeneinander, am besten Rückseite an Rückseite, und berühre den Bildschirm. Was übertragen wird, richtet sich nach der App."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Wenn diese Funktion aktiviert ist, kannst du App-Inhalte auf ein anderes NFC-fähiges Gerät übertragen, indem du die Geräte dicht nebeneinander hältst. Du kannst beispielsweise Webseiten, YouTube-Videos und Kontakte übertragen.\n\nHalte die Geräte einfach dicht nebeneinander, am besten Rückseite an Rückseite, und berühre den Bildschirm. Was übertragen wird, hängt von der App ab."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"WLAN"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"WLAN aktivieren"</string>
     <string name="wifi_settings" msgid="29722149822540994">"WLAN"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Fehler"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Das 5-GHz-Band ist in diesem Land nicht verfügbar."</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Im Flugmodus"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Netzwerkhinweis"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Immer benachrichtigen, wenn öffentliches Netzwerk verfügbar"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Schlechte Internetverbindungen vermeiden"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"WLAN nur bei guter Internetverbindung verwenden"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Nur Netzwerke mit stabiler Internetverbindung verwenden"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Bevorzugten Installationspfad für neue Apps ändern"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Integrierte App deaktivieren?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"App deaktivieren"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Bei Deaktivierung dieser App funktionieren Android und andere Apps möglicherweise nicht mehr ordnungsgemäß."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Daten löschen und App deaktivieren?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Bei Deaktivierung dieser App funktionieren Android und andere Apps möglicherweise nicht mehr ordnungsgemäß. Außerdem werden deine Daten gelöscht."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Benachrichtigungen deaktivieren?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Wenn du die Benachrichtigungen für diese App deaktivierst, verpasst du eventuell wichtige Warnmeldungen und Updates."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Store"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d ausgeblendete Elemente anzeigen</item>
       <item quantity="one">%d ausgeblendetes Element anzeigen</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Netzwerk &amp; Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Verbundene Geräte"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps &amp; Benachrichtigungen"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Nutzer &amp; Konten"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Benachrichtigungen"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Wichtigkeit"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nicht festgelegt"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Niemals Benachrichtigungen anzeigen"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Kein akustisches Signal und keine visuelle Unterbrechung"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Ohne Ton anzeigen"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Akustisches Signal"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Akustisches Signal und Bildschirmbenachrichtigung"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Zurücksetzen"</string>
     <string name="show_silently" msgid="2222875799232222056">"Ohne Ton anzeigen"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Diese Benachrichtigungen nicht auf dem aktuellen Bildschirm einblenden und keinen Ton sowie keine Vibration dafür erzeugen."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Apps werden geladen..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanäle"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Alle blockieren"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Diese Benachrichtigungen niemals anzeigen"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Benachrichtigungen anzeigen"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Benachrichtigungen niemals in der Leiste oder auf Peripheriegeräten anzeigen"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Badge anzeigen"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Benachrichtigungen falls möglich als Badges in der Home App anzeigen"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\"Nicht stören\" deaktivieren"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Diese Benachrichtigungen dürfen auch dann empfangen werden, wenn für den Modus \"Nicht stören\" die Option \"Nur wichtige Unterbrechungen\" ausgewählt ist."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Auf dem Sperrbildschirm"</string>
@@ -3226,8 +3218,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Nicht noch einmal anzeigen"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Anfrage senden als"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Konto hinzufügen"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systeminformationen"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Einstellungen für Arbeitsprofil"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Suche nach Kontakten"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Suche nach Kontakten durch deine Organisation erlauben, um Anrufer und Kontakte zu identifizieren"</string>
@@ -3318,16 +3309,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Dein neuester Fehlerbericht"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Dein neuestes Sicherheitsprotokoll"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nie"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos und Videos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musik und Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Spiele"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Weitere Apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Dateien"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Smartphone-Speicher"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> verwendet"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> kostenlos"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 91b0dd6..3ae3026 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Δείγμα κειμένου"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Ο Θαυμάσιος Μάγος του Οζ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Κεφάλαιο 11: Η Θαυμάσια Πόλη Έμεραλντ του Οζ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Παρόλο που είχαν καλύψει τα μάτια τους με τα πράσινα γυαλιά, η Ντόροθι και οι φίλοι της αρχικά θαμπώθηκαν από τη λαμπρότητα της υπέροχης Πόλης. Στους δρόμους υπήρχαν σειρές με όμορφα σπίτια, όλα φτιαγμένα από πράσινο μάρμαρο και διακοσμημένα με λαμπερά σμαράγδια. Περπάτησαν σε ένα πεζοδρόμιο φτιαγμένο από το ίδιο πράσινο μάρμαρο, ενώ εκεί που ενώνονταν τα κομμάτια του πεζοδρομίου, υπήρχαν σειρές με σμαράγδια, τοποθετημένα το ένα δίπλα στο άλλο, που άστραφταν με τη φωτεινότητα του ήλιου. Τα τζάμια των παραθύρων ήταν φτιαγμένα από πράσινο γυαλί. Ακόμα και ο ουρανός πάνω από την πόλη είχε μια πράσινη απόχρωση και οι ακτίνες του ήλιου ήταν πράσινες. \n\nΠολλοί άνθρωποι, άνδρες, γυναίκες και παιδιά, περπατούσαν στους δρόμους και ήταν όλοι ντυμένοι με πράσινα ρούχα, ενώ το δέρμα τους ήταν πρασινωπό. Κοιτούσαν τη Ντόροθι και την παράξενη παρέα της με περιέργεια, ενώ όλα τα παιδιά έτρεξαν και κρύφτηκαν πίσω από τις μαμάδες τους μόλις αντίκρισαν το Λιοντάρι. Όμως, κανείς δεν τους μίλησε. Υπήρχαν πολλά καταστήματα στο δρόμο και η Ντόροθι παρατηρούσε πως όλα ήταν πράσινα στο εσωτερικό τους. Πουλούσαν πράσινα γλυκά και πράσινο ποπ κορν, καθώς και πράσινα παπούτσια, πράσινα καπέλα και πράσινα ρούχα όλων των ειδών. Σε κάποιο σημείο, ένας άνδρας πουλούσε πράσινη λεμονάδα και η Ντόροθι παρατήρησε ότι τα παιδιά την πλήρωσαν με πράσινα νομίσματα. \n\nΔεν υπήρχαν ούτε άλογα ούτε άλλα ζώα. Οι άνδρες κουβαλούσαν πράγματα σε μικρά πράσινα κάρα, τα οποία μετακινούσαν σπρώχνοντάς τα. Όλοι έμοιαζαν πολύ ευτυχισμένοι και ευκατάστατοι."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Αποθ. χώρος USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Κάρτα SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Σφάλμα"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Η ζώνη 5 GHz δεν είναι διαθέσιμη σε αυτήν τη χώρα"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Σε λειτουργία πτήσης"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Ειδοποίηση δικτύου"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Ειδοποίηση όποτε υπάρχει διαθέσιμο δημόσιο δίκτυο"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Αποφυγή κακών συνδέσεων"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Να μην γίνεται χρήση δικτύων Wi-Fi, εκτός αν υπάρχει καλή σύνδεση στο Διαδίκτυο"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Να χρησιμοποιούνται μόνο δίκτυα με καλή διαδικτυακή σύνδεση"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Αλλαγή της προτιμώμενης θέσης εγκατάστασης για νέες εφαρμογές"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Απενεργ. ενσωματωμ. εφαρμογής;"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Απενεργοποίηση εφαρμογής"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Εάν απενεργοποιήσετε αυτήν την εφαρμογή, η λειτουργία του Android και άλλων εφαρμογών ενδέχεται να μην είναι η αναμενόμενη."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Διαγραφή δεδομένων και απενεργοποίηση εφαρμογής;"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Εάν απενεργοποιήσετε αυτήν την εφαρμογή, η λειτουργία του Android και άλλων εφαρμογών ενδέχεται να μην είναι η αναμενόμενη. Επίσης, θα διαγραφούν τα δεδομένα σας."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Απενεργοποίηση ειδοποιήσεων;"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Εάν απενεργοποιήσετε τις ειδοποιήσεις για αυτήν την εφαρμογή, ενδέχεται να χάσετε σημαντικές ειδοποιήσεις και ενημερώσεις."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Κατάστημα"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Εμφάνιση %d κρυφών στοιχείων</item>
       <item quantity="one">Εμφάνιση %d κρυφού στοιχείου</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Δίκτυο και διαδίκτυο"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Συνδεδεμένες συσκευές"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Εφαρμογές και ειδοποιήσεις"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Χρήστης και λογαριασμοί"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Ειδοποιήσεις"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Βαρύτητα"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Δεν έχει ρυθμιστεί"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Να μην εμφανίζονται ποτέ ειδοποιήσεις"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Χωρίς ηχητική ή οπτική διακοπή"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Εμφάνιση χωρίς ειδοποίηση"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Αναπαραγωγή ήχου"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Αναπαραγωγή ήχου και εμφάνιση στην οθόνη"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Επαναφορά"</string>
     <string name="show_silently" msgid="2222875799232222056">"Εμφάνιση χωρίς ειδοποίηση"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Να μην συνοδεύονται αυτές οι ειδοποιήσεις από ήχο, δόνηση ή προβολή σε αναδυόμενο παράθυρο κατά την προβολή τους στην τρέχουσα οθόνη."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Φόρτωση εφαρμογών…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Κανάλια"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Αποκλεισμός όλων"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Να μην εμφανίζονται ποτέ αυτές οι ειδοποιήσεις"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Εμφάνιση ειδοποιήσεων"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Να μην εμφανίζονται ποτέ ειδοποιήσεις στο πλαίσιο σκίασης ειδοποιήσεων ή σε περιφερειακές συσκευές"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Εμφάνιση σήματος"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Οι ειδοποιήσεις να εμφανίζονται ως σήματα στην εφαρμογή αρχικής οθόνης, αν αυτό υποστηρίζεται."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Παράκαμψη λειτουργίας \"Μην ενοχλείτε\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Να επιτραπεί σε αυτές τις ειδοποιήσεις να εξακολουθήσουν να διακόπτουν τη λειτουργία \"Μην ενοχλείτε\" όταν έχει οριστεί σε Μόνο προτεραιότητας"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Στο κλείδωμα οθόνης"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Να μην εμφανιστεί ξανά"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Αίτημα ως"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Προσθήκη λογαριασμού"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Πληροφορίες συστήματος"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Ρυθμίσεις προφίλ εργασίας"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Αναζήτηση επαφών"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Επιτρέψτε τις αναζητήσεις επαφών από τον οργανισμό σας, για την αναγνώριση καλούντων και επαφών"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Η πιο πρόσφατη αναφορά σφάλματος που υποβάλατε"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Το πιο πρόσφατο αρχείο καταγραφής ασφαλείας"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Ποτέ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Φωτογραφίες και βίντεο"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Μουσική και ήχος"</string>
     <string name="storage_games" msgid="7703159201697117621">"Παιχνίδια"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Άλλες εφαρμογές"</string>
     <string name="storage_files" msgid="8581083146777364063">"Αρχεία"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Αποθηκ. χώρος τηλεφώνου"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Χρησιμοποιούνται <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> είναι διαθέσιμα"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 77c2ae7..f54e74d 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz band not available in this country"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In aeroplane mode"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Network notification"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notify whenever a public network is available"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Avoid poor connections"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Don\'t use a Wi‑Fi network unless it has a good Internet connection"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Only use networks that have a good Internet connection"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Your most recent bug report"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Your most recent security log"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Never"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Photos &amp; Videos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Music &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Games"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Other apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Files"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Phone Storage"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> used"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> free"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 977d800..b54f714 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz band not available in this country"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In aeroplane mode"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Network notification"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notify whenever a public network is available"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Avoid poor connections"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Don\'t use a Wi‑Fi network unless it has a good Internet connection"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Only use networks that have a good Internet connection"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Your most recent bug report"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Your most recent security log"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Never"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Photos &amp; Videos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Music &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Games"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Other apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Files"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Phone Storage"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> used"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> free"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 977d800..b54f714 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz band not available in this country"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In aeroplane mode"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Network notification"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notify whenever a public network is available"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Avoid poor connections"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Don\'t use a Wi‑Fi network unless it has a good Internet connection"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Only use networks that have a good Internet connection"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Your most recent bug report"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Your most recent security log"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Never"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Photos &amp; Videos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Music &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Games"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Other apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Files"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Phone Storage"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> used"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> free"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 05fc4bb..6a55970 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Texto de muestra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"El maravilloso mago de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Aunque contaban con la protección de los lentes verdes, en un primer momento, Dorothy y sus amigos se sintieron encandilados por el brillo de la maravillosa ciudad. Las calles estaban bordeadas por hermosas casas de mármol verde y adornadas con esmeraldas brillantes. Caminaron por pavimento del mismo mármol verde y, donde se unían las calles, había filas de esmeraldas juntas que brillaban con el sol. Los vidrios de las ventanas eran verdes y hasta el cielo sobre la ciudad y los rayos del sol tenían un matiz verde. \n\nHabía muchas personas caminando: hombres, mujeres y niños, todos vestidos de verde y de piel verdosa. Miraban a Dorothy y a sus extraños acompañantes con asombro. Los niños corrían despavoridos detrás de sus madres cuando veían al León, pero nadie les hablaba. Había muchas tiendas en la calle, y Dorothy vio que todo lo que vendían era verde: caramelos verdes, palomitas de maíz verdes, zapatos verdes, sombreros verdes y ropa verde de todo tipo. En una tienda, un hombre vendía limonada verde y Dorothy observó que los niños que la compraban pagaban con monedas verdes. \n\nParecía no haber caballos ni animales de ningún tipo. Los hombres cargaban objetos en pequeñas carretas verdes que llevaban delante de ellos. Todos parecían felices, contentos y afortunados."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Aceptar"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Almacenamiento USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Tarjeta SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHZ no disponible en este país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"En modo avión"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificación de red"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notificarme cuando haya una red pública disponible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitar malas conexiones"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"No usar una red Wi-Fi a menos que tenga una buena conexión a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Usar solo redes con una conexión a Internet estable"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Cambiar la ubicación de instalación preferida para nuevas aplicaciones"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"¿Inhabilitar aplic. incorp.?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Inhabilitar la aplicación"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Si inhabilitas esta app, es posible que Android y otras apps ya no funcionen correctamente."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"¿Deseas borrar los datos y desactivar la aplicación?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Si inhabilitas esta app, es posible que Android y otras apps ya no funcionen correctamente. Además, se borrarán tus datos."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"¿Desactivar notificaciones?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Si desactivas las notificaciones de esta aplicación, es posible que no recibas actualizaciones y alertas importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Store"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostrar %d elementos ocultos</item>
       <item quantity="one">Mostrar %d elemento oculto</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Internet y red"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos conectados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps y notificaciones"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Usuario y cuentas"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificaciones"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importancia"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Sin establecer"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"No mostrar notificaciones"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"No emitir sonido ni mostrar"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar sin emitir sonido"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir sonido"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir sonido y mostrar en pantalla"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Restablecer"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar sin emitir sonido"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"No emitir sonido, vibrar ni mostrar estas notificaciones en la pantalla actual."</string>
@@ -2690,16 +2687,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Cargando aplicaciones…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canales"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear todos"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"No mostrar estas notificaciones"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificaciones"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"No mostrar notificaciones en el panel ni en dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar insignia"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostrar notificaciones como insignias en la app de Google Home, si es compatible."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Anular No interrumpir"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permitir que estas notificaciones sigan interrumpiendo cuando No interrumpir esté configurado como Solo prioridad"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"En la pantalla bloqueada"</string>
@@ -3222,8 +3214,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"No volver a mostrar"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitando como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Agregar cuenta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Información del sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configuración del perfil de trabajo"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Búsqueda de contactos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permitir que tu organización busque contactos para identificar a emisores y contactos"</string>
@@ -3314,16 +3305,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Tu informe de errores más reciente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Tu registro de seguridad más reciente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos y videos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música y audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Juegos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Otras apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Archivos"</string>
-    <string name="storage_settings_2" msgid="6369810699930056554">"Almacenamiento del dispositivo"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_settings_2" msgid="6369810699930056554">"Almacenamiento del teléf."</string>
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Espacio en uso: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Espacio libre: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index beb4795..4ba083a 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Texto de muestra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"El maravilloso mago de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Aun con los ojos protegidos por las gafas verdes, Dorothy y sus amigos quedaron deslumbrados por el brillo de aquella maravillosa ciudad. Las calles estaban formadas por preciosas casas construidas con mármol verde y todo estaba salpicado de relucientes esmeraldas. Pasearon por un camino de mármol verde cuyas baldosas se unían con hileras de esmeraldas, colocadas muy juntas y que relucían bajo la luz del sol. Las ventanas eran de cristal verde y hasta el cielo de la ciudad y los rayos del sol tenían un tono verdoso. \n\nHabía muchos hombres, mujeres y niños paseando y todos tenían la piel verdosa y vestían ropa verde. Miraban con asombro a Dorothy y a sus extraños acompañantes, y los niños corrían a esconderse detrás de sus madres cuando veían al león, pero nadie les dirigía la palabra. Había también muchas tiendas y Dorothy observó que todo lo que había en ellas era verde. Vendían caramelos y palomitas de maíz verdes y también zapatos, sombreros y todo tipo de ropa del mismo color. En una de ellas, un hombre vendía limonada y Dorothy pudo comprobar que los niños pagaban con monedas verdes. \n\nNo parecía que en aquel lugar hubiese caballos ni animales de ningún tipo, pues los hombres lo transportaban todo empujando pequeños carros de este color. Todos parecían felices, satisfechos y afortunados."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Aceptar"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Almacenamiento USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Tarjeta SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHz no disponible en este país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Modo avión"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificación de red disponible"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Recibir notificación si hay una red pública disponible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Solo conexiones estables"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"No usar una red Wi-Fi a menos que tenga una buena conexión a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Solo usar redes con buena conexión a Internet"</string>
@@ -936,7 +941,7 @@
     <string name="night_display_auto_mode_title" msgid="8046314360381608455">"Activar automáticamente"</string>
     <string name="night_display_auto_mode_never" msgid="6723636142053240947">"Nunca"</string>
     <string name="night_display_auto_mode_custom" msgid="6012300346981608242">"Programación personalizada"</string>
-    <string name="night_display_auto_mode_twilight" msgid="2123345097508167094">"Amanecer/Anochecer"</string>
+    <string name="night_display_auto_mode_twilight" msgid="2123345097508167094">"Amanecer / Anochecer"</string>
     <string name="night_display_start_time_title" msgid="8918016772613689584">"Hora de inicio"</string>
     <string name="night_display_end_time_title" msgid="8286061578083519350">"Hora de finalización"</string>
     <string name="night_display_summary_off" msgid="7009821232380000786">"No. <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Modificar la ubicación de instalación preferida para nuevas aplicaciones"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"¿Inhabilitar aplicación integrada?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Inhabilitar aplicación"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Si inhabilitas esta aplicación, es posible que Android y otras aplicaciones no funcionen correctamente."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"¿Quieres eliminar los datos e inhabilitar la aplicación?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Si inhabilitas esta aplicación, es posible que Android y otras aplicaciones no funcionen correctamente. Tus datos también se eliminarán."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"¿Desactivar notificaciones?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Si desactivas las notificaciones de esta aplicación, es posible que no recibas actualizaciones y alertas importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Tienda"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostrar %d elementos ocultos</item>
       <item quantity="one">Mostrar %d elemento oculto</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Redes e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos conectados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplicaciones y notificaciones"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Cuentas de usuario"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificaciones"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importancia"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Sin definir"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"No mostrar notificaciones nunca"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Sin sonido ni interrupción visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar de forma silenciosa"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir sonido"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir sonido y mostrar en pantalla"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Restablecer"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar de forma silenciosa"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"No emitir sonido, vibrar ni mostrar notificaciones en la pantalla actual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Cargando aplicaciones..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canales"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear todo"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"No mostrar nunca estas notificaciones"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificaciones"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"No mostrar nunca notificaciones en el panel de notificaciones ni en dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar insignia"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostrar notificaciones como insignias en la aplicación Home (si es compatible)"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Priorizar"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"No bloquear notificaciones cuando la opción No molestar esté establecida en Solo prioritarias"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"En la pantalla de bloqueo"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"No volver a mostrar"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitando como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Añadir cuenta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Información del sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Ajustes de perfil de trabajo"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Búsqueda de contactos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permitir que tu organización busque contactos para identificar llamadas y contactos"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Tu informe de errores más reciente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Tu registro de seguridad más reciente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos y vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música y audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Juegos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Otras aplicaciones"</string>
     <string name="storage_files" msgid="8581083146777364063">"Archivos"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Almacenamiento teléfono"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Espacio utilizado: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Espacio disponible: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index c76a4f2..39d8a29 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Näidistekst"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Võlur Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. peatükk: Ozi imeline smaragdlinn"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Kuigi rohelised prillid olid silmade kaitseks ninale asetatud, olid Dorothy ja tema sõbrad esialgu selle imelise linna särast pimestatud. Tänavaid ääristasid ilusad rohelisest marmorist majad, mida kaunistasid säravad smaragdid. Tänavakivid olid samuti rohelisest marmorist ja nende vahel särasid päikesevalguses tihedad smaragdiread. Aknad olid rohelisest klaasist ja isegi taevas linna kohal oli rohekas. Pilvede vahelt piilusid rohelised päikesekiired. \n\nInimesi oli palju – mehed, naised ja lapsed olid kõik rõivastatud rohelisse ning ka nende nahal oli rohekas jume. Nad vaatasid uudistavalt Dorothyt ja tema kummalisi kaaslasi ning lõvi nähes jooksid lapsed oma emade selja taha peitu. Kuid keegi ei rääkinud nendega. Tänaval oli palju poode ja Dorothy märkas, et kõik seal oli roheline. Müügil olid rohelised kommid ja popkorn, rohelised kingad, mütsid ning mitmesugused rõivad. Ühes poekeses müüs kaupmees rohelist limonaadi ja lapsed tasusid selle eest roheliste pennidega. \n\nHobuseid ega muid loomi ei paistnud kusagil. Mehed vedasid asju väikestes rohelistes korvides, mida nad enda ees lükkasid. Kõik näisid rõõmsad, rahulolevad ja jõukad."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-mäluseade"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kaart"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Viga"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz riba pole selles riigis saadaval"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Lennurežiimis"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Võrguteatis"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Teavita, kui avalik võrk on saadaval"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Väldi halbu ühendusi"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ära kasuta WiFi-võrku, kui selle Interneti-ühendus on halb"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Kasuta ainult võrke, millel on hea Interneti-ühendus"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Muutke uute rakenduste eelistatud installiasukohta"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Kas keelata sisseeh. rakendus?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Keela rakendus"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Rakenduse keelamisel ei pruugi Android ja muud rakendused enam ootuspäraselt töötada."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Kas kustutada andmed ja keelata rakendus?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Rakenduse keelamisel ei pruugi Android ja muud rakendused enam ootuspäraselt töötada. Ka teie andmed kustutatakse."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Kas lülitada teatised välja?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Kui lülitate selle rakenduse teatised välja, võivad olulised märguanded ja värskendused märkamata jääda."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Pood"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Kuva %d peidetud üksust</item>
       <item quantity="one">Kuva %d peidetud üksus</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Võrk ja Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Ühendatud seadmed"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Rakendused ja märguanded"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Kasutaja ja kontod"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Märguanded"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Tähtsus"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Määramata"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ära kunagi kuva märguandeid"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Heli ja visuaalne katkestus puudub"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Kuva vaikselt"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Esita heli"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Esita heli ja tõsta märguanne esile"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Lähtesta"</string>
     <string name="show_silently" msgid="2222875799232222056">"Kuva vaikselt"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ära tee heli, vibreeri ega kuva neid märguandeid praeguse ekraani servas."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Rakenduste laadimine ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanalid"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokeeri kõik"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ära kunagi näita neid märguandeid"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Kuva märguanded"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ära kuva märguandeid kunagi märguandealal ega välisseadmetes"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Kuva märk"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Kuva märguanded rakenduses Home märkidena, kui seda toetatakse."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Funktsiooni Mitte segada alistamine"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Lubage nendel märguannetel teid jätkuvalt katkestada, kui funktsioon Mitte segada on määratud valikule Ainult prioriteetsed"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Lukustuskuval"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ära kuva enam"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Taotlemine kasutajana"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Konto lisamine"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Süsteemiteave"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Tööprofiili seaded"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktiotsing"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Lubage organisatsioonile helistajate ja kontaktide tuvastamiseks kontaktiotsingud"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Teie kõige viimane veaaruanne"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Teie hiljutine turvalogi"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Mitte kunagi"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotod ja videod"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muusika ja heli"</string>
     <string name="storage_games" msgid="7703159201697117621">"Mängud"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Muud rakendused"</string>
     <string name="storage_files" msgid="8581083146777364063">"Failid"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefoni salvestusruum"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> on kasutatud"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> on tasuta"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 95a23a5..0be078a 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Testu-lagina"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Ozeko azti miragarria"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. kapitulua: Esmeraldazko Oz hiri harrigarria"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Begiak betaurreko berdeekin babestuta bazituzten ere, Dorothy eta bere lagunak hasieran txundituta geratu ziren Hiri zoragarri haren distirarekin. Kaleak etxe ederrez josita zeuden, marmol berdezkoak eta esmeralda distiratsuz apaindutakoak. Marmol berde hartaz egindako espaloian ibili ziren, eta lauzak elkartzen zituzten ertzak esmeraldazko errenkadak zirela nabaritu zuten, bata bestearen ondoan estu-estu jarriak, eguzkitan dir-dir. Leihoen kristalak berdeak ziren. Hiria estaltzen zuen zeruak kutsu berdea zuen, eta berdeak ziren eguzki-izpiak ere. \n\nJende asko zebilen hara eta hona: gizonak, emakumeak eta haurrak, guztiak berdez jantziak eta azal berdexkakoak. Zalantzaz begiratzen zieten Dorothyri eta bere lagun talde xelebreari, eta haurrak amaren atzean ezkutatzen ziren lehoia ikusi bezain laster. Hala ere, inork ez zien txintik ere esan. Denda asko zeuden kalean, eta salgai guztiak berdeak zirela antzeman zuen Dorothyk. Gozoki berdeak eta krispeta berdeak eros zitezkeen, baita zapata berdeak, kapela berdeak eta askotariko jantzi berdeak ere. Gizon bat limonada berdea saltzen ari zen, eta haur batzuek erosi ziotenean, txanpon berdeekin ordaindu zutela ikusi zuen Dorothyk. \n\nEz zegoen zaldirik edo inolako animaliarik; gizonek orgatxo berdeak bultzatuta eramaten zituzten gauzak batetik bestera. Denak zeuden pozik, alai eta zoriontsu."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Ados"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB memoria"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD txartela"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Errorea"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-ko banda ez dago erabilgarri herrialde honetan"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Hegaldi moduan"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Sare erabilgarrien jakinarazpenak"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Jakinarazi sare publiko bat erabilgarri dagoenean"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Saihestu konexio ahulak"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ez erabili Wi-Fi sareak ez badute Interneteko konexio onik"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Erabili Interneteko konexio ona duten sareak soilik"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Aldatu aplikazio berrien instalazio-kokapen hobetsia"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Aplikazio integratua desgaitu?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desgaitu aplikazioa"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Aplikazioa desgaitzen baduzu, baliteke Android-ek eta beste aplikazio batzuek behar bezala ez funtzionatzea."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Datuak ezabatu eta aplikazioa desgaitu?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Aplikazioa desgaitzen baduzu, baliteke Android-ek beste aplikazio batzuek behar bezala ez funtzionatzea. Datuak ezabatu egingo dira."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Jakinarazpenak desaktibatu nahi dituzu?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Aplikazioaren jakinarazpenak desaktibatzen badituzu, alerta eta eguneratze garrantzitsuak gal ditzakezu."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Denda"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Erakutsi %d elementu ezkutu</item>
       <item quantity="one">Erakutsi %d elementu ezkutu</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Sareak eta Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Konektatutako gailuak"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikazioak eta jakinarazpenak"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Erabiltzailea eta kontuak"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Jakinarazpenak"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Garrantzia"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ezarri gabe"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ez erakutsi jakinarazpenik inoiz"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ez egin soinurik eta ez erakutsi"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Erakutsi soinurik egin gabe"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Egin soinua"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Egin soinua eta erakutsi pantailan"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Berrezarri"</string>
     <string name="show_silently" msgid="2222875799232222056">"Erakutsi soinurik egin gabe"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ez egin soinurik edo dardararik eta ez agerrarazi jakinarazpenak uneko pantailan"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Aplikazioak kargatzen…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanalak"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokeatu guztiak"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ez erakutsi jakinarazpen hauek inoiz"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Erakutsi jakinarazpenak"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ez erakutsi inoiz jakinarazpenak edo ilundutako eremuetan edo gailu osagarrietan"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Erakutsi bereizgarria"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Hasierako pantailan, erakutsi jakinarazpenak bereizgarri gisa, aukera hori onartzen bada."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\"Ez molestatu\" moduaren salbuespenak"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Baimendu jakinarazpenek jarduera etenaraztea \"Ez molestatu\" aukera Lehentasunezkoak soilik gisa ezarrita dagoenean"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Pantaila blokeatuan"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ez erakutsi berriro"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Kontu honen izenean egin da eskaera:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Gehitu kontua"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Sistemari buruzko informazioa"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Laneko profilaren ezarpenak"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktu-bilaketak"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Onartu erakundeko kontaktu-bilaketek deitzaileak eta kontaktuak identifikatzea"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Azken akatsen txostena"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Azken segurtasun-erregistroa"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Inoiz ez"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Argazkiak eta bideoak"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musika eta audioa"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jokoak"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Beste aplikazio batzuk"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fitxategiak"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefonoko memoria"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> erabilita"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> libre"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"%% <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index b48f38f..f6e6347 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"نوشتار نمونه"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"جادوگر شهر اوز"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"فصل ۱۱: شهر زمردی شگفت‌انگیز اوز"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"با وجودی که دورتی و دوستانش عینک‌هایی سبز به چشم داشتند چشمانشان در اولین نگاه از درخشندگی این شهر فوق‌العاده خیره شد. خیابان‌ها با ردیف خانه‌هایی که همه از مرمر سبز ساخته شده بودند و در همه جای آن با زمردهای درخشنده تزئین شده بود می‌درخشید. آنها در پیاده‌رویی از همان مرمر سبز راه می‌رفتند و سنگفرش‌های پیاده‌رو با ردیف‌های زمردی که نزدیک به هم قرار گرفته بودند و در نور خورشید می‌درخشیدند به هم پیوسته بود. قاب‌های پنجره‌ها از شیشه سبز بود؛ حتی آسمان بالای شهر رنگ‌مایه سبز داشت و اشعه خورشید سبزرنگ بود. \n\nمردم زیادی از مرد و زن و بچه در اطراف راه می‌رفتند که همه لباس‌های سبزی پوشیده بودند و پوست بدنشان ته رنگ سبزی داشت. آنها به دوروتی و دوستان عجیبش با تعجب نگاه می‌کردند. بچه‌ها به‌محض دیدن شیر همه فرار کردند و پشت سر مادرانشان پنهان شدند؛ اما هیچ‌کس با آنها صحبت نکرد. تعداد زیادی مغازه در خیابان بود و دوروتی متوجه شد که همه‌چیز در این مغازه‌ها به رنگ سبز است. آبنبات سبز و پف فیل سبز برای فروش گذاشته شده بود، همین‌طور همه مدل کفش، کلاه و لباس که همه به رنگ سبز بودند. در جایی مردی لیموناد سبز می‌فروخت و وقتی بچه‌ها از او خرید می‌کردند دوروتی دید که پول آن را با سکه‌هایی سبزرنگ پرداختند. \n\nبه‌نظر می‌رسید که اسب یا حیوان دیگری در آنجا نیست؛ مردها چیزها را با گاری‌های کوچک سبزی به این طرف و آن طرف حمل می‌کردند و گاری را در جلوشان هل می‌دادند. به‌نظر می‌رسید همه شاد و راضی و مرفه بودند."</string>
     <string name="font_size_save" msgid="3450855718056759095">"تأیید"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"‏حافظهٔ USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"‏کارت SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"خطا"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"باند ۵ گیگاهرتزی در این کشور در دسترس نیست"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"در حالت هواپیما"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"اعلان شبکه"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"زمانی که یک شبکه عمومی در دسترس است، اطلاع داده شود"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"اجتناب از اتصالات ضعیف"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"‏از شبکه Wi-Fi استفاده نکنید، مگر آنکه اتصال اینترنتی مناسب باشد"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"فقط از شبکه‌هایی استفاده می‌شود که اتصال اینترنتی خوبی دارند"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"تغییر مکان نصب دلخواه برای برنامه‌های جدید"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"برنامه داخلی غیرفعال شود؟"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"غیرفعال کردن برنامه"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"‏اگر این برنامه را غیرفعال کنید، ممکن است Android و سایر برنامه‌ها دیگر عملکرد موردانتظار را نداشته باشند."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"حذف داده‌ها و غیرفعال کردن برنامه؟"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"‏اگر این برنامه را غیرفعال کنید، ممکن است Android و سایر برنامه‌ها دیگر عملکرد موردانتظار را نداشته باشند. داده‌هایتان نیز حذف می‌شود."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"خاموش کردن اعلان‌ها؟"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"اگر اعلانی را برای این برنامه خاموش کنید، ممکن است هشدارها و به‌روزرسانی‌های مهم را از دست بدهید."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"فروشگاه"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">‏نمایش %d مورد پنهان</item>
       <item quantity="other">‏نمایش %d مورد پنهان</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"شبکه و اینترنت"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"دستگاه‌های متصل"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"برنامه‌ها و اعلان‌ها"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"حساب‌های کاربر"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"اعلان‌ها"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"اهمیت"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"تنظیم نشده"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"هرگز اعلان‌ها نمایش داده نشوند"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"بدون وقفه صوتی و تصویری"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"نمایش به‌صورت بی‌صدا"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"پخش صدا"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"پخش صدا و صفحه بازشو"</string>
     <string name="importance_reset" msgid="7458420788555607007">"بازنشانی"</string>
     <string name="show_silently" msgid="2222875799232222056">"نمایش به‌صورت بی‌صدا"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"بدون صدا و لرزش یا نمایش این اعلان‌ها در صفحه‌نمایش کنونی."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"در حال بارگیری برنامه..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"کانال‌ها"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"مسدود کردن همه"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"هرگز این اعلان‌ها نشان داده نشوند"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"نمایش اعلان‌ها"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"هرگز اعلان‌ها در کشوی اعلانات یا در دستگاه‌های جانبی نشان داده نشوند"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"نمایش نشان"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"نمایش اعلان‌ها به‌صورت نشان در برنامه «اصلی»، درصورتی که پشتیبانی شود."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"لغو «مزاحم نشوید»"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"به این اعلان‌ها اجازه داده شود در شرایطی که «مزاحم نشوید» روی «فقط اولویت‌دار» تنظیم شده است، همچنان وقفه ایجاد کنند"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"در قفل صفحه"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"دیگر نشان داده نشود"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"درخواست به‌عنوان"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"افزودن حساب"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"اطلاعات سیستم"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"تنظیمات نمایه کاری"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"جستجوی مخاطب"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"جستجوهای مخاطب توسط سازمانتان برای شناسایی تماس‌گیرندگان و مخاطبین مجاز است"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"جدیدترین گزارش اشکال شما"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"جدیدترین گزارش امنیت شما"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"هرگز"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"عکس و ویدیو"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"موسیقی و صوتی"</string>
     <string name="storage_games" msgid="7703159201697117621">"بازی‌ها"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"سایر برنامه‌ها"</string>
     <string name="storage_files" msgid="8581083146777364063">"فایل‌ها"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"فضای ذخیره‌سازی تلفن"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> استفاده‌شده"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> آزاد"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>٪٪"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 0043196..1388cec 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Esimerkkiteksti"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Ihmemaa Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Luku 11: Ozin ihastuttava smaragdikaupunki"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Vihreistä silmälaseista huolimatta kaupungin loiste sokaisi aluksi Dorothyn ja ystävät. Teiden varsilla oli kauniita, vihreästä marmorista rakennettuja ja smaragdein koristeltuja taloja. Jalkakäytävä heidän jalkojensa alla oli samaa vihreää marmoria. Laattojen välissä oli tiiviissä riveissä smaragdeja, jotka kimmelsivät auringonpaisteessa. Ikkunaruudut olivat vihreää lasia, kaupungin yllä kaartuva taivas vihersi ja jopa auringon säteet olivat vihreitä.\n\nKaduilla käveli vihreään pukeutuneita ihmisiä, joiden iho oli vihreänsävyinen. He katsoivat Dorothya ja hänen seuralaisiaan hämmästellen. Leijonan nähdessään lapset piiloutuivat äitinsä taakse, mutta kukaan ei sanonut muukalaisille mitään. Kadun varrella oli monia kauppoja, joiden ikkunoissa Dorothy näki pelkästään vihreitä tuotteita. Myytävänä oli vihreitä makeisia, popkornia, kenkiä, hattuja ja kaikenlaisia vaatteita. Yhdessä liikkeessä myytiin vihreää limonadia. Dorothy huomasi, että lapset ostivat limonadia vihreillä penneillä.\n\nKaupungissa ei näkynyt hevosia tai muita eläimiä: tavaroita kuljetettiin pienillä vihreillä työnnettävillä kärryillä. Kaikki ihmiset vaikuttivat onnellisilta ja vaurailta."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-tallennustila"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kortti"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Virhe"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz:n kaista ei ole käytettävissä tässä maassa."</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Lentokonetilassa"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Verkkoilmoitus"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Ilmoita käytettävissä olevista julkisista verkoista"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Vältä huonoja yhteyksiä"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Älä käytä Wi-Fi-verkkoa, jos sillä on huono internetyhteys"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Käytä vain verkkoja, joiden yhteyslaatu on hyvä"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Vaihda uusien sovelluksien ensisijaista asennussijaintia."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Poista sis. sovellus käytöstä?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Poista sovellus käytöstä"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Jos poistat sovelluksen käytöstä, Android ja muut sovellukset eivät välttämättä enää toimi oikein."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Poistetaanko tiedot ja poistetaanko sovellus käytöstä?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Jos poistat sovelluksen käytöstä, Android ja muut sovellukset eivät välttämättä enää toimi oikein. Lisäksi tietosi poistetaan."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Poista ilmoitukset käytöstä?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Jos poistat tämän sovelluksen ilmoitukset käytöstä, et välttämättä näe tärkeitä ilmoituksia ja päivityksiä."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Kauppa"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Näytä %d piilotettua kohdetta</item>
       <item quantity="one">Näytä %d piilotettu kohde</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Verkko ja internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Yhdistetyt laitteet"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Sovellukset ja ilmoitukset"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Käyttäjä ja tilit"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Ilmoitukset"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Tärkeys"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ei määritetty"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Älä näytä ilmoituksia"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ei ääntä tai näkyvää ilmoitusta"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Näkyy ilman ääntä"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Ääni"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Ääni, ilmoitus näkyy näytöllä"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Nollaa"</string>
     <string name="show_silently" msgid="2222875799232222056">"Näytä ilman ääntä"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ilmoitus ei tule aktiiviselle näytölle eikä salli ääniä tai värinää."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Ladataan sovelluksia…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanavat"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Estä kaikki"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Älä koskaan näytä näitä ilmoituksia"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Näytä ilmoitukset"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Älä näytä ilmoituksia ilmoitusalueella tai lisälaitteissa"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Näytä merkki"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Näytä ilmoitukset merkkeinä Home-sovelluksessa, jos tätä tuetaan."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ohita Älä häiritse -asetus"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Salli ilmoituksien näyttö, vaikka Älä häiritse -asetus on Vain tärkeät."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Lukitusnäytöllä"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Älä näytä uudelleen"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Pyytäjä"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Lisää tili"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Järjestelmätiedot"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Työprofiilin asetukset"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Yhteystietohaku"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Salli organisaatiosi yhteystietohakujen tunnistaa soittajia ja yhteystietoja."</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Viimeisin vikailmoituksesi"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Viimeisin tietoturvaloki"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Ei koskaan"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Kuvat ja videot"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musiikki ja audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Pelit"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Muut sovellukset"</string>
     <string name="storage_files" msgid="8581083146777364063">"Tiedostot"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Puhelimen tallennustila"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> käytössä"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> vapaana"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 6d25fc1..165d9b0 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erreur"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"La bande de 5 GHz n\'est pas disponible dans ce pays"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"En mode Avion"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notification de réseau"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Me notifier lorsqu\'un réseau public est disponible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Éviter les connexions instables"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne pas utiliser de réseau Wi-Fi, sauf en cas de connexion Internet de bonne qualité"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"N\'utiliser que réseaux dotés d\'une connexion Internet stable"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Votre rapport de bogue le plus récent"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Votre journal de sécurité le plus récent"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Jamais"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Photos et vidéos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musique et audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jeux"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Autres applications"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fichiers"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Stockage du téléphone"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Espace utilisé : <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Espace libre : <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <!-- format error in translation for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 526e21d..37ff883 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Exemple de texte"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Le Magicien d\'Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Chapitre 11 : La merveilleuse cité d\'émeraude"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Malgré leurs lunettes vertes, Dorothée et ses amis, au début, furent éblouis par l\'éclat de la Cité merveilleuse. Les rues étaient bordées de maisons splendides, toutes de marbre vert et incrustées d\'émeraudes étincelantes. Ils marchaient sur une chaussée du même marbre, et la jointure des dalles était sertie de rangs serrés d\'émeraudes qui resplendissaient au soleil. Les carreaux aux fenêtres étaient verts, le ciel au-dessus de la Cité avait une teinte verte, et le soleil lui-même lançait des rayons verts. \n\nBeaucoup de gens déambulaient dans les rues, hommes, femmes et enfants ; tous étaient vêtus de vert et avaient le teint verdâtre. Étonnés, ils dévisageaient Dorothée et son étrange escorte, les enfants couraient se cacher derrière leurs mères à la vue du Lion ; mais personne ne leur adressait la parole. Il y avait de nombreuses boutiques et Dorothée remarqua que tout y était vert à l\'intérieur. Tout ce qu\'on y vendait était vert : le sucre candi et le pop-corn, les souliers, les chapeaux et les habits. Dans une boutique, un homme vendait de la limonade verte et Dorothée vit que les enfants payaient avec des sous verts. \n\nIl semblait n\'y avoir ni chevaux, ni animaux d\'aucune espèce ; les hommes transportaient diverses choses dans de petites charrettes vertes qu\'ils poussaient devant eux. Tout le monde avait un air heureux et satisfait, et chacun respirait la prospérité."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Mémoire de stockage USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Carte SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erreur"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Bande 5 GHz non disponible dans ce pays."</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"En mode Avion"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notification de réseau"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Me notifier lorsqu\'un réseau public est disponible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Éviter les connexions instables"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne pas utiliser de réseau Wi-Fi, sauf en cas de connexion Internet de bonne qualité"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"N\'utiliser que réseaux dotés d\'une connexion Internet stable"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Modifier l\'emplacement d\'installation par défaut pour les nouvelles applications"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Désactiver l\'appli intégrée ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Désactiver l\'application"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Si vous désactivez cette application, il est possible qu\'Android et d\'autres applications ne fonctionnent plus comme prévu."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Supprimer les données et désactiver l\'application ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Si vous désactivez cette application, il est possible qu\'Android et d\'autres applications ne fonctionnent plus comme prévu. Vos données seront également supprimées."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Désactiver les notifications ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Si vous désactivez les notifications de cette application, vous risquez de manquer des alertes et des mises à jour importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Boutique"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Afficher %d élément masqué</item>
       <item quantity="other">Afficher %d éléments masqués</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Réseau et Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Appareils connectés"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Applications et notifications"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Utilisateur et comptes"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notifications"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importance"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Non défini"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ne jamais afficher les notifications"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Aucune interruption sonore ni visuelle"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Affichage silencieux"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Alerte sonore"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Alerte sonore et affichage à l\'écran"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Réinitialiser"</string>
     <string name="show_silently" msgid="2222875799232222056">"Affichage silencieux"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ne pas émettre de son, activer le vibreur ni afficher ces notifications sur l\'écran actif."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Chargement des applications en cours…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Chaînes"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Tout bloquer"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ne jamais afficher ces notifications"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Afficher les notifications"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ne jamais afficher les notifications dans le volet ou sur les périphériques"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Afficher un badge"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Afficher les notifications sous forme de badges dans l\'application Google Home (si disponible)."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ignorer l\'option \"Ne pas déranger\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Autoriser les interruptions par ces notifications lorsque l\'option \"Ne pas déranger\" est définie sur \"Prioritaires uniquement\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Sur l\'écran de verrouillage"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne plus afficher"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Demande envoyée depuis le compte"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Ajouter un compte"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informations système"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Paramètres du profil professionnel"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Recherche de contacts"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Autoriser les recherches de contacts dans votre organisation à identifier les appelants et les contacts"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Votre dernier rapport de bug"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Votre dernier journal de sécurité"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Jamais"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Photos et vidéos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musique et audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jeux"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Autres applications"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fichiers"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Espace stockage téléphone"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Espace utilisé : <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Espace libre : <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 96a80a3..71fda29 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Texto de mostra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"O marabilloso mago de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: A marabillosa Cidade Esmeralda de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Ao principio, aínda cos ollos protexidos polas lentes verdes, Dorothy e os seus amigos quedaron cegados polo brillo daquela marabillosa cidade. As rúas estaban formadas por preciosas casas construídas con mármore verde e todo estaba salpicado de relucentes esmeraldas. Pasearon por un camiño de mármore verde cuxas placas se unían con fileiras de esmeraldas, colocadas moi xuntas e que relucían baixo a luz do sol. As ventás tiñan cristal verde e ata o ceo e os raios do sol tiraban a verde. \n\nHabía moitos homes, mulleres e nenos paseando e todos tiñan a pel verdosa e vestían roupa verde. Miraban con asombro a Dorothy e os seus estraños acompañantes, e os nenos corrían a esconderse detrás das súas nais cando vían o león, pero ninguén lles dirixía a palabra. Había tamén moitas tendas e Dorothy observou que todo o que había nelas era verde. Vendían caramelos e flocos de millo verdes, así como zapatos, chapeus e todo tipo de roupa da mesma cor. Nunha delas, un home vendía limoada verde e Dorothy puido comprobar que os nenos pagaban con moedas verdes. \n\nNon parecía que naquel lugar houbese cabalos nin animais de ningún tipo, pois os homes transportábano todo tirando de pequenos carros desta cor. Todos parecían felices, satisfeitos e afortunados."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Aceptar"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Almacenamento USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Tarxeta SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erro"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"A banda de 5 GHz non está dispoñible neste país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"No modo avión"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificación de rede"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notifica se unha rede pública está dispoñible"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitar conexións deficientes"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Non utilizar unha rede wifi se non ten unha boa conexión a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Usa só redes que teñan unha boa conexión a Internet"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Cambia a localización de instalación preferida para as aplicacións novas"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Desactivar app integrada?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desactivar aplicación"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Se desactivas esta aplicación, é posible que Android e outras aplicacións deixen de funcionar segundo o previsto."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Queres borrar datos e desactivar a aplicación?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Se desactivas esta aplicación, é posible que Android e outras aplicacións deixen de funcionar segundo o previsto. Tamén se eliminarán os teus datos."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Desactivar as notificacións?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Se desactivas as notificacións desta aplicación, é posible que perdas alertas e actualizacións importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Tenda"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostrar %d elementos ocultos</item>
       <item quantity="one">Mostrar %d elemento oculto</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rede e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos conectados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplicacións e notificacións"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Usuario e contas"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificacións"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importancia"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Sen especificar"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Non mostra nunca as notificacións"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Nin son nin interrupción visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar en silencio"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir son"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir son e aparecer na pantalla"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Restablecer"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar en silencio"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Non emitir son, vibrar nin mostrar estas notificacións na pantalla actual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Cargando aplicacións..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canles"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear todo"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Non mostrar nunca estas notificacións"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificacións"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Non mostra nunca as notificacións no menú despregable da parte superior da pantalla nin en dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar insignia"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostra as notificacións como insignias na aplicación de Inicio, se é compatible."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Anular opción Non molestar"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permitir que estas notificacións sigan interrompendo cando a opción Non molestar estea configurada como Só prioridade"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na pantalla de bloqueo"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Non mostrar de novo"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitando como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Engadir conta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Información do sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configuración do perfil de traballo"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Busca de contactos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permite buscas de contactos por parte da túa organización para identificar os emisores das chamadas e os contactos"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"O teu informe de erros máis recente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"O teu rexistro de seguranza máis recente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos e vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música e audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Xogos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Outras aplicacións"</string>
     <string name="storage_files" msgid="8581083146777364063">"Ficheiros"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Almacenamento do teléfono"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Espazo utilizado: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> gratis"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 2542b1f..56c2fc8 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"નમૂના ટેક્સ્ટ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ઓઝીનું અદ્ભુત જાદુ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"અધ્યાય 11: ઓઝીનું નીલમનું અદ્ભુત શહેર"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"લીલા રંગના ચશ્મા પહેરેલ હોવા છતાં પણ ડોરોથી અને તેના મિત્રો આ અદ્ભુત શહેરના ભપકાદાર દેખાવથી આશ્ચર્યચકિત થઈ ગયાં હતાં. લીલા રંગના માર્બલથી બનેલ સુંદર ઘર શેરીમાં એક હરોળમાં ઉભા હતાં અને તે ચમકતાં નીલમથી જડિત હતાં. તેઓ એ જ લીલા માર્બલ પર ચાલવા લાગ્યાં, જ્યાં પાસે-પાસે રાખેલા બ્લૉક્સ એકબીજાથી જોડાઈ રહ્યાં હતાં અને તે નીલમની હરોળ હતી અને તે સૂરજની ચમકમાં ચમકી રહ્યાં હતાં. બારીઓના કાંચ લીલા રંગના હતાં; શહેરના ઉપરના આકાશની રંગછટા પણ લીલી હતી અને સૂર્યની કિરણો પણ લીલા રંગની હતી. \n\nત્યાં ઘણા લોકો, પુરુષો, સ્ત્રીઓ અને બાળકો ચાલી રહ્યાં હતાં અને આ બધાએ લીલા રંગના કપડાં પહેરેલા હતાં અને તેમની ત્વચા પણ લીલા રંગની હતી. તેઓએ ડોરોથી અને તેના વિચિત્ર  મિત્રોની તરફ વિસ્મય પામેલ નજરોથી જોયું અને જ્યારે બાળકોએ સિંહને જોયો તો તે બધા ત્યાંથી ભાગી ગયાં અને તેમની માતાની પાછળ જઈને સંતાઈ ગયાં; પણ કોઈએ તેનાથી વાત ન કરી. શેરીમાં કેટલીક દુકાનો હતી અને ડોરોથી એ જોયું કે ત્યાં બધું જ લીલા રંગનું હતું. લીલી કૅન્ડી અને લીલા પૉપ-કોર્ન વેચાઈ રહ્યાં હતાં, તેમજ લીલા જૂતાં, લીલી ટોપીઓ અને બધી જાતના લીલી કપડાં. એક જગ્યાએ એક માણસ લીલા રંગનું શરબત વેચી રહ્યો હતો અને જ્યારે બાળકોએ તેને ખરીદ્યું ત્યારે ડોરોથી એ જોયું કે તેઓએ તેના માટે લીલા રંગના સિક્કા આપ્યાં. \n\nત્યાં કોઈપણ ઘોડા કે કોઈપણ પ્રકારના પ્રાણી ન હતાં; માણસો તેમની સામે નાના લીલા ગાડામાં સામાન અહીંથી ત્યાં લઈ જઈ રહ્યાં હતાં. પ્રત્યેક જણ ખુશ, સંતુષ્ટ અને સમૃદ્ધ લાગી રહ્યાં હતાં."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ઓકે"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB સંગ્રહ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD કાર્ડ"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ભૂલ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"આ દેશમાં 5 GHz બેન્ડ ઉપલબ્ધ નથી"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"એરપ્લેન મોડમાં"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"નેટવર્ક સૂચના"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"જ્યારે પણ જાહેર નેટવર્ક ઉપલબ્ધ હોય ત્યારે સૂચિત કરો"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"નબળા જોડાણો ટાળો"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"જ્યાં સુધી સારું ઇન્ટરનેટ કનેક્શન ન ધરાવતું હોય ત્યાં સુધી Wi‑Fi નેટવર્કનો ઉપયોગ કરશો નહીં"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ફક્ત સારું ઇન્ટરનેટ કનેક્શન ધરાવતા નેટવર્ક્સનો જ ઉપયોગ કરો"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"નવી એપ્લિકેશન્શ માટે પસંદગીનું ઇન્સ્ટોલેશન સ્થાન બદલો"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"બિલ્ટ-ઇન ઍપ્લિકેશન અક્ષમ કરીએ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ઍપ્લિકેશન અક્ષમ કરો"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"જો તમે આ ઍપ્લિકેશન અક્ષમ કરો છો, તો Android અને અન્ય ઍપ્લિકેશનો અપેક્ષા પ્રમાણે કાર્ય કરી શકશે નહીં."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ડેટાને કાઢી નાખી અને એપ્લિકેશનને અક્ષમ કરીએ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"જો તમે આ ઍપ્લિકેશન અક્ષમ કરો છો, તો Android અને અન્ય ઍપ્લિકેશનો અપેક્ષા પ્રમાણે કાર્ય કરી શકશે નહીં. તમારો ડેટા પણ કાઢી નાખવામાં આવશે."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"સૂચનાઓ બંધ કરીએ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"જો તમે આ ઍપ્લિકેશન માટે સૂચનાઓ બંધ કરો, તો મહત્વપૂર્ણ ચેતવણીઓ અને અપડેટ્સ ચૂકી શકો છો."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"દુકાન"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%d છુપાયેલ આઇટમ બતાવો</item>
       <item quantity="other">%d છુપાયેલ આઇટમ બતાવો</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"નેટવર્ક અને ઇન્ટરનેટ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"કનેક્ટ થયેલ ઉપકરણો"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ઍપ્લિકેશનો અને સૂચનાઓ"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"વપરાશકર્તા અને એકાઉન્ટ્સ"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"સૂચનાઓ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"મહત્વ"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"સેટ નથી"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"સૂચનાઓ ક્યારેય બતાવશો નહીં"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"કોઈ અવાજ અથવા વિઝ્યુઅલ અવરોધ નહીં"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"ચુપચાપ બતાવો"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"અવાજ કરો"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"અવાજ કરો અને સ્ક્રીન પર બતાવો"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ફરીથી સેટ કરો"</string>
     <string name="show_silently" msgid="2222875799232222056">"ચુપચાપ બતાવો"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"વર્તમાન સ્ક્રીન પર દૃશ્યમાં આ સૂચનાઓને અવાજ કરવા, વાઇબ્રેટ કરવા કે ઝબકારારૂપે દેખાવા દેશો નહીં."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"ઍપ્લિકેશનો લોડ કરી રહ્યું છે..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ચૅનલ્સ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"તમામને અવરોધિત કરો"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"આ સૂચનાઓ ક્યારેય બતાવશો નહીં"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"સૂચનાઓ બતાવો"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"સૂચનાઓ ક્યારેય શૅડમાં અથવા પેરિફેરલ ઉપકરણો પર બતાવશો નહીં"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"બૅજ બતાવો"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"હોમ ઍપ્લિકેશન પર બૅજ તરીકે સૂચનાઓ બતાવો, જો સમર્થિત હોય."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ખલેલ પાડશો નહીં ને ઓવરરાઇડ કરો"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"જયારે ખલેલ પાડશો નહીં ને માત્ર પ્રાધાન્યતા પર સેટ કરેલું હોય ત્યારે આ સૂચનાઓને દખલગીરી કરવા દો"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"લૉક સ્ક્રીન પર"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"ફરી બતાવશો નહીં"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"આ તરીકે વિનંતી કરી રહ્યું છે"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"એકાઉન્ટ ઉમેરો"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"સિસ્ટમ માહિતી"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"કાર્ય પ્રોફાઇલ સેટિંગ્સ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"સંપર્ક શોધ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"કૉલર્સ અને સંપર્કોને ઓળખવા માટે તમારી સંસ્થા દ્વારા સંપર્ક શોધની મંજૂરી આપો"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"તમારી સૌથી તાજેતરની બગ રિપોર્ટ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"તમારો સૌથી તાજેતરનો સુરક્ષા લૉગ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ક્યારેય નહીં"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ફોટા અને વિડિઓઝ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"સંગીત અને ઑડિઓ"</string>
     <string name="storage_games" msgid="7703159201697117621">"રમતો"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"અન્ય ઍપ્લિકેશનો"</string>
     <string name="storage_files" msgid="8581083146777364063">"ફાઇલો"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ફોન સ્ટોરેજ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ઉપયોગમાં લેવાયું"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ખાલી"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index a1a1494..d2f6c65 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -86,7 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"नमूना लेख"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ओज़ का अद्भुत जादू"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"अध्याय 11: ओज़ का अद्भुत पन्ने का शहर"</string>
-    <string name="font_size_preview_text_body" msgid="2846183528684496723">"हरे रंग के चश्मे पहने हुए भी डॉरथी और उसके दोस्त इस अद्भुत शहर की चकाचौंध से चकित थे. हरे रंग के मार्बल से बने खूबसूरत घर सड़कों के किनारे कतार में खड़े थे और उन पर चमचमाते पन्ने जड़े हुए थे. वे उसी हरे रंग के मार्बल पर चलने लगे, जहां पास-पास रखे गए ब्लॉक आपस में जुड़ रहे थे वे पन्ने की कतारें थीं और सूरज की चमक से चमचमा रही थीं. जहां खिड़कियों के शीशे हरे रंग के थे; यहां तक की शहर के ऊपर छाया आसमान भी हरा रंग लिए था, और सूरज की किरणें भी हरी थीं. \n\nवहां कई लोग थे, महिलाएं, पुरुष और बच्चे, और वे सभी हरे रंग के कपड़े पहने हुए थे और उनकी त्वचा भी हरे रंग की थी. उन्होंने डॉरथी और उसके अजीबो-गरीब दोस्तों की ओर अचरज भरी नज़रों से देखा, और जब बच्चों ने शेर को देखा तो वे सभी वहां से भाग खड़े हुए और अपनी मां के पीछे जाकर छिप गए; लेकिन किसी ने भी उनसे बात नहीं की. सड़क पर कई दुकानें थीं और डॉरथी ने देखा कि वहां सब कुछ हरा था. हरी कैंडी और हरे पॉप-कॉर्न बिक रहे थे, साथ ही हरे जूते, हरी टोपियां और सभी तरह के हरे कपड़े भी. एक जगह पर एक आदमी हरे रंग के नींबू का शरबत बेच रहा था और जब बच्चों ने उसे खरीदा तो डॉरथी ने देखा कि उन्होंने उसके लिए हरे रंग के सिक्के दिए. \n\nवहां कोई भी घोड़ा या किसी भी तरह का कोई जानवर नहीं था; आदमी उनके सामने से हरे रंग की गाड़ियों में यहां-वहां सामान ले जा रहे थे. हर कोई खुश, संतुष्ट और समृद्ध नज़र आ रहा था."</string>
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"हरे रंग के चश्मे पहने हुए भी डॉरथी और उसके दोस्त इस अद्भुत शहर की चकाचौंध से चकित थे. हरे रंग के संगमरमर से बने खूबसूरत घर सड़कों के किनारे कतार में खड़े थे और उन पर चमचमाते पन्ने जड़े हुए थे. वे उसी हरे रंग के संगमरमर पर चलने लगे, जहां पास-पास रखे गए ब्लॉक आपस में जुड़ रहे थे वे पन्ने की कतारें थीं और सूरज की चमक से चमचमा रही थीं. जहां खिड़कियों के शीशे हरे रंग के थे; यहां तक की शहर के ऊपर छाया आसमान भी हरा रंग लिए था, और सूरज की किरणें भी हरी थीं. \n\nवहां कई लोग थे, महिलाएं, पुरुष और बच्चे, और वे सभी हरे रंग के कपड़े पहने हुए थे और उनकी त्वचा भी हरे रंग की थी. उन्होंने डॉरथी और उसके अजीबो-गरीब दोस्तों की ओर अचरज भरी नज़रों से देखा, और जब बच्चों ने शेर को देखा तो वे सभी वहां से भाग खड़े हुए और अपनी मां के पीछे जाकर छिप गए; लेकिन किसी ने भी उनसे बात नहीं की. सड़क पर कई दुकानें थीं और डॉरथी ने देखा कि वहां सब कुछ हरा था. हरी कैंडी और हरे पॉप-कॉर्न बिक रहे थे, साथ ही हरे जूते, हरी टोपियां और सभी तरह के हरे कपड़े भी. एक जगह पर एक आदमी हरे रंग वाला नींबू का शरबत बेच रहा था और जब बच्चों ने उसे खरीदा तो डॉरथी ने देखा कि उन्होंने उसके लिए हरे रंग के सिक्के दिए. \n\nवहां कोई भी घोड़ा या किसी भी तरह का कोई जानवर नहीं था; आदमी उनके सामने से हरे रंग की गाड़ियों में यहां-वहां सामान ले जा रहे थे. हर कोई खुश, संतुष्ट और समृद्ध नज़र आ रहा था."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ठीक है"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB मेमोरी"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD कार्ड"</string>
@@ -657,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"बंद"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"अनुपलब्‍ध है क्‍योंकि NFC बंद है"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"इस सुविधा के चालू होने पर, आप ऐप्लिकेशन की सामग्री को किसी दूसरे NFC-सक्षम डिवाइस पर बीम कर सकते हैं, जिसके लिए आपको दोनों डिवाइस पास-पास पकड़कर रखने होंगे. उदाहरण के लिए, आप वेब पेज, YouTube वीडियो, संपर्कों आदि को बीम कर सकते हैं.\n\nबस दोनों डिवाइस को साथ लाएं (आमतौर एक के पीछे एक) और फिर अपनी स्क्रीन टैप करें. ऐप्लिकेशन पता लगा लेता है कि कौन सी चीज़ बीम हो रही है."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"इस सुविधा के चालू होने पर, आप ऐप्लिकेशन की सामग्री को किसी दूसरे NFC-सक्षम डिवाइस पर बीम कर सकते हैं, जिसके लिए आपको दोनों डिवाइस पास-पास पकड़कर रखने होंगे. उदाहरण के लिए, आप वेब पेज, YouTube वीडियो, संपर्कों आदि को बीम कर सकते हैं.\n\nबस दोनों डिवाइस साथ लाएं (आमतौर एक के पीछे एक) और फिर अपनी स्क्रीन टैप करें. ऐप्लिकेशन पता लगा लेता है कि कौन सी चीज़ बीम हो रही है."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"वाई-फ़ाई"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"वाई-फ़ाई  चालू करें"</string>
     <string name="wifi_settings" msgid="29722149822540994">"वाई-फ़ाई"</string>
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"त्रुटि"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz बैंड इस देश में उपलब्‍ध नहीं है"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"हवाई जहाज़ मोड में"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"नेटवर्क नोटिफिकेशन"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"सार्वजनिक नेटवर्क उपलब्ध होने पर सूचित करें"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"खराब कनेक्‍शन से बचें"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"जब तक वाई-फ़ाई  नेटवर्क में अच्छा इंटरनेट कनेक्‍शन न हो, तब तक उसका उपयोग न करें"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"उन्हीं नेटवर्क का उपयोग करें जिनमें अच्छा इंटरनेट कनेक्शन है"</string>
@@ -1535,9 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"नए ऐप्स के लिए पसंदीदा इंस्‍टॉलेशन स्‍थान बदलें"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"अंतर्निहित ऐप्स अक्षम करें?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ऐप को अक्षम करें"</string>
-    <string name="app_disable_dlg_text" msgid="5632072173181990531">"अगर आप इस ऐप्लिकेशन को अक्षम करते हैं, तो हो सकता है कि Android और दूसरे ऐप्लिकेशन लक्षित रूप से काम ना कर पाएं."</string>
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"अगर आप इस ऐप्लिकेशन को अक्षम करते हैं, तो हो सकता है कि Android और दूसरे ऐप्लिकेशन अपेक्षित रूप से काम ना कर पाएं."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"डेटा हटाएं और ऐप्स  को अक्षम करें?"</string>
-    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"यदि आप इस ऐप्लिकेशन को अक्षम करते हैं, तो हो सकता है कि दूसरे ऐप्लिकेशन लक्षित रूप से काम ना कर पाएं. आपका डेटा भी हटा दिया जाएगा."</string>
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"यदि आप इस ऐप्लिकेशन को अक्षम करते हैं, तो हो सकता है कि दूसरे ऐप्लिकेशन अपेक्षित रूप से काम ना कर पाएं. आपका डेटा भी हटा दिया जाएगा."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"नोटिफिकेशन बंद करें?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"यदि आप इस ऐप्स के लिए नोटिफिकेशन बंद करते हैं, तो आप महत्‍वपूर्ण अलर्ट और नई जानकारी खो देंगे."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"स्टोर"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"आपकी हाल ही की बग रिपोर्ट"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"आपका हाल ही का सुरक्षा लॉग"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"कभी नहीं"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"फ़ोटो और वीडियो"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"संगीत और ऑडियो"</string>
     <string name="storage_games" msgid="7703159201697117621">"गेम"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"अन्य ऐप्लिकेशन"</string>
     <string name="storage_files" msgid="8581083146777364063">"फ़ाइलें"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"फ़ोन की जगह"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> उपयोग किया गया"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> खाली है"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b03732a..cd24536 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Primjer teksta"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čarobnjak iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. poglavlje: Čudesni Smaragdni Grad čarobnjaka Oza"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Čak i sa zelenim naočalama koje su im štitile oči Dorothy i njezini prijatelji isprva su bili zaslijepljeni sjajem prekrasnoga Grada. Ulicama su se nizale predivne kuće sve izgrađene od zelenog mramora i cijele optočene svjetlucavim smaragdima. Hodali su pločnikom od istog zelenog mramora, a na mjestima gdje su se kameni blokovi spajali nalazili su se redovi gusto postavljenih smaragda koji su svjetlucali na jarkom suncu. Prozori su bili od zelenog stakla, a čak je i nebo iznad Grada imalo zeleni odsjaj i sunčeve su zrake bile zelene boje. \n\nNa ulicama je bilo mnogo ljudi, muškaraca, žena i djece, i svi su bili odjeveni u zeleno i imali zelenkastu put. S čuđenjem su gledali Dorothy i njezinu neobičnu, šaroliku pratnju i sva su se djeca sakrila iza svojih majki kada su ugledala Lava, no nitko im se nije obratio. Mnoge su trgovine bile otvorene na ulicu i Dorothy je mogla vidjeti kako je u njima sve zeleno. Prodavali su se zeleni slatkiši i zelene kokice, kao i zelene cipele, zeleni šeširi i zelena odjeća svakojake vrste. Na jednom je mjestu jedan čovjek prodavao zelenu limunadu, a kad ju je koje dijete kupilo, Dorothy je mogla vidjeti kako je plaća zelenim novčićima. \n\nČinilo se da nije bilo konja niti koje druge životinje, a ljudi su naokolo vozili stvari u malim zelenim kolicima koja su gurali ispred sebe. Svi su se činili sretnima, zadovoljnima i uspješnima."</string>
     <string name="font_size_save" msgid="3450855718056759095">"U redu"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Memorija USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kartica"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Pogreška"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"U ovoj zemlji nije dostupna frekvencija od 5 GHz"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"U načinu rada u zrakoplovu"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Mrežna obavijest"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Obavijesti uvijek kada je dostupna javna mreža"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Izbjegavati slabe veze"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne upotrebljavaj Wi-Fi mrežu ako internetska veza nije zadovoljavajuća"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Koristi samo mreže s dobrom internetskom vezom"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Promijenite željenu lokaciju instalacije za nove aplikacije."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Onemogući ugrađenu aplikaciju?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Onemogući aplikaciju"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ako onemogućite tu aplikaciju, Android i druge aplikacije možda više neće funkcionirati pravilno."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Izbrisati podatke i onemogućiti aplikaciju?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ako onemogućite tu aplikaciju, Android i druge aplikacije možda više neće funkcionirati pravilno, a izbrisat će se i vaši podaci."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Isključiti obavijesti?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ako isključite obavijesti za ovu aplikaciju, možda ćete propustiti važna upozorenja i ažuriranja."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Trgovina"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="few">Prikaži %d skrivene stavke</item>
       <item quantity="other">Prikaži %d skrivenih stavki</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Mreža i internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Povezani uređaji"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacije i obavijesti"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Korisnik i postavke"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Obavijesti"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Važnost"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nije postavljeno"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nikad ne prikazuj obavijesti"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez zvučnog ili vizualnog ometanja"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Prikaži tiho"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Reproduciraj zvuk"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Reproduciraj zvuk i prikaži na zaslonu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Poništi"</string>
     <string name="show_silently" msgid="2222875799232222056">"Prikaži tiho"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Nemoj emitirati zvuk, vibrirati niti prikazivati obavijesti na trenutačnom zaslonu."</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Učitavanje aplikacija..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanali"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokiraj sve"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nikad ne prikazuj te obavijesti"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Prikaži obavijesti"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nikad ne prikazuj obavijesti na zaslonu obavijesti ili na perifernim uređajima"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Prikaži značku"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Prikaži obavijesti u obliku znački u aplikaciji Home ako je to podržano."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Nadjačaj Ne ometaj"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Neka te obavijesti nastave prekidati kada je način Ne ometaj postavljen na Samo prioritetno"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na zaključanom zaslonu"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne prikazuj ponovo"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Zahtjev šalje"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Dodaj račun"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informacije o sustavu"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Postavke radnog profila"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pretraživanje kontakata"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Omogućuje pretraživanjima kontakata vaše organizacije da identificiraju pozivatelje i kontakte"</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Vaše najnovije izvješće o programskoj pogrešci"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Najnoviji sigurnosni zapisnik"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikada"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotografije i videozapisi"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Glazba i zvuk"</string>
     <string name="storage_games" msgid="7703159201697117621">"Igre"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Ostale aplikacije"</string>
     <string name="storage_files" msgid="8581083146777364063">"Datoteke"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Pohrana telefona"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> iskorišteno"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> raspoloživo"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3f4f444..f55f44c 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Mintaszöveg"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Óz, a csodák csodája"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. fejezet: A csodálatos Smaragdváros"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Dorothyt és barátait még a zöld szemüvegen át is lenyűgözte a csodálatos Város tündöklése. Az utcákat gyönyörű házak sora szegélyezte, melyek zöld márványból készültek, ragyogó smaragdokkal kirakva. Az utak ugyanebből a zöld márványból készültek, az utcaköveket pedig sűrűn rakott smaragdsorok választották el, melyek csak úgy sziporkáztak a napfényben. Az ablaktáblák zöld üvegből voltak, az ég zöldes színben tündökölt a Város fölött, és még a napsugarak is zöld színben játszottak. \n\nRengeteg ember járkált mindenfelé, férfiak, nők, gyerekek, mind zöld ruhákban, zöldes árnyalatú volt a bőrük is. Csodálkozó szemekkel néztek Dorothyra és furcsa kísérőire, és amikor a gyerekek meglátták az Oroszlánt, elszaladtak, és anyjuk mögé bújtak. De senki sem szólt hozzájuk. Az utcán sok bolt állt, és Dorothy észrevette, hogy ezekben is minden zöld. Lehetett kapni zöld cukorkát és zöld pattogatott kukoricát, zöld cipőt, zöld kalapot és mindenféle zöld ruhát. Az egyik helyen egy férfi zöld limonádét árult, és Dorothy látta, hogy a gyerekek zöld pennykkel fizetnek érte. \n\nNem voltak sehol lovak vagy más állatok; az emberek mindent kis zöld kocsikon hordtak, amelyet maguk előtt toltak. Mindenki boldognak, elégedettnek és jómódúnak tűnt."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-tár"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kártya"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Hiba"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Az 5 GHz-es sáv nem áll rendelkezésre ebben az országban"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Repülési üzemmódban"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Hálózati értesítés"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Értesítsen, ha rendelkezésre áll nyilvános hálózat"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Rossz minőségű kapcsolatok kerülése"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Csak akkor használjon Wi-Fi hálózatot, ha jó internetkapcsolatot tud biztosítani."</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Csak jó internetkapcsolattal rendelkező hálózatok használata"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Az új alkalmazások telepítése során előnyben részesített hely módosítása"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Letiltja a beép. alkalmazást?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Alkalmazás letiltása"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ha letiltja ezt az alkalmazást, akkor előfordulhat, hogy az Android- és más alkalmazások nem működnek majd megfelelően."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Szeretné törölni az adatokat és letiltani az alkalmazást?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ha letiltja ezt az alkalmazást, akkor előfordulhat, hogy az Android- és más alkalmazások működnek majd megfelelően. Továbbá az adatok is törlődnek."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Kikapcsolja az értesítéseket?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ha kikapcsolja az erre az alkalmazásra vonatkozó értesítéseket, akkor lemaradhat fontos figyelmeztetésekről és a frissítésekről."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Áruház"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d rejtett elem megjelenítése</item>
       <item quantity="one">%d rejtett elem megjelenítése</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Hálózat és internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Társított eszközök"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Alkalmazások és értesítések"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Felhasználó és fiókok"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Értesítések"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Fontosság"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nincs megadva"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Soha ne jelenjen meg értesítés"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Hangjelzés és vizuális megszakítás nélkül"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Megjelenítés hangjelzés nélkül"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Hangjelzés"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Hangjelzés és felugró értesítés a képernyőn"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Visszaállítás"</string>
     <string name="show_silently" msgid="2222875799232222056">"Megjelenítés hangjelzés nélkül"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ne legyen hangjelzés vagy rezgés, illetve az értesítések ne jelenjenek meg rövid időre sem az aktuális képernyőn."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Alkalmazások betöltése…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Csatornák"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Az összes letiltása"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Soha ne jelenjenek meg ezek az értesítések"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Értesítések megjelenítése"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Soha ne jelenjen meg értesítés az értesítési felületen és a perifériás eszközökön"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Jelvény megjelenítése"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Értesítések megjelenítése jelvényként a kezdőalkalmazásban, ha támogatott."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"A Ne zavarjanak mód felülbírálása"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"A Ne zavarjanak mód „Csak prioritásos” beállítása esetén ezek az értesítések továbbra is zavarhatnak"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"A lezárási képernyőn"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne jelenjen meg újra"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Lekérés a következőként:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Fiók hozzáadása"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Rendszer-információk"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Munkaprofil beállításai"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Névjegykeresés"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Névjegykeresés engedélyezése a szervezet számára a hívó felek és ismerősök azonosítása érdekében"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Az Ön legutóbbi hibajelentése"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Legutóbbi biztonsági naplója"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Soha"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fényképek és videók"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Zene és hang"</string>
     <string name="storage_games" msgid="7703159201697117621">"Játékok"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Egyéb alkalmazások"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fájlok"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefontárhely"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> felhasznált terület"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> szabad"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 0c5b9de..3d850e8 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Տեքստի նմուշ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Օզի կախարդը"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Գլուխ 11. Օզի հրաշալի Զմրուխտե քաղաքը"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Նույնիսկ հագնելով կանաչ ապակիներով ակնոցներ՝ Դորոթին և նրա ընկերները շլացան այս զարմանահրաշ քաղաքի փայլից: Փողոցների երկայնքով շարված էին կանաչ մարմարից գեղեցիկ տներ՝ զարդարված փայլուն զմրուխտներով: Ճամփորդները քայլում էին այդ նույն կանաչ մարմարով պատած մայթերով, որոնց սալիկների արանքները լցված էին արևի շողերի տակ փայլող զմրուխտներով: Տների պատուհանները կանաչ ապակուց էին: Զմրուխտե քաղաքում նույնիսկ երկինքն ուներ կանաչ երանգ, իսկ կանաչ արևը պայծառ կանաչ շողեր էր արձակում: \n\nՇուրջը տղամարդիկ, կանայք և երեխաներ էին քայլում, որոնք բոլորը կրում էին կանաչ հագուստ և ունեին կանաչավուն մաշկ: Նրանք զարմանքով էին նայում Դորոթիի և նրա տարօրինակ ուղեկիցներին: Նկատելով Առյուծին՝ երեխաները թաքնվում էին իրենց ծնողների մեջքի ետևում և ոչ-ոք չեր համարձակվում խոսել անծանոթների հետ: Խանութներում վաճառվում էին կանաչ գույնի ապրանքներ. կանաչ կոնֆետներ և կանաչ ադիբուդի, տարբեր տեսակի կանաչ կոշիկներ, գլխարկներ և զգեստներ: Վաճառականներից մեկն առաջարկում էր կանաչ լիմոնադ, իսկ նրան շրջապատող երեխաները լիմոնադի համար վճարում էին կանաչ մետաղադրամներով: \n\nԶմրուխտե քաղաքի փողոցներում ոչ ձիեր, ոչ էլ այլ կենդանիներ չկային: Տղամարդիկ իրենց իրերը կրում էին փոքր կանաչ ձեռնասայլակներով: Քաղաքի բոլոր բնակիչները ուրախ և անհոգ տեսք ունեին:"</string>
     <string name="font_size_save" msgid="3450855718056759095">"Լավ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB կրիչ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD քարտ"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Անջատած է"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Անհասանելի է, քանի որ NFC-ն անջատված է"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Երբ այս գործառույթը միացված է, կարող եք բովանդակություն ճառագայթել մեկ այլ NFC հնարավորությամբ սարքի` սարքերը միմյանց մոտ պահելով: Օրինակ` կարող եք ճառագայթել կայքէջեր, YouTube-ի տեսանյութեր, կոնտակտներ և ավելին:\n\nՊարզապես մոտեցրեք սարքերը միմյանց (հիմնականում մեջք մեջքի) և հպեք ձեր էկրանին: Հավելվածը կորոշի, թե ինչն է անհրաժեշտ ճառագայթել:"</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Երբ այս գործառույթը միացված է, կարող եք բովանդակություն ճառագայթել մեկ այլ NFC հնարավորությամբ սարքի` սարքերը միմյանց մոտ պահելով: Օրինակ` կարող եք ճառագայթել կայքէջեր, YouTube-ի տեսանյութեր, կոնտակտներ և ավելին:\n\nՊարզապես մոտեցրեք սարքերը միմյանց (հիմնականում հետևի մասերով իրար) և հպեք ձեր էկրանին: Հավելվածը կորոշի, թե ինչն է անհրաժեշտ ճառագայթել:"</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi‑Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Միացնել Wi-Fi-ը"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi‑Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Սխալ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 ԳՀց հաճախականության շերտը հասանելի չէ այս երկրում"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Ինքնաթիռի ռեժիմում"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Ցանցի ծանուցումներ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Տեղեկացնել, երբ որևէ հասարակական ցանց հասանելի լինի"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Չօգտագործել թույլ կապ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Չօգտագործել Wi‑Fi ցանցը, մինչև այն չունենա լավ ինտերնետային կապ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Օգտագործել միայն լավ ինտերնետ կապ ունեցող ցանցերը"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Փոխել նոր ծրագրերի համար նախընտրած տեղադրման վայրը"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Անջատե՞լ ներկառուցված ծրագիրը:"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Անջատել հավելվածը"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Եթե անջատեք այս հավելվածը, Android և այլ հավելվածները հնարավոր է սխալ աշխատեն:"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Ջնջե՞լ տվյալներն ու ապակատիվացնե՞լ հավելվածը:"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Եթե անջատեք այս հավելվածը, Android և այլ հավելվածները հնարավոր է սխալ աշխատեն: Ձեր տվյալները նույնպես կջնջվեն:"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Անջատե՞լ ծանուցումները:"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Եթե դուք անջատեք ծամուցումները այս ծրագրի համար, հնարավոր է` բաց թողնեք կարևոր զգուշացումները և թարմացումները:"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Խանութ"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Show %d hidden items</item>
       <item quantity="other">Ցույց տալ %d թաքնված տարրեր</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Ցանց և ինտերնետ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Կապակցված սարքեր"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Հավելվածներ և ծանուցումներ"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Օտատեր և հաշիվներ"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Ծանուցումներ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Կարևորություն"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Կարգավորված չէ"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Երբեք չցուցադրել ծանուցումները"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Առանց ձայնի և տեսողական ընդհատումների"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Ցույց տալ անձայն"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Ձայն հանել"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Ձայն հանել և ցուցադրել էկրանին"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Վերակայել"</string>
     <string name="show_silently" msgid="2222875799232222056">"Ցույց տալ անձայն"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ձայնային ազդանշան չհնչեցնել, չթրթռալ և ընթացիկ էկրանին այս ծանուցումները չցուցադրել:"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Ծրագրերը բեռնվում են..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Ալիքներ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Արգելափակել բոլորը"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Երբեք չցուցադրել այս ծանուցումները"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Ցուցադրել ծանուցումները"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Երբեք չցուցադրել ծանուցումները ստվերում կամ արտաքին սարքերի վրա"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Ցուցադրել նշանակը"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Հնարավորության դեպքում ծանուցումները Հիմնական հավելվածում ցուցադրել նշանակների տեսքով:"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Վրագրել «Չընդհատել» պարամետրը"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Թույլ տալ այս ծանուցումների կողմից ընդհատումները, երբ «Չընդհատել» պարամետրի համար նշանակված է «Միայն կարևորները» արժեքը"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Կողպէկրանին"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Այլևս ցույց չտալ"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Հարցվում է որպես"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Ավելացնել հաշիվ"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Համակարգային տեղեկություններ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Աշխատանքային պրոֆիլի կարգավորումներ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Կոնտակտների որոնում"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Թույլատրել ձեր կազմակերպությանը որոնել կոնտակտներ՝ զանգողներին և կոնտակտները նույնականացնելու համար:"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ձեր ամենավերջի վրիպակի զեկույցը"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ձեր ամենավերջին անվտանգության մատյանը"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Երբեք"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Լուսանկարներ և տեսանյութեր"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Երաժշտություն և աուդիո"</string>
     <string name="storage_games" msgid="7703159201697117621">"Խաղեր"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Այլ հավելվածներ"</string>
     <string name="storage_files" msgid="8581083146777364063">"Ֆայլեր"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Հեռախոսի հիշողություն"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> օգտագործված"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ազատ է"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b6b7ef4..1fc2770 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Kesalahan"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Pita 5 GHz tidak tersedia di negara ini"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Dalam mode Pesawat"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notifikasi jaringan"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Beri tahu saat jaringan publik tersedia"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Hindari sambungan buruk"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Jangan gunakan jaringan Wi-Fi kecuali koneksi internetnya bagus"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Hanya gunakan jaringan yang memiliki koneksi internet kuat"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Laporan bug terbaru"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Log keamanan terbaru"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Tidak pernah"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto &amp; Video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musik &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Game"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Aplikasi lainnya"</string>
     <string name="storage_files" msgid="8581083146777364063">"File"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Penyimpanan Ponsel"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> digunakan"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> kosong"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 61cf784..7183057 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Textadæmi"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Galdrakarlinn í Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. kafli: Smaragðsborgin dásamlega í Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Jafnvel þótt grænu gleraugun hlífðu augum Dóróteu og vina hennar fengu þau fyrst ofbirtu í augun af ljóma borgarinnar undursamlegu. Meðfram götunum lágu falleg hús, öll úr grænum marmara og skreytt glitrandi smarögðum. Þau gengu eftir gangstétt úr sama græna marmaranum og þar sem steinhellurnar komu saman lágu smaragðar í röðum, þéttskipaðir og ljómandi í sólarljósinu. Rúðurnar voru úr grænu gleri, jafnvel himinninn yfir borginni var með grænum litblæ og sólargeislarnir voru grænir. \n\nMargt fólk var á gangi, karlar, konur og börn, og allt var það grænklætt og húðin grænleit. Fólkið horfði á Dóróteu og sundurleita félaga hennar með spurn í augum og börnin flúðu og földu sig á bak við mæður sínar þegar þau sáu ljónið, en enginn yrti á þau. Við götuna stóðu margar verslanir og Dórótea sá að allt var grænt þar inni. Grænn brjóstsykur og grænt poppkorn var þar til sölu, ásamt grænum skóm, grænum höttum og alls kyns grænum fötum. Á einum stað seldi maður grænt límonaði og þegar börnin keyptu það sá Dórótea að þau greiddu fyrir það með grænum peningum. \n\nEngir hestar eða önnur dýr voru sjáanleg heldur keyrðu karlarnir hluti um í litlum grænum kerrum sem þeir ýttu á undan sér. Allir virtust hamingjusamir og ánægðir og velmegandi."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Í lagi"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-geymsla"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kort"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Villa"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz tíðnisvið er ekki í boði í þessu landi"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Í flugstillingu"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Nettilkynning"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Tilkynna þegar opið net er í boði"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Forðast lélegar tengingar"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ekki nota Wi-Fi net nema nettengingin sé góð"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Nota aðeins net með góða tengingu"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Breyta valinni staðsetningu fyrir uppsetningu nýrra forrita"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Gera innbyggt forrit óvirkt?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Slökkva á forriti"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ef þú slekkur á þessu forriti getur verið að Android og önnur forrit virki ekki lengur sem skyldi."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Eyða gögnum og slökkva á forriti?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ef þú slekkur á þessu forriti getur verið að Android og önnur forrit virki ekki lengur sem skyldi. Einnig verður gögnunum þínum eytt."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Slökkva á tilkynningum?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ef þú slekkur á tilkynningum fyrir þetta forrit gætirðu misst af mikilvægum viðvörunum og uppfærslum."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Verslun"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Sýna %d falið atriði</item>
       <item quantity="other">Sýna %d falin atriði</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Netkerfi og internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Tengd tæki"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Forrit og tilkynningar"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Notandi og reikningar"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Tilkynningar"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Mikilvægi"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ekki stillt"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Aldrei sýna tilkynningar"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ekkert hljóð eða sjónræn truflun"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Sýna án hljóðs"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Spila hljóð"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Spila hljóð og birta sprettitilkynningu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Endurstilla"</string>
     <string name="show_silently" msgid="2222875799232222056">"Sýna án hljóðs"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ekki nota hljóð, titring eða birta tilkynningar á núverandi skjá."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Hleður forrit..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Rásir"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Útiloka allt"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Aldrei sýna þessar tilkynningar"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Sýna tilkynningar"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Aldrei sýna tilkynningar í skugga eða á jaðartækjum"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Sýna merki"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Sýna tilkynningar sem merki í Home forritinu, ef þær eru studdar."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Hnekkja „Ónáðið ekki“"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Láta þessar tilkynningar halda áfram að trufla þegar „Ónáðið ekki“ er stillt á „Aðeins forgangur“"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Á lásskjá"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ekki birta aftur"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Beðið um sem"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Bæta reikningi við"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Kerfisupplýsingar"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Stillingar vinnusniðs"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Tengiliðaleit"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Leyfa fyrirtækinu þínu að leita í tengiliðum til að bera kennsl á þá sem hringja og tengiliði"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Nýlegasta villutilkynningin"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Nýjasta öryggisannálinn þinn"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Aldrei"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Myndir og myndskeið"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Tónlist og hljóð"</string>
     <string name="storage_games" msgid="7703159201697117621">"Leikir"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Önnur forrit"</string>
     <string name="storage_files" msgid="8581083146777364063">"Skrár"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Geymslurými símans"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> notað"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> laust"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 08bed2c..ad70c78 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Testo di esempio"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Il meraviglioso mago di Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capitolo 11: La splendida Città di smeraldo di Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Sebbene i loro occhi fossero protetti dalle lenti verdi, Dorothy e i suoi amici rimasero immediatamente abbagliati dal fulgore della splendida Città. Lungo le strade si affacciavano belle case tutte realizzate in marmo verde e tempestate ovunque di smeraldi scintillanti. Camminarono lungo un marciapiede fatto dello stesso marmo verde, i cui blocchi erano congiunti da file e file di smeraldi incastonati che rilucevano sotto il sole splendente. I vetri alle finestre erano verdi e persino il cielo sopra la Città e i raggi di sole avevano una sfumatura verde. \n\nC\'erano molte persone che passeggiavano, uomini, donne e bambini: erano tutti vestiti di verde e avevano la pelle verdognola. Guardavano Dorothy e la sua stravagante compagnia con occhi pieni di meraviglia e i bambini correvano tutti a nascondersi dietro le loro madri quando vedevano il Leone; ma nessuno rivolse loro la parola. C\'erano molti negozi lungo la strada e Dorothy vide che ogni cosa al loro interno era verde. Si vendevano caramelle verdi e popcorn verdi, come pure scarpe verdi, cappelli verdi e abiti verdi di ogni tipo. C\'era anche un posto in cui un uomo vendeva limonata verde e, quando i bambini la acquistavano, Dorothy vide che pagavano con monetine verdi. \n\nSembrava che non esistessero cavalli o altri animali; gli uomini portavano le merci spingendole davanti a sé su carretti verdi. Tutti sembravano felici, soddisfatti e prosperi."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Archivio USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Scheda SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Errore"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda da 5 GHz non disponibile in questo paese"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In modalità aereo"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notifica rete"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Avvisa quando è disponibile una rete pubblica"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evita connessioni deboli"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Non utilizzare una rete Wi‑Fi a meno che non abbia una buona connessione a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Utilizza solo reti con una buona connessione a Internet"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Cambia il percorso preferito per l\'installazione di nuove applicazioni"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Disattivare app integrata?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Disattiva app"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Se disattivi questa app, Android e altre app potrebbero non funzionare più come previsto."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Eliminare i dati e disattivare l\'applicazione?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Se disattivi questa app, Android e altre app potrebbero non funzionare più come previsto. I tuoi dati inoltre saranno eliminati."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Disattivare le notifiche?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Se disattivi le notifiche per questa applicazione potresti perdere avvisi e aggiornamenti importanti."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Store"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostra %d elementi nascosti</item>
       <item quantity="one">Mostra %d elemento nascosto</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rete e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivi collegati"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"App e notifiche"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Utente e account"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notifiche"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importanza"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Non impostato"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Non mostrare mai notifiche"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Senza suoneria o interruzione visiva"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostra silenziosamente"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Con suoneria"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Con suoneria e visualizzazione sullo schermo"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Reimposta"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostra silenziosamente"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Non emettere suoni o vibrazioni e non mostrare queste notifiche nella schermata corrente."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Caricamento app..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canali"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blocca tutto"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Non mostrare mai queste notifiche"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostra notifiche"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Non mostrare mai notifiche nella relativa area o su dispositivi periferici"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostra badge"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostra notifiche come badge nell\'app Home, se supportato."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ignora Non disturbare"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Consenti interruzione per queste notifiche quando l\'opzione Non disturbare è impostata su Solo con priorità"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Nella schermata di blocco"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Non mostrare più"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Richiesta come"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Aggiungi account"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informazioni di sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Impostazioni profilo di lavoro"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Ricerca di contatti"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Consenti ricerche di contatti in base all\'organizzazione per identificare chiamanti e contatti"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"La tua segnalazione di bug più recente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Il tuo log di sicurezza più recente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Mai"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto e video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musica e audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Giochi"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Altre app"</string>
     <string name="storage_files" msgid="8581083146777364063">"File"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Memoria telefono"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> utilizzati"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> liberi"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 7564915..75f72dd 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"טקסט לדוגמה"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"הקוסם המופלא מארץ עוץ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"פרק 11: עיר הברקת המופלאה של ארץ עוץ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"אפילו עם המשקפיים הירוקים שהגנו על עיניהם, דורותי וחבריה הסתנוורו בתחילה מזוהרה של העיר הנפלאה. לאורך הרחובות ניצבו בתים יפהפיים, שכולם בנויים משיש ירוק ומשובצים אבני ברקת מבריקות. הם צעדו על פני מדרכה שהייתה עשויה מאותו שיש ירוק, ובמקום המפגש של שורות הבתים היו משובצות זו לצד זו שורות של אבני ברקת, מנצנצות באור השמש הבהיר. אדני החלונות היו עשויים מזכוכית ירוקה. אפילו לשמיים שמעל העיר היה גוון ירקרק, וקרני השמש היו ירוקות. \n\nאנשים רבים התהלכו ברחובות, גברים, נשים וילדים, וכולם היו לבושים בבגדים ירוקים ולעורם היה גון ירוק. הם הסתכלו בהשתוממות על דורותי ועל החבורה המוזרה שסבבה אותה, וכשראו את האריה, כל הילדים ברחו והתחבאו מאחורי אימותיהם. אבל איש לא פנה אליהם בדברים. חנויות רבות ניצבו ברחוב ודורותי ראתה שכל הפריטים שבתוכן היו ירוקים. ממתקים ירוקים ופופקורן ירוק הוצעו למכירה, וגם נעליים ירוקות, כובעים ירוקים ובגדים ירוקים מכל מיני סוגים. בחנות אחת מכר מישהו לימונדה ירוקה, וכשהילדים קנו אותה, דורותי הבחינה שהם שילמו במטבעות ירוקים. \n\nנראה היה שאין שם סוסים, או חיות מכל סוג שהוא. הגברים נשאו דברים בעגלות ירוקות קטנות, שאותן הם דחפו לפניהם. נראה היה שכולם מאושרים, שבעי רצון ומצליחים."</string>
     <string name="font_size_save" msgid="3450855718056759095">"אישור"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"‏אחסון USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"‏כרטיס SD"</string>
@@ -676,7 +675,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"כבוי"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"‏לא זמין משום שה-NFC כבוי"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"‏כשתכונה זו מופעלת, תוכל לשדר תוכן מתוך אפליקציה למכשיר אחר התומך ב-NFC על ידי החזקת המכשירים קרוב זה לזה. לדוגמה, תוכל לשדר דפי אינטרנט, סרטוני YouTube, אנשי קשר ועוד.\n\nפשוט קרב את המכשירים זה לזה (בדרך כלל גב אל גב) ולאחר מכן גע במסך שלך. האפליקציה תקבע מה ישודר."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"‏כשתכונה זו מופעלת, תוכל לשדר תוכן מאפליקציה למכשיר אחר התומך ב-NFC על ידי החזקת המכשירים קרוב זה לזה. לדוגמה, תוכל לשדר דפי אינטרנט, סרטוני YouTube, אנשי קשר ועוד.\n\nפשוט קרב את המכשירים זה לזה (בדרך כלל גב אל גב) ולאחר מכן גע במסך. האפליקציה תקבע מה ישודר."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"‏הפעל את ה-Wi-Fi"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi-Fi"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"שגיאה"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"‏רצועת התדרים של ‎5 GHz אינה זמינה במדינה זו"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"במצב טיסה"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"התראת רשת"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"הצג הודעה כאשר יש רשת ציבורית זמינה"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"הימנע מחיבורים באיכות ירודה"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"‏אל תשתמש ברשת Wi-Fi, אלא אם יש לה חיבור אינטרנט באיכות טובה"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"השתמש רק ברשתות בעלות חיבור אינטרנט איכותי"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"שנה את מיקום ההתקנה המועדף עבור אפליקציות חדשות."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"להשבית אפליקציה מובנית?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"השבת את האפליקציה"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"‏אם תשבית את האפליקציה הזו, ייתכן ש-Android ואפליקציות אחרות לא יפעלו כצפוי."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"האם למחוק נתונים ולהשבית את האפליקציה?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"‏אם תשבית את האפליקציה הזו, ייתכן ש-Android ואפליקציות אחרות לא יפעלו כצפוי. בנוסף, הנתונים שלך יימחקו."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"האם לבטל התראות?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"אם תבטל התראות עבור אפליקציה זו, אתה עלול להחמיץ התראות ועדכונים חשובים."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"חנות"</string>
@@ -2511,8 +2514,8 @@
     <string name="user_restrictions_controlled_by" msgid="3164078767438313899">"בשליטת <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="app_sees_restricted_accounts" msgid="7503264525057246240">"האפליקציה הזו יכולה לגשת לחשבונות שלך"</string>
     <string name="app_sees_restricted_accounts_and_controlled_by" msgid="6968697624437267294">"האפליקציה הזו יכולה לגשת אל החשבונות שלך. בשליטה של <xliff:g id="APP">%1$s</xliff:g>"</string>
-    <string name="restriction_wifi_config_title" msgid="8889556384136994814">"‏רשת Wi‑Fi ורשת לנייד"</string>
-    <string name="restriction_wifi_config_summary" msgid="70888791513065244">"‏אפשר שינוי של הגדרות רשת Wi-Fi ורשת לנייד"</string>
+    <string name="restriction_wifi_config_title" msgid="8889556384136994814">"‏רשת Wi‑Fi ורשת סלולרית"</string>
+    <string name="restriction_wifi_config_summary" msgid="70888791513065244">"‏אפשר שינוי של הגדרות רשת Wi-Fi ורשת סלולרית"</string>
     <string name="restriction_bluetooth_config_title" msgid="8871681580962503671">"Bluetooth"</string>
     <string name="restriction_bluetooth_config_summary" msgid="8372319681287562506">"‏אפשר שינויים של התאמות והגדרות Bluetooth"</string>
     <string name="restriction_nfc_enable_title" msgid="5888100955212267941">"NFC"</string>
@@ -2573,8 +2576,7 @@
       <item quantity="other">‏הצג %d פריטים מוסתרים</item>
       <item quantity="one">‏הצג פריט %d מוסתר</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"רשת ואינטרנט"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"מכשירים מחוברים"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"אפליקציות והודעות"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"משתמש וחשבונות"</string>
@@ -2700,16 +2702,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"הודעות"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"חשיבות"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"לא הוגדר"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"לעולם אל תציג הודעות"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ללא צליל וללא הפרעה ויזואלית"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"הצג ללא צליל"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"השמע צליל"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"השמע צליל והצג במסך"</string>
     <string name="importance_reset" msgid="7458420788555607007">"אפס"</string>
     <string name="show_silently" msgid="2222875799232222056">"הצג ללא צליל"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"אל תשמיע צליל, תפעיל רטט או תציג במהירות הודעות אלו לתצוגה המפורטת במסך הנוכחי."</string>
@@ -2740,16 +2737,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"טוען אפליקציות..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ערוצים"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"חסום הכל"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"לעולם אל תציג את ההודעות האלה"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"הצג הודעות"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"אף פעם אל תציג הודעות בהצללה או במכשירים היקפיים"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"הצג תג"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"הצג הודעות כתגים באפליקציית דף הבית אם האפשרות נתמכת."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ביטול / שינוי של \'נא לא להפריע\'"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"אפשר להודעות אלה להמשיך ולהפריע כאשר \'נא לא להפריע\' מוגדר כ\'עדיפות בלבד\'"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"במסך הנעילה"</string>
@@ -3290,8 +3282,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"אל תציג שוב"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"מבקש בשם"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"הוסף חשבון"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"נתוני מערכת"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"הגדרות של פרופיל עבודה"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"חיפוש אנשי קשר"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"אפשר לחיפושי אנשי קשר שמבצע הארגון לזהות מתקשרים ואנשי קשר"</string>
@@ -3390,16 +3381,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"הדוח האחרון שלך על באג"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"יומן האבטחה האחרון שלך"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"אף פעם"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"תמונות וסרטונים"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"מוזיקה ואודיו"</string>
     <string name="storage_games" msgid="7703159201697117621">"משחקים"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"אפליקציות אחרות"</string>
     <string name="storage_files" msgid="8581083146777364063">"קבצים"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"אחסון בטלפון"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="UNIT">^2</xliff:g><xliff:g id="NUMBER">^1</xliff:g>"<small><small>" בשימוש"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> פנויים"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"%%<xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index a93d4f1..89d1615 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"エラー"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"この国では5GHz帯域は利用できません"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"機内モード"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ネットワークの通知"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"公衆通信回線が利用可能なときは通知する"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"接続不良のとき無効にする"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"安定したインターネット接続があるときのみWi-Fiネットワークを使用する"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"インターネット接続が安定したネットワークのみ使用する"</string>
@@ -3305,16 +3311,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"最新のバグレポート"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"最新のセキュリティ ログ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"未実行"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"写真&動画"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"音楽&オーディオ"</string>
     <string name="storage_games" msgid="7703159201697117621">"ゲーム"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"その他のアプリ"</string>
     <string name="storage_files" msgid="8581083146777364063">"ファイル"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"スマートフォンのストレージ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> 使用"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> 空き"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 3126833..bebf54a 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"ტექსტის ნიმუში"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ოზის საოცარი ჯადოქარი"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"თავი 11: ოზის ზურმუხტის ქალაქი"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"მართალია, მწვანე სათვალე ეკეთათ, მაგრამ დოროთი და მისი მეგობრები ამ საკვირველი ქალაქის ბრწყინვალებამ მაინც გააოცა. ქუჩებში რიგებად იდგა მწვანე მარმარილოს უმშვენიერესი სახლები, რომლებიც ბრჭყვიალა ზურმუხტებით იყო მორთული. გამვლელები დადიოდნენ ტროტუარზე, რომელიც იმავე მწვანე მარმარილოსი იყო, ხოლო ფილებს შორის ნაპრალები ამოევსოთ ზურმუხტებით, რომლებიც მზის სინათლეზე ბზინავდა. სახლების ფანჯრებს მწვანე მინები ჰქონდა. ზურმუხტის ქალაქის თავზე ცასაც მწვანე ელფერი დაჰკრავდა. მწვანე მზიდან კი ქვემოთ მწვანე სხივები ეცემოდა. \n\nგარშემო ბევრი ადამიანი ირეოდა — კაცები, ქალები, ბავშვები — ყველას მწვანე ტანსაცმელი ეცვა და კანიც მწვანე შეფერილობის ჰქონდათ. ისინი გაკვირვებით შეჰყურებდნენ დოროთისა და მის უცნაურ თანამგზავრებს. ლომის დანახვისთანავე ბავშვები მშობლების ზურგსუკან იმალებოდნენ და ვერავინ ბედავდა სტუმრებთან საუბარს. ქუჩის გაყოლებაზე ბევრი მაღაზია ჩამწკრივებულიყო და დოროთიმ დაინახა, რომ ყველაფერი, რაც გასაყიდად გამოეტანათ, მწვანე ფერისა იყო — მწვანე ტკბილეული თუ მწვანე ბატი-ბუტი, მწვანე ფეხსაცმელი თუ თავსაბურავი და სხვადასხვა ზომის და ფორმის ტანსაცმელიც კი მწვანე იყო. ერთ-ერთ დახლზე კაცი მწვანე ლიმონათს ყიდდა, გარსშემოხვეული ბავშვები კი მწვანე მონეტებით უხდიდნენ. \n\nზურმუხტის ქალაქის ქუჩებში არც ცხენები ჩანდა, არც სხვა ცხოველები. კაცებს ტვირთი პატარა მწვანე ხელის ურიკებით გადაჰქონდათ. ქალაქის მაცხოვრებლებს სახეზე ბედნიერება და კმაყოფილება ეტყობოდათ."</string>
     <string name="font_size_save" msgid="3450855718056759095">"კარგი"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB მეხსიერება"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD ბარათი"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"შეცდომა"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 გიგაჰერციანი სიხშირე არ არის ხელმისაწვდომი ამ ქვეყანაში"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"თვითმფრინავის რეჟიმში"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ქსელის შესახებ შეტყობინება"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"შემატყობინება, როდესაც საჯარო ქსელი ხელმისაწვდომი იქნება"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Wi-Fi ქსელების ფილტრი"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"არ გამოიყენო Wi‑Fi ქსელი, თუ მას არ აქვს კარგი ინტერნეტ კავშირი"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"მხოლოდ იმ ქსელების გამოყენება, რომლებსაც კარგი ინტერნეტ-კავშირი გააჩნია"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"შეცვალეთ ახალი აპების დაყენებისთვის შერჩეული მდებარეობა"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"გამოირთოს ჩაშენებული აპი?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"აპის გამორთვა"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ამ აპის გათიშვის შემთხვევაში, Android-მა და სხვა აპებმა შეიძლება გამართულად აღარ იმუშაოს."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"გსურთ, მონაცემების წაშლა და აპის გამორთვა?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ამ აპის გათიშვის შემთხვევაში, Android-მა და სხვა აპებმა შეიძლება გამართულად აღარ იმუშაოს. თქვენი მონაცემებიც წაიშლება."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"გამოვრთოთ შეტყობინებები?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ამ აპის შეტყობინებების გამორთვის შემთხვევაში შეიძლება გამოგრჩეთ მნიშვნელოვანი გაფრთხილებები და განახლებები."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"მაღაზია"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d დამალული ერთეულის ჩვენება</item>
       <item quantity="one">%d დამალული ერთეულის ჩვენება</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"ქსელი და ინტერნეტი"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"დაკავშირებული მოწყობილობები"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"აპები და შეტყობინებები"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"მომხმარებელი და ანგარიშები"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"შეტყობინებები"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"მნიშვნელობის დონე"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"არ არის დაყენებული"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"შეტყობინებების ჩვენების აღკვეთა"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ხმოვანი ან ვიზუალური შეფერხების გარეშე"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"უხმოდ ჩვენება"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ხმის გამოცემა"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ხმის გამოცემა და ეკრანზე გამოჩენა"</string>
     <string name="importance_reset" msgid="7458420788555607007">"გადაყენება"</string>
     <string name="show_silently" msgid="2222875799232222056">"უხმოდ ჩვენება"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"შეტყობინებებისთვის ხმისა თუ ვიბრაციის გათიშვა და მიმდინარე ეკრანზე ანთების აკრძალვა."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"აპები იტვირთება..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"არხები"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"ყველას დაბლოკვა"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ამ შეტყობინებების ჩვენების შეწყვეტა"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"შეტყობინებების ჩვენება"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"შეტყობინებების ჩრდილოვნად ან პერიფერიულ მოწყობილობებზე ჩვენების აღკვეთა"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ბეჯის ჩვენება"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"შეტყობინებების Home აპში ბეჯების სახით ჩვენება, თუ ეს ფუნქცია მხარდაჭერილია."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"„არ შემაწუხოთ“-ის უგულებელყოფა"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"ამ შეტყობინებების ჩვენება მაშინაც კი, როცა რეჟიმისთვის „არ შემაწუხოთ“ არჩეულია „მხოლოდ პრიორიტეტული“"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"ჩაკეტილ ეკრანზე"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"აღარ გამოჩნდეს"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"მოთხოვნა, როგორც:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"ანგარიშის დამატება"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"სისტემის ინფორმაცია"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"სამსახურის პროფილის პარამეტრები"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"კონტაქტების ძიება"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"აბონენტებისა და კონტაქტების ამოცნობის მიზნით, თქვენი ორგანიზაციისთვის კონტაქტების ძიების დაშვება"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"ხარვეზის შესახებ ყველაზე ბოლო ანგარიში"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"უსაფრთხოების ყველაზე ბოლო ჟურნალი"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"არასოდეს"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ფოტოები და ვიდეოები"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"მუსიკა და აუდიო"</string>
     <string name="storage_games" msgid="7703159201697117621">"თამაშები"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"სხვა აპები"</string>
     <string name="storage_files" msgid="8581083146777364063">"ფაილები"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ტელეფონის მეხსიერება"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> გამოყენებულია"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> თავისუფალია"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index b191544..99fa67e 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Қарапайым мәтін"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Оз қаласының ғажап сиқыршысы"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11-тарау: Ғажайып жасыл қала Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Дороти мен достары қалаға алғаш келгенде оның ғажайып көркіне таңғалды. Әдемі жасыл мәрмәр үйлер көшені жағалай тізіліп тұрды, бүкіл жерде жарқыраған зүбаржат тастар шашылып жатқандай көрінді. Олар дәл сондай жасыл мәрмәр жолмен жүрді, тұрғын үйлер зүбаржат кірпіштерден қаланып, күн сәулесіне жарқырап тұрды. Терезелердің әйнектері жасыл шыныдан жасалған, қала үстіндегі жасыл аспаннан жасыл түсті күн сәулесі түсіп тұрды. \n\nКөшедегі ерлер, әйелдер мен балалар жасыл түсті киім киіп алған, олардың терілері де жасыл реңді екен. Олар Доротиге мен оның әпенді достарына таңдана қарады. Балалар Арыстанды көре сала қашып, аналарының артына тығылды. Алайда бұлармен ешкім сөйлеспеді. Дороти көше бойындағы көптеген дүкендердегі нәрселердің барлығы жасыл түсті екенін көрді. Бұл дүкендерде сатылатын кәмпиттер, поп-корн, аяқ киім, қалпақтар мен неше түрлі киімдер – барлығы жасыл еді. Бір кісі жасыл лимонад сатып тұрды және Дороти балалардың ол үшін жасыл ақша төлегенін көрді. \n\nОл жерде ешқандай жануарлар болмаған сияқты, ер адамдар заттарды кішкене жасыл арбалармен алдында салып тасып жүрді. Барлығы бақытты, өмірге риза және уайымсыз болып көрінді."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Жарайды"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB жады"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD картасы"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Өшірулі"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Қол жетімсіз себебі ЖӨБ өшірілген"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android тарату функциясы"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Бұл функция қосылғанда, құрылғыларды бір-біріне жақын орналастырып, қолданба мазмұнын басқа NFC орнатылған құрылғыға жіберуге болады. Мысалы, беттерді, YouTube бейнелерін, контактілерді және басқаларды беттерін жібере аласыз.\n\nҚұрылғыларды бірге қойып (артқы жақтарын түйістіріп), экранды түртіңіз. Қолданба жіберілетін мазмұндарды анықтайды."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Бұл функция қосылғанда, құрылғыларды бір-біріне жақын орналастырып, қолданба мазмұнын басқа NFC орнатылған құрылғыға жіберуге болады. Мысалы, беттерді, YouTube бейнелерін, контактілерді және басқаларды жібере аласыз.\n\nҚұрылғыларды бірге қойып (артқы жақтарын түйістіріп), экранды түртіңіз. Қолданба жіберілетін мазмұндарды анықтайды."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi‑Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Wi‑Fi қосу"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi‑Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Қателік"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 ГГц диапазоны бұл елде қолжетімсіз"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Ұшақ режимі"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Желі хабарлары"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Қоғамдық желі қол жетімді болғанда хабарлау"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Нашар байланыстарды қолданбау"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Егер интернет байланысы жақсы болмаса Wi‑Fi желісін қолданбаңыз"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Тек жақсы интернет байланысы бар желілерді пайдалану"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Жаңа қолданбаны орнату үшін қаланған аймақты өзгерту"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Орнатылған қолданба істен шығарылсын ба?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Қолданбаны өшіру"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Бұл қолданбаны өшірсеңіз, Android жүйесі мен басқа қолданбалар тиісінше жұмыс істемеуі мүмкін."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Деректер жойылып, қолданба істен шығарылсын ба?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Бұл қолданбаны өшірсеңіз, Android жүйесі мен басқа қолданбалар тиісінше жұмыс істемеуі мүмкін. Оған қоса деректер де жойылады."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Хабарлар өшірілісін бе?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Бұл қолданбаның хабарларын өшірсеңіз, маңызды дабылдар мен жаңартулар сізге жеткізілмейді."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Дүкен"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d жасырын элементті көрсету</item>
       <item quantity="one">%d жасырын элементті көрсету</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Желі және интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Қосылған құрылғылар"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Қолданбалар мен хабарландырулар"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Пайдаланушы және есептік жазбалар"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Хабарландырулар"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Маңыздылық"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Орнатылмаған"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Хабарландыруларды ешқашан көрсетпеу"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Дыбыссыз және визуалдық кедергісіз"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Дыбыссыз көрсету"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Дыбыстық сигнал беру"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Дыбыстық сигнал беру және экранға шығару"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Ысыру"</string>
     <string name="show_silently" msgid="2222875799232222056">"Үнсіз көрсету"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Дыбыс шығармау, дірілдетпеу немесе осы хабарландыруларды ағымдағы экрандағы көріністе көрсетпеу."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Қолданбаларды жүктеу…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Арналар"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Барлығына тыйым салу"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Бұл хабарландыруларды ешқашан көрсетпеу"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Хабарландыруларды көрсету"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Тақтада немесе перифериялық құрылғыларда хабарландыруларды ешқашан көрсетпеу"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Танымбелгіні көрсету"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Қолдау көрсетілетін жағдайда хабарландыруларды Home қолданбасында танымбелгі ретінде көрсету."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\"Мазаламау\" режимін қайта анықтау"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"\"Мазаламау\" режимі \"Тек маңызды\" күйіне орнатылған кезде, осы хабарландыруларға рұқсат беру"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Құлып экранында"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Енді көрсетпеу"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Келесі болып сұралуда:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Есептік жазбаны енгізу"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Жүйе ақпараты"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Жұмыс профилінің параметрлері"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Контакт іздеу"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Қоңырау шалушылар мен контактілерді анықтау үшін ұйым бойынша контакт іздеуге рұқсат беру"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ең соңғы қате туралы есеп"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ең соңғы қауіпсіздік журналы"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Ешқашан"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Суреттер және бейнелер"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музыка және аудиомазмұн"</string>
     <string name="storage_games" msgid="7703159201697117621">"Ойындар"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Басқа қолданбалар"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файлдар"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Телефон жады"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> пайдаланылды"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> бос"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 7a1ef80..aa53f61 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"អត្ថបទគំរូ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"មេធ្មប់ដ៏អស្ចារ្យនៃទឹកដីពិសិដ្ឋ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"ជំពូកទី 11៖ ទីក្រុងមរកតដ៏អស្ចារ្យនៃទឹកដីពិសិដ្ឋ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"មុនដំបូង ដូរ៉ូធី និង​មិត្តភក្តិ​របស់​នាង​មាន​ភាព​ភ្ញាក់​ផ្អើលយ៉ាងខ្លាំង​​ចំពោះ​ភាព​ស្រស់ស្អាត​នៃ​ទីក្រុង​ដ៏អស្ចារ្យ​នេះ​ បើ​ទោះ​បី​ជា​ពួកគេ​ពាក់វ៉ែនតា​ការពារ​ភ្នែក​ដែល​មាន​ពណ៌បៃតង​ក៏ដោយ។ ​នៅ​តាមដង​ផ្លូវ មាន​ផ្ទះ​ដ៏​ស្រស់​ស្អាត ដែល​ធ្វើ​ឡើង​ពី​ថ្ម​ម៉ាប​ពណ៌បៃតង និង​លម្អ​ដោយ​ត្បូង​មរកត​ដ៏​ចែងចាំង​នៅគ្រប់​ទីកន្លែង​តម្រៀប​ជួរគ្នា។ \n\n ពួកគេ​ដើរ​នៅ​លើ​ដង​ផ្លូវ​ដែល​ធ្វើ​ពី​ថ្ម​ម៉ាប​ពណ៌បៃតងដូចគ្នា ហើយ​នៅ​ត្រង់កន្លែង​ដែល​ប្លុក​​អគារ​​តភ្ជាប់​គ្នាមាន​​ត្បូង​មរកតតម្រៀបជាជួរក្បែរៗគ្នា និង​មាន​ពន្លឺចែង​ចាំង​នៅក្រោម​ពន្លឺ​ព្រះអាទិត្យ។ ផ្ទាំង​បង្អួច​ធ្វើ​ឡើង​ពីកញ្ចក់​ពណ៌បៃតង ហើយ​សូម្បី​​តែ​ផ្ទៃមេឃគ្របដណ្ដប់ដោយ​ស្រមោលពណ៌បៃតង ហើយកាំរស្មីនៃ​​ពន្លឺ​ព្រះអាទិត្យ​ក៏មាន​​ពណ៌​បៃតង​ដែរ។ មាន​មនុស្ស​ម្នាកុះករទាំងប្រុស ទាំងស្រី ទាំងកុមារា ទាំងកុមារី​ដើរ​ទៅ​មក​ក្នុង​សំលៀក​បំពាក់​ពណ៌បៃតង ហើយ​ពួកគេ​ទាំងអស់​សុទ្ធ​តែមាន​ស្បែករាងបៃតង។ ពួកគេ​មើលទៅ​កាន់ដូរ៉ូធី និង​អ្នក​រួមដំណើរ​ជាមួយ​នាង​ដ៏ចម្លែក​ដោយ​បង្ហាញកែវភ្នែកដែលពោរពេញដោយ​ក្តី​ងឿងឆ្ងល់ ហើយ​ក្មេងៗទាំងអស់​រត់​ទៅ​ពួន​នៅ​ខាងក្រោយ​ម្តាយ​របស់​ពួកគេ នៅ​ពេល​ដែល​គេឃើញ​សត្វតោ ប៉ុន្តែ​គ្មាន​នរណាម្នាក់​និយាយ​ទៅកាន់​ពួកគេ​នោះទេ។ មាន​ហាង​ជា​ច្រើន​នៅ​តាម​ផ្លូវ ហើយ​ដូរ៉ូធីបាន​សង្កេត​ឃើញ​ថា ​អ្វីៗទាំងអស់​នៅ​ក្នុង​ហាងទាំងនោះ​សុទ្ធតែ​មាន​ពណ៌បៃតង។ ​ស្ករគ្រាប់ពណ៌បៃតង និង​ពោតលីង​ពណ៌បៃតង ក៏​ដូចជា​ស្បែកជើងពណ៌បៃតង មួកពណ៌បៃតង និង​សម្លៀកបំពាក់ពណ៌បៃតង​គ្រប់ប្រភេទ​សុទ្ធតែមានលក់នៅក្នុងហាង។ នៅកន្លែងមួយ មានបុរសម្នាក់​លក់​ទឹកក្រូចឆ្មាពណ៌បៃតង ហើយនៅ​​ពេលក្មេង​ៗ​ទិញ​ទឹកក្រូចឆ្មា​នោះ ដូរ៉ូធី​បាន​សង្កេត​ឃើញថា ពួកគេ​បានប្រើកាក់ពណ៌បៃតងទៅទិញ។ \n\nនៅ​ទីនោះ​ហាក់ដូចជា​គ្មាន​សត្វសេះ ឬ​សត្វផ្សេង​ទៀតសោះ។ ពួកគេ​ដឹក​ជញ្ជូន​សម្ភារៈ​ទាំងអស់​តាម​រយៈ​រទេះ​​រុញ​ពណ៌បៃតង។ ពួកគេ​គ្រប់គ្នា​ហាក់បី​ដូចជា​រស់នៅ​ប្រកប​ដោយក្ដី​រីករាយ និង​ភាពសម្បូរ​សប្បាយ​ណាស់។"</string>
     <string name="font_size_save" msgid="3450855718056759095">"យល់​ព្រម​"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"ឧបករណ៍​ផ្ទុក​យូអេសប៊ី"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"កាត​អេសឌី"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"កំហុស"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz band មិនមានផ្តល់ជូននៅក្នុងប្រទេសនេះទេ"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ពេល​ជិះ​យន្ត"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ការ​ជូន​ដំណឹង​បណ្ដាញ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"ជូនដំណឹង​រាល់​ពេល​មាន​បណ្ដាញ​សាធារណៈ"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"ជៀសវាង​ការ​តភ្ជាប់​ដែល​ខ្សោយ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"កុំ​ប្រើ​បណ្ដាញ​វ៉ាយហ្វាយ លុះ​ត្រា​វា​មាន​ការ​តភ្ជាប់​អ៊ីនធឺណិត​ល្អ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ប្រើ​តែ​បណ្ដាញ​ដែល​មាន​ការ​តភ្ជាប់​អ៊ីនធឺណិត​ល្អ"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"ប្ដូរ​ទីតាំង​ដំឡើង​ដែល​ពេញ​ចិត្ត​សម្រាប់​កម្មវិធី​ថ្មីៗ"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"បិទ​កម្មវិធី​ជាប់​ជា​មួយ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"បិទដំណើរការកម្មវិធី"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ប្រសិន​បើ​អ្នក​បិទ​កម្មវិធីនេះ Android និង​កម្មវិធី​ផ្សេង​ទៀត​អាច​នឹង​លែង​ដំណើរការ​ដូច​ដែល​អ្នក​ចង់បាន​ទៀត​ឡើយ។"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"លុប​ទិន្នន័យ និង​បិទ​កម្មវិធី?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ប្រសិន​បើ​អ្នក​បិទ​កម្មវិធីនេះ Android និង​កម្មវិធី​ផ្សេង​ទៀត​អាច​នឹង​លែង​ដំណើរការ​ដូច​ដែល​អ្នក​ចង់​បាន​ទៀត​ឡើយ។ ទិន្នន័យ​របស់អ្នក​នឹង​ត្រូវ​បាន​លុប​ផង​ដែរ។"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"បិទ​ការ​ជូន​ដំណឹង?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"បើ​អ្នក​បិទ​ការ​ជូន​ដំណឹង​សម្រាប់​កម្មវិធី​នេះ អ្នក​អាច​បាត់​ការ​ជូន​ដំណឹង និង​បច្ចុប្បន្នភាព​សំខាន់​ៗ។"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"ហាង"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">បង្ហាញធាតុ %d ដែលបានលាក់</item>
       <item quantity="one">បង្ហាញធាតុ %d ដែលបានលាក់</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"បណ្តាញ និង​អ៊ីនធឺណិត"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"ឧបករណ៍ដែលបានភ្ជាប់"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"កម្មវិធី និងការជូនដំណឹង"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"អ្នកប្រើ និងគណនី"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"ការជូនដំណឹង"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"សារៈសំខាន់"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"មិនបាន​កំណត់"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"កុំ​បង្ហាញ​ការ​ជូនដំណឹង"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"គ្មាន​សំឡេង ឬ​ការ​រំខាន​ដល់​ការ​មើល​ឡើយ"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"បង្ហាញ​ស្ងាត់ៗ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"បន្លឺ​សំឡេង"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"បន្លឺ​សំឡេង និង​លេច​ឡើង​នៅលើ​អេក្រង់"</string>
     <string name="importance_reset" msgid="7458420788555607007">"កំណត់​ឡើងវិញ"</string>
     <string name="show_silently" msgid="2222875799232222056">"បង្ហាញស្ងាត់ៗ"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"កុំបន្លឺសំឡេង ញ័រ ឬលោតបង្ហាញការជូនដំណឹងទាំងនេះទៅក្នុងការបង្ហាញនៃអេក្រង់បច្ចុប្បន្ន។"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"កំពុង​ផ្ទុក​កម្មវិធី..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ប៉ុស្តិ៍"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"រារាំងទាំងអស់"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"កុំ​បង្ហាញ​ការ​ជូនដំណឹង​ទាំង​នេះ"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"បង្ហាញ​ការ​ជូន​ដំណឹង"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"កុំ​បង្ហាញ​ការ​ជូន​ដំណឹង​នៅក្នុង​ផ្ទាំង​ទម្លាក់ ឬ​នៅលើ​ឧបករណ៍​ភ្ជាប់​ជាមួយ​កុំព្យូទ័រ"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"បង្ហាញ​ស្លាក​សញ្ញា"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"បង្ហាញ​ការ​ជូន​ដំណឹង​ជា​ស្លាកសញ្ញា​នៅ​លើ​កម្មវិធី Home នេះ ប្រសិន​បើ​​ស្គាល់។"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"បដិសេធរបៀបកុំរំខាន"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"អនុញ្ញាតឲ្យការជូនដំណឹងទាំងនេះបន្តរំខាន នៅពេលដែលរបៀបកុំរំខានត្រូវបានកំណត់ទៅ របៀបអាទិភាពប៉ុណ្ណោះ"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"នៅលើអេក្រង់ជាប់សោ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"កុំបង្ហាញម្តងទៀត"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"ស្នើ​សុំ​ជា​"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"បញ្ចូលគណនី"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"ព័ត៌មាន​អំពី​ប្រព័ន្ធ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"ការកំណត់ប្រវត្តិរូបការងារ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"ការស្វែងរកទំនាក់ទំនង"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"អនុញ្ញាតការស្វែងរកទំនាក់ទំនងដោយស្ថាប័នរបស់អ្នកដើម្បីកំណត់អត្តសញ្ញាណអ្នកហៅ និងលេខទំនាក់ទំនង"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"របាយការណ៍អំពីបញ្ហាថ្មីបំផុតរបស់អ្នក"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"កំណត់ហេតុសុវត្ថិភាពថ្មីបំផុតរបស់អ្នក"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"កុំឲ្យសោះ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"រូបថត និង​វីដេអូ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"តន្រ្តី និង​សំឡេង"</string>
     <string name="storage_games" msgid="7703159201697117621">"ហ្គេម"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"កម្មវិធី​ផ្សេង​ទៀត"</string>
     <string name="storage_files" msgid="8581083146777364063">"ឯកសារ"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ទំហំផ្ទុក​ក្នុង​ទូរសព្ទ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"ប្រើ​អស់ <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> "</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"ទំនេរ <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 9822402..0a41c63 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"ಮಾದರಿ ಪಠ್ಯ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Oz ನ ಅದ್ಭುತವಾದ ವಿಜಾರ್ಡ್‌"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"ಅಧ್ಯಾಯ 11: Oz ನ ಅದ್ಭುತವಾದ ಎಮೆರಾಲ್ಡ್ ಸಿಟಿ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"ಹಸಿರು ಕನ್ನಡಕಗಳ ಮೂಲಕ ಕಣ್ಣುಗಳನ್ನು ರಕ್ಷಿಸಿಕೊಳ್ಳುತ್ತಲೇ ಡರೋಥಿ ಹಾಗೂ ಅವರ  ಸ್ನೇಹಿತರು ಮೊದಲ ಬಾರಿಗೆ ಅದ್ಭುತ ನಗರದ ವೈಭವ ಕಂಡು ವಿಸ್ಮಯಗೊಂಡರು. ಬೀದಿಗಳ ಅಕ್ಕಪಕ್ಕ ಸುಂದರವಾದ ಮನೆಗಳಿದ್ದವು. ಎಲ್ಲವನ್ನೂ ಹಸಿರು ಅಮೃತ ಶಿಲೆಯಿಂದ ಕಟ್ಟಲಾಗಿತ್ತು ಹಾಗೂ ಹೊಳೆಯುವ ಪಚ್ಚೆಗಳಿಂದ ಎಲ್ಲೆಡೆ ಅಲಂಕರಿಸಲಾಗಿತ್ತು. ಅವರು ಅದೇ ಹಸಿರು ಅಮೃತ ಶಿಲೆ ಮತ್ತು ಪಚ್ಚೆಗಳ ಸಾಲುಗಳಿಂದ ಒಟ್ಟಿಗೆ ಕೂಡಿರುವ ರಸ್ತೆಗಳು, ಹತ್ತಿರ-ಹತ್ತಿರವಾಗಿ ಹೊಂದಿಸಲಾದ ಮತ್ತು ಸೂರ್ಯನ ಪ್ರಕಾಶತೆಯಲ್ಲಿ ಹೊಳೆಯುತ್ತಿರುವ ಕಾಲುಹಾದಿಯಲ್ಲಿ ನಡೆದರು. ಕಿಟಕಿಯ ಫಲಕಗಳನ್ನು ಹಸಿರು ಗಾಜಿನಿಂದ ಮಾಡಲಾಗಿತ್ತು; ಅಲ್ಲದೆ ನಗರದ ಆಕಾಶವೂ ಹಸಿರು ಛಾಯೆಯಿಂದ ಕೂಡಿತ್ತು ಮತ್ತು ಸೂರ್ಯನ ಕಿರಣಗಳು ಹಸಿರಿನಿಂದ ಕಂಗೊಳಿಸುತ್ತಿದ್ದವು. \n\nಅನೇಕ ಜನರು, ಪುರುಷರು, ಮಹಿಳೆಯರು ಮತ್ತು ಮಕ್ಕಳು ಬಂದಿದ್ದರು, ನಡೆದಾಡುತ್ತಿದ್ದರು ಹಾಗೂ ಈ ಎಲ್ಲರೂ ಹಸಿರು ಬಟ್ಟೆಯನ್ನು ಧರಿಸಿದ್ದರು ಜೊತೆಗೆ ಹಸಿರು ಚರ್ಮ ಹೊಂದಿದ್ದರು. ಅವರು ಡರೊಥಿಯನ್ನು ನೋಡಿದರು ಮತ್ತು ಅವರು ತಮ್ಮ ಚಕಿತಗೊಳ್ಳುವ ಕಣ್ಣುಗಳಿಂದ ಕಂಪನಿಯನ್ನು ಆಶ್ಚರ್ಯದಿಂದ ನೋಡುತ್ತಿದ್ದರು ಮತ್ತು ಎಲ್ಲಾ ಮಕ್ಕಳು ಸಿಂಹವನ್ನು ನೋಡಿದ ರೀತಿಯಲ್ಲಿ ತಮ್ಮ ತಾಯಿ ಹಿಂದೆ ಅಡಗಿಕೊಂಡವು; ಆದರೆ ಯಾರೊಬ್ಬರೂ ಇವರೊಂದಿಗೆ ಮಾತನಾಡಲಿಲ್ಲ. ಅನೇಕ ಅಂಗಡಿಗಳು ಬೀದಿಯಲ್ಲಿದ್ದವು, ಡರೊಥಿ ಮೂಲಕ ನೋಡಿದಾಗ ಅವುಗಳಲ್ಲಿ ಎಲ್ಲವೂ ಹಸಿರಾಗಿ ಕಂಡಿತು. ಮಾರಾಟಕ್ಕಿಡಲಾದ ಹಸಿರು ಕ್ಯಾಂಡಿ ಮತ್ತು ಹಸಿರು ಪಾಪ್‌-ಕಾರ್ನ್‌, ಜೊತೆಗೆ ಹಸಿರು ಶೂ, ಹಸಿರು ಟೋಪಿಗಳು ಮತ್ತು ಎಲ್ಲ ವಿಂಗಡನೆಗಳ ಹಸಿರು ಬಟ್ಟೆಗಳು ಮತ್ತು ಒಂದು ಸ್ಥಳದಲ್ಲಿ ಒಬ್ಬ ವ್ಯಕ್ತಿ ಹಸಿರು ನಿಂಬೆ ಪಾನಕ ಮಾರಾಟ ಮಾಡುತ್ತಿದ್ದನು ಮತ್ತು ಇದನ್ನು ಮಕ್ಕಳು ಖರೀದಿಸಿದಾಗ ಅವರು ಹಸಿರು ನಾಣ್ಯಗಳನ್ನು ಕೊಟ್ಟು ಖರೀದಿಸುತ್ತಿರುವುದನ್ನು ನೋಡಲಾಯಿತು. \n\nಯಾವುದೇ ಕುದುರೆಗಳು ಅಥವಾ ಯಾವುದೇ ರೀತಿಯ ಪ್ರಾಣಿಗಳು ಅಲ್ಲಿ ಕಾಣುತ್ತಿರಲಿಲ್ಲ; ಮಕ್ಕಳು ಬಂಡಿಯನ್ನು ತಳ್ಳುವುದಕ್ಕೂ ಮೊದಲು, ಒಬ್ಬ ವ್ಯಕ್ತಿಯು ಸಣ್ಣ ಹಸಿರು ಬಂಡಿಗಳಲ್ಲಿ ಸುತ್ತಮುತ್ತಲಿನ ವಸ್ತುಗಳನ್ನು ಸಾಗಿಸುತ್ತಿರುವುದು ಕಂಡುಬಂದಿತು. ಎಲ್ಲರೂ ಸಂತೋಷ ಮತ್ತು ತೃಪ್ತಿ ಹಾಗೂ ಸಮೃಧ್ಧ ಭಾವನೆಯಿಂದ ಇರುವಂತೆ ತೋರುತ್ತಿತ್ತು."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ಸರಿ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB ಸಂಗ್ರಹಣೆ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD ಕಾರ್ಡ್"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ದೋಷ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"ಈ ದೇಶದಲ್ಲಿ 5 GHz ಬ್ಯಾಂಡ್ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿ"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ನೆಟ್‌ವರ್ಕ್‌ ಅಧಿಸೂಚನೆ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"ಎಲ್ಲಿಯಾದರೂ ಸಾರ್ವಜನಿಕ ನೆಟ್‌ವರ್ಕ್‌ ಲಭ್ಯವಿದ್ದಲ್ಲಿ ಸೂಚಿಸಿ"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"ಕಳಪೆ ಸಂಪರ್ಕಗಳಿಂದ ದೂರವಿರು"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Wi‑Fi ನೆಟ್‌ವರ್ಕ್‌ ಉತ್ತಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಹೊಂದಿಲ್ಲದಿದ್ದರೆ ಅದನ್ನು ಬಳಸಬೇಡ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ಉತ್ತಮ ಇಂಟರ್ನೆಟ್‌ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಮಾತ್ರ ಬಳಸಿ"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"ಹೊಸ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಪ್ರಾಶಸ್ತ್ಯದ ಸ್ಥಾಪನೆ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸಿ"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"ಅಂತರ್‌ನಿರ್ಮಿತ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದೇ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ಅಪ್ಲಿಕೇಶನ್‌ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ Android  ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಉದ್ದೇಶಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ಡೇಟಾವನ್ನು ಅಳಿಸಿ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದೇ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ Android  ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಉದ್ದೇಶಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಹ ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್‌ ಮಾಡುವುದೇ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ ನೀವು ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್‌ ಮಾಡಿದರೆ, ನೀವು ಪ್ರಮುಖ ಎಚ್ಚರಿಕೆಗಳು ಮತ್ತು ನವೀಕರಣಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"ಅಂಗಡಿ"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%d ಮರೆಮಾಡಲಾದ ಐಟಂಗಳನ್ನು ತೋರಿಸಿ</item>
       <item quantity="other">%d ಮರೆಮಾಡಲಾದ ಐಟಂಗಳನ್ನು ತೋರಿಸಿ</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಇಂಟರ್ನೆಟ್"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಸಾಧನಗಳು"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"ಬಳಕೆದಾರ ಮತ್ತು ಖಾತೆಗಳು"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"ಅಧಿಸೂಚನೆಗಳು"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"ಪ್ರಾಮುಖ್ಯತೆ"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"ಹೊಂದಿಸಿಲ್ಲ"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"ಎಂದಿಗೂ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಬೇಡಿ"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ಯಾವುದೇ ಧ್ವನಿ ಅಥವಾ ದೃಶ್ಯ ಅಡಚಣೆಗಳಿಲ್ಲ"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"ಮೌನವಾಗಿ ತೋರಿಸಿ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ಧ್ವನಿ ಮಾಡಿ"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ಪರದೆಯ ಮೇಲೆ ಧ್ವನಿಮಾಡಿ ಮತ್ತು ಪಾಪ್ ಮಾಡಿ"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ಮರುಹೊಂದಿಸಿ"</string>
     <string name="show_silently" msgid="2222875799232222056">"ಮೌನವಾಗಿ ತೋರಿಸು"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ಪ್ರಸ್ತುತ ಪರದೆಯಲ್ಲಿ ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಲು ಧ್ವನಿ, ವೈಬ್ರೇಷನ್ ಅಥವಾ ಇಣುಕು ನೋಟ ಮಾಡಬೇಡ."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ಚಾನಲ್‌ಗಳು"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"ಎಲ್ಲವನ್ನೂ ನಿರ್ಬಂಧಿಸು"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಎಂದಿಗೂ ತೋರಿಸಬೇಡ"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸು"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ಶೇಡ್ ಅಥವಾ ಪೆರಿಪೆರಲ್ ಸಾಧನಗಳಲ್ಲಿ ಎಂದಿಗೂ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಬೇಡಿ"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ಬ್ಯಾಡ್ಜ್‌ ತೋರಿಸಿ"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ಬೆಂಬಲಿಸಿದರೆ, ಮುಖಪುಟ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬ್ಯಾಡ್ಜ್‌ಗಳಂತಿರುವ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಿ."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ಅಡಚಣೆ ಮಾಡಬೇಡ ಅತಿಕ್ರಮಿಸು"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"ಅಡಚಣೆ ಮಾಡಬೇಡ ಅನ್ನು ಆದ್ಯತೆಗೆ ಹೊಂದಿಸಿದಾಗ ಮಾತ್ರ ಅಡ್ಡಿಪಡಿಸಲು ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮುಂದುವರಿಸಲು ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"ಲಾಕ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"ಮತ್ತೆ ತೋರಿಸಬೇಡ"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"ಇದರಂತೆ ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"ಖಾತೆ ಸೇರಿಸಿ"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"ಸಿಸ್ಟಮ್ ಮಾಹಿತಿ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"ಸಂಪರ್ಕ ಹುಡುಕಿ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"ಕರೆದಾತರು ಮತ್ತು ಸಂಪರ್ಕಗಳನ್ನು ಗುರುತಿಸಲು ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಮೂಲಕ ಸಂಪರ್ಕ ಹುಡುಕಾಟಗಳಿಗೆ ಅನುಮತಿಸಿ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಬಗ್‌ ವರದಿ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"ನಿಮ್ಮ ಅತ್ಯಂತ ಇತ್ತೀಚಿನ ಭದ್ರತಾ ಲಾಗ್"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ಎಂದಿಗೂ ಇಲ್ಲ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"ಸಂಗೀತ ಮತ್ತು ಆಡಿಯೋ"</string>
     <string name="storage_games" msgid="7703159201697117621">"ಆಟಗಳು"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು"</string>
     <string name="storage_files" msgid="8581083146777364063">"ಫೈಲ್‌ಗಳು"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ಫೋನ್ ಸಂಗ್ರಹಣೆ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ಬಳಸಲಾಗಿದೆ"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ಮುಕ್ತ"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index af8153d..685a68b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"샘플 텍스트"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"오즈의 마법사"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11장: 오즈의 멋진 에메랄드 도시"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"도로시와 친구들은 녹색 안경으로 눈을 보호하고 있었는데도 처음에는 휘황찬란한 도시에 눈이 부셨습니다. 거리에는 녹색 대리석으로 지은 아름다운 집이 늘어서 있고 어디든지 반짝이는 에메랄드가 박혀 있었습니다. 같은 녹색 대리석으로 된 도로를 따라 걷는데 블록이 만나는 곳에는 에메랄드가 줄지어 촘촘히 박혀 있어서 햇빛에 반짝거리고 있었습니다. 창문이 녹색 유리로 되어 있었으며, 도시를 덮고 있는 하늘도 녹색을 띠고 있고 햇빛도 녹색이었습니다. \n\n남녀노소 많은 사람들이 걸어 다니고 있었는데 모두 녹색 옷을 입고 피부도 녹색을 띠고 있었습니다. 도로시와 도로시의 특이하게 모인 친구들을 놀란 눈으로 쳐다보았으며 아이들은 사자를 보자 도망가서 엄마 뒤로 숨었지만, 말을 거는 사람은 없었습니다. 거리에 많은 상점이 있었으며 도로시가 들여다보니 안에 있는 모든 것이 녹색이었습니다. 녹색 사탕과 녹색 팝콘 그리고 갖가지 녹색 신발, 녹색 모자, 녹색 옷을 팔고 있었습니다. 한 남자가 녹색 레모네이드를 팔고 있는 곳이 있었는데 아이들이 살 때 도로시가 보니 녹색 동전을 내고 있었습니다. \n\n말이나 어떤 동물도 없는 것 같았고, 남자들이 작은 녹색 손수레에 짐을 싣고 밀어서 운반했습니다. 모두 행복하고 만족스러우며 풍족해 보였습니다."</string>
     <string name="font_size_save" msgid="3450855718056759095">"확인"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB 저장소"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD 카드"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"오류"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5GHz 대역은 이 국가에서 지원되지 않습니다."</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"비행기 모드"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"네트워크 알림"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"공용 네트워크가 사용 가능한 경우 알림"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"불량 네트워크 방지"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"인터넷 연결이 원활하지 않은 경우 Wi-Fi 네트워크를 사용하지 않음"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"인터넷 연결이 안정적인 네트워크만 사용합니다."</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"새 앱의 기본 설치 위치를 변경합니다."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"내장 앱을 사용중지하시겠습니까?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"앱 사용 중지"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"이 앱을 사용 중지하면 Android와 다른 앱이 제대로 작동하지 않을 수도 있습니다."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"데이터를 삭제하고 앱을 사용 중지하시겠습니까?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"이 앱을 사용 중지하면 Android와 다른 앱이 제대로 작동하지 않을 수도 있습니다. 또한 데이터가 삭제됩니다."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"알림을 사용 중지하시겠습니까?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"이 앱에서 알림을 사용하도록 설정하지 않으면 중요한 알리미와 업데이트를 놓칠 수 있습니다."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"스토어"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d개의 숨겨진 항목 표시</item>
       <item quantity="one">%d개의 숨겨진 항목 표시</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"네트워크 및 인터넷"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"연결된 기기"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"앱 및 알림"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"사용자 및 계정"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"알림"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"중요도"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"설정되지 않음"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"알림 표시 안함"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"소리나 시각적인 방해 없음"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"조용히 표시"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"소리로 알림"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"소리 및 화면 표시로 알림"</string>
     <string name="importance_reset" msgid="7458420788555607007">"초기화"</string>
     <string name="show_silently" msgid="2222875799232222056">"조용히 표시"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"현재 화면에서 소리, 진동, 알림 표시를 허용하지 않습니다."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"앱 로드 중..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"채널"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"모두 차단"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"이러한 알림을 다시 표시하지 않음"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"알림 표시"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"알림을 창이나 주변기기에 표시하지 않음"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"배지 표시"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"지원되는 경우 Home 앱에서 알림을 배지로 표시"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"알림 일시중지 무시"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"알림 일시중지가 중요 알림만으로 설정된 경우 이러한 알림을 계속 받도록 허용합니다."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"잠금 화면에서"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"다시 표시 안 함"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"요청 계정:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"계정 추가"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"시스템 정보"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"직장 프로필 설정"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"연락처 검색"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"조직에서 연락처를 검색하여 발신자 및 연락처를 확인할 수 있도록 허용합니다."</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"최근 버그 신고"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"최근 보안 로그"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"사용 안함"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"사진 및 동영상"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"음악 및 오디오"</string>
     <string name="storage_games" msgid="7703159201697117621">"게임"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"기타 앱"</string>
     <string name="storage_files" msgid="8581083146777364063">"파일"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"휴대전화 저장용량"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>"<xliff:g id="UNIT">^2</xliff:g> 사용"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> 사용 가능"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 2c39a8a..57387d1 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -85,8 +85,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Үлгү текст"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Оз өлкөсүнүн ажайып сыйкырчысы"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11-бөлүм: Оз өлкөсүнүн ажайып зумурут шаары"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Жашыл көз айнек тагынып турса да, Дороти менен достору жаркыраган ажайып шаарды көргөндө көздөрү уялып кетти. Шаардын көчөлөрүндөгү үйлөр жалаң гана жашыл мрамордон курулуп, күндүн нуруна чагылышып жалт-жулт эткен зымырыт таштары менен капталган. Жада калса алар өтүп бара жаткан көпүрө да жашыл мрамордон курулган экен. Бут астындагы мрамор төшөмөлөрдүн ортолору зымырыт таштары менен толтурулуп, алар күн нуруна жарк-журк этет. Терезелерге да жашыл айнек коюлуп, шаар үстүндө асман да, күн нурлары да жашыл түскө боёлуп турду. \n\nКөчөдө ары-бери өткөн адамдар да жашыл кийимдерди кийип, өңү-түстөрү да жашгылт тартып турат экен. Дороти менен анын кызыктай досторунун жанынан өткөн адамдар аларды айран таң калып карап, арстанды көргөн кичинекей балдар энелеринин аркаларына жашына калып жатышты. Шаардыктардын эч кимиси алардын жанына барып, сүйлөшүүгө даай алышкан жок. Дороти шаардын дүкөндөрүндө сатылып жаткан көйнөктөр, кийим-кечелер, бут кийимдер, шляпалар, момпосуйлар, жада калса, бадырак жүгөрүлөр да жашыл түстө экендигин байкады. Бир жерде балдар жашыл тыйындарды төлөп жашыл лимонад алып жатышат. \n\nШаарда, сыягы, жылкылар жана башка жаныбарлар жок окшойт, себеби эркектер буюмдарын жашыл арабаларга салып түртүп алышкан. Элдин баары бактылуу, жашоосуна ыраазы жана гүлдөп тургандай туюлду."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Жарайт"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB сактагыч"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD карта"</string>
@@ -670,8 +669,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Ката"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 ГГц жыштык тилкеси бул өлкөдө жеткиликтүү эмес"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Учак тартибинде"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Тармак эскертмеси"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Коомдук тармак жеткиликтүү болгондо эскертме берилсин"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Начар байланыштарга кошулбоо"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Жакшы интернет байланыш болмоюнча Wi‑Fi түйүнүн колдонбоо"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Туруктуу Интернет туташуусу менен камсыз кылган тармактар гана колдонулсун"</string>
@@ -1535,11 +1540,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Жаңы колдонмолор үчүн орнотуу жайын алмаштырыңыз"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Камтылган колд. токтотулсунбу?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Колдонмону өчүрүү"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Эгер бул колдонмону өчүрсөңүз, Android жана башка колдонмолор талаптагыдай иштебей калышы мүмкүн."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Берилиштер жок кылынып, колдонмо өчүрүлсүнбү?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Эгер бул колдонмону өчүрсөңүз, Android жана башка колдонмолор талаптагыдай иштебей калышы мүмкүн. Дайындарыңыз да жок болот."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Эскертмелер өчүрүлсүнбү?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Эгер сиз бул колдонмо үчүн эскертмелерди өчүрсөңүз, сиз маанилүү эскертүүлөрдү жана жаңыртууларды өткөзүп жиберишиңиз мүмкүн."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Дүкөн"</string>
@@ -2526,8 +2529,7 @@
       <item quantity="other">Жашырылган %d нерсе көрсөтүлсүн</item>
       <item quantity="one">Жашырылган %d нерсе көрсөтүлсүн</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Тармак жана Интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Туташкан түзмөктөр"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Колдонмолор жана эскертмелер"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Колдонуучу жана каттоо эсептери"</string>
@@ -2653,16 +2655,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Эскертмелер"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Маанилүүлүгү"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Коюлган эмес"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Эскертмелер эч качан көрсөтүлбөсүн"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Добуш да чыгарбасын, экранда да көрсөтүлбөсүн"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Үнсүз көрсөтүлсүн"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Добуш чыгарсын"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Добуш менен экранга калкып чыксын"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Баштапкы абалга келтирүү"</string>
     <string name="show_silently" msgid="2222875799232222056">"Үнсүз көрсөтүлсүн"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Үн чыгарылбасын, дирилдебесин же бул эскертмелер учурдагы экранда көрүнбөсүн."</string>
@@ -2691,16 +2688,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Колдонмолор жүктөлүүдө…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Каналдар"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Баарын бөгөттөө"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Бул эскертмелер эч качан көрсөтүлбөсүн"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Эскертмелерди көрсөтүү"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Эскертмелер эч качан көлөкөдө же сырткы түзмөктөрдө көрсөтүлбөсүн"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Бейджикти көрсөтүү"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Эгер колдоого алынса, эскертмелер Home колдонмосунда бейджик түрүндө көрсөтүлсүн."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Тынчымды албаны өзгөртүп коюу"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"\"Тынчымды алба режиминде\" \"Маанилүү гана\" деп белгиленсе ушул эскертмелерге уруксат берилет"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Кулпуланган экранда"</string>
@@ -3223,8 +3215,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Экинчи көрсөтүлбөсүн"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Төмөнкү катары талап кылууда"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Каттоо эсебин кошуу"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Тутумдун маалыматы"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Жумуш профилинин жөндөөлөрү"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Байланыштарды издөө"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Чалуучуларды жана байланыштарды аныктоо үчүн ишканаңыз байланыштарды издешине уруксат бериңиз"</string>
@@ -3315,16 +3306,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Мүчүлүштүк тууралуу акыркы кабарлооңуз"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Түзмөгүңүздүн эң акыркы коопсуздук таржымалы"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Эч качан"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Сүрөттөр жана видеолор"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музыка жана аудио"</string>
     <string name="storage_games" msgid="7703159201697117621">"Оюндар"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Башка колдонмолор"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файлдар"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Телефондун сактагычы"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ээленген"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> бош"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index daa608e..f4a8634 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"ຂໍ້ຄວາມຕົວຢ່າງ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ພໍ່ມົດອັດສະຈັນແຫ່ງອອດຊ໌"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"ບົດທີ 11: ເມືອງມໍລະກົດອັນໜ້າອັດສະຈັນຂອງອອດຊ໌"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Even with eyes protected by the green spectacles Dorothy and her friends were at first dazzled by the brilliancy of the wonderful City. The streets were lined with beautiful houses all built of green marble and studded everywhere with sparkling emeralds. They walked over a pavement of the same green marble, and where the blocks were joined together were rows of emeralds, set closely, and glittering in the brightness of the sun. The window panes were of green glass; even the sky above the City had a green tint, and the rays of the sun were green. \n\nThere were many people, men, women and children, walking about, and these were all dressed in green clothes and had greenish skins. They looked at Dorothy and her strangely assorted company with wondering eyes, and the children all ran away and hid behind their mothers when they saw the Lion; but no one spoke to them. Many shops stood in the street, and Dorothy saw that everything in them was green. Green candy and green pop-corn were offered for sale, as well as green shoes, green hats and green clothes of all sorts. At one place a man was selling green lemonade, and when the children bought it Dorothy could see that they paid for it with green pennies. \n\nThere seemed to be no horses nor animals of any kind; the men carried things around in little green carts, which they pushed before them. Everyone seeemed happy and contented and prosperous."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ຕົກລົງ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"ບ່ອນຈັດເກັບຂໍ້ມູນ USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD card"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ຜິດພາດ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"ຄື້ນ 5 GHz ແມ່ນ​ບໍ່​ມີ​ຢູ່​ໃນ​ປະ​ເທດ​ນີ້"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ໃນໂໝດການໃຊ້ເທິງຍົນ"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ການແຈ້ງເຕືອນເຄືອຂ່າຍ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"ແຈ້ງ​ເຕືອນ​ເມື່ອ​ມີ​ເຄືອ​ຂ່າຍ​ສາ​ທາ​ລະ​ນະ​ທີ່​ສາ​ມາດ​ໃຊ້​ໄດ້"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"ຫຼີກເວັ້ນເຄືອຂ່າຍທີ່ສັນຍານອ່ອນ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"ບໍ່ໃຊ້ເຄືອຂ່າຍ Wi-Fi ເວັ້ນເສຍແຕ່ມັນຈະມີຄວາມໄວການເຊື່ອມຕໍ່ອິນເຕີເນັດທີ່ດີ."</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ໃຊ້​ສະ​ເພາະ​ເຄືອ​ຂ່າຍ​ທີ່​ມີ​ການ​ເຊື່ອມ​ຕໍ່​ອິນ​ເຕີ​ເນັດ​ທີ່​ດີ​ເທົ່າ​ນັ້ນ"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"ປ່ຽນບ່ອນຕິດງຕັ້ງທີ່ຕ້ອງການສຳລັບແອັບຯໃໝ່"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"ປິດການນຳໃຊ້ແອັບຯທີ່ມາກັບເຄື່ອງ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ປິດການນຳໃຊ້ແອັບ"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ຫາກທ່ານປິດການນຳໃຊ້ແອັບນີ້, Android ແລະ ແອັບອື່ນອາດບໍ່ສາມາດເຮັດວຽກຕາມທີ່ຖືກອອກແບບມາໄດ້."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ລຶບຂໍ້ມູນ ແລະປິດການນຳໃຊ້ແອັບຯ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ຖ້າທ່ານປິດການນຳໃຊ້ແອັບນີ້, Android ແລະ ແອັບອື່ນອາດບໍ່ເຮັດໜ້າທີ່ຕາມທີ່ກຳນົດໄວ້ໄດ້. ຂໍ້ມູນຂອງທ່ານກໍຈະຖືກລຶບອອກໄປນຳ."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"ປິດການແຈ້ງເຕືອນ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ຫາກທ່ານປິດການແຈ້ງເຕືອນສຳລັບແອັບຯນີ້ແລ້ວ ທ່ານອາດພາດການແຈ້ງເຕືອນ ແລະອັບເດດສຳຄັນໄດ້."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"ຮ້ານຄ້າ"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">ສະແດງ %d ລາຍການທີ່ເຊື່ອງໄວ້</item>
       <item quantity="one">ສະແດງ %d ລາຍການທີ່ເຊື່ອງໄວ້</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"ເຄືອຂ່າຍ ແລະ ອິນເຕີເນັດ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"ອຸປະກອນທີ່ເຊື່ອມຕໍ່ແລ້ວ"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ແອັບ ແລະ ການແຈ້ງເຕືອນ"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"User &amp; accounts"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"ການແຈ້ງເຕືອນ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"ຄວາມສໍາຄັນ"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"ບໍ່ໄດ້ຕັ້ງ"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"ຢ່າສະແດງການແຈ້ງເຕືອນອີກ"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ບໍ່ມີສຽງ ຫຼື ການລົບກວນໃນໜ້າຈໍ"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"ສະແດງແບບງຽບໆ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ເຮັດສຽງ"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ເຮັດສຽງດັງ ແລະ ສະແດງຂຶ້ນໃນໜ້າຈໍ"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ຣີເຊັດ"</string>
     <string name="show_silently" msgid="2222875799232222056">"ສະແດງແບບມິດໆ"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ບໍ່ໃຊ້ສຽງ, ສັ່ນ ຫຼື ເຫັນການແຈ້ງເຕືອນເຫຼົ່ານີ້ໃນໜ້າຈໍປັດຈຸບັນ."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"​ກຳ​ລັງ​ໂຫລດ​ແອັບຯ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ຊ່ອງ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"ບ​ລັອກ​ທັງ​ໝົດ"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ຢ່າສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້ອີກ"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"ສະແດງການແຈ້ງເຕືອນ"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ຢ່າສະແດງການແຈ້ງເຕືອນໃນເງົາ ຫຼື ອຸປະກອນຕໍ່ພ່ວງອີກ."</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ສະແດງປ້າຍ"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ສະແດງການແຈ້ງເຕືອນເປັນປ້າຍໃນແອັບ Home ແທນ, ຫາກຮອງຮັບ."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ຍົກເລີກຫ້າມລົບກວນ"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"ອະນຸຍາດ​ໃຫ້ການ​ແຈ້ງ​ເຕືອນ​​ເຫຼົ່າ​ນີ້​ສືບ​ຕໍ່​ຂັດ​ຈັງຫວະ ​ເມື່ອຄຸນສົມບັດ ຫ້າມ​ລົບ​ກວນ ຖືກ​ຕັ້ງ​ເປັນແບບບຸລິ​ມະ​ສິດ​ເທົ່າ​ນັ້ນ"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"ຢູ່ໜ້າຈໍລັອກ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"ບໍ່ຕ້ອງສະແດງອີກ"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"​ກຳ​ລັງ​ຮ້ອງ​ຂໍ​ໃນ​ນາມ"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"ເພີ່ມບັນຊີ"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"ຂໍ້ມູນລະບົບ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"ການຕັ້ງຄ່າໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"ຊອກຫາລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"ອະນຸຍາດໃຫ້ລາຍຊື່ຜູ້ຕິດຕໍ່ຊອກຫາໂດຍອົງກອນຂອງທ່ານໄດ້ເພື່ອຢືນຢັນຜູ້ໂທ ແລະ ລາຍຊື່ຜູ້ຕິດຕໍ່ຕ່າງໆ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Your most recent bug report"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Your most recent security log"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ບໍ່ມີກຳນົດ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ຮູບພາບ ແລະ ວິດີໂອ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Music &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"ເກມ"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"ແອັບຯອື່ນໆ"</string>
     <string name="storage_files" msgid="8581083146777364063">"ໄຟລ໌"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Phone Storage"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ໃຊ້ໄປແລ້ວ"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"ຫວ່າງ <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f88396e..27ecfa0 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Pavyzdinis tekstas"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Nuostabusis Ozo šalies burtininkas"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11 skyrius. Nuostabusis Smaragdo miestas"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Netgi žaliais akiniais apsaugoję akis Dorotė ir jos draugai iš pradžių buvo apstulbinti nuostabiojo miesto žvilgesiu. Gatvėse stovėjo gražūs namai, pastatyti iš žalio marmuro ir nusagstyti žvilgančiais smaragdais. Jie ėjo tokiu pačiu žaliu marmuru grįstu šaligatviu, o kvartalų sujungimo vietos buvo papuoštos viena šalia kitos esančiomis saulėje žvilgančių smaragdų eilėmis. Langų stiklai buvo žali, netgi dangaus virš miesto ir saulės spindulių spalva buvo žalia. \n\nMieste buvo daug žmonių (vyrų, moterų ir vaikų), kurie vaikščiojo apsirengę žaliais drabužiais. Jų oda buvo žalsvos spalvos. Į Dorotę ir jos keistą draugiją visi žiūrėjo su nuostaba, o pamatę Liūtą vaikai bėgo tolyn ir slėpėsi už savo mamų, tačiau niekas su jais nešnekėjo. Gatvėse buvo daug parduotuvių, o Dorotė pastebėjo, kad jose viskas taip pat buvo žalios spalvos. Viduje buvo parduodami žali saldainiai ir žali kukurūzų spragėsiai bei įvairūs žali batai, žalios kepurės ir žali drabužiai. Vienoje vietoje vyras siūlė nusipirkti žalio limonado ir Dorotė pastebėjo, kad jį perkantys vaikai atsiskaitė žaliomis monetomis. \n\nMieste nebuvo arklių ar kitų gyvūnų. Vyrai viską vežiojo mažais žaliais priekyje stumiamais vežimais. Visi atrodė laimingi, patenkinti ir turtingi."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Gerai"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB atmintinė"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kortelė"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Klaida"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz juosta neprieinama šioje šalyje"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Veikia lėktuvo režimu"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Tinklo įspėjimas"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Pranešti, kai pasiekiamas viešasis tinklas"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Vengti prasto ryšio"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nenaudoti „Wi-Fi“ tinklo, jei jo interneto ryšys nėra geras"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Naudoti tik tuos tinklus, kurių stiprus interneto ryšys"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Pakeisti pageidaujamą naujų programų diegimo vietą"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Neleisti integruotos programos?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Išjungti programą"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Jei išjungsite šią programą, „Android“ ir kitos programos gali neveikti, kaip numatyta."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Ištrinti duomenis ir neleisti programos?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Jei išjungsite šią programą, „Android“ ir kitos programos gali neveikti, kaip numatyta. Be to, bus ištrinti duomenys."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Išjungti pranešimus?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Jei išjungsite šios programos pranešimus, galite praleisti svarbius įspėjimus ir naujinius."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Parduotuvė"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="many">Rodyti %d paslėpto elemento</item>
       <item quantity="other">Rodyti %d paslėptų elementų</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Tinkas ir internetas"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Prijungti įrenginiai"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Programos ir pranešimai"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Naudotojas ir paskyros"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Pranešimai"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Svarba"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nenustatyta"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Niekada nerodyti pranešimų"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Neskambėti ir nepertraukti vaizdo"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Rodyti tyliai"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Skambėti"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Skambėti ir iššokti ekrane"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Nustatyti iš naujo"</string>
     <string name="show_silently" msgid="2222875799232222056">"Rodyti tyliai"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Neskambėti, nevibruoti arba nerodyti šių pranešimų dabartiniame ekrane."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Įkeliamos programos..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanalai"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokuoti viską"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Niekada nerodyti šių pranešimų"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Rodyti pranešimus"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Niekada nerodyti pranešimų skydelyje ar išoriniuose įrenginiuose"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Rodyti ženklelį"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"„Home“ programoje rodyti pranešimus kaip ženklelius, jei tai palaikoma."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Nepaisyti netrukdymo režimo"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Leisti ir toliau teikti šiuos pranešimus, kai netrukdymo režimas nustatytas į „Tik prioritetiniai“"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Užrakinimo ekrane"</string>
@@ -3290,8 +3282,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Daugiau nerodyti"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Užklausa pateikiama kaip"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Pridėti paskyrą"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Sistemos informacija"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Darbo profilio nustatymai"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktų paieška"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Leiskite nustatyti skambintojus ir kontaktus atliekant organizacijos kontaktų paiešką"</string>
@@ -3390,16 +3381,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Pats naujausias pranešimas apie riktą"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Pats naujausias saugos žurnalas"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Niekada"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Nuotraukos ir vaizdo įrašai"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzika ir garso įrašai"</string>
     <string name="storage_games" msgid="7703159201697117621">"Žaidimai"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Kitos programos"</string>
     <string name="storage_files" msgid="8581083146777364063">"Failai"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefono saugykla"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Panaudota: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> nemokamai"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 6c39b30..55be0d4 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Teksta paraugs"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Brīnumainais burvis no Oza zemes"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. nodaļa: Oza zemes brīnumainā Smaragda pilsēta"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Pat raugoties caur zaļajām brillēm, kas sargāja acis, Dorotija un viņas draugi sākotnēji apžilba no brīnišķīgās pilsētas spožuma. Ielas greznoja skaisti zaļa marmora nami, viscaur izgreznoti ar vizuļojošu smaragdu. Ielas bija izklātas ar tāda paša zaļa marmora bruģi, kura bluķu spraugās bija iestrādātas cieši kopā saliktu smaragdu rindas, kas laistījās saules gaismā. Logos bija zaļa stikla rūtis; pat debesīm virs pilsētas bija zaļa nokrāsa, un arī saules stari šķita zaļi. \n\nIelās bija daudz ļaužu — gan vīrieši, gan sievietes, gan bērni —, un visi bija tērpušies zaļās drēbēs, un tiem bija zaļgana āda. Cilvēki ar izbrīnu uzlūkoja Dorotiju un viņas savādos pavadoņus, un, ieraugot Gļēvo Lauvu, bērni bēga un slēpās aiz savām mātēm. Taču neviens viņus neuzrunāja. Visapkārt bija daudz veikalu, un Dorotija ievēroja, ka arī tajos viss ir zaļš. Tika piedāvātas gan zaļas ledenes un zaļi kukurūzas našķi, gan zaļas kurpes, zaļas cepures un visu veidu zaļas drēbes. Kāds vīrs tirgoja zaļu limonādi, un Dorotija redzēja, ka bērni to pērk, maksājot ar zaļiem penijiem. \n\nNekur nemanīja nevienu zirgu vai citu dzīvnieku; vīri pārvadāja lietas mazos zaļos ratiņos, kurus tie ejot stūma pa priekšu. Visi šķita laimīgi, apmierināti un pārtikuši."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Labi"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB krātuve"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD karte"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Kļūda"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz josla nav pieejama šajā valstī."</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Lidmašīnas režīmā"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Tīkla paziņojums"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Paziņot, kad ir pieejams publisks tīkls"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Nelietot vājus savienojumus"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nelietot Wi-Fi tīklu, ja vien tam nav labs interneta savienojums"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Izmantot tikai tīklus ar labu interneta savienojumu"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Mainīt jaunu lietotņu vēlamo instalēšanas vietu"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Vai atspējot iebūvēto lietotni?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Atspējot lietotni"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ja atspējosiet šo lietotni, Android un citas lietotnes, iespējams, vairs nedarbosies, kā paredzēts."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vai dzēst datus un atspējot lietotni?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ja atspējosiet šo lietotni, Android un citas lietotnes, iespējams, vairs nedarbosies, kā paredzēts. Tiks izdzēsti arī jūsu dati."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vai izslēgt paziņojumus?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Izslēdzot paziņojumus šajā lietotnē, varat palaist garām svarīgus brīdinājumus un atjauninājumus."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Veikals"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="one">Rādīt %d slēptu vienumu</item>
       <item quantity="other">Rādīt %d slēptus vienumus</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Tīkls un internets"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Pievienotās ierīces"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Lietotnes un paziņojumi"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Lietotāji un konti"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Paziņojumi"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Svarīgums"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nav iestatīts"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nekad nerādīt paziņojumus"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez skaņas signāla vai vizuāla paziņojuma"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Rādīt bez skaņas signāla"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Atskaņot skaņas signālu"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Atskaņot skaņas signālu un īslaicīgi parādīt ekrānā"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Atiestatīt"</string>
     <string name="show_silently" msgid="2222875799232222056">"Rādīt bez skaņas signāla"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Nerādīt šos paziņojumus pašreizējā ekrāna skatā, kā arī neatskaņot to skaņas signālu un nevibrēt"</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Notiek lietotņu ielāde..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanāli"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloķēt visus"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nekad nerādīt šos paziņojumus"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Rādīt paziņojumus"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nekad nerādīt paziņojumus panelī vai perifērijas ierīcēs"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Rādīt emblēmu"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Ja tiek atbalstīts, rādīt paziņojumus kā emblēmas lietotnē Sākums."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ignorēt režīmu “Netraucēt”"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Ļaut šiem paziņojumiem pārtraukt arī turpmāk, ja režīms “Netraucēt” ir iestatīts uz “Tikai prioritārie”"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Bloķēšanas ekrānā"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Vairs nerādīt"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Pieprasījums tiks iesniegts, izmantojot kontu"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Pievienot kontu"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Sistēmas informācija"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Darba profila iestatījumi"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktpersonu meklēšana"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Atļaut identificēt zvanītājus un kontaktpersonas, kad organizācijā tiek meklētas kontaktpersonas"</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Jūsu pēdējais kļūdas pārskats"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Jūsu pēdējais drošības žurnāls"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nekad"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotoattēli un videoklipi"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Mūzika un audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Spēles"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Citas lietotnes"</string>
     <string name="storage_files" msgid="8581083146777364063">"Faili"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Tālruņa krātuve"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> izmantoti"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> bez maksas"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 63c7758..a8d1a89 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Примерок на текст"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Чудесниот волшебник од Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Поглавје 11: Чудесниот смарагден град Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"И покрај тоа што очите им беа заштитени со зелени очила, во почетокот Дороти и нејзините пријатели беа заслепени од блескотот на прекрасниот град. По должината на улиците имаше редици прекрасни куќи, изградени од зелен мермер и украсени насекаде со блескави смарагди. Одеа по тротоар од зелен мермер, а на местата каде што се спојуваа мермерните плочи имаше низи од смарагди што наредени една до друга светкаа на сонцето. Стаклата на прозорците беа зелени, дури и небото над градот беше зеленикаво, па и самите сончеви зраци се зеленееја. \n\nПокрај нив поминуваа многу луѓе - мажи, жени и деца - сите беа облечени во зелени облеки и имаа зеленикава кожа. Чудејќи се, ги погледнуваа Дороти и нејзиното необично друштво, а сите деца бегаа од нив и се криеја зад своите мајки штом ќе го забележеа лавот; но никој не им се обрати. На улицата имаше многу дуќани и Дороти забележа дека и во нив сѐ е зелено. Тука се продаваа зелени бонбони и зелени пуканки, како и зелени чевли и зелена облека од сите видови. На едно место некој човек продаваше зелена лимонада. Кога децата ја купуваа, Дороти виде дека ја плаќаат со зелени парички. \n\nТука, изгледа, немаше ни коњи ни некои други животни; луѓето туркаа пред себе мали зелени колички и секој изгледаше среќен и задоволен како да живее во благосостојба."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Во ред"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"УСБ меморија"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD картичка"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Исклучено"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Недостапен зашто комуникацијата на блиско поле (NFC) е исклучен"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Кога функцијава е вклучена, може да вршите beam на содржината на апликацијата на друг уред со опција за NFC со држење на уредите блиску еден до друг. На пример, може да вршите beam на веб-страници, видеа на YouTube, контакти од лица и др.\n\nСамо приближете ги уредите еден до друг (обично од задната страна), а потоа допрете го вашиот екран. Апликацијата утврдува на што ќе се изврши вршите beam."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Кога функцијава е вклучена, може да вршите пренос на содржината на апликацијата на друг уред со опција за NFC со држење на уредите блиску еден до друг. На пример, може да вршите пренос на веб-страници, видеа на YouTube, контакти од лица и др.\n\nСамо приближете ги уредите еден до друг (обично од задната страна), а потоа допрете го вашиот екран. Апликацијата утврдува што ќе се пренесе."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Вклучи Wi-Fi"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi-Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Грешка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Појас од 5 GHz не е достапен во земјава"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Во режим на работа во авион"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Известување за мрежа"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Извести кога ќе има достапна јавна мрежа"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Избегнувај слаби поврзувања"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Не користи Wi-Fi мрежа, освен ако има добро поврзување со интернет"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Користи само мрежи со добро поврзување на интернет"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Променете ја претпочитаната локација на инсталирање за нови апликации."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Оневозможи вградена апликација?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Оневозможете ја апликацијата"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ако ја оневозможите оваа апликација, Android и другите апликации можеби веќе нема да функционираат како што треба."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Избриши ги податоците и оневозможи ја апликацијата?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ако ја оневозможите оваа апликација, Android и другите апликации можеби веќе нема да функционираат како што треба. Освен тоа, ќе се избришат и вашите податоци."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Исклучи известувања?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ако ги исклучите известувањата за оваа апликација, може да пропуштите важни предупредувања и ажурирања."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Продавница"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Прикажи %d сокриена ставка</item>
       <item quantity="other">Прикажи %d сокриени ставки</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Мрежа и интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Поврзани уреди"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Апликации и известувања"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Корисник и сметки"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Известувања"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Важност"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Не е поставено"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Никогаш не прикажувај известувања"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без звук или визуелен прекин"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Прикажи тивко"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Испушти звук"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Испушти звук и прикажи го на екранот"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Ресетирај"</string>
     <string name="show_silently" msgid="2222875799232222056">"Покажи тивко"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Прикажувај ги овие апликации на тековниот екран без звук, вибрации или ѕиркање."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Вчитување апликации…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Канали"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блокирај ги сите"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Никогаш не прикажувај ги известувањава"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Прикажувај известувања"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Никогаш не прикажувај известувања во сенка или на периферни уреди"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Прикажи значка"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Прикажувај ги известувањата како значки во апликацијата Home, ако е поддржано."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Отфрли го Не вознемирувај"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Оставете ги известувањава да продолжат да прекинуваат кога опцијата Не вознемирувај е поставена на Само приоритетни"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"На заклучениот екран"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Не покажувај повторно"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Бара како"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Додај сметка"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Системски информации"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Поставки на работен профил"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Пребарување контакти"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Дозволете при пребарувањата контакти на вашата организација да се препознаваат повикувачи и контакти"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Вашиот најнов извештај за грешки"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Вашиот најнов безбедносен дневник"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Никогаш"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Фотографии и видеа"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музика и аудио"</string>
     <string name="storage_games" msgid="7703159201697117621">"Игри"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Други апликации"</string>
     <string name="storage_files" msgid="8581083146777364063">"Датотеки"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Простор на телефонот"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> искористен простор"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> слободен простор"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 3a9ea48..5537d6e 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"സാമ്പിൾ ടെക്‌സ്റ്റ്"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ഓസ് നഗരത്തിലെ അതിശയിപ്പിക്കുന്ന മന്ത്രവാദി"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"അധ്യായം 11: ഓസ് എന്ന അത്ഭുതകരമായ മരതകനഗരം"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"പച്ചക്കണ്ണടകൾ കൊണ്ട് കണ്ണുകൾ പരിരക്ഷിച്ച നിലയിലായിരുന്നുവെങ്കിലും, അത്ഭുതകരമായ നഗരത്തിന്റെ ഹരിതദീപ്തി കണ്ട് ഡൊറോത്തിയും കൂട്ടുകാരും അന്തംവിട്ടുപോയി. തെരുവുകളുടെ ഇരുഭാഗത്തും പച്ച മാർബിളുകൾ കൊണ്ട് നിർമ്മിച്ച കെട്ടിടങ്ങൾ നിരന്നുനിന്നിരുന്നു, എല്ലായിടത്തും തിളങ്ങുന്ന മരതകം പതിച്ചിട്ടുണ്ടായിരുന്നു. വീടുകൾ നിർമ്മിച്ചിരുന്ന അതേ പച്ച മാർബിൾ പതിച്ച നടപ്പാതയിലൂടെ അവർ നടന്നു, നടപ്പാതയിൽ വിരിച്ചിരുന്ന മാർബിൾ ബ്ലോക്കുകൾ കൂടിച്ചേരുന്ന ഇടങ്ങളിൽ മരതകത്തിന്റെ നിരകൾ കാണാനുണ്ടായിരുന്നു. സൂര്യവെളിച്ചത്തിൽ, അടുത്തടുത്തായി അടുക്കിയിരുന്ന മരതകങ്ങൾ വെട്ടിത്തിളങ്ങി. വീടുകളുടെ ജാലകങ്ങൾ പച്ച നിറത്തിൽ ഉള്ളവയായിരുന്നു. നഗരത്തിന് മുകളിലെ ആകാശം ഹരിതാഭമായിരുന്നു, സൂര്യപ്രകാശം പോലും പച്ചയായിരുന്നു. \n\nപുരുഷന്മാരും സ്ത്രീകളും കുട്ടികളും ഉൾപ്പെടെ അനേകം പേർ അവിടവിടെ നടന്നിരുന്നു. എല്ലാവരും അണിഞ്ഞിരുന്നത് പച്ച വസ്ത്രങ്ങളായിരുന്നു, അവരുടെ ചർമ്മവും പച്ചയായിരുന്നു. ഡൊറോത്തിയെയും അവളുടെ വിചിത്രരായ കൂട്ടുകാരെയും അവർ അത്ഭുതത്തോടെ നോക്കി. സിംഹത്തെ കണ്ട കുട്ടികൾ ഓടിപ്പോയി, അവരുടെ അമ്മമാരുടെ പിന്നിലൊളിച്ചു. എന്നാൽ, ആരും ഡോറോത്തിയോടും കൂട്ടുകാരോടും സംസാരിച്ചില്ല. തെരുവിൽ പല തരത്തിലുള്ള കടകളും ഉണ്ടായിരുന്നു. അവയിൽ ഉണ്ടായിരുന്നവയെല്ലാം പച്ച നിറത്തിലായിരുന്നു. പച്ച മിഠായികളും പച്ച പോപ് കോണും വിൽപ്പനയ്ക്ക് വച്ചിരുന്നു. കൂടാതെ വിൽപ്പനയ്ക്ക് വച്ചിരുന്ന ഷൂകളും തൊപ്പികളും വസ്ത്രങ്ങളും പച്ച നിറത്തിൽ തന്നെയായിരുന്നു. ഒരിടത്ത് ഒരു മനുഷ്യൻ പച്ച ലെമൊനേഡ് വിൽക്കുന്നത് അവർ കണ്ടു. അത് വാങ്ങുന്നതിന് കുട്ടികൾ കൊടുക്കുന്ന നാണയങ്ങളും പച്ച നിറത്തിലായിരുന്നുവെന്നത് ഡോറോത്തിയെ അത്ഭുതപ്പെടുത്തി. \n\nകുതിരകളെയും മറ്റ് തരത്തിലുള്ള മൃഗങ്ങളെയോ അവിടെ കാണാനുണ്ടായിരുന്നില്ല. ചെറിയ പച്ച വണ്ടികളിൽ ആളുകൾ സാധനങ്ങൾ തള്ളിക്കൊണ്ട് പോകുന്നത് ഡോറോത്തിയും കൂട്ടുകാരും കണ്ടു. അവിടെ ഉണ്ടായിരുന്നവരെല്ലാം സംതൃപ്തരായും സന്തോഷവാന്മാരായും സമ്പന്നരായും കാണപ്പെട്ടു."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ശരി"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB സ്റ്റോറേജ്"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD കാർഡ്"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"പിശക്"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"ഈ രാജ്യത്ത് 5 GHz ബാൻഡ് ലഭ്യമല്ല"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"വിമാന മോഡിലാണ്"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"നെറ്റ്‌വർക്ക് അറിയിപ്പ്"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"പൊതുവായ ഒരു നെറ്റ്‌വർക്ക് എപ്പോഴെങ്കിലും ലഭ്യമാണെങ്കിൽ അറിയിക്കുക"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"മോശം കണക്ഷനുകൾ ഒഴിവാക്കുക"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"മികച്ച ഇന്റർനെറ്റ് കണക്ഷൻ ഉണ്ടാകുന്നതുവരെ വൈഫൈ നെറ്റ്‌വർക്ക് ഉപയോഗിക്കരുത്"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"മികച്ച ഇന്റർനെറ്റ് കണക്ഷനുള്ള നെറ്റ്‌വർക്കുകൾ മാത്രം ഉപയോഗിക്കുക"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"പുതിയ അപ്ലിക്കേഷനുകൾക്കായി തിരഞ്ഞെടുത്ത ഇൻസ്‌റ്റാളേഷൻ ലൊക്കേഷൻ മാറ്റുക"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"ബിൽറ്റ്ഇൻ ആപ്പ് നിഷ്ക്രിയമാക്കണോ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ആപ്പ് പ്രവർത്തനരഹിതമാക്കുക"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"നിങ്ങൾ ഈ ആപ്പ് പ്രവർത്തനരഹിതമാക്കുന്നുവെങ്കിൽ, Android-ഉം മറ്റ് ആപ്‌സും തുടർന്നങ്ങോട്ട് ഉദ്ദേശിച്ചത് പോലെ പ്രവർത്തിച്ചേക്കില്ല."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ഡാറ്റ ഇല്ലാതാക്കി അപ്ലിക്കേഷൻ പ്രവർത്തനരഹിതമാക്കണോ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"നിങ്ങൾ ഈ ആപ്പ് പ്രവർത്തനരഹിതമാക്കുന്നുവെങ്കിൽ, Android-ഉം മറ്റ് ആപ്‌സും തുടർന്നങ്ങോട്ട് ഉദ്ദേശിച്ചത് പോലെ പ്രവർത്തിച്ചേക്കില്ല. നിങ്ങളുടെ ഡാറ്റ ഇല്ലാതാക്കപ്പെടുകയും ചെയ്യും."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"അറിയിപ്പുകൾ ഓഫാക്കണോ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ഈ അപ്ലിക്കേഷനായി അറിയിപ്പുകൾ ഓഫുചെയ്യുമ്പോൾ, പ്രധാന അലേർട്ടുകളും അപ്‌ഡേറ്റുകളും നിങ്ങളുടെ ശ്രദ്ധയിൽപ്പെടാതെ പോകാം."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"സ്റ്റോർ"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">മറച്ച %d ഇനങ്ങൾ കാണിക്കുക</item>
       <item quantity="one">മറച്ച %d ഇനം കാണിക്കുക</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"നെറ്റ്‌വർക്കും ഇന്റർനെറ്റും"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"കണക്‌റ്റുചെയ്‌ത ഉപകരണങ്ങൾ"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ആപ്‌സും അറിയിപ്പുകളും"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"ഉപയോക്താവും അക്കൗണ്ടുകളും"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"അറിയിപ്പുകൾ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"പ്രാധാന്യം"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"സജ്ജമാക്കിയിട്ടില്ല"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"അറിയിപ്പുകൾ ഒരിക്കലും കാണിക്കരുത്"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ശബ്ദപരമോ ദൃശ്യപരമോ ആയ തടസ്സമില്ല"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"നിശബ്ദമായി കാണിക്കുക"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ശബ്ദമുണ്ടാക്കുക"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ശബ്ദമുണ്ടാക്കുക, സ്ക്രീനിൽ കാണിക്കുക"</string>
     <string name="importance_reset" msgid="7458420788555607007">"പുനഃക്രമീകരിക്കുക"</string>
     <string name="show_silently" msgid="2222875799232222056">"നിശബ്ദമായി കാണിക്കുക"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ഈ അറിയിപ്പുകൾ ശബ്ദമുണ്ടാക്കുകയോ വൈബ്രേറ്റുചെയ്യുകയോ നിലവിലെ സ്ക്രീനിലെ കാഴ്ചയിൽ കാണിക്കുകയോ അരുത്."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"അപ്ലിക്കേഷനുകൾ ലോഡുചെയ്യുന്നു..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ചാനലുകൾ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"എല്ലാം തടയുക"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ഈ അറിയിപ്പുകൾ ഒരിക്കലും കാണിക്കരുത്"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"അറിയിപ്പുകൾ കാണിക്കുക"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ഷെയ്‌ഡിലോ പെരിഫെറൽ ഉപകരണങ്ങളിലോ ഒരിക്കലും അറിയിപ്പുകൾ കാണിക്കരുത്"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ബാഡ്‌ജ് കാണിക്കുക"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"പിന്തുണയുണ്ടെങ്കിൽ, ഹോം ആപ്പിൽ ബാഡ്‌ജുകളായി അറിയിപ്പുകൾ കാണിക്കുക."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\'ശല്യപ്പെടുത്തരുത്\' അസാധുവാക്കുക"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"\'മുൻഗണനയുള്ളവ മാത്രം\' എന്നതിലേക്ക് \'ശല്യപ്പെടുത്തരുത്\' സജ്ജമാക്കിയിട്ടുള്ളപ്പോൾ തടസ്സപ്പെടുത്തുന്നത് തുടരാൻ ഈ അറിയിപ്പുകളെ അനുവദിക്കുക"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"ലോക്ക് സ്ക്രീനിൽ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"വീണ്ടും കാണിക്കരുത്"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"ഇനിപ്പറയുന്നതായി അഭ്യർത്ഥിക്കുന്നു"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"അക്കൗണ്ട് ചേർക്കുക"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"സിസ്റ്റം വിവരങ്ങൾ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"ഔദ്യോഗിക പ്രൊഫൈൽ ക്രമീകരണം"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"കോൺടാക്റ്റ് തിരയൽ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"വിളിക്കുന്നവരെയും കോൺടാക്റ്റുകളെയും തിരിച്ചറിയുന്നതിന് കോൺടാക്റ്റുകൾ തിരയാൻ നിങ്ങളുടെ സ്ഥാപനത്തെ അനുവദിക്കുക"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"നിങ്ങളുടെ ഏറ്റവും പുതിയ ബഗ് റിപ്പോർട്ട്"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"നിങ്ങളുടെ ഏറ്റവും പുതിയ സുരക്ഷാ ലോഗ്"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ഒരിക്കലും വേണ്ട"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ഫോട്ടോകളും വീഡിയോകളും"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"സംഗീതവും ഓഡിയോയും"</string>
     <string name="storage_games" msgid="7703159201697117621">"ഗെയിമുകള്‍"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"മറ്റ് ആപ്‌സ്"</string>
     <string name="storage_files" msgid="8581083146777364063">"ഫയലുകള്‍"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ഫോൺ സ്റ്റോറേജ്"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ഉപയോഗിച്ചു"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ലഭ്യം"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index dde38dc..e21ec32 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Алдаа"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz холбогчийг энэ улсад ашиглах боломжгүй байна"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Нислэгийн горим"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Сүлжээний мэдэгдэл"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Нийтийн сүлжээ ашиглах боломжтой үед мэдэгдэх"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Муу холболтуудаас зайлсхийх"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Wi-Fi сүлжээний Интернэт холболт сайн биш бол бүү ашиглаарай"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Зөвхөн сайн интернэт холболттой сүлжээг ашиглах"</string>
@@ -3299,16 +3305,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Таны сүүлийн үеийн алдааны тайлан"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Таны сүүлийн үеийн аюулгүй байдлын бүртгэл"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Хэзээ ч үгүй"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Зураг &amp; видео"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Хөгжим &amp; аудио"</string>
     <string name="storage_games" msgid="7703159201697117621">"Тоглоом"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Бусад апп"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файл"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Зургийн сан"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ашигласан"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> сул"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 2c12002..f2b2407 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"नमुना मजकूर"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Oz चा अद्भूत जादू"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"अध्याय 11: Oz चे अद्भूत पाचूंचे शहर"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"डॉर्थी आणि तिच्या मित्रांचे डोळे हिरव्या चष्म्याने झाकले असले तरीही अद्भूत शहराच्या झगमगाटाने ते विस्मयचकित झाले. रस्त्यांवर हिरव्या मार्बलने बनलेल्या सुंदर घरांच्या रांगा आणि सर्वत्र चमकणारे पाचू होते. ते त्याच हिरव्या मार्बलच्या रस्त्यावरून चालत गेले आणि जेथे ते ब्लॉक एकत्र जुळत होते तेथे एकमेकांजवळ लावलेल्या पाचूच्या पंक्ती होत्या आणि ते सूर्यप्रकाशात चमकत होते. खिडक्यांचे भाग हिरव्या काचांचे होते; त्या शहरावर असलेल्या आकाशात देखील हिरव्या रंगाची छटा होती आणि सूर्याचे किरण हिरवे होते. \n\nअनेक लोकांचा, महिलांचा आणि मुलांचा, चालणार्‍यांचा पोशाख हिरव्या रंगाचा होता आणि त्यांची त्वचा हिरवट रंगाची होती. त्यांनी डॉर्थीकडे पाहिले आणि तिच्या सोबत असलेल्या विचित्र लोकांकडे आश्चर्यचकित होऊन पाहिले, सर्व मुले पळाली आणि त्यांनी सिंहास पाहिले तेव्हा त्यांच्या मातांच्या पाठीमागे जाऊन लपले परंतु त्यांच्याशी बोलले नाही. रस्त्यांमध्ये अनेक दुकाने होती आणि डॉर्थीने पाहिले की त्यामधील प्रत्येक गोष्ट हिरवी होती. हिरवी कँडी आणि हिरवे पॉप-कॉर्न, तसेच हिरवे जोडे, हिरव्या टोप्या आणि सर्व प्रकारचे हिरवे कपडे विक्रीसाठी ठेवले होते. एका ठिकाणी एक माणूस हिरवे लिंबाचे सरबत विकत होता आणि डॉर्थीने पाहिले की मुलांनी ते विकत घेतले आणि त्याच्यासाठी त्यांनी हिरवे पैसे दिले. \n\nतेथे घोडे किंवा कोणत्याही प्रकारचे प्राणी दिसत नव्हते; माणसे धक्का मारून लहान हिरव्या गाड्यांमध्ये वस्तू घेऊन जात होते. प्रत्येकजण आनंदी आणि समाधनी आणि समृद्ध दिसत होता."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ठीक"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB संचयन"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD कार्ड"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"त्रुटी"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"या देशात 5 GHz बँड उपलब्‍ध नाही"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"विमान मोड मध्ये"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"नेटवर्क सूचना"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"जेव्हाही सार्वजनिक नेटवर्क उपलब्ध असते तेव्हा सूचित करा"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"खराब कनेक्शन टाळा"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"वाय-फाय नेटवर्कचे चांगले इंटरनेट कनेक्शन नसल्यास त्याचा वापर करु नका"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"केवळ चांगले इंटरनेट कनेक्शन असलेली नेटवर्क वापरा"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"नवीन अॅप्स साठी प्राधान्यीकृत स्थापना स्थान बदला"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"अंगभूत अॅप अक्षम करायचा?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"अॅप अक्षम करा"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"आपण हा अॅप अक्षम केल्यास, Android आणि अन्य अॅप्सना ज्या हेतूने कार्य करायचे आहे कदाचित त्यानुसार ते यापुढे कार्य करू शकणार नाहीत."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"डेटा हटवायचा आणि अॅप अक्षम करायचा?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"आपण हा अॅप अक्षम केल्यास, Android आणि अन्य अॅप्सना ज्या हेतूने कार्य करायचे आहे कदाचित त्यानुसार ते यापुढे कार्य करू शकणार नाहीत. आपला डेटा हटविला देखील जाईल."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"सूचना बंद करायच्या?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"आपण या अॅपसाठी सूचना बंद केल्यास, आपण महत्वाच्या सूचना आणि अद्यतने गमावू शकता."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"स्टोअर"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%d लपविलेला आयटम दर्शवा</item>
       <item quantity="other">%d लपविलेले आयटम दर्शवा</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"नेटवर्क आणि इंटरनेट"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"कनेक्‍ट केलेले डिव्‍हाइसेस"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"अॅप्स आणि सूचना"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"वापरकर्ता आणि खाती"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"सूचना"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"महत्त्व"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"सेट केलेले नाही"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"सूचना कधीही दर्शवू नका"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"कोणताही ध्वनी किंवा व्हिज्युअल व्यत्यय नाही"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"शांतपणे दर्शवा"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ध्वनी करा"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ध्वनी करा आणि स्क्रीनवर पॉप करा"</string>
     <string name="importance_reset" msgid="7458420788555607007">"रीसेट करा"</string>
     <string name="show_silently" msgid="2222875799232222056">"शांतपणे दर्शवा"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ध्वनी, कंपन करू नका किंवा वर्तमान स्क्रीनवर दृश्यामध्ये या सूचना दर्शवू नका."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"अॅप्स लोड करीत आहे..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"चॅनेल"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"सर्व अवरोधित करा"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"या सूचना कधीही दर्शवू नका"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"सूचना दर्शवा"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"सूचना कधीही रंगछटांंमध्ये किंवा डिव्हाइसच्या किनारीवर दर्शवू नका"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"बॅज दर्शवा"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"समर्थित असल्यास, मुख्यपृष्ठ अॅपवर सूचना बॅज म्हणून दर्शवा."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"व्यत्यय आणू नका अधिशून्य करा"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"व्यत्यय आणू नका केवळ प्राधान्यावर सेट केले असते तेव्‍हा या सूचनांना व्यत्यय आणणे सुरु ठेवू द्या"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"लॉक स्क्रीनवर"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"परत दर्शवू नका"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"म्हणून विनंती करीत आहे"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"खाते जोडा"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"सिस्टिम माहिती"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"कार्य प्रोफाइल सेटिंग्ज"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"संपर्क शोध"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"कॉलर आणि संपर्कांना ओळखण्यासाठी आपल्या संस्थेनुसार संपर्क शोधांची अनुमती द्या"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"आपले अगदी अलीकडील दोष अहवाल"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"आपली अगदी अलीकडील सुरक्षितता लॉग"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"कधीही नाही"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"फोटो आणि व्हिडिओ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"संगीत आणि ऑडिओ"</string>
     <string name="storage_games" msgid="7703159201697117621">"गेम"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"अन्य अॅप्स"</string>
     <string name="storage_files" msgid="8581083146777364063">"फायली"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"फोन संचय"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> वापरले"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> विनामूल्य"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index eb9c5c8..26389d1 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Teks contoh"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Ahli Sihir Oz yang Menakjubkan"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Bab 11: Oz, Kota Zamrud yang Menakjubkan"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Biarpun mata mereka ditutupi cermin mata hijau, Dorothy dan rakan-rakannya tetap silau dengan kilauan Kota hebat yang terang-benderang itu. Rumah-rumah cantik yang diperbuat daripada marmar hijau bertatah batu zamrud yang berkilau-kilau membarisi jalan-jalannya. Mereka berjalan di atas laluan jalan kaki yang berturap marmar hijau serupa. Zamrud disusun rapi di garisan cantuman bongkah-bongkah laluan itu, sehingga bergemerlapan dalam terangnya sinaran matahari. Cermin tingkap diperbuat daripada kaca berwarna hijau; malah langit yang memayungi Kota itu berwarna kehijauan, bahkan sinar matahari juga berwarna hijau. \n\nKelihatan ramai orang, lelaki, wanita dan kanak-kanak, berjalan-jalan, dan mereka berpakaian serba hijau dan berkulit kehijauan. Mereka memandang Dorothy dan rakannya yang pelbagai rupa dengan penuh tanda-tanya, malah kanak-kanak berlari dan bersembunyi di sebalik tubuh ibu mereka apabila ternampak sang Singa; namun tiada siapa yang menegur. Banyak kedai terdapat di jalan, dan Dorothy mendapati semua barangan di dalam kedai-kedai itu berwarna hijau. Ada dijual gula-gula hijau dan bertih jagung hijau, selain kasut hijau, topi hijau dan pelbagai jenis pakaian hijau. Di satu tempat, seorang lelaki menjual lemonad hijau, dan apabila kanak-kanak membelinya, Dorothy lihat mereka membayar dengan duit syiling hijau. \n\nTidak kelihatan kuda atau sebarang jenis haiwan lain; kaum lelaki menggunakan pedati kecil berwarna hijau yang ditolak oleh mereka sendiri untuk mengangkut barang-barang. Semua orang kelihatan gembira dan bahagia dan makmur."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Storan USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Kad SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Ralat"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Jalur 5 GHz tidak tersedia di negara ini"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Dalam mod Pesawat"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Pemberitahuan rangkaian"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Maklumkan apabila rangkaian awam tersedia"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Elakkan sambungan lemah"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Jangan gunakan rangkaian Wi-Fi melainkan jika rangkaian itu mempunyai sambungan internet yang baik"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Guna rangkaian dengan sambungan Internet yang stabil sahaja"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Tukar lokasi pemasangan pilihan untuk aplikasi baru"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Lumpuhkan aplikasi terbina dalam?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Lumpuhkan apl"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Jika anda melumpuhkan apl ini, Android dan apl lain mungkin tidak berfungsi seperti yang dimaksudkan lagi."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Padam data dan lumpuhkan apl?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Jika anda melumpuhkan apl ini, Android dan apl lain mungkin tidak berfungsi seperti yang dimaksudkan lagi. Data anda akan turut dipadamkan."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Matikan pemberitahuan"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Jika anda mematikan pemberitahuan untuk apl ini, anda mungkin terlepas amaran dan kemas kini penting."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Gedung"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Tunjukkan %d item yang tersembunyi</item>
       <item quantity="one">Tunjukkan %d item yang tersembunyi</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rangkaian &amp; Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Peranti yang disambungkan"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apl &amp; pemberitahuan"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Pengguna &amp; akaun"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Pemberitahuan"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Kepentingan"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Tidak ditetapkan"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Jangan sekali-kali tunjukkan pemberitahuan"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Tiada gangguan bunyi atau visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Tunjukkan secara senyap"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Berbunyi"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Berbunyi dan paparkan pada skrin"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Tetapkan semula"</string>
     <string name="show_silently" msgid="2222875799232222056">"Tunjukkan secara senyap"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Jangan berbunyi, bergetar atau mengintai pemberitahuan ini sehingga kelihatan pada skrin semasa."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Memuatkan apl..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Saluran"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Sekat semua"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Jangan sekali-kali tunjukkan pemberitahuan ini"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Tunjukkan pemberitahuan"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Jangan sekali-kali tunjukkan pemberitahuan dalam bidai atau pada peranti persisian"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Tunjukkan lencana"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Tunjukkan pemberitahuan sebagai lencana pada apl Skrin Utama, jika disokong."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Atasi Jangan Ganggu"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Benarkan pemberitahuan ini terus mengganggu apabila tetapan Jangan Ganggu ditetapkan kepada Keutamaan Sahaja"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Pada skrin kunci"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Jangan tunjukkan lagi"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Meminta sebagai"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Tambah akaun"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Maklumat sistem"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Tetapan profil kerja"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Carian kenalan"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Benarkan carian kenalan oleh organisasi anda untuk mengenal pasti pemanggil dan kenalan"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Laporan pepijat anda yang terbaharu"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Log keselamatan anda yang terbaharu"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Tidak pernah"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto &amp; Video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzik &amp; Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Permainan"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Apl lain"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fail"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Storan Telefon"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> digunakan"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ruang kosong"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index e467fcd..0e52755 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"နမူနာ စာသား"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Oz ၏အံ့ဖွယ်ဝိဇ္ဇာ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"အခန်းကြီး ၁၁ − Oz ၏အံ့ဖွယ် မြစိမ်းရောင်မြို့တော်"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"မျက်လုံးများကို ကာကွယ်ရန် အစိမ်းရောင်မျက်မှန်များ တပ်ထားသော်လည်း ဒေါ်ရသီနှင့် သူ့သူယ်ချင်းများသည် အံ့ဩဖွယ်မြို့တော်၏ တောက်ပမှုကြောင့် မျက်စိစူးသွားပါသေးသည်။ လမ်းများတလျှောက် အစိမ်းရောင်စကျင်ကျောက်များဖြင့် ဆောက်လုပ်ထားပြီး တဖိတ်ဖိတ်တောက်ပနေသည့် မြများ မြုပ်သွင်းထားသည့် လပသောအိမ်များနှင့် စီတန်းထားပါသည်။ သူတို့သည် ၎င်းအစိမ်းရောင်စကျင်ကျောက်ဖြင့် ခင်းထားပြီး ဆက်ထားသည့် နေရာများတွင် မြများကို အတန်းလိုက် နီးကပ်စွာစီတန်းထား၍ နေရောင်အောက်တွင် တစ်လျှပ်လျှပ်တောက်ပနေသည့် ပလပ်ဖောင်းတလျှောက် လမ်းလျှောက်လာခဲ့ပါသည်။ ပြတင်းပေါက်မှန်များအားလုံးသည် အစိမ်းရောင်ဖန်သားများဖြစ်သည်။ မြို့အထက်ရှိ ကောင်းကင်ပြင်သည်ပင်လျှင် အစိမ်းရောင်သန်းလျက်ရှိပြီး နေရောင်ခြည်သည်လည်း အစိမ်းရောင်ပင်ဖြစ်သည်။ \n\nလူများစွာရှိပြီး ယောကျာ်း၊ မိန်းမနှင့် ကလေးများ လမ်းလျှောက်လျက်ရှိကာ ၎င်းတို့အားလုံးသည် အစိမ်းရောင်အဝတ်အစားများကို ဝတ်ဆင်ထား၍ အစိမ်းရောင်သန်းသည့် အသားရောင်များ ရှိကြပါသည်။ သူတို့သည် ဒေါ်ရသီနှင့် ကွဲပြားခြားနားသည့် သူ့အဖော်များကို စိတ်ဝင်တစား ကြည့်နေကြပြီး ကလေးများသည် ခြင်္သေ့ကို တွေ့သည့်အခါ အမေ့နောက်ကျော်တွင် သွားရောက် ကွယ်ဝှက်နေကြပါသည်။ သို့သော် မည်သူမျှ သူတို့ကို စကားမပြောကြပါ။ လမ်းတလျှောက် ဆိုင်များစွာရှိပါသည်။ ၎င်းဆိုင်များရှိ အရာအားလုံးသည် အစိမ်းရောင်များဖြစ်သည်ကို ဒေါ်ရသီ တွေ့ရှိခဲ့ရပါသည်။ အစိမ်းရောင်ချိုချဉ်နှင့် အစိမ်းရောင်ပေါက်ပေါက်ဆုတ်တို့အပြင် အစိမ်းရောင်ဖိနပ်၊ အစိမ်းရောင်ဦးထုပ်နှင့် အစိမ်းရောင် အဝတ်အထည် မျိုးစုံတို့ကို ရောင်းနေကြသည်။ တစ်နေရာတွင် လူတစ်ဦးသည် အစိမ်းရောင် သံပုရာရည်ကို ရောင်းချလျှက်ရှိပြီး ကလေးများက၎င်းကို ဝယ်ယူကြရာတွင် အစိမ်းရောင် ဒင်္ဂါးပြားများဖြင့် ပေးဝယ်နေကြကြောင်းကို ဒေါ်ရသီတွေ့ရှိခဲ့ပါသည်။ \n\nထိုနေရာတွင် မြင်းအစရှိသည့် တိရစ္ဆာန်တစ်ကောင်တလေမျှ မတွေ့ခဲ့ရပါ။ ယောကျာ်းများသည် ပစ္စည်းများကို လှည်းတစ်ခုထဲထည့်၍ တွန်းသွားကြပါသည်။ လူတိုင်းလူတိုင်းသည် ပျော်ရွှင်နေကြပြီး ရောင့်ရဲတင်းတိမ်ကြပြီး ကြွယ်ဝကြပါသည်။"</string>
     <string name="font_size_save" msgid="3450855718056759095">"အိုကေ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USBသိုလှောင်ကိရိယာ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD ကဒ်"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"ပိတ်ထားသည်"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"NFCကိုပိတ်ထားသောကြောင့် မရရှိနိုင်ပါ"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android လှိုင်း"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"ဤဝန်ဆောင်မှုကို ဖွင့်ထားသည့်အခါ အခြား NFC ဖွင့်ထားသည့် စက်ပစ္စည်းသို့ စက်ပစ္စည်းများအား နီးကပ်စွာထားခြင်းဖြင့် အက်ပ်များကို လှိုင်းလွှင့်နိုင်သည်။ ဥပမာ၊ ဝဘ်စာမျက်နှာများ၊ YouTUbe ဗီဒီယိုများ၊ အဆက်အသွယ်များနှင့် အခြားအရာများစွာကို လှိုင်းလွှင့်နိုင်သည်။\n\nစက်ပစ္စည်းများကို နီးကပ်စွာထားပြီး (ကျောခြင်းကပ်) မျက်နှာပြင်ကို တို့ပါ။ မည်သည့်အရာအား လှိုင်းလွှင့်မည်ကို အက်ပ်က ဆုံးဖြတ်ပေးပါမည်။"</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"ဤဝန်ဆောင်မှုကို ဖွင့်ထားသည့်အခါ အခြား NFC ချိတ်ဆက်နိုင်သည့် စက်ပစ္စည်းသို့ စက်ပစ္စည်းများအား နီးကပ်စွာထားခြင်းဖြင့် အက်ပ်များကို လှိုင်းလွှင့်နိုင်သည်။ ဥပမာ၊ ဝဘ်စာမျက်နှာများ၊ YouTube ဗီဒီယိုများ၊ အဆက်အသွယ်များနှင့် အခြားအရာများစွာကို လှိုင်းလွှင့်နိုင်သည်။\n\nစက်ပစ္စည်းများကို နီးကပ်စွာ (ကျောခြင်းကပ်) ထားပြီး  မျက်နှာပြင်ကို တို့ပါ။ မည်သည့်အရာအား လှိုင်းလွှင့်မည်ကို အက်ပ်က ဆုံးဖြတ်ပေးပါမည်။"</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"ဝိုင်ဖိုင်ဖွင့်ရန်"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi-Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"အမှား"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz ဘန်းဤနိုင်ငံတွင်မရပါ"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"လေယာဉ်ပျံပေါ်သုံးစနစ်"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ကွန်ယက်မှအကြောင်းကြားချက်"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"အများပြည်သူ ကွန်ရက် ရနိုင်တိုင်းမှာ အကြောင်းကြားပေးရန်"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"အားနည်းသော ချိတ်ဆက်မှုများကို ရှောင်ကြဉ်ရန်"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"ကောင်းမွန်သော အင်တာနက် ချိတ်ဆက်မှု မရှိသော ဝိုင်ဖိုင်ကွန်ရက်အား မသုံးပါနှင့်"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"အင်တာနက် ချိတ်ဆက်မှု ကောင်းသည့် ကွန်ရက်များကိုသာ အသုံးပြုရန်"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"အပလီကေးရှင်းအသစ်အတွက် လိုလားသောတည်နေရာထည့်သွင်းခြင်းကို ပြောင်းရန်။"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"နဂိုပါအပလီကေးရှင်းများပိတ်မလား"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"အက်ပ်ပိတ်ထားရန်"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ဤအက်ပ်ကို ပိတ်လိုက်လျှင် Android နှင့် အခြားအက်ပ်များသည် ပုံမှန် အလုပ်လုပ်တော့မည် မဟုတ်ပါ။"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"အချက်အလက်များကိုဖျက်၍ အပလီကေးရှင်းအား ပိတ်မည်လား ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ဤအက်ပ်ကို သင်ပိတ်လိုက်ပါက အခြားအက်ပ်များသည် ပုံမှန် အလုပ်လုပ်တော့မည် မဟုတ်ပါ။ သင့် ဒေတာများကိုလည်း ဖျက်လိုက်ပါမည်။"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"အကြောင်းကြားချက်များကို ပိတ်မည်လား ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ဤအပလီကေးရှင်း၏ အကြောင်းကြားစာများကို ပိတ်ထားလျှင် အရေးကြီး သတိပေးချက်များနှင့် အဆင့်မြှင့်မှုများကို သင် လွတ်သွားနိုင်ပါသည်။"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"စတိုး"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">ဖျောက်ထားသည့် %d ခုကို ပြပါ</item>
       <item quantity="one">ဖျောက်ထားသည့် %d ခုကို ပြပါ</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"ကွန်ရက်နှင့် အင်တာနက်"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"ချိတ်ဆက်ထားသော စက်ပစ္စည်းများ"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"အက်ပ်များနှင့် အကြောင်းကြားချက်များ"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"အသုံးပြုသူနှင့် အကောင့်များ"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"အကြောင်းကြားချက်များ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"အရေးပါမှု"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"မသတ်မှတ်ထားပါ"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"အကြောင်းကြားချက်များကို ဘယ်တော့မှ မပြပါနှင့်"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"အသံ သို့မဟုတ် ရုပ်ပုံ ဖွင့်ခြင်းတို့ကို မပြုလုပ်လိုပါ"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"တိတ်တဆိတ်ပြပါ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"အသံဖွင့်ပါ"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"အသံဖွင့်၍ မျက်နှာပြင်ပေါ်တွင် ပြပါ"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ပြန်လည်သတ်မှတ်ပါ"</string>
     <string name="show_silently" msgid="2222875799232222056">"တိတ်တဆိတ်ပြပါ"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"အသံပြုခြင်း၊ တုန်ခါခြင်း၊ သို့မဟုတ် လက်ရှိမျက်နှာပြင်တွင် ဤသတိပေးချက်များကို ပြခြင်းများ မပြုလုပ်ပါနှင့်။"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"အက်ပ်များကို တင်နေ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ချန်နယ်များ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"အားလုံးကို ပိတ်ဆို့ရန်။"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ဤအကြောင်းကြားချက်များကို ဘယ်တော့မှ မပြပါနှင့်"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"အကြောင်းကြားချက်များ ပြပါ"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"အရိပ်ထဲ သို့မဟုတ် တွဲချိတ်ထားသည့် စက်ပစ္စည်းများပေါ်တွင် အကြောင်းကြားချက်များကို ဘယ်တော့မှ မပြပါနှင့်"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"တံဆိပ်ကို ပြပါ"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ပံ့ပိုးထားလျှင် Home အက်ပ်ပေါ်တွင် အကြောင်းကြားချက်များကို တံဆိပ်များအဖြစ် ပြသပါမည်။"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"မနှောင်ယှက်ပါနှင့် ကို အပေါ်မှဖျက်ရေးပါ"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"မနှောင်ယှက်ပါနှင့် ကို ဦးစားပေးမှု အတွက်သာ ဆိုပြီး သတ်မှတ်ထားလျှင် ဤသတိပေးချက်များအား ဆက်လက်ပြီး စွက်ဖက်ခွင့် ပြုပါ"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"လော့ခ်ချထားသည့်မျက်နှာပြင်ပေါ်တွင်"</string>
@@ -3194,7 +3186,7 @@
     <string name="developer_density_summary" msgid="1998244213021456519">"<xliff:g id="ID_1">%d</xliff:g> dp"</string>
     <string name="developer_smallest_width" msgid="7516950434587313360">"အသေးဆုံး အကျယ်"</string>
     <string name="developer_tile" msgid="4822711696408279658">"ပြင်ဆင်မွမ်းမံမှုမုဒ်"</string>
-    <string name="developer_tile_unavailable" msgid="6559656549479711827">"လက်ရှိလုပ်ဆောင်နေသော အခြေအနေကို ရွေးချယ်ထားခြင်း မရှိပါ"</string>
+    <string name="developer_tile_unavailable" msgid="6559656549479711827">"ပြင်ဆင်မွမ်းမံမှု အခြေအနေကို ရွေးချယ်ထားခြင်း မရှိပါ"</string>
     <string name="premium_sms_none" msgid="8268105565738040566">"ထည့်သွင်းထားသည့် မည်သည့်အက်ပ်တစ်ခုမျှ ပရီမီယံ SMS အသုံးပြုခွင့်တောင်းဆိုမှု မရှိပါ။"</string>
     <string name="premium_sms_warning" msgid="9086859595338944882">"ပရီမီယံ SMS သည်ငွေကြေးကုန်ကျနိုင်ပြီး သင့်ဖုန်းဝန်​ဆောင်မှုပေးသူ၏ ငွေတောင်းခံလွှာသို့ ပေါင်း၍ ထည့်သွင်းပါမည်။ အက်ပ်တစ်ခုကို သင်ခွင့်ပြုလိုက်လျှင် ၎င်းအက်ပ်ကိုအသုံးပြုပြီး ပရီမီယံ SMS ပို့နိုင်မည်ဖြစ်သည်။"</string>
     <string name="premium_sms_access" msgid="4660047004791638305">"ပရီမီယံ SMS အသုံးပြုခွင့်"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"နောက်တစ်ခါ မပြပါနှင့်"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"အဖြစ် တောင်းဆိုနေသည်"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"အကောင့်ထည့်ရန်"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"စနစ်အချက်အလက်"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"အလုပ်ပရိုဖိုင်ဆက်တင်များ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"အဆက်အသွယ်ကို ရှာဖွေပါ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"ခေါ်ဆိုသူများနှင့် အဆက်အသွယ်များကို မည်သူမည်ဝါဖြစ်ကြောင်း ခွဲခြားနိုင်ရန်အတွက် သင့်အဖွဲ့အစည်းအမည်ကို အဆက်အသွယ်အား ရှာဖွေခွင့်ပြုပါ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"သင့်မကြာသေးမီက ချွတ်ယွင်းမှုအစီရင်ခံချက်များ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"သင့်လတ်တလော လုံခြုံရေးမှတ်တမ်း"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ဘယ်တော့မှ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ဓာတ်ပုံနှင့် ဗီဒီယိုများ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"တေးဂီတနှင့် အသံ"</string>
     <string name="storage_games" msgid="7703159201697117621">"ဂိမ်းများ"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"အခြားအက်ပ်များ"</string>
     <string name="storage_files" msgid="8581083146777364063">"ဖိုင်များ"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ဖုန်းသိုလှောင်ခန်း"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> အသုံးပြုထားပါသည်"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"နေရာလွတ် <xliff:g id="TOTAL">%1$s</xliff:g> ရှိပါသည်"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 00b922c..7719508 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Eksempeltekst"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Trollmannen fra Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapittel 11: Den vidunderlige smaragdbyen Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Selv om øynene deres var beskyttet av de grønne brillene, ble Dorothy og vennene hennes overveldet ved synet av denne vidunderlige byen. Langs gatene sto vakre hus bygget av grønn marmor og prydet med skinnende smaragder overalt. De gikk langs et fortau laget av den samme grønne marmoren, og der steinene møttes, var det rader av smaragder som glitret i lyset fra solen. Vindusrutene var av grønt glass, og selv himmelen hadde et grønt skjær over seg. Til og med solstrålene var grønne. \n\nDet var mange mennesker som gikk rundt i byen, både menn, kvinner og barn. Alle var kledd i grønne klær og hadde grønnlig hud. De så undrende på Dorothy og det brokete selskapet hennes. Barna løp og gjemte seg bak mødrene sine da de så Løven, men ingen sa noe til dem. Butikkene i gatene var alle fylt med grønne varer. Grønt godteri og grønt popkorn var til salgs, og det var også utstilt grønne sko, grønne hatter og grønne klær i alle mulige varianter. I én av butikkene solgte en mann grønn limonade, og Dorothy kunne se at barna betalte med grønne mynter. \n\nDet var ingen hester eller andre dyr å se i byen – mennene bar ting i små, grønne vogner som de dyttet foran seg. Alle virket glade, tilfredse og velstående."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-lagring"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Minnekort"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Feil"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-bånd er ikke tilgjengelig i dette landet"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"I flymodus"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Nettverksvarsel"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Varsle når et offentlig nettverk er tilgjengelig"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Unngå dårlige tilkoblinger"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ikke bruk et Wi-Fi-nettverk med mindre det har en brukbar Internett-tilkobling"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Bare bruk nettverk som har en god nettilkobling"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Endre foretrukket plassering for installasjon av nye apper"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Slå av innebygd app?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Deaktiver appen"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Hvis du slår av denne appen, slutter muligens Android og andre apper å fungere som de skal."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vil du slette dataene og deaktivere appen?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Hvis du slår av denne appen, kan det føre til at Android og andre apper slutter å fungere som de skal. Dataene dine blir også slettet."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vil du deaktivere varsler?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Hvis du slår av varsler for denne appen, kan du gå glipp av viktige beskjeder og oppdateringer."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Butikk"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Vis %d skjulte elementer</item>
       <item quantity="one">Vis %d skjult element</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Nettverk og Internett"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Tilkoblede enheter"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apper og varsler"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Bruker og kontoer"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Varsler"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Viktighet"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ikke angitt"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Vis aldri varsler"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ingen lyd eller visuell forstyrrelse"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Vis uten lyd"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Lag lyd"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Lag lyd og vis i forgrunnen"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Tilbakestill"</string>
     <string name="show_silently" msgid="2222875799232222056">"Vis uten lyd"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Disse varslene vises ikke kjapt på skjermen – verken med vibrering eller lyd."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Laster inn apper …"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanaler"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokkér alle"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Vis aldri disse varslene"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Vis varsler"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Vis aldri varlser i panelet eller på eksterne enheter"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Vis merke"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Vis varsler som merker i Home-appen, hvis det støttes."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Overstyr Ikke forstyrr"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"La disse varslene fortsette å forstyrre når Ikke forstyrr er angitt til Bare prioriterte"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"På låseskjermen"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ikke vis dette igjen"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Sender forespørsel som"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Legg til konto"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systeminformasjon"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Innstillinger for jobbprofilen"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktsøk"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Tillat kontaktsøk for organisasjonen din for å identifisere innringere og kontakter"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Den nyeste feilrapporten din"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Den nyeste sikkerhetsloggen din"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Aldri"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Bilder og videoklipp"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musikk og lyd"</string>
     <string name="storage_games" msgid="7703159201697117621">"Spill"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Andre apper"</string>
     <string name="storage_files" msgid="8581083146777364063">"Filer"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefonlagring"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> brukt"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ledig"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 721eacc..9a456a4 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"नमूना पाठ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"दि वन्डरफुल विजार्ड अफ ओज"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"अध्याय ११: दि वन्डरफुल एमरल्ड सिटी अफ ओज"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"डोरोथी र उसका साथीहरूले सुरक्षाका लागि आँखामा हरियो चश्मा लगाएका भए पनि त्यस अद्भुत सहरको चमक देखेर तिनीहरू सुरुमा निकै आश्चर्यचकित भए। त्यस सहरका गल्लीहरूको दुवै छेउमा लस्करै हरियो संगमरमरले बनेका सुन्दर घरहरू थिए र ती घरहरूमा जताततै झिलमिलाउँदा पन्नाहरू जडित गरिएका थिए। तिनीहरू त्यही हरियो संगमरमरको पेटीमा हिँडदै थिए जसमा ब्लकहरूलाई आपसमा नजिक-नजिक मिलाएर राखी पन्नाका पङ्‌क्तिहरूले जोडिएको थियो र त्यो सूर्यको प्रकाशमा जगमगाइरहेको थियो। झ्यालका पल्लाहरू हरियो काँचका थिए, त्यतिमात्र कहाँ हो र माथिको आकाशमा पनि हल्का हरियो रङको छाप देखिन्थ्यो र सूर्यका किरणहरू पनि हरियो रङका नै थिए। \n\nत्यहाँ महिला, पुरुष र बच्चाहरू जस्ता धेरै मानिसहरू यताउता हिँडिरहेका थिए। ती मानिसहरूले हरियो कपडा लगाएका थिए र तिनीहरूको छाला पनि हल्का हरियो खाले थियो। तिनीहरूले डोरोथी तथा अनौठो विविधता भएका उसका साथीहरूलाई अचम्मको दृष्टिले हेरे र लायनलाई देखेर सबै बच्चाहरू भागेर आफ्नो आमाको पछाडि लुक्न थाले; तर कसैले पनि उनीहरूसँग बात गरेनन्। गल्लीमा थुप्रै पसलहरू थिए र डोरोथीले के देख्छ भने त्यहाँ भएका सबै कुराहरू हरियो रङका नै छन्। त्यहाँ बिक्रीका लागि हरियो क्यान्डी र मकैका फुला, यसबाहेक हरियो रङका जुत्ताहरू र हरियो रङका टोपी र थुप्रै प्रकारका कपडाहरू राखिएका थिए। एक ठाउँमा एक व्यक्ति हरियो रङको निम्बु पानी बेच्दै थियो र बच्चाहरूले त्यो किन्दा डोरोथीले के देख्छ भने ती बच्चाहरूले त्यसको पैसा तिर्नका लागि पनि हरियो रङका सिक्काहरू दिन्छन्। \n\nत्यहाँ घोडा वा कुनै अरु जनावरहरू छैनन् जस्तो देखिन्थ्यो; त्यहाँ मान्छेहरूले साना हरियो रङका गाडाहरूमा वस्तुहरू लिएर अगाडितिर धकाल्दै हिँड्थे। सबैजना खुसी र सन्तुष्ट तथा समृद्ध देखिन्थ्ये।"</string>
     <string name="font_size_save" msgid="3450855718056759095">"ठीक छ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB भण्डारण"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD कार्ड"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"त्रुटि"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"यो देशमा ५ GHz व्यान्ड उपलब्ध छैन"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"हवाइजहाज मोडमा"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"नेटवर्क सूचना"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"सूचीत गर्नुहोस् जब एक सार्वजनिक सञ्जाल उपलब्ध हुन्छ"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"कमजोर जडान त्याग्नुहोस्"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Wi-Fi नेटवर्क राम्रो इन्टरनेट जडान नभएसम्म प्रयोग नगर्नुहोस्।"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"केवल राम्रो इन्टरनेट जडान हुने सञ्जालको उपयोग गर्नुहोस्"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"नयाँ अनुप्रयोगका लागि रुचाइएको स्थापना स्थान बदल्नुहोस्"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"पूर्वनिर्मित अनुप्रयोग असक्षम पार्ने हो?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"अनुप्रयोग असक्षम गर्नुहोस्"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"तपाईंले यस अनुप्रयोगलाई असक्षम पार्नुभयो भने अब Android र अन्य अनुप्रयोगहरूले अपेक्षित कार्य नगर्न सक्छन्।"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"डेटा हटाएर अनुप्रयोग असक्षम पार्ने हो?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"तपाईंले यस अनुप्रयोगलाई असक्षम पार्नुभयो भने त्यस उकप्रन्त Android र अन्य अनुप्रयोगहरूले अपेक्षित कार्य नगर्न सक्छन्। तपाईंको डेटा पनि मेटाइने छ।"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"सूचनाहरू बन्द गर्नुहोस्?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"यदि तपाईँ यस अनुप्रयोगको लागि सूचनाहरू बन्द गर्नुहुन्छ, तपाईँले महत्त्वपूर्ण अलर्ट र अपडेटहरू गुमाउन सक्नुहुने छ।"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"स्टोर"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">लुकाइएका %d वस्तुहरू देखाउनुहोस्</item>
       <item quantity="one">लुकाइएको %d वस्तु देखाउनुहोस्</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"नेटवर्क र इन्टरनेट"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"जडान गरिएका यन्त्रहरू"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"अनुप्रयोग सम्बन्धी &amp; सूचनाहरू"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"प्रयोगकर्ता रamp; खाता"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"सूचनाहरू"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"महत्त्व"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"सेट गरिएको छैन"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"सूचनाहरू कहिल्यै नदेखाउनुहोस्"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"कुनै आवाज ननिकाल्ने वा दृश्य सम्बन्धी अवरोध नपुर्याउने"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"मौन रूपमा देखाउने"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"आवाज निकाल्ने"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"आवाज निकाल्ने र स्क्रिनमा पपअप देखाउने"</string>
     <string name="importance_reset" msgid="7458420788555607007">"रिसेट गर्नुहोस्"</string>
     <string name="show_silently" msgid="2222875799232222056">"मौन रूपमा देखाउनुहोस्"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ध्वनि, कम्पन नगर्नुहोस् वा हालको स्क्रिनमा यी सूचनाहरूलाई दृश्यमा नचियाउनुहोस्।"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"अनुप्रयोगहरू लोड हुँदै..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"च्यानलहरू"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"सबै रोक्नुहोस्"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"यी सूचनाहरू कहिल्यै नदेखाउनुहोस्"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"सूचनाहरू देखाउनुहोस्"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ओझेलमा वा पेरिफेरल यन्त्रहरूमा कहिल्यै सूचनाहरू नदेखाउनुहोस्"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"पदक देखाउनुहोस्"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"समर्थन गरिएमा गृहपृष्ठको अनुप्रयोगमा सूचना र पदकहरू देखाउनुहोस्।"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"बाधा नपुर्याउनुहोस् मा ओभरराइड गर्नुहोस्"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"बाधा नपुर्याउनुहोस् प्राथमिकतामा मात्र सेट भएको बेला यी सूचनाहरूबाट हुने अवरोधका लागि अनुमति दिनुहोस्।"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"लक स्क्रिनमा"</string>
@@ -3226,8 +3218,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"फेरि नदेखाउनुहोस्"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"निम्न प्रयोगकर्ताको रूपमा अनुरोध गर्दै"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"खाता थप्नुहोस्"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"प्रणाली सम्बन्धी जानकारी"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"कार्य प्रोफाइलका सेटिङहरू"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"सम्पर्कको खोजी"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"कलर र सम्पर्कहरूको पहिचान गर्न तपाईँको संगठन अनुसार गरिने सम्पर्कका खोजीहरूलाई अनुमति दिनुहोस्"</string>
@@ -3318,16 +3309,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"तपाईंको सबैभन्दा पछिल्लो बग रिपोर्ट"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"तपाईंको सबैभन्दा पछिको सुरक्षा लग"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"कहिल्यै पनि होइन"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"तस्बिर र भिडियोहरू"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"संगीत र अडियो"</string>
     <string name="storage_games" msgid="7703159201697117621">"खेलहरू"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"अन्य अनुप्रयोगहरू"</string>
     <string name="storage_files" msgid="8581083146777364063">"फाइलहरू"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"फोनको भण्डारण"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> प्रयोग गरिएको"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> खाली"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 1c0bae5..509997b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Voorbeeldtekst"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"De tovenaar van Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Hoofdstuk 11: De prachtige Smaragden Stad van Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Hoewel hun ogen werden beschermd door de groene bril, werden Dorothy en haar vrienden eerst verblind door de schittering van de prachtige Stad. Langs de straten stonden schitterende huizen van groen marmer die waren versierd met glinsterende smaragden. Ze liepen over een pad dat was geplaveid met hetzelfde groene marmer. In de voegen tussen de stenen waren dichte rijen smaragden ingelegd die fonkelden in het zonlicht. De ramen waren van groen glas en zelfs de lucht boven de Stad had een groene tint, en ook de zonnestralen waren groen. \n\nEr waren veel mensen op straat: mannen vrouwen en kinderen. Ze droegen allemaal groene kleren en hadden een groengetinte huid. Ze keken Dorothy en haar vreemde gezelschap verbaasd aan. De kinderen verstopten zich achter hun moeders als ze de Leeuw zagen, maar niemand sprak hen aan. Er waren veel winkels in de straat gevestigd en Dorothy zag dat alles wat ze verkochten, groen was. Er waren groene snoepjes en groene popcorn te koop, maar ook groene schoenen, groene hoeden en allerlei groene kleding. Een man verkocht groene limonade, en toen kinderen die kochten, zag Dorothy dat ze ervoor betaalden met groene muntjes. \n\nEr leken geen paarden of andere dieren te zijn. De mannen vervoerden dingen in kleine groene handkarren, die ze voor zich uit duwden. Iedereen leek gelukkig, tevreden en welvarend."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-opslag"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kaart"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Fout"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-band niet beschikbaar in dit land"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"In vliegtuigmodus"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Netwerkmelding"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Melden wanneer een openbaar netwerk beschikbaar is"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Slechte verbindingen vermijden"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Wifi-netwerk niet gebruiken, tenzij dit een goede internetverbinding heeft"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Alleen netwerken gebruiken met een goede internetverbinding"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"De voorkeursinstallatielocatie voor nieuwe apps wijzigen"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Ingebouwde app uitschakelen?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"App uitschakelen"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Als je deze app uitschakelt, werken Android en andere apps mogelijk niet meer zoals bedoeld."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Gegevens verwijderen en app uitschakelen?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Als je deze app uitschakelt, werken Android en andere apps mogelijk niet meer zoals bedoeld. Je gegevens worden ook verwijderd."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Meldingen uitschakelen?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Als je meldingen voor deze app uitschakelt, mis je misschien belangrijke waarschuwingen en updates."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Winkel"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d verborgen items weergeven</item>
       <item quantity="one">%d verborgen item weergeven</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Netwerk en internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Verbonden apparaten"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps en meldingen"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Gebruiker en accounts"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Meldingen"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Belang"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Niet ingesteld"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nooit meldingen weergeven"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Geen geluid of visuele onderbreking"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Zonder geluid weergeven"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Geluid laten horen"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Geluid laten horen en op het scherm weergeven"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Resetten"</string>
     <string name="show_silently" msgid="2222875799232222056">"Zonder geluid weergeven"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Geen geluid laten horen, niet trillen en deze meldingen niet weergeven op het huidige scherm."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Apps laden..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanalen"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Alles blokkeren"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Deze meldingen nooit weergeven"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Meldingen weergeven"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nooit meldingen weergeven in het meldingenpaneel of op randapparaten"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Badge weergeven"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Meldingen weergeven als badges op het startscherm (indien ondersteund)."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"\'Niet storen\' overschrijven"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Deze meldingen nog steeds laten onderbreken wanneer \'Niet storen\' is ingesteld op \'Alleen prioriteit\'"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Op het vergrendelingsscherm"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Niet opnieuw weergeven"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Aanvragen als"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Account toevoegen"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systeemgegevens"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Instellingen voor werkprofiel"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Contacten zoeken"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Contactzoekopdrachten door je organisatie toestaan om bellers en contacten te identificeren"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Je recentste bugrapport"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Je recentste beveiligingslogboek"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nooit"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foto\'s en video\'s"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muziek en audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Games"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Andere apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Bestanden"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefoonopslag"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> gebruikt"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> beschikbaar"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index f1bd527..1bfe3e5 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"ਨਮੂਨਾ ਲਿਖਤ"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"ਔਜ਼ ਦਾ ਨਿਰਾਲਾ ਜਾਦੂਗਰ"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"ਪਾਠ 11: ਔਜ਼ ਦਾ ਹੀਰਿਆਂ-ਪੰਨਿਆਂ ਵਾਲਾ ਨਿਰਾਲਾ ਸ਼ਹਿਰ"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"ਹਰੇ ਰੰਗ ਦੀਆਂ ਐਨਕਾਂ ਲਗਾ ਕੇ ਵੀ ਡੋਰਥੀ ਅਤੇ ਉਸ ਦੇ ਦੋਸਤ ਨਿਰਾਲੇ ਸ਼ਹਿਰ ਦੀ ਚਮਕ-ਦਮਕ ਵੇਖ ਕੇ ਹੈਰਾਨ ਸਨ। ਹਰੇ ਰੰਗ ਦੇ ਮਾਰਬਲ ਨਾਲ ਬਣੇ ਹੋਏ ਸੁੰਦਰ ਘਰ, ਗਲੀਆਂ ਵਿੱਚ ਕਤਾਰਬੱਧ ਸਨ ਅਤੇ ਉਹਨਾਂ ਵਿੱਚ ਚਮਕਦੇ ਪੰਨੇ ਜੜੇ ਹੋਏ ਸਨ। ਉਹ ਉਸੇ ਹਰੇ ਮਾਰਬਲ ਦੇ ਫੁੱਟਪਾਥ \'ਤੇ ਪੈਦਲ ਤੁਰ ਪਏ, ਅਤੇ ਜਿੱਥੇ ਆਲੇ-ਦੁਆਲੇ ਰੱਖੇ ਹੋਏ ਮਾਰਬਲ ਪੱਥਰ ਆਪਸ ਵਿੱਚ ਜੁੜਦੇ ਸਨ ਉੱਥੇ ਨੇੜੇ-ਨੇੜੇ ਲਗਾਏ ਗਏ ਪੰਨਿਆਂ ਦੀਆਂ ਕਤਾਰਾਂ ਸਨ ਅਤੇ ਧੁੱਪ ਵਿੱਚ ਚਮਕ ਰਹੀਆਂ ਸਨ। ਖਿੜਕੀਆਂ ਦੇ ਸ਼ੀਸ਼ੇ ਹਰੇ ਰੰਗ ਦੇ ਸਨ; ਇੱਥੋਂ ਤੱਕ ਕਿ ਸ਼ਹਿਰ ਦੇ ਉੱਤੇ ਅਸਮਾਨ ਵਿੱਚ ਵੀ ਹਰੇ ਰੰਗ ਦੀ ਭਾਅ ਸੀ, ਅਤੇ ਸੂਰਜ ਦੀਆਂ ਕਿਰਨਾਂ ਵੀ ਹਰੇ ਰੰਗ ਦੀਆਂ ਸਨ। \n\nਉੱਥੇ ਬਹੁਤ ਸਾਰੇ ਲੋਕ, ਆਦਮੀ, ਔਰਤਾਂ, ਅਤੇ ਬੱਚੇ ਘੁੰਮ ਰਹੇ ਸਨ, ਅਤੇ ਉਹਨਾਂ ਨੇ ਹਰੇ ਰੰਗ ਦੇ ਕੱਪੜੇ ਪਾਏ ਹੋਏ ਸਨ ਅਤੇ ਉਹਨਾਂ ਦੀ ਚਮੜੀ ਦਾ ਰੰਗ ਵੀ ਹਰਾ ਹੀ ਸੀ। ਉੁਹਨਾਂ ਨੇ ਡੋਰਥੀ ਅਤੇ ਉਸਦੇ ਅਜੀਬੋ-ਗਰੀਬ ਦੋਸਤਾਂ ਵੱਲ ਹੈਰਾਨੀ ਭਰੀਆਂ ਨਜ਼ਰਾਂ ਨਾਲ ਵੇਖਿਆ, ਅਤੇ ਜਦੋਂ ਬੱਚਿਆਂ ਨੇ ਸ਼ੇਰ ਨੂੰ ਵੇਖਿਆ ਤਾਂ ਸਾਰੇ ਬੱਚੇ ਭੱਜ ਗਏ ਅਤੇ ਆਪਣੀਆਂ ਮਾਵਾਂ ਦੇ ਪਿੱਛੇ ਜਾ ਕੇ ਲੁਕ ਗਏ; ਪਰ ਕਿਸੇ ਨੇ ਵੀ ਉਹਨਾਂ ਨਾਲ ਗੱਲ ਨਹੀਂ ਕੀਤੀ। ਗਲੀ ਵਿੱਚ ਬਹੁਤ ਸਾਰੀਆਂ ਦੁਕਾਨਾਂ ਸਨ, ਅਤੇ ਡੋਰਥੀ ਨੇ ਵੇਖਿਆ ਕਿ ਉੱਥੇ ਸਭ ਕੁਝ ਹਰੇ ਰੰਗ ਦਾ ਹੀ ਸੀ। ਹਰੇ ਰੰਗ ਦੀਆਂ ਟੌਫੀਆਂ, ਅਤੇ ਹਰੇ ਰੰਗੇ ਦੇ ਮੱਕੀ ਦੇ ਫੁੱਲੇ ਵੇਚੇ ਜਾ ਰਹੇ ਸਨ, ਹਰੇ ਰੰਗ ਦੇ ਬੂਟ ਵੀ, ਹਰੀਆਂ ਟੋਪੀਆਂ, ਅਤੇ ਸਾਰੀਆਂ ਕਿਸਮਾਂ ਦੇ ਹਰੇ ਰੰਗ ਦੇ ਕੱਪੜੇ। ਇੱਕ ਥਾਂ \'ਤੇ ਇੱਕ ਵਿਅਕਤੀ ਹਰੇ ਰੰਗ ਦੀ ਸ਼ਕੰਜਵੀ ਵੇਚ ਰਿਹਾ ਸੀ, ਅਤੇ ਜਦੋਂ ਬੱਚੇ ਸ਼ਕੰਜਵੀ ਨੂੰ ਖ਼ਰੀਦ ਰਹੇ ਸਨ ਤਾਂ ਡੋਰਥੀ ਵੇਖ ਸਕਦੀ ਸੀ ਕਿ ਉਹ ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਹਰੇ ਰੰਗ ਦੀਆਂ ਪੈਨੀਆਂ (ਪੈਸੇ) ਦੇ ਰਹੇ ਸਨ। \n\nਇੰਝ ਪ੍ਰਤੀਤ ਹੁੰਦਾ ਸੀ ਕਿ ਉੱਥੇ ਕੋਈ ਘੋੜੇ ਜਾਂ ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੇ ਜਾਨਵਰ ਨਹੀਂ ਸਨ: ਬੰਦੇ ਹਰੇ ਰੰਗ ਦੇ ਛੋਟੇ-ਛੋਟੇ ਗੱਡਿਆਂ ਉੱਤੇ ਚੀਜ਼ਾਂ ਨੂੰ ਇੱਧਰ-ਉੱਧਰ ਲੈ ਕੇ ਜਾ ਰਹੇ ਸਨ, ਜਿੰਨ੍ਹਾਂ ਨੂੰ ਉਹ ਆਪਣੇ ਅੱਗੇ ਧਕੇਲ ਕੇ ਲੈ ਜਾ ਰਹੇ ਸਨ। ਹਰ ਕੋਈ ਖੁਸ਼ ਅਤੇ ਸੰਤੁਸ਼ਟ ਅਤੇ ਖ਼ੁਸ਼ਹਾਲ ਪ੍ਰਤੀਤ ਹੋ ਰਿਹਾ ਸੀ।"</string>
     <string name="font_size_save" msgid="3450855718056759095">"ਠੀਕ"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB ਸਟੋਰੇਜ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD ਕਾਰਡ"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"ਬੰਦ"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"ਅਣਉਪਲਬਧ ਕਿਉਂਕਿ NFC ਬੰਦ ਹੈ"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android ਬੀਮ"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"ਜਦੋਂ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਚਾਲੂ ਕੀਤੀ ਹੋਵੇ, ਤਾਂ ਡੀਵਾਈਸਾਂ ਨੂੰ ਇੱਕ-ਦੂਜੇ ਦੇ ਨੇੜੇ ਰੱਖਣ ਦੁਆਰਾ ਤੁਸੀਂ ਐਪ ਸਮੱਗਰੀ ਨੂੰ ਕਿਸੇ ਹੋਰ NFC-ਸਮਰੱਥਾ ਵਾਲੀ ਡੀਵਾਈਸ \'ਤੇ ਬੀਮ ਕਰ ਸਕਦੇ ਹੋ। ਉਦਾਹਰਨ ਲਈ, ਤੁਸੀਂ ਵੈੱਬ ਪੰਨਿਆਂ, YouTube ਵੀਡੀਓ, ਸੰਪਰਕਾਂ, ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਨੂੰ ਬੀਮ ਕਰ ਸਕਦੇ ਹੋ।\n\nਸਿਰਫ਼ ਡੀਵਾਈਸਾਂ ਨੂੰ ਇੱਕ-ਦੂਜੇ ਦੇ ਨੇੜੇ ਲਿਆਓ (ਖ਼ਾਸ ਤੌਰ \'ਤੇ ਵਾਰ-ਵਾਰ) ਅਤੇ ਫਿਰ ਆਪਣੀ ਸਕ੍ਰੀਨ ਨੂੰ ਟੈਪ ਕਰੋ। ਐਪ ਇਹ ਤੈੈਅ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜੀ ਚੀਜ਼ ਬੀਮ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"ਜਦੋਂ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਚਾਲੂ ਕੀਤੀ ਹੋਵੇ, ਤਾਂ ਡੀਵਾਈਸਾਂ ਨੂੰ ਇੱਕ-ਦੂਜੇ ਦੇ ਨੇੜੇ ਰੱਖਣ ਦੁਆਰਾ ਤੁਸੀਂ ਐਪ ਸਮੱਗਰੀ ਨੂੰ ਕਿਸੇ ਹੋਰ NFC-ਸਮਰੱਥਾ ਵਾਲੀ ਡੀਵਾਈਸ \'ਤੇ ਬੀਮ ਕਰ ਸਕਦੇ ਹੋ। ਉਦਾਹਰਨ ਲਈ, ਤੁਸੀਂ ਵੈੱਬ ਪੰਨਿਆਂ, YouTube ਵੀਡੀਓ, ਸੰਪਰਕਾਂ, ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਨੂੰ ਬੀਮ ਕਰ ਸਕਦੇ ਹੋ।\n\nਬੱਸ ਡੀਵਾਈਸਾਂ ਨੂੰ ਇੱਕ-ਦੂਜੇ ਦੇ ਨੇੜੇ ਲਿਆਓ (ਰਵਾਇਤੀ ਤੌਰ \'ਤੇ ਪਿਛਲੇ ਪਾਸੇ ਨੂੰ ਪਿਛਲੇ ਪਾਸੇ ਨਾਲ ਜੋੜੋ) ਅਤੇ ਫਿਰ ਆਪਣੀ ਸਕ੍ਰੀਨ ਨੂੰ ਟੈਪ ਕਰੋ। ਐਪ ਇਹ ਤੈੈਅ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜੀ ਚੀਜ਼ ਬੀਮ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi‑Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Wi‑Fi ਚਾਲੂ ਕਰੋ"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi‑Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ਅਸ਼ੁੱਧੀ"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz ਬੈਂਡ ਇਸ ਦੇਸ਼ ਵਿੱਚ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ਨੈੱਟਵਰਕ ਸੂਚਨਾ"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"ਜਦੋਂ ਵੀ ਇੱਕ ਜਨਤਕ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਹੋਵੇ ਤਾਂ ਸੂਚਨਾ ਦਿਓ"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"ਖ਼ਰਾਬ ਕਨੈਕਸ਼ਨਾਂ ਤੋਂ ਬਚੋ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"ਜੇਕਰ ਤੱਕ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਚੰਗਾ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਾ ਹੋਵੇ ਤਾਂ Wi‑Fi ਨੈੱਟਵਰਕ ਨਾ ਵਰਤੋ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ਕੇਵਲ ਉਹ ਨੈੱਟਵਰਕ ਵਰਤੋ ਜਿਹਨਾਂ ਦਾ ਇੱਕ ਚੰਗਾ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਹੈ"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"ਨਵੇਂ ਐਪਸ ਲਈ ਤਰਜੀਹੀ ਇੰਸਟੌਲੇਸ਼ਨ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਬਦਲੋ"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"ਕੀ ਬਿਲਟ-ਇਨ ਐਪ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣਾ ਹੈ?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ਐਪ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਅਯੋਗ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ Android ਅਤੇ ਹੋਰ ਐਪਾਂ ਉਸ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰਨ ਜਿਵੇਂ ਇਹਨਾਂ ਤੋਂ ਉਮੀਦ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ਕੀ ਡੈਟਾ ਮਿਟਾਉਣਾ ਹੈ ਅਤੇ ਐਪ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣਾ ਹੈ?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਅਯੋਗ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ Android ਅਤੇ ਹੋਰ ਐਪਾਂ ਉਸ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰਨ ਜਿਵੇਂ ਇਹਨਾਂ ਤੋਂ ਉਮੀਦ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਤੁਹਾਡਾ ਡੈਟਾ ਵੀ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"ਕੀ ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰਨੀਆਂ ਹਨ?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਐਪ ਲਈ ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡੇ ਤੋਂ ਮਹੱਤਵਪੂਰਣ ਚਿਤਾਵਨੀਆਂ ਅਤੇ ਅਪਡੇਟਾਂ ਖੁੰਝ ਸਕਦੀਆਂ ਹਨ।"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"ਸਟੋਰ"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">%d ਲੁਕੀਆਂ ਹੋਈਆਂ ਆਈਟਮਾਂ ਵਿਖਾਓ</item>
       <item quantity="other">%d ਲੁਕੀਆਂ ਹੋਈਆਂ ਆਈਟਮਾਂ ਵਿਖਾਓ</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"ਨੈੱਟਵਰਕ ਅਤੇ ਇੰਟਰਨੈੱਟ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"ਕਨੈਕਟ ਕੀਤੀਆਂ ਡੀਵਾਈਸਾਂ"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ਐਪਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"ਵਰਤੋਂਕਾਰ ਅਤੇ ਖਾਤੇ"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"ਸੂਚਨਾਵਾਂ"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"ਮਹੱਤਤਾ"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"ਸੂਚਨਾਵਾਂ ਕਦੇ ਵੀ ਨਾ ਵਿਖਾਓ"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ਕੋਈ ਧੁਨੀ ਜਾਂ ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਰੁਕਾਵਟ ਨਹੀਂ"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"ਚੁੱਪਚਾਪ ਵਿਖਾਓ"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ਧੁਨੀ ਵਜਾਓ"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ਧੁਨੀ ਵਜਾਓ ਅਤੇ ਸਕ੍ਰੀਨ \'ਤੇ ਵਿਖਾਓ"</string>
     <string name="importance_reset" msgid="7458420788555607007">"ਰੀਸੈੱਟ ਕਰੋ"</string>
     <string name="show_silently" msgid="2222875799232222056">"ਚੁੱਪਚਾਪ ਵਿਖਾਓ"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"ਵਰਤਮਾਨ ਸਕ੍ਰੀਨ \'ਤੇ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਧੁਨੀ ਨਾ ਵਜਾਉਣ ਦਿਓ, ਥਰਥਰਾਹਟ ਨਾ ਕਰਨ ਦਿਓ ਜਾਂ ਝਲਕ ਨਾ ਵਿਖਾਉਣ ਦਿਓ।"</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"ਐਪਸ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ਚੈਨਲ"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"ਸਾਰੇ ਬਲੌਕ ਕਰੋ"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਕਦੇ ਨਾ ਵਿਖਾਓ"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"ਸੂਚਨਾਵਾਂ ਵਿਖਾਓ"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ਸੂਚਨਾਵਾਂ ਕਦੇ ਵੀ ਪਰਛਾਵੇਂ ਵਿੱਚ ਜਾਂ ਪੈਰੀਫਿਰਲ ਡੀਵਾਈਸਾਂ \'ਤੇ ਨਾ ਵਿਖਾਓ"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"ਬੈਜ ਵਿਖਾਓ"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ਹੋਮ ਐਪ \'ਤੇ ਬੈਜਾਂ ਵਜੋਂ ਸੂਚਨਾਵਾਂ ਵਿਖਾਓ, ਜੇਕਰ ਸਮਰਥਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਓਵਰਰਾਈਡ ਕਰੋ"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਰੋਕੇ ਰਹਿਣਾ ਜਾਰੀ ਰਹਿਣ ਦਿਓ ਜਦੋਂ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਸਿਰਫ਼ ਤਰਜੀਹ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਹੋਵੇ।"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"ਲੌਕ ਸਕ੍ਰੀਨ \'ਤੇ"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"ਦੁਬਾਰਾ ਨਾ ਵਿਖਾਓ"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"ਇਸ ਵਜੋਂ ਬੇਨਤੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"ਸਿਸਟਮ ਜਾਣਕਾਰੀ"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਸੈਟਿੰਗਾਂ"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"ਸੰਪਰਕ ਖੋਜ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"ਕਾਲ ਕਰਨ ਵਾਲਿਆਂ ਅਤੇ ਸੰਪਰਕਾਂ ਦੀ ਪਛਾਣ ਕਰਨ ਲਈ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵਿੱੱਚ ਸੰਪਰਕ ਖੋਜਾਂ ਕਰਨ ਦਿਓ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"ਤੁਹਾਡੀ ਸਭ ਤੋਂ ਹਾਲੀਆ ਬੱਗ ਰਿਪੋਰਟ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"ਤੁਹਾਡਾ ਸਭ ਤੋਂ ਹਾਲੀਆ ਸੁਰੱਖਿਆ ਲੌਗ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
-    <string name="storage_photos_videos" msgid="1872663116054954685">"ਫ਼ੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ ਫ਼ਾਈਲਾਂ"</string>
-    <string name="storage_music_audio" msgid="7890103397813503615">"ਸੰਗੀਤ ਅਤੇ ਔਡੀਓ ਫ਼ਾਈਲ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
+    <string name="storage_photos_videos" msgid="1872663116054954685">"ਫ਼ੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ"</string>
+    <string name="storage_music_audio" msgid="7890103397813503615">"ਸੰਗੀਤ ਅਤੇ ਔਡੀਓ"</string>
     <string name="storage_games" msgid="7703159201697117621">"ਗੇਮਾਂ"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"ਹੋਰ ਐਪਾਂ"</string>
     <string name="storage_files" msgid="8581083146777364063">"ਫ਼ਾਈਲਾਂ"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ਫ਼ੋਨ ਸਟੋਰੇਜ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ਵਰਤੀ ਗਈ"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ਖਾਲੀ"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f8c6c3a..365fc11 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Przykładowy tekst"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Czarnoksiężnik z Krainy Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Rozdział 11: Szmaragdowe Miasto"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Mimo że Dorotka i jej przyjaciele mieli na nosach ochronne zielone okulary, odruchowo zmrużyli oczy, gdy pierwszy raz ujrzeli lśniące wspaniale Szmaragdowe Miasto. Wzdłuż ulic stały równo piękne domy z zielonego marmuru, wysadzane połyskującymi szmaragdami. Chodniki wykonane były z tego samego budulca, a w spojeniach płyt skrzyły się w słońcu całe rzędy osadzonych ciasno szmaragdów. Szyby w oknach były z zielonego szkła. Nawet niebo nad Miastem i promienie słońca miały zielonkawe zabarwienie. \n\nWokół kręciło się mnóstwo ludzi – mężczyzn, kobiet i dzieci – ubranych na zielono. Również ich skóra miała zielony odcień. Patrzyli na Dorotkę i jej barwną kompanię wielkimi, zdziwionymi oczami, a dzieci na widok Lwa uciekały i chowały się za swoimi mamami. Nikt jednak nie odezwał się do nich nawet słowem. Przy ulicy nie brakowało różnych sklepów i Dorotka zauważyła, że cały ich asortyment był zielony: zielone cukierki, zielona prażona kukurydza, zielone buty, zielone kapelusze, wszelkiego rodzaju zielone ubrania. Przy jednym ze stoisk jakiś pan sprzedawał zieloną lemoniadę, za którą dzieci płaciły – jak dostrzegła Dorotka – zielonymi monetami. \n\nNigdzie nie było widać ani koni, ani żadnych innych zwierząt. Do transportu używano zielonych wózeczków, które mieszkańcy pchali przed sobą. Wszyscy wydawali się szczęśliwi, radośni i zadowoleni z życia."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Nośnik USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Karta SD"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Błąd"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Pasmo 5 GHz nie jest dostępne w tym kraju"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"W trybie samolotowym"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Powiadomienie o sieci"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Powiadamiaj o dostępnej sieci publicznej"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Unikaj słabych połączeń"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nie używaj sieci Wi-Fi, jeśli połączenie jest słabe"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Używaj tylko sieci z dobrym połączeniem internetowym"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Zmień preferowaną lokalizację instalacji nowych aplikacji."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Wyłączyć wbudowaną aplikację?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Wyłącz aplikację"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Jeśli wyłączysz tę aplikację, Android i inne aplikacje mogą działać nieprawidłowo."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Usunąć dane i wyłączyć aplikację?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Jeśli wyłączysz tę aplikację, Android i inne aplikacje mogą działać nieprawidłowo. Zostaną też usunięte Twoje dane."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Wyłączyć powiadomienia?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Jeśli wyłączysz powiadomienia tej aplikacji, możesz przeoczyć ważne alerty i aktualizacje."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Sklep"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="other">Pokaż %d ukrytego elementu</item>
       <item quantity="one">Pokaż %d ukryty element</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Sieć i internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Połączone urządzenia"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacje i powiadomienia"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Użytkownik i konta"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Powiadomienia"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Ważność"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nie ustawiono"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nigdy nie pokazuj powiadomień"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Brak dźwięku i komunikatów wizualnych"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Pokazuj dyskretnie"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Sygnalizacja dźwiękiem"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Sygnalizacja dźwiękiem i wyświetlenie komunikatu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Resetuj"</string>
     <string name="show_silently" msgid="2222875799232222056">"Pokazuj dyskretnie"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Nie sygnalizuj tych powiadomień dźwiękiem ani wibracjami ani nie wyświetlaj ich na bieżącym ekranie."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Wczytuję aplikacje..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanały"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokuj wszystkie"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nigdy nie pokazuj tych powiadomień"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Pokazuj powiadomienia"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nigdy nie pokazuj powiadomień w obszarze powiadomień ani na urządzeniach peryferyjnych"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Pokaż plakietkę"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Pokazuj powiadomienia jako plakietki w aplikacji Google Home, jeśli są obsługiwane."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Zastąp Nie przeszkadzać"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Zezwól na działanie tych powiadomień, gdy Nie przeszkadzać ma ustawienie Tylko priorytetowe"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na ekranie blokady"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Nie pokazuj ponownie"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Wysyłasz jako"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Dodaj konto"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informacje o systemie"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Ustawienia profilu do pracy"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Wyszukiwanie kontaktów"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Zezwalaj na wyszukiwanie kontaktów do identyfikacji rozmówców i kontaktów przez Twoją organizację"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Najnowszy raport o błędzie"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Twój najnowszy dziennik zabezpieczeń"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nigdy"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Zdjęcia i filmy"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzyka i nagrania audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Gry"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Inne aplikacje"</string>
     <string name="storage_files" msgid="8581083146777364063">"Pliki"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Pamięć telefonu"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> wykorzystano"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Wolne: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index c1529ba..4456004 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Texto de amostra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"O Mágico de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: A maravilhosa Cidade das Esmeraldas de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Mesmo com os olhos protegidos pelos óculos verdes, Dorothy e seus amigos foram ofuscados pelo brilho da magnífica cidade. As ruas estavam repletas de belas casas, todas feitas de mármore verde e cravejadas de esmeraldas brilhantes por toda a parte. Eles caminharam pela calçada do mesmo mármore verde, e, onde os blocos se encontravam, havia fileiras de esmeraldas bem próximas umas das outras, brilhantes à luz do sol. As janelas eram de vidro verde. Até mesmo o céu sobre a cidade era esverdeado, e os raios do sol eram verdes. \n\nHavia muitas pessoas, homens, mulheres e crianças, caminhando por lá, e todos estavam vestidos com roupas verdes e tinham a pele esverdeada. Eles olharam para Dorothy e seu grupo estranhamente variado com olhos curiosos, e todas as crianças fugiram e se esconderam atrás de suas mães quando viram o Leão; mas ninguém falou com eles. Havia muitas lojas na rua, e Dorothy viu que tudo nelas era verde. Doces verdes e pipoca verde estavam à venda, assim como sapatos verdes, chapéus verdes e roupas verdes de todos os tipos. Em um lugar, um homem estava vendendo limonada verde, e quando as crianças a compravam, Dorothy viu que elas pagavam com moedas verdes. \n\nParecia não haver nenhum cavalo nem animais de qualquer espécie. Os homens carregavam as coisas em pequenos carrinhos verdes, que eles empurravam à sua frente. Todos pareciam felizes, satisfeitos e prósperos."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Armaz. USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Cartão SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erro"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHz não está disponível neste país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"No modo avião"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificação de rede"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notificar sempre que houver uma rede pública disponível"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitar conexões ruins"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Não usar uma rede Wi-Fi a menos que tenha uma boa conexão com a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Use somente redes que têm uma boa conexão com a Internet"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Alterar o local de instalação preferido para novos apps"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Desativar app integrado?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desativar app"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Se você desativar esse app, o Android e outros apps poderão deixar de funcionar como deveriam."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Excluir os dados e desativar o app?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Se você desativar esse app, o Android e outros apps poderão deixar de funcionar como deveriam. Seus dados também serão excluídos."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Desativar notificações?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Se você desativar as notificações para este app, poderá perder alertas e atualizações importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Loja"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Mostrar %d item oculto</item>
       <item quantity="other">Mostrar %d itens ocultos</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rede e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos conectados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps e notificações"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Usuário e contas"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificações"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importância"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Não definido"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nunca mostrar notificações"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Sem som ou interrupção visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar de forma silenciosa"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir som"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir som e exibir na tela"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Redefinir"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar de forma silenciosa"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Não emitir som, vibrar ou mostrar parcialmente essas notificações na tela atual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Carregando apps…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canais"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear tudo"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nunca mostrar essas notificações"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificações"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nunca mostrar notificações na aba ou em dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar selos"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostrar notificações como selos no app Google Home, se compatível."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Modificar \"Não perturbe\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permitir que essas notificações continuem a interromper quando \"Não perturbe\" estiver definido para \"Somente prioridade\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na tela de bloqueio"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Não mostrar novamente"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitando como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Adicionar conta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informações do sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configurações do perfil de trabalho"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pesquisa de contatos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permitir que sua organização pesquise contatos para identificar autores de chamadas e contatos"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Seu relatório do bug mais recente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Seu registro de segurança mais recente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos e vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música e áudio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jogos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Outros apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Arquivos"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Armazen. do smartphone"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> usado(s)"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> livre(s)"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 933fe28..e15f740 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Exemplo de texto"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"O Maravilhoso Feiticeiro de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: A Maravilhosa Cidade Esmeralda de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Mesmo com os olhos protegidos pelos óculos verdes, Dorothy e os seus amigos ficaram ofuscados pelo esplendor da maravilhosa Cidade. As ruas estavam ladeadas por casas magníficas totalmente construídas em mármore verde e cravejadas de esmeraldas brilhantes. Caminhavam por um passeio feito do mesmo mármore verde e, nos espaços onde os blocos se uniam, havia filas apertadas de esmeraldas que brilhavam sob a luz do sol. Os vidros das janelas eram verdes; até mesmo o céu sobre a Cidade tinha um tom esverdeado, e os raios do sol eram verdes. \n\nPelas ruas caminhavam várias pessoas, homens, mulheres e crianças, todos vestidos com roupas verdes e com uma pele esverdeada. Olhavam com curiosidade para Dorothy e os seus estranhos companheiros, e as crianças fugiam e escondiam-se atrás das suas mães quando viam o Leão. Contudo, ninguém falava com eles. A rua estava repleta de lojas e Dorothy viu que tudo o que nelas havia era verde. Vendiam-se doces verdes e pipocas verdes, bem como sapatos verdes, chapéus verdes e roupas verdes de todos os tipos. Por ali, um homem vendia limonada verde e Dorothy reparou que as crianças lhe pagavam com moedas verdes. \n\nParecia não haver cavalos ou animais de qualquer espécie. Os homens levavam as suas coisas em pequenos carrinhos verdes que empurravam à sua frente. Todos pareciam felizes, satisfeitos e prósperos."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Armazenamento USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Cartão SD"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Desativado"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Não disponível, porque o NFC está desativado"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Quando esta funcionalidade está ativada, pode transmitir conteúdo da aplicação para outro dispositivo compatível com NFC ao manter os dispositivos próximos um do outro. Por exemplo, pode transmitir páginas Web, vídeos do YouTube, contactos e muito mais.\n\nBasta aproximar os dispositivos um do outro (normalmente, de costas) e, em seguida, toque no ecrã. A aplicação determina o que é transmitido."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Quando esta funcionalidade está ativada, pode transmitir conteúdo da aplicação para outro dispositivo compatível com NFC ao manter os dispositivos próximos um do outro. Por exemplo, pode transmitir páginas Web, vídeos do YouTube, contactos e muito mais.\n\nBasta aproximar os dispositivos um do outro (normalmente, de costas) e, em seguida, tocar no ecrã. A aplicação determina o que é transmitido."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi‑Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Ativar Wi-Fi"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi‑Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erro"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHz não disponível neste país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"No Modo de avião"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificação de rede"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notificar sempre que uma rede pública estiver disponível"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitar más ligações"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Não utilizar uma rede Wi-Fi exceto se tiver uma boa ligação à Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Utilize apenas redes com uma boa ligação à Internet"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Alterar a localização de instalação preferida para novas aplicações"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Desativar aplicação incorporada?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desativar aplicação"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Se desativar esta aplicação, o Android e outras aplicações podem deixar de funcionar corretamente."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Eliminar dados e desativar aplicação?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Se desativar esta aplicação, o Android e outras aplicações podem deixar de funcionar corretamente. Os seus dados também são eliminados."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Desativar notificações?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Se desativar as notificações para esta aplicação, pode perder alertas e atualizações importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Loja"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Mostrar %d itens ocultos</item>
       <item quantity="one">Mostrar %d item oculto</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rede e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos ligados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplicações e notificações"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Utilizador e contas"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificações"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importância"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Não definido"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nunca mostrar notificações"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Sem interrupção sonora ou visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar silenciosamente"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir som"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir som e aparecer no ecrã"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Repor"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar silenciosamente"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Não emitir som, vibrar, nem mostrar estas notificações no ecrã atual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"A carregar aplicações..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canais"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear tudo"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nunca mostrar estas notificações"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificações"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nunca mostrar notificações no painel ou nos dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar emblema"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostrar notificações como emblemas na aplicação Google Home, se tal for suportado."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Substituir o modo Não incomodar"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permitir que estas notificações continuem a interrompê-lo quando o modo Não incomodar estiver definido como Apenas prioridade"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"No ecrã de bloqueio"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Não mostrar novamente"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"A solicitar como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Adicionar conta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informações do sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Definições do perfil de trabalho"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pesquisa de contactos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permitir pesquisa de contactos por parte da sua entidade para identificar autores das chamadas e contactos"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"O seu relatório de erro mais recente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"O seu registo de segurança mais recente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos e vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música e áudio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jogos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Outras aplicações"</string>
     <string name="storage_files" msgid="8581083146777364063">"Ficheiros"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Armazenam. do telemóvel"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> utilizado(s)"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> livre(s)"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index c1529ba..4456004 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Texto de amostra"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"O Mágico de Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capítulo 11: A maravilhosa Cidade das Esmeraldas de Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Mesmo com os olhos protegidos pelos óculos verdes, Dorothy e seus amigos foram ofuscados pelo brilho da magnífica cidade. As ruas estavam repletas de belas casas, todas feitas de mármore verde e cravejadas de esmeraldas brilhantes por toda a parte. Eles caminharam pela calçada do mesmo mármore verde, e, onde os blocos se encontravam, havia fileiras de esmeraldas bem próximas umas das outras, brilhantes à luz do sol. As janelas eram de vidro verde. Até mesmo o céu sobre a cidade era esverdeado, e os raios do sol eram verdes. \n\nHavia muitas pessoas, homens, mulheres e crianças, caminhando por lá, e todos estavam vestidos com roupas verdes e tinham a pele esverdeada. Eles olharam para Dorothy e seu grupo estranhamente variado com olhos curiosos, e todas as crianças fugiram e se esconderam atrás de suas mães quando viram o Leão; mas ninguém falou com eles. Havia muitas lojas na rua, e Dorothy viu que tudo nelas era verde. Doces verdes e pipoca verde estavam à venda, assim como sapatos verdes, chapéus verdes e roupas verdes de todos os tipos. Em um lugar, um homem estava vendendo limonada verde, e quando as crianças a compravam, Dorothy viu que elas pagavam com moedas verdes. \n\nParecia não haver nenhum cavalo nem animais de qualquer espécie. Os homens carregavam as coisas em pequenos carrinhos verdes, que eles empurravam à sua frente. Todos pareciam felizes, satisfeitos e prósperos."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Armaz. USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Cartão SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Erro"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHz não está disponível neste país"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"No modo avião"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificação de rede"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notificar sempre que houver uma rede pública disponível"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitar conexões ruins"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Não usar uma rede Wi-Fi a menos que tenha uma boa conexão com a Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Use somente redes que têm uma boa conexão com a Internet"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Alterar o local de instalação preferido para novos apps"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Desativar app integrado?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Desativar app"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Se você desativar esse app, o Android e outros apps poderão deixar de funcionar como deveriam."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Excluir os dados e desativar o app?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Se você desativar esse app, o Android e outros apps poderão deixar de funcionar como deveriam. Seus dados também serão excluídos."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Desativar notificações?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Se você desativar as notificações para este app, poderá perder alertas e atualizações importantes."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Loja"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="one">Mostrar %d item oculto</item>
       <item quantity="other">Mostrar %d itens ocultos</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rede e Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispositivos conectados"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Apps e notificações"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Usuário e contas"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificações"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importância"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Não definido"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nunca mostrar notificações"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Sem som ou interrupção visual"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Mostrar de forma silenciosa"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Emitir som"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Emitir som e exibir na tela"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Redefinir"</string>
     <string name="show_silently" msgid="2222875799232222056">"Mostrar de forma silenciosa"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Não emitir som, vibrar ou mostrar parcialmente essas notificações na tela atual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Carregando apps…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canais"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bloquear tudo"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nunca mostrar essas notificações"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Mostrar notificações"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nunca mostrar notificações na aba ou em dispositivos periféricos"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Mostrar selos"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Mostrar notificações como selos no app Google Home, se compatível."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Modificar \"Não perturbe\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permitir que essas notificações continuem a interromper quando \"Não perturbe\" estiver definido para \"Somente prioridade\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na tela de bloqueio"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Não mostrar novamente"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitando como"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Adicionar conta"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informações do sistema"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Configurações do perfil de trabalho"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Pesquisa de contatos"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permitir que sua organização pesquise contatos para identificar autores de chamadas e contatos"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Seu relatório do bug mais recente"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Seu registro de segurança mais recente"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nunca"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotos e vídeos"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Música e áudio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jogos"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Outros apps"</string>
     <string name="storage_files" msgid="8581083146777364063">"Arquivos"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Armazen. do smartphone"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> usado(s)"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> livre(s)"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0c572c5..73119a8 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Exemplu de text"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Minunatul Vrăjitor din Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Capitolul 11: Minunatul Oraș de Smarald Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Deși purtau ochelarii verzi, Dorothy și prietenii ei fură la început orbiți de strălucirea minunatei cetăți. De-a lungul străzilor se înșiruiau case frumoase din marmură verde, încrustate pretutindeni cu smaralde scânteietoare. Mergeau pe un caldarâm tot din marmură verde, iar în locurile unde blocurile de marmură erau lipite laolaltă, se aflau, unul lângă altul, șiruri de smaralde care străluceau în razele soarelui. Geamurile erau din sticlă verde. Chiar și cerul de deasupra Cetății avea o nuanță verde, iar razele soarelui erau verzui. \n\nPe străzi se plimba multă lume - bărbați, femei și copii - și cu toții erau îmbrăcați în verde și aveau pielea verzuie. Se uitau uimiți la Dorothy și la neobișnuita ei ceată, iar copiii fugeau în toate părțile când îl vedeau pe Leu și se ascundeau în spatele mamelor lor. Însă nimeni nu vorbea cu ei. Pe străzi erau multe dughene, iar Dorothy observă că în ele totul era verde. Se vindeau bomboane verzi și floricele de porumb verde, pantofi verzi, pălării verzi și haine verzi de tot soiul. Într-un loc, cineva vindea limonadă verde, iar niște copii tocmai cumpărau și Dorothy văzu că plăteau cu bănuți verzi. \n\nNu păreau să existe nici cai, nici alte animale. În schimb, oamenii își cărau lucrurile în niște cărucioare verzi, pe care tot ei le împingeau. Cu toții păreau să emane o stare de fericire, de mulțumire și bunăstare."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Stocare USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Card SD"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Eroare"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Banda de 5 GHz nu este disponibilă în această țară"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"În modul Avion"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notificare de rețea"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Notifică-mă când este disponibilă o rețea publică"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Evitați conexiunile slabe"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nu utilizați o rețea Wi-Fi, cu excepția cazului în care aceasta are o conexiune la internet adecvată"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Utilizați numai rețelele care au conexiune bună la internet"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Schimbați locația preferată de instalare pentru noile aplicații"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Dezactiv. aplic. încorporată?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Dezactivați aplicația"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Dacă dezactivați această aplicație, este posibil ca Android și alte aplicații să nu mai funcționeze corespunzător."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Ștergeți datele și dezactivați aplicația?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Dacă dezactivați această aplicație, este posibil ca Android și alte aplicații să nu mai funcționeze corespunzător. În plus, datele dvs. vor fi șterse."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Dezactivați notificările?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Dacă dezactivați notificările pentru această aplicație, puteți pierde alerte și actualizări importante."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Magazin"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="other">Afișați %d de elemente ascunse</item>
       <item quantity="one">Afișați %d element ascuns</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rețea și internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Dispozitive conectate"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplicații și notificări"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Utilizator și conturi"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Notificări"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Importanță"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nesetat"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nu afișați niciodată notificările"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Fără sunet sau întrerupere vizuală"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Se afișează fără sunet"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Se emite un sunet"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Se emite un sunet și se evidențiază pe ecran"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Resetați"</string>
     <string name="show_silently" msgid="2222875799232222056">"Se afișează fără sunet"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Sunetul și vibrațiile sunt dezactivate, iar aceste notificări nu se afișează pentru o scurtă durată pe ecranul actual."</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Se încarcă aplicațiile..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Canale"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blocați-le pe toate"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Aceste notificări nu se afișează niciodată"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Afișați notificările"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nu afișați niciodată notificările în umbră sau pe dispozitive periferice"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Afișați insigna"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Afișați notificările ca insigne pe aplicația de pe ecranul de pornire, dacă sunt acceptate."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ignoră Nu deranja"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Permiteți acestor notificări să vă întrerupă când modul Nu deranja este setat la Numai cu prioritate"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Pe ecranul de blocare"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Nu mai afișa"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Solicitarea se trimite din contul"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Adăugați un cont"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informații de sistem"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Setările profilului de serviciu"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Căutarea persoanelor de contact"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Permiteți căutările persoanelor de contact efectuate de organizația dvs. pentru a identifica apelanții și persoanele de contact"</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Cel mai recent raport de eroare"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Cel mai recent jurnal de securitate"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Niciodată"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotografii și videoclipuri"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzică și audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Jocuri"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Alte aplicații"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fișiere"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Stocare pe telefon"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> folosit"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> gratuit"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 0075a59..bee81ee 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Пример текста"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Удивительный волшебник из страны Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Глава 11. Изумрудный город страны Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Даже надев зеленые очки, Дороти и ее друзья были ошеломлены сверканием этого удивительного города. По улицам стояли прекрасные дома из зеленого мрамора, украшенные блестящими изумрудами. Путники шли по тротуару из того же зеленого мрамора, а щели между плитами были заполнены изумрудами, сиявшими под лучами солнца. Окна домов были из зеленого стекла. Даже небо над Изумрудным Городом было зеленое, и зеленое солнце посылало жаркие зеленые лучи.\n\nВокруг сновали мужчины, женщины, дети, и все они носили зеленую одежду, и кожа у них была зеленоватого оттенка. Они с удивлением смотрели на Дороти и ее странных спутников. Завидев большого Льва, дети прятались за спины родителей, и никто не осмеливался задавать вопросы чужестранцам. В магазинах продавались товары зеленого цвета – зеленые конфеты и зеленая жареная кукуруза, зеленые башмаки и шляпы, зеленые платья и сюртуки всех фасонов и размеров. На одном из лотков продавец торговал зеленым лимонадом, и обступившие его дети расплачивались зелеными монетками.\n\nНа улицах Изумрудного Города не было ни лошадей, ни других животных. Мужчины возили поклажу в маленьких тачках на колесиках. У жителей Изумрудного Города был веселый и довольный вид."</string>
     <string name="font_size_save" msgid="3450855718056759095">"ОК"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-накопитель"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-карта"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Ошибка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Частота 5 ГГц недоступна в этой стране"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Режим полета"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Уведомления о сетях"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Сообщать о наличии общедоступных сетей"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Фильтр сетей Wi-Fi"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Не использовать сети Wi-Fi с плохим интернет-соединением"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Использовать только сети с сильным сигналом"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Изменить папку для установки приложений"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Отключить приложение?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Отключить приложение"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Если вы отключите это приложение, другие могут работать неправильно."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Отключить?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Если вы отключите это приложение, данные будут удалены, а другие приложения и Android могут работать неправильно."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Отключить уведомления?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Если в настройках этого приложения отключены уведомления, вы можете пропустить важные оповещения и обновления."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Магазин"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="many">Показать %d скрытых объектов</item>
       <item quantity="other">Показать %d скрытых объекта</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Сеть и Интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Подключенные устройства"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Приложения и уведомления"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Пользователь и аккаунты"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Уведомления"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Важность"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Не указано"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Отключить уведомления"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без уведомлений"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Без звука"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Звук"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Звук и всплывающее окно"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Сбросить"</string>
     <string name="show_silently" msgid="2222875799232222056">"Без звука"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Отключить звуковой сигнал и вибрацию, не показывать оповещения поверх других приложений."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Загрузка..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Каналы"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блокировать все"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Не показывать эти уведомления."</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Включить уведомления"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Не показывать уведомления на фоне или на периферийных устройствах"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Показывать значки"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Показывать уведомления в виде значков в приложении Home (если функция поддерживается)"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Переопределить режим \"Не беспокоить\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Разрешить эти уведомления, когда в режиме \"Не беспокоить\" выбрано \"Только важные\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"На заблокированном экране"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Больше не показывать"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Запрос от:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Добавить аккаунт"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Сведения о системе"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Настройки рабочего профиля"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Поиск контактов"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Разрешить поиск контактов в организации для определения вызывающих абонентов"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Последний отчет об ошибках"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Последний журнал безопасности"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Никогда"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Фото и видео"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музыка"</string>
     <string name="storage_games" msgid="7703159201697117621">"Игры"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Другие приложения"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файлы"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Хранилище телефона"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> занято"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> свободно"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index e5da4eb..5579351 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"දෝෂය"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz කලාපය මෙම රටෙහි නොමැත"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"අහස්යානා ආකාරය තුළ"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"ජාල දැනුම්දීම"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"පොදු ජාල තිබෙන්නේ කොහේ දැයි දැනුම් දෙන්න"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"දුර්වල සම්බන්ධතා මඟහරින්න"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"හොඳ අන්තර්ජාල සම්බන්ධතාවයක් නොමැති නම් Wi‑Fi ජාල භාවිතා නොකරන්න"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"හොඳ අන්තර්ජාල සම්බන්ධතාවක් තිබෙන ජාල පමණක් භාවිතා කරන්න"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"ඔබේ වඩාත්ම මෑත දෝෂ වාර්තාව"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"ඔබේ වඩාත්ම මෑත ආරක්ෂක ලොගය"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"කවදාවත් නෑ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ඡායාරූප සහ වීඩියෝ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"සංගීතය සහ ශ්‍රව්‍ය"</string>
     <string name="storage_games" msgid="7703159201697117621">"ක්‍රීඩා"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"වෙනත් යෙදුම්"</string>
     <string name="storage_files" msgid="8581083146777364063">"ගොනු"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"දුරකථන ගබඞාව"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> භාවිත කරන ලදී"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> නිදහස්ය"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c3aadfc..59e1c42 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Ukážkový text"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čarodejník z krajiny Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. kapitola: Nádherné smaragdové mesto"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Lesk tohto nádherného mesta Dorotku a jej priateľov najskôr oslepoval, hoci mali na očiach zelené okuliare. Ulice lemovali nádherné domy zo zeleného mramoru, husto osadené trblietajúcimi sa smaragdmi. Kráčali po chodníku z takého istého zeleného mramoru. Na miestach, kde sa spájali dlaždice, sa ligotali v odraze slnka husté rady smaragdov. Obločné tabule boli zo zeleného skla. Dokonca aj obloha nad mestom bola zafarbená dozelena a slnečné lúče boli tiež zelené. \n\nV uliciach bolo veľa ľudí. Muži, ženy i deti si vykračovali oblečení v zelených šatách a všetci mali zelenkavú pokožku. Zvedavo si obzerali Dorotku a jej prazvláštnu spoločnosť. Keď deti zbadali leva, rýchlo utiekli a skryli sa za matkin chrbát. Nik sa však Dorotke a jej spoločníkom neprihovoril. Na ulici bolo mnoho rozličných obchodov. Dorotkinmu zraku neušlo, že všetok tovar bol zelený. Zelené cukríky, zelené pukance, zelené topánky, zelené klobúky a všelijaké zelené šaty – to všetko tu bolo na predaj. Jeden obchodník predával zelenú limonádu. Keď si ju deti kupovali, Dorotka zbadala, že platia zelenými mincami. \n\nZdalo sa, že sa v meste nenachádzajú žiadne kone ani iné zvieratá. Muži tlačili pred sebou malé zelené vozíky, v ktorých prevážali veci, kam bolo treba. Všetci vyzerali šťastní, spokojní a prekvitajúci."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Ukladací priestor USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD karta"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Chyba"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"V tejto krajine nie je pásmo 5 GHz k dispozícii"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Režim v lietadle"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Upozornenia na siete"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Upozorniť, keď bude dostupná verejná sieť"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Vyhnúť sa nekvalitným pripojeniam"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Nepoužívať sieť Wi-Fi, pokiaľ nemá dostatočne kvalitné internetové pripojenie"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Použiť iba siete s dobrým pripojením k internetu"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Zmena preferovaného umiestnenia pre inštaláciu nových aplikácií"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Chcete deaktivovať vstavanú aplikáciu?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Zakázať aplikáciu"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ak zakážete túto aplikáciu, systém Android a ďalšie aplikácie už nemusia fungovať podľa očakávaní."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Odstrániť údaje a zakázať aplikáciu?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ak zakážete túto aplikáciu, systém Android a ďalšie aplikácie už nemusia fungovať podľa očakávaní. Taktiež sa odstránia vaše údaje."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Vypnúť upozornenia?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ak v tejto aplikácii vypnete upozornenia, môžete prísť o dôležité upozornenia a aktuálne informácie."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Obchod"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="other">Zobraziť %d skrytých položiek</item>
       <item quantity="one">Zobraziť %d skrytú položku</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Sieť a internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Pripojené zariadenia"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikácie a upozornenia"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Používateľ a účty"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Upozornenia"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Dôležitosť"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nenastavené"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nikdy nezobrazovať upozornenia"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bez zvuku a vizuálneho vyrušenia"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Zobraziť bez zvukov"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Vydať zvukový signál"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Vydať zvukový signál a vyskočiť na obrazovku"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Obnoviť"</string>
     <string name="show_silently" msgid="2222875799232222056">"Zobraziť bez zvukov"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Bez zvukov, vibrovania alebo posunutia do zobrazenia na aktuálnej obrazovke"</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Načítavajú sa aplikácie..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanály"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokovať všetko"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Tieto upozornenia nikdy nezobrazovať"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Zobrazovať upozornenia"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nikdy nezobrazovať upozornenia na paneli ani v periférnych zariadeniach"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Zobrazovať odznaky"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Zobrazovať upozornenia ako odznaky v aplikácii Home, ak je táto funkcia podporovaná."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Prepísať možnosť Nerušiť"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Umožniť týmto upozorneniam vyrušiť ma, ak je možnosť Nerušiť nastavená na možnosť Iba prioritné"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na uzamknutej obrazovke"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Nabudúce nezobrazovať"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Žiadosť sa odošle z účtu"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Pridať účet"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systémové informácie"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Nastavenia pracovného profilu"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Vyhľadávanie kontaktov"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Povoliť vašej organizácii hľadať kontakty na identifikáciu volajúcich a kontaktov"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Najaktuálnejšie hlásenie chyby"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Váš najaktuálnejší denník zabezpečenia"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikdy"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotky a videá"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Hudba a zvuk"</string>
     <string name="storage_games" msgid="7703159201697117621">"Hry"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Ďalšie aplikácie"</string>
     <string name="storage_files" msgid="8581083146777364063">"Súbory"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Úložisko telefónu"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> využité"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Voľné miesto: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b25542c..ac7329f 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Vzorec besedila"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Čudoviti čarovnik iz Oza"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. poglavje: Čudovito Smaragdno mesto"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Še celo skoz zelene naočnike, ki so jim varovali oči, so bili Doroteja in njeni prijatelji od kraja čisto oslepljeni od lesketanja čudovitega mesta. Na obakraj ceste so stale prelepe hiše, vse zidane iz zelenega marmorja in čez in čez posejane z bleščečimi smaragdi. Hodili so po tlaku iz ravno tako zelenega marmorja in povsod, kjer so bile plošče staknjene, so bile tikoma nanizane vrste smaragdov in se iskrile v sončnih žarkih. Šipe v oknih so bile iz zelenega stekla; še celo nebo nad mestom je bilo zeleno nadahnjeno in sončni žarki so bili zeleni. \n\nNa cestah je bilo vse polno ljudi – mož, žena in otrok – hodili so gor in dol in vsi so bili oblečeni v zelena oblačila in so bili zelenkaste polti. Vsi so radovedno ogledovali Dorotejo in njeno čudno pisano tovarišijo in od vseh strani so se zgrinjali otroci in se skrivali za matere, ko so zagledali leva; vendar jih nihče ni ogovoril. Ob cesti je bilo veliko trgovin in Doroteja je videla, da je v njih vse zeleno. Prodajali so zelene bonbončke in zeleno koruzo, pa tudi zelene čevlje, zelene klobuke in vse mogoče zelene obleke. Nekje je nekdo prodajal zeleno limonado in ko so jo otroci kupovali, je Doroteja videla, da jo plačujejo z zelenim denarjem. \n\nVideti je bilo, da v mestu ni ne konj ne nobenih drugih živali; ljudje so prevažali tovore sem ter tja na majhnih zelenih vozičkih, ki so jih potiskali pred seboj. Vse je bilo videti srečno in zadovoljno in zvrhano blaginje."</string>
     <string name="font_size_save" msgid="3450855718056759095">"V redu"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Pomnilnik USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Kartica SD"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Napaka"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5-GHz pas ni na voljo v tej državi"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"V načinu za letalo"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Obveščanje o omrežjih"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Obveščanje, ko je na voljo javno omrežje"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Izogni se slabim povezavam"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Omrežje Wi-Fi uporabi samo, če je na voljo dobra internetna povezava"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Uporaba samo omrežij z dobro internetno povezavo"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Spremenite prednostno namestitveno mesto za nove aplikacije."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Želite onemogočiti vgrajeno aplikacijo?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Onemogočanje aplikacije"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Če onemogočite to aplikacijo, Android in druge aplikacije morda ne bodo več delovali, kot bi morali."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Ali želite izbrisati podatke in onemogočiti aplikacijo?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Če onemogočite to aplikacijo, Android in druge aplikacije morda ne bodo več delovali, kot bi morali. Poleg tega bodo vaši podatki izbrisani."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Želite izklopiti obvestila?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Če izklopite obvestila za to aplikacijo, boste morda zamudili pomembna opozorila in posodobitve."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Trgovina"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="few">Pokaži %d skrite elemente</item>
       <item quantity="other">Pokaži %d skritih elementov</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Omrežje in internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Povezane naprave"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacije in obvestila"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Uporabnik in računi"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Obvestila"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Pomembnost"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ni nastavljeno"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Nikoli ne pokaži obvestil"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Brez zvočne ali vizualne prekinitve"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Prikaži brez zvoka"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Predvajaj zvok"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Predvajaj zvok in prikaži na zaslonu"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Ponastavi"</string>
     <string name="show_silently" msgid="2222875799232222056">"Prikaži brez zvoka"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Na trenutnem zaslonu ne predvajaj zvoka, vibriraj ali na hitro prikazuj teh obvestil."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Nalaganje aplikacij ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanali"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blokiraj vse"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Nikoli ne prikaži teh obvestil"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Pokaži obvestila"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Nikoli ne pokaži obvestil na zaslonu z obvestili ali v zunanjih napravah."</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Pokaži značko"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Pokaži obvestila kot značke v aplikaciji Home, če je to podprto."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Preglasitev načina »Ne moti«"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Naj se ta obvestila prikazujejo tudi, ko je način »Ne moti« nastavljen na »Samo prednostno«"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Na zaklenjenem zaslonu"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ne prikaži več"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Zahteva uporabnik"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Dodajanje računa"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Podatki o sistemu"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Nastavitve delovnega profila"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Iskanje po stikih"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Organizaciji dovoli iskanje po stikih zaradi prepoznavanja klicateljev in stikov"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Najnovejše poročilo o napakah"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Najnovejši varnostni dnevnik"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Nikoli"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotografije in videoposnetki"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Glasba in zvok"</string>
     <string name="storage_games" msgid="7703159201697117621">"Igre"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Druge aplikacije"</string>
     <string name="storage_files" msgid="8581083146777364063">"Datoteke"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Pomnilnik telefona"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Porabljeno: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Nezasedeno: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 75784ef..7132849 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Teksti shembull"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Magjistari i mrekullueshëm i Ozit"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapitulli 11: Qyteti i mrekullueshëm i smeraldtë i Ozit"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Edhe me sytë e mbrojtur nga syzet e gjelbra Doroti dhe shokët e saj u dalldisën në fillim nga shkëlqimi i Qytetit të mrekullueshëm. Rrugët ishin të mbushura me shtëpi të bukura të gjitha të ndërtuara me mermer të gjelbër dhe kudo shkëlqenin prej tyre smeralde. Ata shëtitën në një trotuar me po të njëjtin mermer të gjelbër dhe aty ku blloqet bashkoheshin kishte radhë të tjera smeraldi, ngjitur me njëra-tjetrën, dhe që shkëlqenin nën ndriçimin e diellit. Dritaret ishin me xhama të gjelbër; edhe qielli mbi Qytet kishte një nuancë të gjelbër, dhe rrezet e diellit ishin të gjelbra. \n\nKishte shumë njerëz, burra, gra dhe fëmijë, që shëtisnin dhe të gjithë ishin të veshur me rroba të gjelbra dhe kishin lëkurë të gjelbër. Ata e shikonin Dorotin dhe shoqëruesit e saj të çuditshëm me sy të habitur, dhe fëmijët të gjithë u trembën dhe u fshehën pas nënave kur panë Luanin, por askush nuk u foli. Në rrugë kishte shumë dyqane dhe Doroti pa se gjithçka brenda tyre ishte e gjelbër. Shiteshin karamele të gjelbra dhe kokoshka të gjelbra, si dhe këpucë të gjelbra, kapele të gjelbra dhe rroba të gjelbra të të gjitha llojeve. Në një vend dikush shiste limonadë të gjelbër dhe kur fëmijët blinin, Doroti pa se ata paguanin me monedha të gjelbra. \n\nDukej sikur nuk kishte kuaj apo kafshë të ndonjë lloji; burrat i transportonin sendet me karroca të vogla të gjelbra, të cilat i shtynin përpara. Të gjithë dukeshin të kënaqur, të lumtur dhe të begatë."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Në rregull"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Hapësira ruajtëse e USB-së"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Karta SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Gabim"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Brezi 5 GHz nuk ofrohet në këtë vend"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Në modalitetin e aeroplanit"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Njoftimi për rrjetin"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Njofto sa herë që ofrohet ndonjë rrjet publik"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Shmang lidhjet e dobëta"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Mos e përdor një rrjet Wi‑Fi nëse nuk ka lidhje të mirë interneti"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Përdor vetëm rrjete që kanë lidhje të mirë interneti"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Ndrysho vendndodhjen e preferuar të instalimit për aplikacione të reja"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Të çaktivizohet aplikacioni i integruar?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Çaktivizo aplikacionin"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Nëse e çaktivizon këtë aplikacion, Android dhe aplikacionet e tjera mund të mos funksionojnë më siç pritet."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Të fshihen të dhënat dhe të çaktivizohet aplikacioni?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Nëse e çaktivizon këtë aplikacion, Android dhe aplikacionet e tjera mund të mos funksionojnë më siç pritet. Të dhënat e tua do të fshihen po ashtu."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Të çaktivizohen njoftimet?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Nëse i çaktivizon njoftimet për këtë aplikacion, mund të humbasësh alarme dhe përditësime të rëndësishme."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Dyqani"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Shfaq %d artikuj të fshehur</item>
       <item quantity="one">Shfaq %d artikull të fshehur</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Rrjeti dhe interneti"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Pajisje të lidhura"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aplikacionet dhe njoftimet"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Përdoruesi dhe llogaritë"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Njoftimet"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Rëndësia"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Nuk është caktuar"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Mos i shfaq asnjëherë njoftimet"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Asnjë tingull apo ndërprerje vizuale"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Shfaq në heshtje"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Bëj tingull"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Bëj një tingull dhe shfaq në ekran"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Rivendos"</string>
     <string name="show_silently" msgid="2222875799232222056">"Shfaq në heshtje"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Mos lësho tingull, dridhje apo t\'i shfaqësh me shpejtësi në pamje këto njoftime në ekranin aktual."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Po ngarkon aplikacionet..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanalet"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Bllokoji të gjitha"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Mos i shfaq asnjëherë këto njoftime"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Shfaq njoftimet"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Mos shfaq asnjëherë njoftime në hije ose në pajisje periferike"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Shfaq simbolin dallues"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Shfaq njoftimet si simbole dalluese në aplikacionin bazë, nëse mbështetet."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Anulo \"Mos shqetëso\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Lejo që këto njoftime të vazhdojnë të ndërpresin kur \"Mos shqetëso\" është vendosur në \"Vetëm prioritare\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Në ekranin e kyçjes"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Mos e shfaq përsëri"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Po kërkon si"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Shto llogari"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Informacioni i sistemit"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Cilësimet e profilit të punës"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kërkimi i kontakteve"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Lejo kërkimet e kontakteve nga organizata jote për të identifikuar telefonuesit dhe kontaktet"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Raporti më i fundit i defekteve në kod"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Regjistri yt më i fundit i sigurisë"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Asnjëherë"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotografitë dhe videot"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muzikë dhe audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Lojëra"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Aplikacionet e tjera"</string>
     <string name="storage_files" msgid="8581083146777364063">"Skedarët"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Hapësira ruajtëse e telefonit"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> të përdorura"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> të lira"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 17c4e6c..72619e6 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -87,8 +87,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Пример текста"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Чаробњак из Оза"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Поглавље 11: Чудесни Смарагдни град Оза"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"И поред тога што су им очи биле заштићене зеленим наочарима, Дороти и њени пријатељи су у првом тренутку били заслепљени сјајем чудесног града. Улице су биле пуне прелепих кућа саграђених од зеленог мермера и украшених светлуцавим смарагдима. Ходали су плочником од истог зеленог мермера, а на местима на којима су се плоче спајале налазили су се густо поређани смарагди који су се пресијавали на сунцу. Чак је и небо изнад града било зелене боје, као и сунчеви зраци. \n\nНа улицама је било много људи. Мушкарци, жене и деца су шетали, при чему су сви носили зелена одела и имали зеленкасту кожу. Посматрали су Дороти и њено необично друштво са чуђењем, а деца су бежала и крила се иза својих мајки кад би видела Лава. Међутим, нико им се није обраћао. У улици је било много радњи, а Дороти је приметила да је у њима све било зелено. Продавале су се зелене бомбоне и кокице, зелене ципеле, зелени шешири и зелена одећа свих врста. На једном месту је неки човек продавао зелену лимунаду, а Дороти је приметила да су је деца плаћала зеленим новчићима. \n\nЧинило се да нема коња нити било каквих других животиња. Људи су ствари носили у малим зеленим колицима која су гурали испред себе. Сви су изгледали срећно, задовољно и успешно."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Потврди"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB меморија"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD картица"</string>
@@ -680,8 +679,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Грешка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Опсег од 5 GHz није доступан у овој земљи"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"У Режиму рада у авиону"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Обавештење мреже"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Обавештавање када год је доступна јавна мрежа"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Избегавај лоше везе"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Не користи Wi-Fi мрежу ако нема добру интернет везу"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Коришћење само оних мрежа које имају добру интернет везу"</string>
@@ -1547,11 +1552,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Мењање жељене локације за инсталацију нових апликација"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Желите да онемогућите уграђену апл.?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Онемогући апликацију"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ако онемогућите ову апликацију, Android и друге апликације можда више неће функционисати исправно."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Желите ли да избришете податке и онемогућите апликацију?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ако онемогућите ову апликацију, Android и друге апликације можда више неће функционисати исправно. Осим тога, подаци ће бити избрисани."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Желите ли да искљ. обавештења?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ако искључите обавештења за ову апликацију, можете да пропустите важна обавештења и ажурирања."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Продавница"</string>
@@ -2549,8 +2552,7 @@
       <item quantity="few">Прикажи %d скривене ставке</item>
       <item quantity="other">Прикажи %d скривених ставки</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Мрежа и интернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Повезани уређаји"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Aпликације и обавештења"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Корисник и налози"</string>
@@ -2676,16 +2678,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Обавештења"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Важност"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Није подешено"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Никада не приказуј обавештења"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без звучног сигнала или визуелног обавештења"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Приказује се без звучног сигнала"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Емитује се звучни сигнал"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Емитује се звучни сигнал и приказује се на екрану"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Ресетуј"</string>
     <string name="show_silently" msgid="2222875799232222056">"Приказивање без звука"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Нема никаквог звука ни вибрације нити се ова обавештења накратко приказују на актуелном екрану."</string>
@@ -2715,16 +2712,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Учитавају се апликације..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Канали"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блокирај све"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Никада не приказуј ова обавештења"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Приказуј обавештења"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Обавештења се никада не приказују на траци или периферијским уређајима"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Приказуј значке"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Приказује обавештења као значке у апликацији Home ако је то подржано."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Замени режим Не узнемиравај"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Омогућава да ова обавештења наставе да се приказују када је режим Не узнемиравај подешен на опцију Само приоритетни прекиди"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"На закључаном екрану"</string>
@@ -3256,8 +3248,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Не приказуј поново"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Захтевате као"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Додај налог"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Информације о систему"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Подешавања пословног профила"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Претрага контаката"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Дозволите да претраживање контаката од стране ваше организације идентификује позиваоце и контакте."</string>
@@ -3352,16 +3343,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Најновији извештај о грешци"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Најновија безбедносна евиденција"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Никада"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Слике и видео снимци"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музика и аудио"</string>
     <string name="storage_games" msgid="7703159201697117621">"Игре"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Друге апликације"</string>
     <string name="storage_files" msgid="8581083146777364063">"Датотеке"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Меморијски простор телефона"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> је искоришћено"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> је слободно"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 976cd73..4df6b47 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Exempeltext"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Den fantastiska trollkarlen från Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Kapitel 11: Den underbara Smaragdstaden i Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Trots att deras ögon skyddades av de gröna glasögonen blev Dorothy och hennes vänner först bländade av den underbara stadens glans. Gatorna kantades av underbara hus som alla var byggda av grön marmor och översållade med gnistrande smaragder. De gick på stenläggning av samma slags gröna marmor och där stenarna gränsade till varandra fanns rader av smaragder som låg tätt tillsammans och blixtrade i solskenet. Fönsterrutorna var av grönt glas, till och med himlen över staden var grönaktig och solstrålarna var gröna. \n\nMånga män, kvinnor och barn promenerade omkring, och alla var klädda i gröna kläder och hade grönaktig hy. De såg förundrat på Dorothy och hennes egendomliga följeslagare, och alla barnen sprang bort och gömde sig bakom sina mammor när de såg Lejonet; men ingen talade till dem. Det fanns många affärer längs gatan, och Dorothy såg att allt i dem var grönt. Där såldes grön kola och gröna popcorn liksom gröna skor, gröna hattar och gröna kläder av alla slag. På en plats sålde en man grön saft och när barnen köpte den såg Dorothy att de betalade för den med gröna slantar. \n\nDet tycktes inte finnas några hästar eller några slags djur; männen drog omkring saker i små gröna vagnar. Alla tycktes vara lyckliga och belåtna och välmående."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB-lagring"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD-kort"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Fel"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz-bandet är inte tillgänligt i det här landet"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"I flygplansläge"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Nätverksmeddelande"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Meddela när ett offentligt nätverk är tillgängligt"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Undvik dåliga anslutningar"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Använd inte Wi-Fi-nätverk som inte har en bra internetanslutning"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Använd endast nätverk som har en bra internetanslutning"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Ändra önskad installationsplats för nya appar."</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Inaktivera den inbyggda appen?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Inaktivera app"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Om du inaktiverar den här appen kan det påverka Android och andra appar så att de inte längre fungerar som de ska."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Vill du radera uppgifterna och inaktivera appen?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Om du inaktiverar den här appen kan det påverka Android och andra appar så att de inte längre fungerar som de ska. Din data raderas också."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Inaktivera meddelanden?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Om du inaktiverar meddelanden för den här appen kanske du missar viktiga meddelanden och uppdateringar."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Butik"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Visa %d dolda objekt</item>
       <item quantity="one">Visa %d dolt objekt</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Nätverk och internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Anslutna enheter"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Appar och aviseringar"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Användare och konton"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Aviseringar"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Relevans"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Har inte angetts"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Visa aldrig aviseringar"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Spela inte upp ljud och visa inte"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Visa utan ljud"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Spela upp ljud"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Spela upp ljud och visa på skärmen"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Återställ"</string>
     <string name="show_silently" msgid="2222875799232222056">"Visa utan ljud"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Inga ljud, ingen vibration och inga aviseringar som visas som snabbtitt på skärmen."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Läser in appar ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanaler"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Blockera alla"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Visa aldrig de här aviseringarna"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Visa aviseringar"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Visa aldrig aviseringar i panelen eller på perifera enheter"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Visa som märke"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Visa aviseringar som märken i appen Home om detta stöds"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Åsidosätt Stör ej"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Fortsätt att få dessa aviseringar när Endast prioriterade har angetts för Stör ej"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"På låsskärmen"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Visa inte igen"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Utför en begäran som"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Lägg till ett konto"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Systeminformation"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Inställningar för jobbprofilen"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktsökning"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Tillåt att organisationen söker bland kontakter för att identifiera ringande och kontakter"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Din senaste felrapport"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Din senaste säkerhetslogg"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Aldrig"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Foton och videor"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musik och ljud"</string>
     <string name="storage_games" msgid="7703159201697117621">"Spel"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Andra appar"</string>
     <string name="storage_files" msgid="8581083146777364063">"Filer"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Mobilens lagringsutrymme"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> har använts"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ledigt utrymme"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g> %%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index ff17c9c..06adbb7 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Sampuli ya maandishi"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Wachawi wa Ajabu kutoka Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Sura ya 11: Mji wa Ajabu wa Johari wa Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Hata baada ya kulinda macho yake kwa miwani ya kijani, Amina na marafiki zake walishangazwa na mwangaza wa Mji wa ajabu. Mitaa ilikuwa na nyumba maridadi zilizotengenezwa kwa marumaru za kijani na kila mahali kulikuwa na johari zilizong\'aa. Walitembea kwenye njia ya marumaru, na matofali yalipokuwa yameuganishwa, kulikuwa na safu za johari zilizong\'aa kama jua. Madirisha yalitengezwa kwa vioo vya kijani. Anga la Mji na miale ya jua pia ilikuwa ya kijani. \n\nKulikuwa na watu wengi (wanaume, wanawake na watoto) ambao walikuwa wakitembea na wote walikuwa wamevalia nguo za kijani na ngozi yao ilikuwa ya kijani. Watu hawa walimtazama Amina na marafiki zake kwa mshangao. Watoto nao walitoroka na kujificha nyuma ya mama zao walipoona Simba; lakini hakuna aliyewazungumzia. Kulikuwa na maduka mengi mtaani na Amina aliona kuwa bidhaa zilizokuwemo zilikuwa za kijani. Peremende, bisi, viatu, kofia na nguo za aina zote zilikuwa za kijani. Katika sehemu fulani, mtu mmoja alikuwa akiuza sharubati ya kijani, na watoto walilipa sarafu za kijani ili kuinunua. \n\nIlionekana kuwa mji huo haukuwa na farasi wala wanyama wa aina yoyote; watu walibeba bidhaa katika vikapu vya kijani. Kila mtu alionekana mchangamfu na aliyeridhika."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Sawa"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Hifadhi ya USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Kadi ya SD"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"Imezimwa"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"Hazipatikani kwa sababu NFC imezimwa"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"Unapowasha kipengele hiki, unaweza kuelekeza maudhui ya programu kwenye kifaa kingine kinachoweza kutumia NFC kwa kuweka vifaa pamoja. Kwa mfano, unaweza kuelekeza kurasa za wavuti, video za YouTube, anwani na zaidi.\n\nWeka tu vifaa pamoja (kinyumenyume) na ugonge skrini yako. Programu itabaini ni nini kitaelekezwa."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"Unapowasha kipengele hiki, unaweza kuelekeza maudhui ya programu kwenye kifaa kingine kinachoweza kutumia NFC kwa kuweka vifaa pamoja. Kwa mfano, unaweza kuelekeza kurasa za wavuti, video za YouTube, anwani na zaidi.\n\nWeka tu vifaa pamoja (kwa kuvigusisha sehemu za nyuma) na ugonge skrini yako. Programu itabaini ni nini kitaelekezwa."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi-Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Washa Wi-Fi"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi-Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Hitilafu"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Mitabendi ya GHz 5 haipatikani katika nchi hii"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Hali ya ndege imewashwa"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Arifa ya mtandao"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Tuma arifa wakati wowote mtandao wa umma unapopatikana"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Epuka miunganisho mibovu"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Usitumie mtandao wa Wi-Fi ambao hauna muunganisho mzuri wa Intaneti"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Tumia mitandao yenye muunganisho bora wa Intaneti pekee"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Badilisha usakinishaji wa eneo unalopenda ya programu mpya"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Lemaza programu zilizoundwa-ndani?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Zima programu"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Ukizima programu hii, huenda Android na programu zingine zikakosa kufanya kazi tena kama ilivyokusudiwa."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Futa data na ulemaze programu?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Ukizima programu hii, huenda Android na programu zingine zikakosa kufanya kazi tena kama ilivyokusudiwa. Data yako pia itafutwa."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Arifa zilemazwe?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Ikiwa utazima arifa za programu hii, unaweza kosa kupata arifa na masasisho muhimu."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Duka"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Onyesha vipengee %d vilivyofichwa</item>
       <item quantity="one">Onyesha kipengee %d kilichofichwa</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Mtandao na intaneti"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Vifaa vilivyounganishwa"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Programu na arifa"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Watumiaji na akaunti"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Arifa"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Umuhimu"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Haijawekwa"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Usawahi kuonyesha arifa"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Hakuna kukatizwa kwa sauti au maonyesho"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Onyesha chinichini"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Toa sauti"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Toa sauti na ibukizi kwenye skrini"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Weka upya"</string>
     <string name="show_silently" msgid="2222875799232222056">"Onyesha chinichini"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Usiruhusu sauti, mtetemo au onyesho la kuchungulia kwenye skrini ya sasa."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Inapakia programu ..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Vituo"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Zuia zote"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Usionyeshe arifa hizi kamwe"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Onyesha arifa"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Usiwahi kuonyesha arifa kwenye vifaa vya kando au katika kivuli"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Onyesha beji"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Onyesha arifa kama beji kwenye programu ya Mwanzo, kama inatumika."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Batilisha hali ya \'Usinisumbue\'"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Ruhusu arifa hizi ziendelee kukatiza wakati hali ya Usinisumbue imewekwa katika Kipaumbele Pekee"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Skrini inapofungwa"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Usionyeshe tena"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Inaomba kama"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Ongeza akaunti"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Maelezo ya mfumo"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Mipangilio ya wasifu wa kazini"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Utafutaji wa anwani"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Ruhusu utafutaji wa anwani unaofanywa na shirika lako kutambua anwani na anayepiga simu"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ripoti yako ya hivi majuzi ya hitilafu"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Kumbukumbu yako ya hivi majuzi ya usalama"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Hajawahi"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Picha na Video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Muziki na Sauti"</string>
     <string name="storage_games" msgid="7703159201697117621">"Michezo"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Programu zingine"</string>
     <string name="storage_files" msgid="8581083146777364063">"Faili"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Hifadhi ya Simu"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Umetumia <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Imebaki hifadhi ya <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 7b15b9b..400b053 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"மாதிரி உரை"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"கள்வனின் காதலி"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"அத்தியாயம் 1: பறித்த தாமரை"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"டோரத்தியும் அவளின் நண்பர்களும் பச்சைநிறக் கண்ணாடிகளை அணிந்து கண்ணைப் பாதுகாத்திருந்தாலும், முதல் பார்வையிலேயே எழில்கொஞ்சம் நகரத்தின் அழகில் மயங்கினர். பச்சைநிறச் சலவைக் கற்களினால் கட்டப்பட்ட அழகிய வீடுகள் தெருக்களில் அணிவகுத்து நின்றன. அத்துடன் திரும்பும் இடமெல்லாம் மின்னும் பச்சைக்கற்களால் அலங்கரிக்கப்பட்டிருந்தன. அவர்கள் பச்சை வண்ணச் சலவைக் கண்ணாடியால் செய்த அதே நடைப்பாதையில் நடந்தனர், அதன் இணைக்கப்பட்டிருந்த தடுப்புகள் பச்சைக்கற்கள் நெருக்கமாக வைத்து கட்டப்பட்டிருந்தன, அவை சூரியனின் ஒளிக்கதிர்களால் பளபளத்தன. ஜன்னல் கண்ணாடிகள் பச்சை வண்ணக் கண்ணாடியால் கட்டப்பட்டிருந்தன; நகரத்தின் மேலே உள்ள வானமும் பச்சை வண்ணச் சாயலில் இருந்தது, அத்துடன் சூரியனும் பச்சை வண்ண ஒளிக்கதிர்களை வீசியது. \n\nஅங்கே நிறைய மனிதர்கள், ஆண்கள், பெண்கள், குழந்தைகள் இருந்தனர். அவர்கள் பச்சை வண்ண ஆடைகளை அணிந்திருந்தனர், அத்துடன் அவர்களின் தோல்நிறமும் பச்சையாக இருந்தது. டோரத்தியையும் அவளுடன் இருந்த விசித்திரமான நண்பர்களையும் பிரம்மிப்புடன் பார்த்தார்கள். சிங்கத்தைப் பார்த்தவுடன், குழந்தைகள் அனைவரும் ஓடிச்சென்று தங்கள் அம்மாக்களின் பின் ஒளிந்துகொண்டனர். ஆனால் யாரும் அவர்களிடம் பேசவில்லை. அந்தத் தெருவில் நிறைய கடைகள் இருந்தன. அந்தக் கடைகளில் எல்லாம் பச்சையாக இருந்ததை டோரத்தி பார்த்தாள். பச்சை மிட்டாய் மற்றும் பச்சை பாப்-கார்னுடன் பச்சைக் காலணிகள், பச்சைத் தொப்பிகள் மற்றும் அனைத்து விதமான பச்சை உடைகள் ஆகியவை விற்பனைக்கு வைக்கப்பட்டிருந்தன. ஓரிடத்தில் ஒருவர், பச்சை எலுமிச்சைச் சாற்றை விற்றுக் கொண்டிருந்தான். அவற்றைக் குழந்தைகள் பச்சை சில்லறைக் கொடுத்து அதை வாங்கிச் செல்வதை டோரத்தி பார்த்தாள். \n\nஅங்கே குதிரைகளோ அல்லது எந்த விதமான விலங்குகளோ இல்லை. எல்லாவற்றையும் செடிகொடிகளால் பின்னப்பட்ட, முன்புறமாகத் தள்ளிச்செல்லக்கூடிய பச்சைநிறக் கூடைகளில் மனிதர்களே சுமந்து சென்றனர். அனைவரும் மகிழ்ச்சியாகவும் திருப்தியாகவும் செழிப்பாகவும் இருந்தனர்."</string>
     <string name="font_size_save" msgid="3450855718056759095">"சரி"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB சேமிப்பிடம்"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD கார்டு"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"பிழை"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"இந்த நாட்டில் 5 GHz அலைவரிசை இல்லை"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"விமானப் பயன்முறையில்"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"நெட்வொர்க் அறிவிப்பு"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"பொதுவான நெட்வொர்க் கிடைக்கும் போது அறிவி"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"வேகம் குறைந்த இணைப்புகளைத் தவிர்"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"சிறப்பான இணைய இணைப்பைப் பெறும் வரை வைஃபை நெட்வொர்க்கைப் பயன்படுத்தாதே"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"நல்ல இணைய இணைப்பு கொண்ட நெட்வொர்க்குகளை மட்டும் பயன்படுத்து"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"புதிய பயன்பாடுகளுக்கான பரிந்துரைக்கப்பட்ட நிறுவல் இடங்களை மாற்றவும்"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"உள்ளமைக்கப்பட்டுள்ள பயன்பாட்டை முடக்கவா?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"பயன்பாட்டை முடக்கு"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"பயன்பாட்டை முடக்கினால், Android மற்றும் பிற பயன்பாடுகள் சரியாகச் செயல்படாமல் போகக்கூடும்."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"தரவை நீக்கிவிட்டு பயன்பாட்டை முடக்கவா?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"இந்தப் பயன்பாட்டை முடக்கினால், Android மற்றும் பிற பயன்பாடுகள் சரியாகச் செயல்படாமல் போகக்கூடும். அத்துடன், உங்கள் தரவும் நீக்கப்படும்."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"அறிவிப்புகளை முடக்கவா?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"பயன்பாட்டிற்கான அறிவிப்புகளை முடக்கினால், முக்கிய விழிப்பூட்டல்கள் மற்றும் புதுப்பிப்புகளை நீங்கள் தவற விடலாம்."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"ஸ்டோர்"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">மறைந்துள்ள %d உருப்படிகளைக் காட்டு</item>
       <item quantity="one">மறைந்துள்ள %d உருப்படியைக் காட்டு</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"நெட்வொர்க் &amp; இணையம்"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"இணைத்த சாதனங்கள்"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"பயன்பாடுகள் &amp; அறிவிப்புகள்"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"பயனர் &amp; கணக்குகள்"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"அறிவிப்புகள்"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"முக்கியத்துவம்"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"அமைக்கப்படவில்லை"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"அறிவிப்புகளை ஒருபோதும் காட்டாது"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"ஒலியெழுப்பாது அல்லது காட்சிக் குறுக்கீடு செய்யாது"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"ஒலிக்காமல் காட்டும்"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"ஒலியெழுப்பும்"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"ஒலியெழுப்பி, திரையில் காட்டும்"</string>
     <string name="importance_reset" msgid="7458420788555607007">"மீட்டமை"</string>
     <string name="show_silently" msgid="2222875799232222056">"ஒலிக்காமல் காட்டு"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"இந்த அறிவிப்புகளை நடப்புத் திரையில் காட்டும் போது ஒலி, அதிர்வை ஏற்படுத்தாது அல்லது திரையின் மேல் பகுதியில் காட்டாது."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"பயன்பாடுகளை ஏற்றுகிறது..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"சேனல்கள்"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"எல்லாம் தடு"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"இந்த அறிவிப்புகளை ஒருபோதும் காட்டாது"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"அறிவிப்புகளைக் காட்டு"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"ஷேட்டில் அல்லது துணைச் சாதனங்களில் அறிவிப்புகளை ஒருபோதும் காட்டாது"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"பேட்ஜைக் காட்டு"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ஆதரித்தால், முகப்புப் பயன்பாட்டில் அறிவிப்புகளை பேட்ஜ்களாகக் காட்டும்."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"தொந்தரவு செய்ய வேண்டாம் அமைப்பை மாற்றவும்"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"தொந்தரவு செய்ய வேண்டாம் என்பது முன்னுரிமை மட்டும் என்பதாக அமைக்கப்படும் போது இந்த அறிவிப்புகளைத் தொடர்ந்து குறுக்கிட அனுமதிக்கவும்"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"பூட்டுத் திரையில்"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"மீண்டும் காட்டாதே"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"இவராகக் கோருகிறது:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"கணக்கைச் சேர்"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"கணினித் தகவல்"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"பணிச் சுயவிவர அமைப்புகள்"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"தொடர்புகளில் தேடு"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"எனது நிறுவனத்தின்படி அழைப்பாளர்களையும் தொடர்புகளையும் கண்டறிய, ”தொடர்புகளில் தேடு” அம்சத்தை அனுமதி"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"உங்களின் மிகச் சமீபத்திய பிழை அறிக்கை"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"உங்களின் மிகச் சமீபத்திய பாதுகாப்புப் பதிவு"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ஒருபோதும் வேண்டாம்"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"படங்கள் &amp; வீடியோக்கள்"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"இசை &amp; ஆடியோ"</string>
     <string name="storage_games" msgid="7703159201697117621">"கேம்கள்"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"பிற பயன்பாடுகள்"</string>
     <string name="storage_files" msgid="8581083146777364063">"கோப்புகள்"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"மொபைல் சேமிப்பகம்"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> பயன்படுத்தப்பட்டுள்ளது"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> காலியாக உள்ளது"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 943a92f..011611b 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"నమూనా వచనం"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"కేశ సంరక్షణ చిట్కాలు"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"అధ్యాయం 11: వేపాకుతో మెరిసిపోయే జుట్టు మీ సొంతం"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"డొరోతీ మరియు ఆమె స్నేహితులు కళ్లకు పచ్చని అద్దాలతో సంరక్షించబడినా, అద్భుతమైన మిరిమిట్లుగొలిపే నగర ప్రకాశాన్ని సందర్శిస్తున్నారు. ప్రతీచోటా మెరిసే పచ్చని రాళ్లతో పొదగబడి ఉన్న ఆకుపచ్చటి పాలరాతితో నిర్మించబడిన అందమైన ఇళ్లతో వీధులు తీర్చిదిద్దబడ్డాయి. వాళ్లు సూర్యకాంతికి మెరుస్తున్న, దగ్గరగా నిర్మితమై ఉన్న, పచ్చల రాళ్లు అన్నీ కలిసి ఉన్న అదే ఆకు పచ్చని పాలరాతిపై నడుస్తున్నారు. కిటికీ అద్దాలు ఆకుపచ్చగా ఉన్నాయి; నగరం పైన ఆకాశం కూడా ఆకుపచ్చ రంగులో ఉంది మరియు సూర్య కిరణాలు కూడా ఆకుపచ్చగా ఉన్నాయి. \n\nఅక్కడ చాలా మంది ఆకు పచ్చని చర్మంతో గల స్త్రీలు, పురుషులు మరియు పిల్లలు ఆకు పచ్చని దుస్తులతో నడుస్తున్నారు. వాళ్లు డొరోతీని మరియు ఆమె ఇతర స్నేహితులను వింతగా ఆశ్చర్యంగా చూసారు. సింహాన్ని చూసినప్పుడు పిల్లలందరూ పారిపోయి, వారి తల్లిదండ్రుల వెనక దాగారు. కానీ వారితో ఎవరూ మాట్లాడలేదు. వీధిలో చాలా దుకాణాలు ఉన్నాయి. డొరోతీకి అక్కడ ఉన్న అంశాలన్నీ పచ్చగా కనిపించాయి పచ్చని మిఠాయిలు మరియు పచ్చని పాప్-కార్న్ అమ్మబడుతున్నాయి, అలాగే పచ్చని చెప్పులు, పచ్చని టోపీలు, పచ్చని దుస్తులు కనిపిస్తున్నాయి. ఒక చోట ఒక వ్యక్తి పచ్చని నిమ్మరసాన్ని అమ్ముతుండటం మరియు పిల్లలు వాటి కోసం పచ్చని నాణేలను ఇవ్వడాన్ని డోరోతీ చూస్తోంది. \n\nఅక్కడ ఎటువంటి గుర్రాలు మరియు ఎటువంటి జంతువులూ లేవు; వ్యక్తులే వస్తువులను పచ్చని బండ్లతో లాగుతున్నారు. ప్రతి ఒక్కరూ చాలా ఆనందంగా మరియు సంతృప్తిగా ఉన్నారు."</string>
     <string name="font_size_save" msgid="3450855718056759095">"సరే"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB నిల్వ"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD కార్డు"</string>
@@ -658,7 +657,7 @@
     <string name="android_beam_off_summary" msgid="4663095428454779138">"ఆఫ్‌లో ఉంది"</string>
     <string name="android_beam_disabled_summary" msgid="1737782116894793393">"NFC ఆఫ్ చేయబడినందున అందుబాటులో లేదు"</string>
     <string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
-    <string name="android_beam_explained" msgid="1810540319385192758">"ఈ లక్షణం ప్రారంభించబడినప్పుడు, మీరు పరికరాలను దగ్గరగా ఉంచి పట్టుకోవడం ద్వారా అనువర్తన కంటెంట్‌ను మరో NFC-సామర్థ్య పరికరానికి బదిలీ చేయవచ్చు. ఉదాహరణకు, మీరు వెబ్ పేజీలు, YouTube వీడియోలు, పరిచయాలు మొదలైనవి బదిలీ చేయవచ్చు.\n\nపరికరాలను దగ్గరగా తీసుకువచ్చి (సాధారణంగా ఒకదాని వెనుక ఒకటి ఉంచి), ఆపై మీ స్క్రీన్‌ను తట్టండి. అనువర్తనం బదిలీ చేయాల్సిన వాటిని నిర్ణయిస్తుంది."</string>
+    <string name="android_beam_explained" msgid="1810540319385192758">"ఈ లక్షణం ప్రారంభించబడినప్పుడు, మీరు పరికరాలను దగ్గరగా ఉంచి పట్టుకోవడం ద్వారా అనువర్తన కంటెంట్‌ను మరో NFC-సామర్థ్య పరికరానికి బదిలీ చేయవచ్చు. ఉదాహరణకు, మీరు వెబ్ పేజీలు, YouTube వీడియోలు, పరిచయాలు మొదలైనవి బదిలీ చేయవచ్చు.\n\nపరికరాలను దగ్గరగా తీసుకువచ్చి (సాధారణంగా ఒకదాని వెనుక ఒకటి ఉంచి), ఆపై మీ స్క్రీన్‌ను నొక్కండి. అనువర్తనం బదిలీ చేయాల్సిన వాటిని గుర్తిస్తుంది."</string>
     <string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi‑Fi"</string>
     <string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Wi‑Fiని ప్రారంభించండి"</string>
     <string name="wifi_settings" msgid="29722149822540994">"Wi‑Fi"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"లోపం"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"ఈ దేశంలో 5 GHz బ్యాండ్ అందుబాటులో లేదు"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ఎయిర్‌ప్లైన్ మోడ్‌లో"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"నెట్‌వర్క్ నోటిఫికేషన్"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"పబ్లిక్ నెట్‌వర్క్ అందుబాటులో ఉన్నప్పుడు తెలియజేయి"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"బలహీన కనెక్షన్‌లను నివారించు"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Wi‑Fi నెట్‌వర్క్ ఉత్తమ ఇంటర్నెట్ కనెక్షన్‌ను కలిగి ఉంటే మినహా ఉపయోగించవద్దు"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ఉత్తమ ఇంటర్నెట్ కనెక్షన్ ఉన్న నెట్‌వర్క్‌లను మాత్రమే ఉపయోగించు"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"కొత్త అనువర్తనాల కోసం ప్రాధాన్య ఇన్‌స్టాలేషన్ స్థానాన్ని మార్చండి"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"అంతర్నిర్మిత అనువర్తనాన్ని నిలిపివేయాలా?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"అనువర్తనాన్ని నిలిపివేయి"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"మీరు ఈ అనువర్తనాన్ని నిలిపివేస్తే, Android మరియు ఇతర అనువర్తనాలు ఇకపై ఉద్దేశించిన రీతిలో పని చేయకపోవచ్చు."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"డేటాను తొలగించి అనువర్తనాన్ని నిలిపివేయాలా?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"మీరు ఈ అనువర్తనాన్ని నిలిపివేస్తే, Android మరియు ఇతర అనువర్తనాలు ఇకపై ఉద్దేశించిన రీతిలో పని చేయకపోవచ్చు. మీ డేటా కూడా తొలగించబడుతుంది."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"నోటిఫికేషన్‌లను ఆపివేయాలా?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"మీరు ఈ అనువర్తనానికి నోటిఫికేషన్‌లను ఆపివేస్తే, మీరు ముఖ్యమైన హెచ్చరికలు మరియు నవీకరణలను కోల్పోవడం సంభవించవచ్చు."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"స్టోర్"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d దాచబడిన అంశాలను చూపుతుంది</item>
       <item quantity="one">%d దాచబడిన అంశాన్ని చూపుతుంది</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"నెట్‌వర్క్ &amp; ఇంటర్నెట్"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"కనెక్ట్ చేసిన పరికరాలు"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"అనువర్తనాలు &amp; నోటిఫికేషన్‌లు"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"వినియోగదారు &amp; ఖాతాలు"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"నోటిఫికేషన్‌లు"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"ప్రాముఖ్యత"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"సెట్ చేయబడలేదు"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"ఎన్నడూ నోటిఫికేషన్‌లను చూపవద్దు"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"శబ్ద లేదా దృశ్య అంతరాయం కలిగించవద్దు"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"నిశ్శబ్దంగా చూపు"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"శబ్దం చేయి"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"శబ్దం చేసి, స్క్రీన్‌పై చూపు"</string>
     <string name="importance_reset" msgid="7458420788555607007">"రీసెట్ చేయి"</string>
     <string name="show_silently" msgid="2222875799232222056">"శబ్దం లేకుండా చూపు"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"శబ్దం చేయదు, వైబ్రేట్ చేయదు లేదా ప్రస్తుత స్క్రీన్‌పై కనిపించేలా ఈ నోటిఫికేషన్‌లను శీఘ్రంగా చూపదు."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"అనువర్తనాలను లోడ్ చేస్తోంది..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"ఛానెల్‌లు"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"అన్నింటినీ బ్లాక్ చేయండి"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"ఈ నోటిఫికేషన్‌లను ఎప్పుడూ చూపవద్దు"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"నోటిఫికేషన్‌లను చూపు"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"నోటిఫికేషన్‌లను ఎన్నడూ షేడ్‌లో లేదా అనుబంధ పరికరాల్లో చూపవద్దు"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"బ్యాడ్జ్‌ను చూపు"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"మద్దతు ఉంటే, నోటిఫికేషన్‌లను Home అనువర్తనంలో బ్యాడ్జ్‌లుగా చూపుతుంది."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"అంతరాయం వద్దుని భర్తీ చేయి"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"అంతరాయం కలిగించవద్దు లక్షణాన్ని ప్రాధాన్యత మాత్రమేకి సెట్ చేసినప్పుడు, అంతరాయం కలిగించడం కొనసాగించడానికి ఈ నోటిఫికేషన్‌లను అనుమతిస్తుంది"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"లాక్ స్క్రీన్‌పై"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"మళ్లీ చూపవద్దు"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"దీనితో అభ్యర్థిస్తున్నారు"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"ఖాతాను జోడించండి"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"సిస్టమ్ సమాచారం"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"కార్యాలయ ప్రొఫైల్ సెట్టింగ్‌లు"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"పరిచయ శోధన"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"కాలర్‌లు మరియు పరిచయాలను గుర్తించడానికి మీ సంస్థ ద్వారా పరిచయ శోధనలను చేయడానికి అనుమతిస్తుంది"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"మీ అత్యంత ఇటీవలి బగ్ నివేదిక"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"మీ అత్యంత ఇటీవలి భద్రతా లాగ్"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ఎన్నడూ చేయలేదు"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"ఫోటోలు &amp; వీడియోలు"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"సంగీతం &amp; ఆడియో"</string>
     <string name="storage_games" msgid="7703159201697117621">"గేమ్‌లు"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"ఇతర అనువర్తనాలు"</string>
     <string name="storage_files" msgid="8581083146777364063">"ఫైల్‌లు"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"ఫోన్ నిల్వ"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> వినియోగించబడింది"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ఖాళీగా ఉంది"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 80d826d..8ad2ae2 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"ข้อผิดพลาด"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"แถบความถี่ 5 GHz ไม่พร้อมใช้งานในประเทศนี้"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ในโหมดใช้งานบนเครื่องบิน"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"การแจ้งเตือนของเครือข่าย"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"แจ้งเตือนเมื่อใดก็ตามที่เครือข่ายสาธารณะพร้อมใช้งาน"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"หลีกเลี่ยงการเชื่อมต่อที่สัญญาณไม่แรงพอ"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"อย่าใช้เครือข่าย WiFi หากไม่มีการเชื่อมต่ออินเทอร์เน็ตที่ดีเพียงพอ"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ใช้เครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตสัญญาณแรงเท่านั้น"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"รายงานข้อบกพร่องล่าสุดของคุณ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"บันทึกความปลอดภัยล่าสุด"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"ไม่เลย"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"รูปภาพและวิดีโอ"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"เพลงและเสียง"</string>
     <string name="storage_games" msgid="7703159201697117621">"เกม"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"แอปอื่นๆ"</string>
     <string name="storage_files" msgid="8581083146777364063">"ไฟล์"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"พื้นที่เก็บข้อมูลโทรศัพท์"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"ใช้ไป <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> "</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"พื้นที่ว่าง <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 3e199a6..f6eff10 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Error"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Hindi available sa bansang ito ang 5 GHz band"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Nasa Airplane mode"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Notification ng network"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Mag-notify tuwing may available na pampublikong network"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Iwasan ang mahihinang koneksyon"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Huwag gumamit ng Wi-Fi network maliban kung mayroon itong mahusay na koneksyon sa Internet"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Gamit lang ng network na may maayos na koneksyon sa Internet"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Ang iyong pinakakamakailang ulat ng bug"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ang iyong pinakakamakailang log ng seguridad"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Hindi kailanman"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Mga Larawan at Video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musika at Audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"Mga Laro"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Iba pang mga app"</string>
     <string name="storage_files" msgid="8581083146777364063">"Mga File"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Storage ng Telepono"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> ang nagamit"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ang bakante"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 772d1db..fe67a05 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Örnek metin"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Muhteşem Oz Büyücüsü"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11. Bölüm: Oz\'un Muhteşem Zümrüt Kenti"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Yeşil gözlükler gözlerini koruyor olsa bile, muhteşem Kentin parlaklığı ilk başta Dorothy ve arkadaşlarının gözlerini kamaştırmıştı. Sokaklar, tamamı yeşil mermerden yapılmış çok güzel evlerle doluydu ve her yer parlak zümrütlerle süslenmişti. Aynı şekilde yeşil mermerden yapılmış bir kaldırımın üzerinde yürüdüler. Blokların birleştiği yerde birbirine yakın bir şekilde yerleştirilmiş sıra sıra zümrütler güneşin parlaklığında ışıldıyordu. Pencerelerde yeşil camlar vardı. Kentin üzerindeki gökyüzünün bile yeşil bir tonu vardı ve güneş ışınları yeşildi. \n\nHepsi de yeşil kıyafetler giymiş ve yeşilimtırak ciltleri olan birçok kadın, erkek ve çocuk sokakta geziniyordu. Dorothy\'yi ve garip görünümlü arkadaşlarını meraklı bakışlarla süzdüler. Çocukların hepsi Aslanı gördüklerinde kaçıp annelerinin arkasına saklanıyordu, ama hiç kimse onlarla konuşmadı. Sokakta pek çok dükkan vardı. Dorothy, bu dükkanlardaki her şeyin yeşil olduğunu gördü. Yeşil şekerlerin, yeşil renkli patlamış mısırların yanı sıra yeşil ayakkabılar, yeşil şapkalar ve her türden yeşil kıyafetler satılıyordu. Bir yerde, yeşil limonata satan bir adam vardı ve Dorothy, limonata alan çocukların parayı yeşil kuruşlarla ödediklerini gördü. \n\nAt veya başka bir hayvan görünmüyordu; erkekler, önlerinde ittikleri küçük yeşil arabalarla eşyaları bir yerden bir yere taşıyordu. Herkes mutlu, memnun ve refah içinde görünüyordu."</string>
     <string name="font_size_save" msgid="3450855718056759095">"Tamam"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB bellek"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD kart"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Hata"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz bant genişliği bu ülkede kullanılamıyor"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Uçak modunda"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Ağ bildirimi"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Herkese açık bir ağ kullanılabilir olduğunda bildir"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Kötü bağlantılardan kaçın"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"İnternet bağlantısı iyi olmadıkça Kablosuz ağı kullanma"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Yalnızca iyi İnternet bağlantısı olan ağları kullanın"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Yeni uygulamalar için tercih edilen yükleme konumunu değiştir"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Yerleşik uygulama devre dışı bırakılsın mı?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Uygulamayı devre dışı bırak"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Bu uygulamayı devre dışı bırakırsanız Android ve diğer uygulamalar artık beklendiği gibi çalışmayabilir."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Veriler silinsin ve uygulama devre dışı bırakılsın mı?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Bu uygulamayı devre dışı bırakırsanız Android ve diğer uygulamalar artık beklendiği gibi çalışmayabilir. Ayrıca verileriniz silinir."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Bildirimler kapatılsın mı?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Bu uygulama için bildirimleri kapatırsanız, önemli uyarıları ve güncellemeleri kaçırabilirsiniz."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Mağaza"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Gizli %d öğeyi göster</item>
       <item quantity="one">Gizli %d öğeyi göster</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Ağ ve İnternet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Bağlı cihazlar"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Uygulamalar ve bildirimler"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Kullanıcı ve hesaplar"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Bildirimler"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Önem"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ayarlanmadı"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Bildirimleri hiçbir zaman gösterme"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Ses veya görsel kesme yok"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Sessiz bir şekilde göster"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Ses çıkar"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Ses çıkar ve ekranda göster"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Sıfırla"</string>
     <string name="show_silently" msgid="2222875799232222056">"Sessiz bir şekilde göster"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ses çıkarma, titreştirme veya bu bildirimleri geçerli ekrana getirme."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Uygulamalar yükleniyor..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanallar"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Tümünü engelle"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Bu bildirimleri hiçbir zaman gösterme"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Bildirim göster"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Bildirimleri hiçbir zaman gölgede veya çevre birimi cihazlarında gösterme"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Rozet göster"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Destekleniyorsa, bildirimleri Ana Ekran uygulamasında rozet olarak gösterin."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Rahatsız Etmeyin ayarını geçersiz kıl"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Rahatsız Etmeyin seçeneği \"Yalnızca Öncelikli\" olarak ayarlıyken, bu bildirimlerin kesmeye devam etmesine izin ver"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Kilit ekranında"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Bir daha gösterme"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"İstekte bulunan hesap:"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Hesap ekle"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Sistem bilgileri"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"İş profili ayarları"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kişi arama"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Arayanların ve kişilerin kimliğini belirlemek için kuruluşunuz tarafından yapılan kişi aramalarına izin verin"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Son hata raporunuz"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Son güvenlik girişiniz"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Hiçbir zaman"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Fotoğraflar ve Videolar"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Müzik ve Ses"</string>
     <string name="storage_games" msgid="7703159201697117621">"Oyunlar"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Diğer uygulamalar"</string>
     <string name="storage_files" msgid="8581083146777364063">"Dosyalar"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefon Depolama Alanı"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> kullanılıyor"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> boş"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"%%<xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 8a85ba8..06e9d7e 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -88,8 +88,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Зразок тексту"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Чарівник країни Оз"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Глава 11. Дивовижне Смарагдове місто країни Оз"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Навіть крізь зелені скельця окулярів краса дивовижного міста спершу засліпила Дороті та її друзів. Уздовж вулиць височіли будинки із зеленого мармуру, прикрашені блискучими смарагдами. Тротуар також був вимощений плитами із зеленого мармуру, на стиках яких виблискували смарагди. Вікна будинків були із зеленого скла. Навіть небо над містом і промені сонця були зеленими. \n\nНа вулиці прогулювалося багато людей – чоловіків, жінок і дітей. Усі вони носили зелений одяг, а їхня шкіра мала зеленуватий відтінок. Люди з подивом дивилися на Дороті та її чудернацьку компанію, а діти тікали й ховалися за своїми матерями, коли бачили Лева. Проте ніхто не наважився заговорити з ними. У магазинах продавалися товари зеленого кольору: зелені цукерки, зелений попкорн, зелені туфлі, капелюхи й інший одяг. В одній крамниці чоловік торгував зеленим лимонадом, за який діти розплачувалися зеленими монетками. \n\nЗдавалось, у місті немає ні коней, ні інших тварин – чоловіки перевозили речі на невеликих зелених тачках. Усі мали щасливий і задоволений вигляд."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Носій USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Карта SD"</string>
@@ -689,8 +688,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Помилка"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Діапазон 5 ГГц недоступний у цій країні"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"У режимі польоту"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Сповіщення мережі"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Сповіщати про доступність загальнодоступної мережі"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Уникати слабких з’єднань"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Не використовувати мережу Wi-Fi, якщо немає стійкого з’єднання з Інтернетом"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Використовувати мережі зі стабільним з’єднанням з Інтернетом"</string>
@@ -1558,11 +1563,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Змінити потрібне місце для встановлення нових програм"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Вимкнути вбудовану програму?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Вимкнути додаток"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Якщо вимкнути цей додаток, додатки Android та інші додатки можуть працювати неналежним чином."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Видалити дані й вимкнути додаток?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Якщо вимкнути цей додаток, додатки Android та інші додатки можуть працювати неналежним чином. Також буде видалено ваші дані."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Вимкнути сповіщення?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Якщо вимкнути сповіщення для цієї програми, можна пропустити важливі повідомлення й оновлення."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Магазин"</string>
@@ -2571,8 +2574,7 @@
       <item quantity="many">Показати %d схованих елементів</item>
       <item quantity="other">Показати %d схованого елемента</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Мережа й Інтернет"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Під’єднані пристрої"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Додатки та сповіщення"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Користувач і облікові записи"</string>
@@ -2698,16 +2700,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Сповіщення"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Пріоритет"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Не вказано"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ніколи не показувати сповіщення"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Без звуку та візуальних сповіщень"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Показувати без звукового сигналу"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Зі звуком"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Зі звуком і спливаючими вікнами"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Скинути"</string>
     <string name="show_silently" msgid="2222875799232222056">"Показувати без звукового сигналу"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Не подавати звуковий сигнал і вібросигнал та не показувати ці сповіщення на поточному екрані."</string>
@@ -2738,16 +2735,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Завантаження додатків…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Канали"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Блокувати всі"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ніколи не показувати ці сповіщення"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Показувати сповіщення"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ніколи не показувати сповіщення на панелі та периферійних пристроях"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Показувати значки"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Показувати сповіщення у вигляді значків у додатку Home (якщо він підтримується)."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Заміна режиму \"Не турбувати\""</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Показувати ці сповіщення, коли в режимі \"Не турбувати\" вибрано \"Лише пріоритетні\""</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"На екрані блокування"</string>
@@ -3288,8 +3280,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Більше не показувати"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Запит з облікового запису"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Додати обліковий запис"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Інформація про систему"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Налаштування робочого профілю"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Пошук контактів"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Дозволити вашій організації шукати контакти, щоб визначати абонентів і контактних осіб"</string>
@@ -3388,16 +3379,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Останнє повідомлення про помилку"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ваш останній журнал безпеки"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Ніколи"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Фото й відео"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Музика й аудіо"</string>
     <string name="storage_games" msgid="7703159201697117621">"Ігри"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Інші додатки"</string>
     <string name="storage_files" msgid="8581083146777364063">"Файли"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Пам’ять телефона"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Використовується: <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Вільно: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index f493550..e92ddd2 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"نمونہ متن"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"اوز کا شاندار جادوگر"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"گیارھواں باب: اوز کا شاندار زمردی شہر"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"سبز عینکوں سے محفوظ ہونے کے باوجود ڈوروتھی اور اس کے دوستوں کی آنکھیں اس شاندار شہر کی آب و تاب سے پہلے پہل چندھیا گئیں۔ سڑکوں پر قطار اندر قطار سبز سنگِ مرمر سے بنے خوبصورت گھر تھے جن پر ہر جگہ چمکتے زمرد جڑے ہوئے تھے۔ وہ اسی سبز سنگِ مرمر کی راہگزر پر چلے اور جہاں بلاک جڑے ہوئے تھے وہاں زمرد کی قطاریں تھیں، قرینے سے لگی ہوئی، اور سورج کی روشنی میں چمکتی ہوئی۔ کھڑکیوں کے چوکھٹے سبز شیشے کے تھے؛ حتی کہ شہر کے اوپر موجود آسمان میں بھی سبز رنگ کی جھلک تھی، اور سورج کی کرنیں بھی سبز تھیں۔ \n\nوہاں کئی لوگ تھے، آدمی، عورتیں اور بچے، مٹر گشت کرتے، اور ان سب نے سبز کپڑے پہنے ہوئے تھے اور ان کی چمڑیاں بھی سبز مائل تھیں۔ انہوں نے ڈوروتھی اور اس کی عجیب قسم کی سنگت کو تعجب سے دیکھا، شیر کو دیکھ کر سارے بچے بھاگ کھڑے ہوئے اور اپنی ماؤں کے پیچھے چھپ گئے؛ مگر ان سے کسی نے بات نہ کی۔ گلی میں کئی دکانیں تھیں اور ڈوروتھی نے دیکھا کہ ان دکانوں کے اندر ہر چیز سبز تھی۔ سبز مٹھائی اور سبز پاپ کارن بیچنے کیلئے رکھے تھے، ساتھ ہی سبز جوتے، سبز ٹوپیاں اور ہر قسم کے سبز کپڑے بھی۔ ایک جگہ پر ایک آدمی سبز سکنجبین بیچ رہا تھا اور ڈوروتھی نے دیکھا کہ جو بچے اسے خرید رہے تھے وہ اس کی ادائیگی سبز سکوں میں کر رہے تھے۔ \n\nوہاں گھوڑے یا کسی بھی اور قسم کے جانور نہیں تھے اور آدمی چیزوں کو چھوٹی سبز ہاتھ گاڑیوں پر لے جا رہے تھے جنہیں وہ اپنے سے آگے دھکیلتے۔ ہر کوئی خوش اور مطمئن اور خوشحال نظر آ رہا تھا۔"</string>
     <string name="font_size_save" msgid="3450855718056759095">"ٹھیک ہے"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"‏USB اسٹوریج"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"‏SD کارڈ"</string>
@@ -659,8 +658,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"خرابی"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"‏اس ملک میں ‎5 GHz بینڈ دستیاب نہیں"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"ہوائی جہاز وضع میں"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"نیٹ ورک کی اطلاع"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"جب بھی عوامی نیٹ ورک دستیاب ہو مطلع کریں"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"خراب کنکشن سے اجتناب کریں"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"‏Wi‑Fi نیٹ ورک کا تب تک استعمال نہ کریں جب تک ایک اچھا انٹرنیٹ کنکشن موجود نہ ہو"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"صرف اچھے انٹرنیٹ کنکشن والے نیٹ ورکس کا استعمال کریں"</string>
@@ -1524,11 +1529,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"نئی ایپس کیلئے ترجیحی انسٹالیشن مقام تبدیل کریں"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"پہلے سے شامل ایپ غیر فعال کریں؟"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"ایپ کو غیر فعال کریں"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"‏اگر آپ اس ایپ کو غیر فعال کرتے ہیں تو ہو سکتا ہے Android اور دیگر ایپس ٹھیک طرح سے کام نہ کریں۔"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"ڈیٹا حذف کرکے ایپ غیر فعال کریں؟"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"‏اگر آپ اس ایپ کو غیر فعال کرتے ہیں تو ہو سکتا ہے Android اور دیگر ایپس ٹھیک طرح سے کام نہ کریں۔ آپ کا ڈیٹا بھی حذف ہو جائے گا۔"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"اطلاعات آف کریں؟"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"اگر آپ اس ایپ کیلئے اطلاعات آف کر دیتے ہیں تو ہو سکتا ہے کہ آپ سے اہم الرٹس اور اپ ڈیٹس چھوٹ جائیں۔"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"اسٹور"</string>
@@ -2513,8 +2516,7 @@
     <string name="dashboard_title" msgid="5453710313046681820">"ترتیبات"</string>
     <!-- String.format failed for translation -->
     <!-- no translation found for settings_suggestion_header_summary_hidden_items (5597356221942118048) -->
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"نیٹ ورک اور انٹرنیٹ"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"منسلک آلات"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"ایپس اور اطلاعات"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"صارف اور اکاؤنٹس"</string>
@@ -2640,16 +2642,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"اطلاعات"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"اہمیت"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"متعین نہیں ہے"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"کبھی اطلاعات نہ دکھائیں"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"کوئی صوتی یا بصری مداخلت نہیں"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"خاموشی سے دکھائیں"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"آواز نکالیں"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"آواز نکالیں اور اسکرین پر پاپ کریں"</string>
     <string name="importance_reset" msgid="7458420788555607007">"دوبارہ ترتیب دیں"</string>
     <string name="show_silently" msgid="2222875799232222056">"خاموشی سے دکھائیں"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"آواز نہ نکالیں، وائبریٹ نہ کریں اور ان اطلاعات کو موجودہ اسکرین پر نہ دکھائیں۔"</string>
@@ -2678,16 +2675,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"ایپس لوڈ ہو رہی ہیں…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"چینلز"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"سبھی کو مسدود کریں"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"یہ اطلاعات کبھی مت دکھائیں"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"اطلاعات دکھائیں"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"شیڈ میں یا پیریفرل آلات پر کبھی بھی اطلاعات نہ دکھائیں"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"بیج دکھائیں"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"ہوم ایپ پر بیجز کی طرح اطلاعات دکھائیں، اگر تعاون یافتہ ہیں۔"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"ڈسٹرب نہ کریں کو اوور رائیڈ کریں"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"جب \'ڈسٹرب نہ کریں\' صرف ترجیح پر سیٹ ہو تو ان اطلاعات کو مداخلت کرنے دیں"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"قفل اسکرین پر"</string>
@@ -3210,8 +3202,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"دوبارہ مت دکھائیں"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"درخواست کی جا رہی ہے بطور"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"اکاؤنٹ شامل کریں"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"سسٹم کی معلومات"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"دفتری پروفائل کی ترتیبات"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"رابطہ تلاش"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"کالرز اور رابطوں کی شناخت کیلئے اپنی تنظیم کی جانب سے رابطہ تلاشیوں کی اجازت دیں"</string>
@@ -3302,16 +3293,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"آپ کی سب سے حالیہ بگ رپورٹ"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"آپ کا حالیہ ترین سیکیورٹی لاگ"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"کبھی نہیں"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"تصاویر اور ویڈیوز"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"موسیقی اور آڈیو"</string>
     <string name="storage_games" msgid="7703159201697117621">"گیمز"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"دیگر ایپس"</string>
     <string name="storage_files" msgid="8581083146777364063">"فائلز"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"فون کی اسٹوریج"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> استعمال شدہ"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> خالی ہے"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 027123f..e4d2b67 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Namunaviy matn"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"Oz mamlakati sehrgari"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"11-bob: Oz mamlakatining zumrad shahri"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Yashil ko‘zoynak taqishgan bo‘lishiga qaramasdan, bu ajoyib shaharning jilosi Doroti va uning do‘stlarining ko‘zlarini qamashtirardi. Ko‘chalarda yashil marmardan qurilgan va yorqin zumradlar bilan bezalgan go‘zal uylar tizilib turar edi. Ular yurib borayotgan yashil marmarli yo‘lakdagi zumradlar quyosh nurida jilolanardi. Uylar derazalari ham yashil oynadan qilingan edi. Hattoki shahar osmoni ham yashil tusda bo‘lib, quyosh nurlari ham yashil edi. \n\nAtrofda yashil libos kiygan erkaklar, ayollar va bolalar yurishardi, ularning terisining rangi ham yashilsifat edi. Ular bir so‘z demay Doroti va uning g‘alati do‘stlariga hayratlanib boqishardi, bolalar bahaybat sherdan qo‘rqqanlaridan yugurib onalarini ortiga qochishardi. Doroti ko‘rdiki, ko‘chada ko‘p do‘konlar bo‘lib, ulardagi barcha narsalar yashil rangda edi: yashil shirinliklar va bodroq, yashil poyabzal va bosh kiyimlar, yashil liboslar va barcha turdagi paltolar. Bir joydagi sotuvchidan bolalar yashil tangaga yashil limonad sotib olishar edi. \n\nOtlar va boshqa turdagi hayvonlar ko‘rinmas edi. Odamlarlar o‘zlari surib yurgan yashil aravachalarida narsalarini olib yurishardi. Zumrad shahar aholisi baxtli va mamnun edi."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB xotira"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD karta"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Xatolik"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Siz joylashgan mamlakatda 5 GGs chastota qo‘llab-quvvatlanmaydi"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Uchish rejimida"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Tarmoq haqida bildirishnoma"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Hamma uchun ochiq tarmoqlar haqida xabar qilinsin"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Sifatsiz ulanishdan chetlashish"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Internet aloqasi yomon bo‘lsa, Wi-Fi tarmog‘iga ulanilmasin"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Faqat kuchli signalga ega tarmoqlardan foydalanilsin"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Yangi ilovalar uchun tanlangan o‘rnatish joyini o‘zgartirish"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Ilovani o‘chirib qo‘ymoqchimisiz?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Ilovani o‘chirib qo‘yish"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Agar bu ilovani o‘chirib qo‘ysangiz, Android va boshqa ilovalar bundan buyon kutilganidek ishlamasligi mumkin."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Ma‘lumotlarni o‘chirib tashlab, ilova o‘chirib qo‘yilsinmi?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Agar bu ilovani o‘chirib qo‘ysangiz, Android va boshqa ilovalar bundan buyon kutilganidek ishlamasligi mumkin. Ma’lumotlaringiz ham o‘chib ketadi."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Xabarnomalar o‘chirib qo‘yilsinmi?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Agar bu ilova uchun xabarnomalarni o‘chirib qo‘ysangiz, muhim ogohlantirishlar va yangilanishlardan bexabar qolishingiz mumkin."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Do‘kon"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">%d ta yashirin elementni ko‘rsatish</item>
       <item quantity="one">%d ta yashirin elementni ko‘rsatish</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Tarmoq va Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Ulangan qurilmalar"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Ilova va bildirishnomalar"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Foydalanuvchi va hisoblar"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Bildirishnomalar"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Muhimligi"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ko‘rsatilmagan"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Bildirishnomalar hech qachon ko‘rsatilmasin"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Bildirishnomalarsiz"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Ovozsiz"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Ovozli"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Ovoz va qalqib chiquvchi oyna"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Asliga qaytarish"</string>
     <string name="show_silently" msgid="2222875799232222056">"Ovozsiz"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ovozli signal va vibratsiyani o‘chirib qo‘yish, bildirishnomalarni boshqa ilovalar ustida ko‘rsatmaslik."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Ilovalar yuklanmoqda…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kanallar"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Barchasini bloklash"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Bu bildirishnomalar boshqa ko‘rsatilmasin"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Bildirishnomalar ko‘rsatilsin"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Fonda yoki tashqi qurilmalarda bildirishnomalar hech qachon ko‘rsatilmasin"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Nishoncha ko‘rsatilsin"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Bosh ekranda bildirishnomalar nishoncha sifatida ko‘rsatilsin (agar ishlasa)."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"“Bezovta qilinmasin” rejimini qayta o‘rnatish"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"“Bezovta qilinmasin” rejimi “Faqat muhim bildirishnomalar” uchun istisno qilingan holatda ushbu bildirishnomalar ham ko‘rsatilsin."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Qulflangan ekranda"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Boshqa ko‘rsatilmasin"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"So‘rov yuborish…"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Hisob qo‘shish"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Tizimga oid ma’lumotlar"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Ishchi profil sozlamalari"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Kontaktlarni qidirish"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Tashkilot nomi bo‘yicha qidiruvda qo‘ng‘iroq qiluvchi abonent va uning kontaktini aniqlashga ruxsat berish"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Eng oxirgi xatoliklar hisoboti"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Eng oxirgi xavfsizlik jurnali"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Hech qachon"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Surat va videolar"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Musiqa va audio"</string>
     <string name="storage_games" msgid="7703159201697117621">"O‘yinlar"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Boshqa ilovalar"</string>
     <string name="storage_files" msgid="8581083146777364063">"Fayllar"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Telefon xotirasi"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> band"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> bo‘sh"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 2930c64..3404b46 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Văn bản mẫu"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"The Wonderful Wizard of Oz (Phù thủy tuyệt vời xứ Oz)"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Chương 11: The Wonderful Emerald City of Oz (Thành phố ngọc lục bảo tuyệt vời của Oz)"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Ngay cả khi đã đeo kính bảo vệ mắt màu xanh lục, lúc đầu Dorothy và bạn bè của cô vẫn bị lóa mắt bởi sự lộng lẫy của Thành phố tuyệt vời đó. Dọc phố là những ngôi nhà xinh xắn nối đuôi nhau, tất cả đều được xây bằng đá cẩm thạch xanh lục và ngọc lục bảo lấp lánh được sử dụng để tô điểm ở mọi nơi. Ngay cả vỉa hè dưới chân họ cũng lát bằng đá cẩm thạch xanh lục và các viên gạch lát được ghép với nhau bằng những hàng ngọc lục bảo, đặt sát gần nhau và lấp lánh dưới ánh mặt trời. Các tấm cửa sổ bằng kính màu xanh lục; ngay cả bầu trời phía trên Thành phố cũng có sắc xanh lục và các tia nắng cũng màu xanh lục. \n\nNhiều người, đàn ông, phụ nữ và trẻ em, đi dạo ở đây và họ đều khoác trên mình những bộ quần áo màu xanh lục cũng như có làn da hơi màu xanh lục. Họ nhìn Dorothy và những người bạn kỳ lạ của cô bằng con mắt ngạc nhiên còn bọn trẻ bỏ chạy và nấp phía sau lưng mẹ khi chúng nhìn thấy Sư tử; nhưng không ai nói với họ lời nào. Có nhiều cửa hàng trên phố và Dorothy thấy mọi thứ trong các cửa hàng đó đều có màu xanh lục. Kẹo, bỏng ngô cũng như giày, mũ và quần áo đủ loại được bày bán đều có màu xanh lục. Một người đàn ông trên phố đang bán nước chanh màu xanh lục và khi bọn trẻ mua nước chanh, Dorothy quan sát thấy chúng trả cho ông ấy những đồng xu màu xanh lục. \n\nDường như ở đó không có ngựa hay bất kỳ loài động vật nào; người dân ở đó vận chuyển đồ trên những chiếc xe đẩy hàng nhỏ màu xanh lục. Mọi người có vẻ rất hạnh phúc, mãn nguyện và thịnh vượng."</string>
     <string name="font_size_save" msgid="3450855718056759095">"OK"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Bộ nhớ USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Thẻ SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Lỗi"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"Băng tần 5 GHz không khả dụng ở quốc gia này"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Ở chế độ trên máy bay"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Thông báo mạng"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Thông báo bất cứ khi nào có mạng công cộng"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Tránh kết nối kém"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Không sử dụng mạng Wi‑Fi trừ khi mạng này có kết nối Internet tốt"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Chỉ sử dụng mạng có kết nối Internet tốt"</string>
@@ -1536,11 +1541,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Thay đổi vị trí cài đặt ưa thích cho ứng dụng mới"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Tắt ứng dụng tích hợp sẵn?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Tắt ứng dụng"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Nếu bạn tắt ứng dụng này, Android và các ứng dụng khác có thể không còn hoạt động như dự kiến."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Xóa dữ liệu và tắt ứng dụng?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Nếu bạn tắt ứng dụng này, Android và các ứng dụng khác có thể không còn hoạt động như dự kiến. Dữ liệu của bạn cũng sẽ bị xóa."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Tắt thông báo?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Nếu bạn tắt thông báo cho ứng dụng này, bạn có thể bỏ qua cảnh báo và cập nhật quan trọng."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Cửa hàng"</string>
@@ -2527,8 +2530,7 @@
       <item quantity="other">Hiển thị %d mục ẩn</item>
       <item quantity="one">Hiển thị %d mục ẩn</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Mạng và Internet"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Thiết bị đã kết nối"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Ứng dụng và thông báo"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Người dùng và tài khoản"</string>
@@ -2654,16 +2656,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Thông báo"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Mức độ quan trọng"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Chưa được đặt"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Không bao giờ hiển thị thông báo"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Không làm gián đoạn bằng âm báo hoặc hình ảnh"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Hiển thị mà không phát âm báo"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Phát âm báo"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Phát âm báo và hiển thị trên màn hình"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Đặt lại"</string>
     <string name="show_silently" msgid="2222875799232222056">"Hiển thị im lặng"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Không phát ra âm thanh, rung hoặc hiển thị các thông báo này khi xem trên màn hình hiện tại."</string>
@@ -2692,16 +2689,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Đang tải ứng dụng..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Kênh"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Chặn tất cả"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Không bao giờ hiển thị các thông báo này"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Hiển thị thông báo"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Không bao giờ hiển thị thông báo trong ngăn thông báo hoặc trên thiết bị ngoại vi"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Hiển thị huy hiệu"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Hiển thị thông báo dưới dạng huy hiệu trên ứng dụng trong Màn hình chính, nếu được hỗ trợ."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Ghi đè Không làm phiền"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Cho phép các thông báo này tiếp tục làm gián đoạn khi tính năng Không làm phiền được đặt thành Chỉ ưu tiên."</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Trên màn hình khóa"</string>
@@ -3224,8 +3216,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Không hiển thị lại"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Đang yêu cầu bằng"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Thêm tài khoản"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Thông tin hệ thống"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Cài đặt hồ sơ công việc"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Tìm kiếm liên hệ"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Cho phép tìm kiếm liên hệ theo tổ chức để xác định người gọi và liên hệ"</string>
@@ -3316,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Báo cáo lỗi gần đây nhất của bạn"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Nhật ký bảo mật gần đây nhất của bạn"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Không bao giờ"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Ảnh và video"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Nhạc và âm thanh"</string>
     <string name="storage_games" msgid="7703159201697117621">"Trò chơi"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Ứng dụng khác"</string>
     <string name="storage_files" msgid="8581083146777364063">"Tệp"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Bộ nhớ điện thoại"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"Đã sử dụng <xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> "</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"Còn <xliff:g id="TOTAL">%1$s</xliff:g> dung lượng trống"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 739da14..8df19ec 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"出错"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"在此国家/地区无法使用 5 GHz 频段"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"正处于飞行模式下"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"网络通知"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"有可用的公共网络时通知我"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"避开状况不佳的网络"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"仅在WLAN互联网连接状况良好时使用WLAN网络"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"仅使用互联网连接情况良好的网络"</string>
@@ -3301,16 +3307,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"您最新的错误报告"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"您最新的安全日志"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"一律不"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"照片和视频"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"音乐和音频"</string>
     <string name="storage_games" msgid="7703159201697117621">"游戏"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"其他应用"</string>
     <string name="storage_files" msgid="8581083146777364063">"文件"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"手机存储空间"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"已使用空间:<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"总的可用空间:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index c953b06..3cf3d52 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -86,7 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"範例文字"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"《綠野仙蹤》"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"第 11 章:奧茲國的奇妙翡翠城"</string>
-    <string name="font_size_preview_text_body" msgid="2846183528684496723">"即使配戴著綠色眼鏡保護雙眼,這座美麗城市閃耀的光芒還是令桃樂絲和她的朋友們目眩神迷。街道兩側佇立著以碧綠大理石建造的華美房屋,上頭鑲滿光彩奪目的翡翠。街道路面同樣是以碧綠大理石鋪砌而成,石板接合處嵌有一排排緊密相連的翡翠,在陽光的照耀下閃閃發亮。房屋窗面採用翠綠玻璃,襯著城市上方的淡綠天空,就連陽光也透出青綠色調。\n\n城內居民眾多,無論男女老幼全都穿著綠色衣物,甚至皮膚也帶有綠色光澤。他們充滿好奇地盯著桃樂絲和她那群外貌迥異的夥伴,只是孩子們一看到獅子便飛快躲到母親身後;然而,一直沒有任何人開口與他們交談。街道上的商店五花八門,桃樂絲發現這些商店兜售的商品,從糖果和爆米花到鞋子、帽子和各式衣物,全都是綠色的。有位小販賣著綠色檸檬汁,當小孩掏錢購買時,桃樂絲清楚看見錢幣也是綠色的。\n\n城裡似乎沒有馬匹或任何動物;居民們都是推著綠色小推車來搬運物品。每個人看起來都相當幸福且富足。"</string>
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"即使戴著綠色眼鏡保護雙眼,桃樂絲和她的朋友一開始還是被這座奇妙城市的耀眼光芒照得目眩神迷。街道兩旁都是以碧綠大理石砌成的美麗房屋,到處鑲滿閃閃發亮的翡翠。她們走過的路面同樣以碧綠大理石鋪砌而成,石板與石板之間鑲有一排排緊密相連的翡翠,在陽光的照耀下閃閃發亮。房屋的窗戶鑲嵌著翠綠玻璃,城市上空呈現淡綠色,就連陽光也散發著綠色光芒。\n\n路上有很多行人,不論男女老幼都穿著綠色衣服,甚至皮膚也略帶綠色。他們好奇地盯著桃樂絲和她那群外貌奇特的夥伴,所有小孩一看到獅子都拔足而逃,各自躲到母親身後;然而,沒有人開口與他們交談。街道上的商店五花八門,桃樂絲發現店裡每件商品都是綠色的,有綠色的糖果和爆谷,還有綠色的鞋子、帽子和衣服。有位小販在路上售賣綠色檸檬水,當孩子們拿錢購買時,桃樂絲發現錢幣也是綠色的。\n\n城裡似乎沒有馬,也沒有任何動物。居民都是推著綠色小車運載物品。每個人看起來都很開心滿足,一切都安定繁榮。"</string>
     <string name="font_size_save" msgid="3450855718056759095">"確定"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"USB 儲存裝置"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"SD 卡"</string>
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"錯誤"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"此國家/地區無法使用 5 GHz 頻譜"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"處於飛行模式"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"網絡通知"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"有可用的公用網絡時通知我"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"已避免欠佳的連線"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"除非互聯網連線穩定,否則不要使用 Wi-Fi 網絡"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"只使用連線品質穩定的網絡"</string>
@@ -1536,9 +1542,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"更改新應用程式在安裝時的喜好位置。"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"您要停用內置應用程式嗎?"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"停用應用程式"</string>
-    <string name="app_disable_dlg_text" msgid="5632072173181990531">"如果你停用這個應用程式,Android 和其他應用程式可能無法正常運作。"</string>
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"如果您停用此應用程式,Android 和其他應用程式可能無法正常運作。"</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"要刪除資料並停用應用程式嗎?"</string>
-    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"如果你停用這個應用程式,Android 和其他應用程式可能無法正常運作,你的資料也會遭到刪除。"</string>
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"如果您停用此應用程式,Android 和其他應用程式可能無法正常運作,您的資料亦會被刪除。"</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"關閉通知?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"如果您關閉這個應用程式的通知,可能會錯失重要的警示與更新。"</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"商店"</string>
@@ -2527,7 +2533,7 @@
       <item quantity="other">顯示 %d 個隱藏項目</item>
       <item quantity="one">顯示 %d 個隱藏項目</item>
     </plurals>
-    <string name="network_dashboard_title" msgid="3135144174846753758">"網路和網際網路"</string>
+    <string name="network_dashboard_title" msgid="3135144174846753758">"網絡和互聯網"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"已連結的裝置"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"應用程式和通知"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"使用者和帳戶"</string>
@@ -2653,11 +2659,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"通知"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"重要性"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"未設定"</string>
-    <string name="notification_importance_blocked" msgid="7938180808339386300">"一律不顯示通知"</string>
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"永不顯示通知"</string>
     <string name="notification_importance_min" msgid="5455049524984686275">"不發出音效或顯示通知"</string>
     <string name="notification_importance_low" msgid="2445139943005315690">"顯示通知但不發出音效"</string>
     <string name="notification_importance_default" msgid="5958338024601957516">"發出音效"</string>
-    <string name="notification_importance_high" msgid="2082429479238228527">"發出音效並在畫面上彈出通知"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"發出音效並在螢幕上彈出通知"</string>
     <string name="importance_reset" msgid="7458420788555607007">"重設"</string>
     <string name="show_silently" msgid="2222875799232222056">"顯示通知時不發出音效"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"禁止這些通知發出音效、震動或不時於目前螢幕上出現。"</string>
@@ -2686,11 +2692,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"正在載入應用程式…"</string>
     <string name="notification_channels" msgid="8681423709659818791">"頻道"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"全部封鎖"</string>
-    <string name="app_notification_block_summary" msgid="4744020456943215352">"一律不顯示這類通知"</string>
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"永不顯示這些通知"</string>
     <string name="notification_content_block_title" msgid="5854232570963006360">"顯示通知"</string>
-    <string name="notification_content_block_summary" msgid="7746185794438882389">"一律不在通知欄或週邊裝置上顯示通知"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"永不在通知欄或周邊裝置上顯示通知"</string>
     <string name="notification_badge_title" msgid="5404669445214920178">"顯示狀態標籤"</string>
-    <string name="notification_badge_summary" msgid="3944771498030335669">"在支援的 Home 應用程式上以狀態標籤形式顯示通知。"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"在 Home 應用程式以狀態標籤形式顯示通知 (如支援)。"</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"取代「請勿騷擾」"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"當「請勿騷擾」設定為「僅限優先」時,允許顯示這些通知"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"畫面上鎖時"</string>
@@ -3213,7 +3219,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"不要再顯示"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"透過以下帳戶提出要求"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"新增帳戶"</string>
-    <string name="support_system_information_title" msgid="3439905790018934773">"系統資訊"</string>
+    <string name="support_system_information_title" msgid="3439905790018934773">"系統資料"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"工作設定檔設定"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"聯絡人搜尋"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"允許您的機構搜尋聯絡人,以識別來電者和聯絡人"</string>
@@ -3304,16 +3310,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"您最近的錯誤報告"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"您最近的安全記錄"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"永不"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"相片和影片"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"音樂和音訊"</string>
     <string name="storage_games" msgid="7703159201697117621">"遊戲"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"其他應用程式"</string>
     <string name="storage_files" msgid="8581083146777364063">"檔案"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"手機儲存空間"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"已使用空間:<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"可用空間:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index a0eee46..9a47cf7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -670,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"錯誤"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz 頻帶在這個國家/地區不受支援"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"處於飛行模式時"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"網路通知"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"有可用的公用網路時通知我"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"避開品質不佳的連線"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"除非 Wi-Fi 網路連線狀態良好,否則不使用"</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"僅使用網際網路連線品質穩定的網路"</string>
@@ -3305,16 +3311,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"最新錯誤報告"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"最新安全性紀錄"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"永遠不要"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"相片和影片"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"音樂和音訊"</string>
     <string name="storage_games" msgid="7703159201697117621">"遊戲"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"其他應用程式"</string>
     <string name="storage_files" msgid="8581083146777364063">"檔案"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"手機儲存空間"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"已使用空間:<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"可用空間:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 01841a0..4a5d220 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -86,8 +86,7 @@
     <string name="font_size_preview_text_headline" msgid="7955317408475392247">"Isampuli yombhalo"</string>
     <string name="font_size_preview_text_title" msgid="1310536233106975546">"I-The Wonderful Wizard of Oz"</string>
     <string name="font_size_preview_text_subtitle" msgid="4231671528173110093">"Isahluko 11: The Wonderful Emerald City of Oz"</string>
-    <!-- no translation found for font_size_preview_text_body (2846183528684496723) -->
-    <skip />
+    <string name="font_size_preview_text_body" msgid="2846183528684496723">"Nanoma amehlo avikelwe izibuko eziluhlaza u-Sonto nabangani bakhe ekuqaleni bamangazwa ubuhle obukhulu bedolobha elihle. Imigwaqo ibikade inezindlu ezinhle ezenze ulayini zonke ezakhiwe ngamamebula aluhlaza nezigcwaliswe yonke indawo ngama-emerald acwebezelayo. Bahamba kuphevumente yamamabuli afanayo aluhlaza, futhi lapho amabhulokhu ahlanganiswe khona ndawonye bekukhona amarowu ama-emerald, asethwe ngokusondelene, aphinde akhazimula ekukhanyeni kwelanga. Amapheyini ewindi bewekade kungowengilazi eliluhlaza; nesibhakabhaka esingaphezulu kwedolobha besikade sinokuthintwa okuluhlaza, futhi imisebe yelanga beyikade iluhlaza. \n\nBekukhona abantu abaningi, abesilisa, abesifazane nezingane, abazihambelayo nje, futhi bonke labo bebagqoke izingubo eziluhlaza futhi banezikhumba ezisaluhlaza. Babheka uSonto nahamba nabo abahlukile ngandlela thize ngamehlo anemibuzo, futhi izingane zonke zabaleka zayozifihla ngemuva komama bazo uma bebona ibhubezi; kodwa akekho umuntu okhulume nabo. Iningi lezitolo zema emgwaqeni, futhi uSonto wabona ukuthi yonke into ekuzo ibikade iluhlaza. Uswidi oluhlaza namakipukipu aluhlaza bewakade anikezwa ukuze athengiswe, kanye nezicathulo eziluhlaza, izigqoko eziluhlaza nezingubo eziluhlaza zalo lonke uhlobo. Endaweni eyodwa indoda ethile ibikade ithengisa i-lemonade eluhlaza, futhi ngenkathi izingane ziyithenga uSonto wakwazi ukubona ukuthi ziyikhokhele ngamapeni aluhlaza. \n\nKwabonakala kungekho amahhashi noma izilwane zanoma iluphi uhlobo; amadoda athwala izinto ngezinqola ezincane eziluhlaza, abazisunduza ngaphambi kwabo. Wonke umuntu wabukeka ajabulile futhi anelisekile futhi aphumelela."</string>
     <string name="font_size_save" msgid="3450855718056759095">"KULUNGILE"</string>
     <string name="sdcard_setting" product="nosdcard" msgid="8281011784066476192">"Isitoreji se-USB"</string>
     <string name="sdcard_setting" product="default" msgid="5922637503871474866">"Ikhadi le-SD"</string>
@@ -671,8 +670,14 @@
     <string name="wifi_error" msgid="3207971103917128179">"Iphutha"</string>
     <string name="wifi_sap_no_channel_error" msgid="3108445199311817111">"5 GHz ibhendi ayitholakali kuleli zwe"</string>
     <string name="wifi_in_airplane_mode" msgid="8652520421778203796">"Kwimodi yendiza"</string>
-    <string name="wifi_notify_open_networks" msgid="3755768188029653293">"Isaziso senethiwekhi"</string>
-    <string name="wifi_notify_open_networks_summary" msgid="3716818008370391253">"Ngazise uma inethwekhi esesidlangalaleni itholakala"</string>
+    <!-- no translation found for wifi_notify_open_networks (76298880708051981) -->
+    <skip />
+    <!-- no translation found for wifi_notify_open_networks_summary (1244441254694191115) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup (5685581457584270802) -->
+    <skip />
+    <!-- no translation found for wifi_wakeup_summary (4394339213899922951) -->
+    <skip />
     <string name="wifi_poor_network_detection" msgid="4925789238170207169">"Gwema uxhumo olubi"</string>
     <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ungasebenzisi inethiwekhi ye-Wi-Fi ngaphandle kokuthi inoxhumano lwe-intanethi olukahle."</string>
     <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Sebenzisa kuphela amanethwekhi anoxhumo oluhle lwe-inthanethi"</string>
@@ -1537,11 +1542,9 @@
     <string name="app_install_location_summary" msgid="5155453752692959098">"Shintsha indawo yokufaka efiswayo yezinhlelo zokusebenza ezintsha"</string>
     <string name="app_disable_dlg_title" msgid="3916469657537695436">"Khubeza uhlelo lokusebenza olakhelwe"</string>
     <string name="app_disable_dlg_positive" msgid="7375627244201714263">"Khubaza uhlelo lokusebenza"</string>
-    <!-- no translation found for app_disable_dlg_text (5632072173181990531) -->
-    <skip />
+    <string name="app_disable_dlg_text" msgid="5632072173181990531">"Uma ukhubaza lolu hlelo lokusebenza, i-Android nezinye izinhlelo zokusebenza kungenzeka zingasasebenzi njengoba zihlosiwe."</string>
     <string name="app_special_disable_dlg_title" msgid="2690148680327142674">"Susa idatha futhi ukhubaze uhlelo lokusebenza?"</string>
-    <!-- no translation found for app_special_disable_dlg_text (5832078825810635913) -->
-    <skip />
+    <string name="app_special_disable_dlg_text" msgid="5832078825810635913">"Uma ukhubaza lolu hlelo lokusebenza, i-Android nezinye izinhlelo zokusebenza kungenzeka zingasasebenzi njengoba zihlosiwe. Idatha yakho nayo izosuswa."</string>
     <string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"Cima izaziso?"</string>
     <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"Uma ucima izaziso kulolu hlelo lokusebenza, ungageja izaziso nezibuyekezo ezibalulekile."</string>
     <string name="app_install_details_group_title" msgid="7084623031296083574">"Isitolo"</string>
@@ -2528,8 +2531,7 @@
       <item quantity="one">Bonisa izinto ezingu-%d ezifihliwe</item>
       <item quantity="other">Bonisa izinto ezingu-%d ezifihliwe</item>
     </plurals>
-    <!-- no translation found for network_dashboard_title (3135144174846753758) -->
-    <skip />
+    <string name="network_dashboard_title" msgid="3135144174846753758">"Inethiwekhi ne-inthanethi"</string>
     <string name="connected_devices_dashboard_title" msgid="2355264951438890709">"Amadivayisi axhunyiwe"</string>
     <string name="app_and_notification_dashboard_title" msgid="7838365599185397539">"Izinhlelo zokusebenza nezaziso"</string>
     <string name="account_dashboard_title" msgid="38701889336378742">"Umsebenzisi nama-akhawunti"</string>
@@ -2655,16 +2657,11 @@
     <string name="app_notifications_title" msgid="139788604658984593">"Izaziso"</string>
     <string name="notification_importance_title" msgid="848692592679312666">"Ukubaluleka"</string>
     <string name="notification_importance_none" msgid="3173515479356106227">"Ayisethiwe"</string>
-    <!-- no translation found for notification_importance_blocked (7938180808339386300) -->
-    <skip />
-    <!-- no translation found for notification_importance_min (5455049524984686275) -->
-    <skip />
-    <!-- no translation found for notification_importance_low (2445139943005315690) -->
-    <skip />
-    <!-- no translation found for notification_importance_default (5958338024601957516) -->
-    <skip />
-    <!-- no translation found for notification_importance_high (2082429479238228527) -->
-    <skip />
+    <string name="notification_importance_blocked" msgid="7938180808339386300">"Ungalokothi ubonise izaziso"</string>
+    <string name="notification_importance_min" msgid="5455049524984686275">"Awukho umsindo noma ukuphazamiseka okubukwayo"</string>
+    <string name="notification_importance_low" msgid="2445139943005315690">"Bonisa ngokuthulile"</string>
+    <string name="notification_importance_default" msgid="5958338024601957516">"Yenza umsindo"</string>
+    <string name="notification_importance_high" msgid="2082429479238228527">"Yenza umsindo ne-pop kusikrini"</string>
     <string name="importance_reset" msgid="7458420788555607007">"Setha kabusha"</string>
     <string name="show_silently" msgid="2222875799232222056">"Bonisa ngokuthulile"</string>
     <string name="show_silently_summary" msgid="7616604629123146565">"Ungenzi umsindo, ukudlidlizela, noma ubheke lezi zaziso kusikrini samanje."</string>
@@ -2693,16 +2690,11 @@
     <string name="loading_notification_apps" msgid="5031818677010335895">"Ilayisha izinhlelo zokusebenza..."</string>
     <string name="notification_channels" msgid="8681423709659818791">"Iziteshi"</string>
     <string name="app_notification_block_title" msgid="4069351066849087649">"Vimbela konke"</string>
-    <!-- no translation found for app_notification_block_summary (4744020456943215352) -->
-    <skip />
-    <!-- no translation found for notification_content_block_title (5854232570963006360) -->
-    <skip />
-    <!-- no translation found for notification_content_block_summary (7746185794438882389) -->
-    <skip />
-    <!-- no translation found for notification_badge_title (5404669445214920178) -->
-    <skip />
-    <!-- no translation found for notification_badge_summary (3944771498030335669) -->
-    <skip />
+    <string name="app_notification_block_summary" msgid="4744020456943215352">"Ungalokothi ubonise lezi zaziso"</string>
+    <string name="notification_content_block_title" msgid="5854232570963006360">"Bonisa izaziso"</string>
+    <string name="notification_content_block_summary" msgid="7746185794438882389">"Ungalokothi ubonise izaziso kumthunzi noma kumadivayisi alawulwa ikhompuyutha"</string>
+    <string name="notification_badge_title" msgid="5404669445214920178">"Bonisa ibheji"</string>
+    <string name="notification_badge_summary" msgid="3944771498030335669">"Bonisa izaziso njengamabheji kuhlelo lokusebenza lwasekhaya, uma zisekelwe."</string>
     <string name="app_notification_override_dnd_title" msgid="7867458246395884830">"Bhala ngaphezulu okuthi ungaphazamisi"</string>
     <string name="app_notification_override_dnd_summary" msgid="3516007157020189746">"Vumela lezi zaziso ziqhubeke nokuphazamisa uma okuthi ungaphazamisi kusethelwe okuphezulu kuphela"</string>
     <string name="app_notification_visibility_override_title" msgid="2187232730902430718">"Ekukhiyeni kwesikrini"</string>
@@ -3225,8 +3217,7 @@
     <string name="support_disclaimer_do_not_show" msgid="3378367075323727539">"Ungabonisi futhi"</string>
     <string name="support_account_request_prefix" msgid="6387847874661861650">"Icela njengo"</string>
     <string name="support_account_picker_add_account" msgid="5076277544846506214">"Engeza i-akhawunti"</string>
-    <!-- no translation found for support_system_information_title (3439905790018934773) -->
-    <skip />
+    <string name="support_system_information_title" msgid="3439905790018934773">"Ulwazi lwesistimu"</string>
     <string name="managed_profile_settings_title" msgid="2729481936758125054">"Izilungiselelo zephrofayela yomsebenzi"</string>
     <string name="managed_profile_contact_search_title" msgid="6034734926815544221">"Usesho loxhumana naye"</string>
     <string name="managed_profile_contact_search_summary" msgid="5431253552272970512">"Vumela usesho loxhumana naye ngenhlangano yakho ukuze ukhombe abashayayo noxhumana nabo"</string>
@@ -3317,16 +3308,28 @@
     <string name="enterprise_privacy_bug_reports" msgid="4762460041705169944">"Umbiko wakho wakamuva kakhulu wesiphazamisi"</string>
     <string name="enterprise_privacy_security_logs" msgid="3648730027522011684">"Ilogu lakho lokuvikela lakamuva kakhulu"</string>
     <string name="enterprise_privacy_never" msgid="1304035596746436921">"Akusoze"</string>
+    <!-- no translation found for enterprise_privacy_always_on_vpn_device (4409098287763221215) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_personal (9217774730260037434) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_always_on_vpn_work (7244472958208315814) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_global_http_proxy (7936664553416257333) -->
+    <skip />
+    <!-- no translation found for enterprise_privacy_number_enterprise_installed_packages (6167929812245127890) -->
     <string name="storage_photos_videos" msgid="1872663116054954685">"Izithombe namavidiyo"</string>
     <string name="storage_music_audio" msgid="7890103397813503615">"Umculo nomsindo"</string>
     <string name="storage_games" msgid="7703159201697117621">"Amageyimu"</string>
     <string name="storage_other_apps" msgid="5524321740031718083">"Ezinye izinhlelo zokusebenza"</string>
     <string name="storage_files" msgid="8581083146777364063">"Amafayela"</string>
     <string name="storage_settings_2" msgid="6369810699930056554">"Isireji sefoni"</string>
-    <!-- no translation found for storage_size_large_alternate (3436941214395940966) -->
+    <string name="storage_size_large_alternate" msgid="3436941214395940966">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g> isetshenzisiwe"</small></small></string>
+    <string name="storage_volume_free" msgid="8829609507318832879">"<xliff:g id="TOTAL">%1$s</xliff:g> ikhululekile"</string>
+    <string name="storage_percent_used" msgid="6741397129281819921">"<xliff:g id="PERCENT">%1$s</xliff:g>%%"</string>
+    <!-- no translation found for storage_manager_indicator (1516810749625915020) -->
     <skip />
-    <!-- no translation found for storage_volume_free (8829609507318832879) -->
+    <!-- no translation found for storage_manager_indicator_off (7488057587180724388) -->
     <skip />
-    <!-- no translation found for storage_percent_used (6741397129281819921) -->
+    <!-- no translation found for storage_manager_indicator_on (8625551710194584733) -->
     <skip />
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 38eb74b..300d73a 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -99,8 +99,6 @@
     <color name="message_icon_background_outgoing">#4285f4</color>
     <color name="message_icon_text_outgoing">#ffffffff</color>
 
-    <color name="seek_bar_preference_preview_text">#fff</color>
-
     <color name="importance_disabled_slider_color">@*android:color/material_grey_300</color>
     <color name="importance_secondary_slider_color">#858383</color>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5038177..2879002 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -752,6 +752,8 @@
     <string name="security_passwords_title">Passwords</string>
     <!-- Summary for settings preference disabled by administrator [CHAR LIMIT=50] -->
     <string name="disabled_by_administrator_summary">Disabled by administrator</string>
+    <!-- In the security screen, the header title for security statuses -->
+    <string name="security_status_title">Security status</string>
 
     <!-- Fingerprint enrollment and settings --><skip />
     <!-- Title shown for menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
@@ -1583,11 +1585,11 @@
     <string name="wifi_in_airplane_mode">In Airplane mode</string>
     <!-- Checkbox title for option to notify user when open networks are nearby -->
     <string name="wifi_notify_open_networks">Open network notification</string>
-    <!-- Checkbox summary for option to notify user when open networks are nearby [CHAR LIMIT=60]-->
+    <!-- Checkbox summary for option to notify user when open networks are nearby-->
     <string name="wifi_notify_open_networks_summary">Notify whenever a high quality open network is available</string>
     <!-- Checkbox title for option to enable Wi-Fi when saved networks are nearby -->
     <string name="wifi_wakeup">Turn Wi\u2011Fi back on</string>
-    <!-- Checkbox summary for option to enable Wi-Fi when saved networks are nearby [CHAR LIMIT=60]-->
+    <!-- Checkbox summary for option to enable Wi-Fi when saved networks are nearby-->
     <string name="wifi_wakeup_summary">Automatically turn on Wi\u2011Fi near saved networks</string>
     <!-- Checkbox title for option to toggle poor network detection -->
     <string name="wifi_poor_network_detection">Avoid poor connections</string>
@@ -1634,6 +1636,8 @@
     <string name="wifi_cellular_data_fallback_summary">Use cellular data when Wi\u2011Fi has no Internet access. Data usage may apply.</string>
     <!-- Action bar text message to manually add a wifi network [CHAR LIMIT=20]-->
     <string name="wifi_add_network">Add network</string>
+    <!-- Action bar title to open additional Wi-Fi settings-->
+    <string name="wifi_configure_settings_preference_title">Wi\u2011Fi preferences</string>
     <!-- Header for the list of wifi networks-->
     <string name="wifi_access_points">Wi\u2011Fi networks</string>
     <!-- Menu option to do WPS Push Button [CHAR LIMIT=25]-->
@@ -3035,6 +3039,8 @@
     <string name="location_mode_sensors_only_title">Device only</string>
     <!-- [CHAR LIMIT=30] Location settings screen, location off mode -->
     <string name="location_mode_location_off_title">Location off</string>
+    <!-- [CHAR LIMIT=30] Location settings screen, app-level permissions -->
+    <string name="location_app_level_permissions">App-level permissions</string>
     <!-- [CHAR LIMIT=30] Location settings screen, sub category for recent location requests -->
     <string name="location_category_recent_location_requests">Recent location requests</string>
     <!-- Location settings screen, displayed when there's no recent app accessing location -->
@@ -3972,6 +3978,8 @@
     <string name="talkback_title">Talkback</string>
     <!-- Summary for the Talkback Accessibility Service. Lets the user know that Talkback is a screenreader and that it is usually most helpful to blind and low vision users and whether the service is on. [CHAR_LIMIT=none] -->
     <string name="talkback_summary">Screen reader primarily for people with blindness and low vision</string>
+    <!-- Summary for the Select to Speak Accessibility Service. [CHAR_LIMIT=none] -->
+    <string name="select_to_speak_summary">Tap items on your screen to hear them read aloud</string>
     <!-- Title for the accessibility preference category of system related preferences. [CHAR LIMIT=25] -->
     <string name="accessibility_system_title">System</string>
     <!-- Title for the accessibility preference category of display related preferences. [CHAR LIMIT=25] -->
@@ -3986,12 +3994,6 @@
     <string name="accessibility_screen_magnification_summary"><b>To zoom</b>, quickly tap the screen 3 times with one finger.\n<ul><li>Drag 2 or more fingers to scroll</li>\n<li>Pinch 2 or more fingers together or apart to adjust zoom</li></ul>\n\n<b>To zoom temporarily</b>, quickly tap the screen 3 times and hold down your finger on the third tap.\n<ul><li>Drag your finger to move around the screen</li>\n<li>Lift your finger to zoom out</li></ul>\n\nYou can\'t zoom in on the keyboard and navigation bar.</string>
     <!-- Title for the preference to enable the global geture that turns on accessibility. [CHAR LIMIT=35] -->
     <string name="accessibility_global_gesture_preference_title">Accessibility shortcut</string>
-    <!-- Summary for the preference to enable the global geture that turns on accessibility (on state). [CHAR LIMIT=60] -->
-    <string name="accessibility_global_gesture_preference_summary_on">On</string>
-    <!-- Summary for the preference screen to enable the global geture that turns on accessibility (off state). [CHAR LIMIT=35] -->
-    <string name="accessibility_global_gesture_preference_summary_off">Off</string>
-    <!--  Description for the preference screen to enable the global geture taht turns on accessibility. [CHAR LIMIT=none] -->
-    <string name="accessibility_global_gesture_preference_description">When this feature is turned on, you can quickly activate accessibility features in two steps:\n\nStep 1: Press and hold the power button until you hear a sound or feel a vibration.\n\nStep 2: Touch and hold two fingers until you hear audio confirmation.\n\nIf the device has multiple users, using this shortcut on the lock screen temporarily enables accessibility until the device is unlocked.</string>
     <!-- Title for the accessibility preference to high contrast text. [CHAR LIMIT=35] -->
     <string name="accessibility_toggle_high_text_contrast_preference_title">High contrast text</string>
     <!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
@@ -4628,9 +4630,20 @@
         behalf.  It comes from the <xliff:g id="voice_input_service_app_name">%s</xliff:g>
         application.  Enable the use of this service?</string>
 
-    <!-- On main TTS Settings screen, in default settings section, reset speech rate for synthesized voice to 1x speech rate.-->
+    <!-- [CHAR LIMIT=50] The text for the settings section that is used to set a preferred text to speech engine -->
+    <string name="tts_engine_preference_title">Preferred engine</string>
+    <!-- [CHAR LIMIT=50] The text for a settings screen of the currently set text to speech engine -->
+    <string name="tts_engine_settings_title">Engine settings</string>
+    <!-- [CHAR LIMIT=50] The text for a button that goes to the speech rate and pitch settings for text to speech. -->
+    <string name="tts_sliders_title">Speech rate &amp; pitch</string>
+    <!-- [CHAR LIMIT=50] Name for the general text to speech settings section. -->
+    <string name="tts_engine_section_title">Engine</string>
+    <!-- [CHAR LIMIT=50] Name for the button that goes to the voice selection screen. -->
+    <string name="tts_install_voice_title">Voices</string>
+
+    <!-- Reset speech rate for synthesized voice to 1x speech rate in the text to speech settings.-->
     <string name="tts_reset_speech_rate_title">Reset speech rate</string>
-    <!-- On main TTS Settings screen, summary for reset speech rate for synthesized voice -->
+    <!-- Summary for reset speech rate for synthesized voice in the text to speech settings.-->
     <string name="tts_reset_speech_rate_summary">Reset the speed at which the text is spoken to normal.</string>
 
     <!-- Power Control Widget -->
@@ -4739,10 +4752,8 @@
     <string name="emergency_tone_summary">Set behavior when an emergency call is placed</string>
 
     <!-- Backup and reset Settings screen --><skip />
-    <!-- Backup and reset settings menu title -->
-    <string name="privacy_settings">Backup &amp; reset</string>
-    <!-- Privacy settings activity title -->
-    <string name="privacy_settings_title">Backup &amp; reset</string>
+    <!-- Backup and reset settings menu and activity title -->
+    <string name="privacy_settings_title">Backup</string>
     <!-- Backup section title -->
     <string name="backup_section_title">Backup &amp; restore</string>
     <!-- Personal data section title -->
@@ -5387,6 +5398,8 @@
 
     <!-- Toast message when there is no network connection to start VPN. [CHAR LIMIT=100] -->
     <string name="vpn_no_network">There is no network connection. Please try again later.</string>
+    <!-- Toast message when VPN has disconnected automatically due to Clear credentials. [CHAR LIMIT=NONE] -->
+    <string name="vpn_disconnected">Disconnected from VPN</string>
     <!-- Toast message when a certificate is missing. [CHAR LIMIT=100] -->
     <string name="vpn_missing_cert">A certificate is missing. Please edit the profile.</string>
 
@@ -5953,6 +5966,10 @@
     <string name="search_menu">Search settings</string>
     <!-- Text used as a search hint into the search box -->
     <string name="query_hint_text">Search settings</string>
+    <!-- Search breadcrumb connector symbol -->
+    <string name="search_breadcrumb_connector" translatable="false">
+        <xliff:g name="first_item">%1$s</xliff:g> > <xliff:g name="second_item">%2$s</xliff:g>
+    </string>
 
     <!-- Text used to identify the search query suggestions / recent searches -->
     <string name="search_recents_queries_label">Recent searches</string>
@@ -6165,6 +6182,11 @@
     <!-- Work Sound: Message for dialog shown when enabling sync with personal sounds. [CHAR LIMIT=none] -->
     <string name="work_sync_dialog_message">Your current work profile sounds will be replaced with your personal profile sounds</string>
 
+    <!-- Ringtones preference category: Title for the Ringotnes preference categories. [CHAR LIMIT=none] -->
+    <string name="ringtones_category_preference_title">Ringtones</string>
+
+    <!-- Other sounds and vibrations preference category: Title for the Other sounds and vibrations preference categories. [CHAR LIMIT=none] -->
+    <string name="other_sound_category_preference_title">Other sounds and vibrations</string>
 
     <!-- Configure Notifications Settings title. [CHAR LIMIT=30] -->
     <string name="configure_notification_settings">Notification preferences</string>
@@ -6230,6 +6252,9 @@
     <!-- [CHAR LIMIT=100] Notification Importance slider: unset importance level description -->
     <string name="notification_importance_none">Not set</string>
 
+    <!-- [CHAR LIMIT=100] Notification Importance slider: unspecified importance level description -->
+    <string name="notification_importance_unspecified">Let the app decide</string>
+
     <!-- [CHAR LIMIT=100] Notification Importance slider: blocked importance level description -->
     <string name="notification_importance_blocked">Never show notifications</string>
 
@@ -6318,6 +6343,21 @@
          flicker while in VR mode. -->
     <string name="display_vr_pref_off">Reduce flicker</string>
 
+    <!-- Special access > Title for managing Picture-in-picture settings. [CHAR LIMIT=50] -->
+    <string name="picture_in_picture_title">Picture-in-picture</string>
+
+    <!-- Special access > Picture-in-picture > Text to display when the list is empty. [CHAR LIMIT=NONE] -->
+    <string name="picture_in_picture_empty_text">No installed apps support Picture-in-picture</string>
+
+    <!-- Special access > Picture-in-picture > Additional keywords to search for. [CHAR LIMIT=NONE] -->
+    <string name="picture_in_picture_keywords">pip picture in</string>
+
+    <!-- Apps > App Details > Advanced section string title. [CHAR LIMIT=NONE] -->
+    <string name="picture_in_picture_app_detail_title">Picture-in-picture</string>
+
+    <!-- Apps > App Details > Advanced section string description. [CHAR LIMIT=NONE] -->
+    <string name="picture_in_picture_app_detail_summary">Permit entering picture-in-picture when leaving app</string>
+
     <!-- Sound & notification > Advanced section: Title for managing Do Not Disturb access option. [CHAR LIMIT=40] -->
     <string name="manage_zen_access_title">Do Not Disturb access</string>
 
@@ -6330,6 +6370,9 @@
     <!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
     <string name="notification_channels">Channels</string>
 
+    <!-- [CHAR LIMIT=60] App notification settings: Text to display for deleted channels -->
+    <string name="deleted_channel_name"><xliff:g id="channel_name" example="Promotions">%1$s</xliff:g> (deleted)</string>
+
     <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
     <string name="app_notification_block_title">Block all</string>
 
@@ -6961,8 +7004,8 @@
     <!-- Label for list to control apps that ignore battery saving restrictions [CHAR LIMIT=27]-->
     <string name="high_power_apps">Battery optimization</string>
 
-    <!-- Label for menu to launch additional battery info -->
-    <string name="additional_battery_info" translatable="false">Additional battery info</string>
+    <!-- Label for menu to launch a screen showing usage alerts for battery [CHAR LIMIT=30] -->
+    <string name="additional_battery_info">Usage alerts</string>
 
     <!-- Filter for apps allowed to use a lot of power [CHAR LIMIT=25] -->
     <string name="high_power_filter_on">Not optimized</string>
@@ -6990,6 +7033,9 @@
     <!-- Summary of power usage for an app [CHAR LIMIT=NONE] -->
     <string name="battery_summary"><xliff:g id="percentage" example="2">%1$d</xliff:g>%% use since last full charge</string>
 
+    <!-- Title of a group of settings that let you manage settings that affect battery life [CHAR LIMIT=60] -->
+    <string name="battery_power_management">Power management</string>
+
     <!-- Summary for app with no battery usage [CHAR LIMIT=NONE] -->
     <string name="no_battery_summary">No battery use since last full charge</string>
 
@@ -7225,6 +7271,12 @@
     <!-- Summary of app not allowed to draw overlay [CHAR LIMIT=60] -->
     <string name="system_alert_window_off">No</string>
 
+    <!-- Title for settings screen for controlling apps that can install other apps on device [CHAR LIMIT=30] -->
+    <string name="install_other_apps">Install other apps</string>
+    <!-- Keywords for setting screen for controlling apps that can install other apps on device -->
+    <string name="keywords_install_other_apps">install apps external unknown sources</string>
+    <!-- Label for setting which controls whether app is trusted to install apps on the device [CHAR LIMIT=45] -->
+    <string name="permit_install_other_apps">Allows to install other apps</string>
 
     <!-- Write Settings settings -->
     <!-- Settings title in main settings screen for WRITE_SETTINGS [CHAR LIMIT=30] -->
@@ -7234,6 +7286,8 @@
     <!-- Summary of number of apps currently can draw overlays [CHAR LIMIT=60] -->
     <string name="write_settings_summary"><xliff:g id="count" example="10">%1$d</xliff:g> of <xliff:g id="count" example="10">%2$d</xliff:g> apps allowed to modify system settings</string>
 
+    <!-- Label for showing apps that can install other apps [CHAR LIMIT=45] -->
+    <string name="filter_install_sources_apps">Can install other apps</string>
     <!-- Label for showing apps that can write system settings [CHAR LIMIT=45] -->
     <string name="filter_write_settings_apps">Can modify system settings</string>
     <!-- Title for the apps that are allowed to write system settings [CHAR LIMIT=60] -->
@@ -7250,6 +7304,12 @@
     <string name="write_settings_on">Yes</string>
     <!-- Summary of app not allowed to write system settings [CHAR LIMIT=45] -->
     <string name="write_settings_off">No</string>
+    <!-- Summary of app trusted to install apps [CHAR LIMIT=45] -->
+    <string name="external_source_trusted">Yes</string>
+    <!-- Summary of app not trusted to install apps [CHAR LIMIT=45] -->
+    <string name="external_source_untrusted">No</string>
+    <!-- Title of switch preference that controls whether an external app source is trusted or not [CHAR LIMIT=100] -->
+    <string name="external_source_switch_title">Trust apps from this source</string>
 
     <!-- Title of setting that controls gesture to open camera [CHAR LIMIT=40] -->
     <string name="camera_gesture_title">Double twist for camera</string>
@@ -7440,6 +7500,9 @@
     <!-- Name of the setting to disable the automatic update -->
     <string name="ota_disable_automatic_update">Automatic system updates</string>
 
+    <!-- Name of the setting to enable hal binderization -->
+    <string name="enable_hal_binderization">Binderized HALs (requires reboot)</string>
+
     <!-- Label for category for data usage [CHAR LIMIT=30] -->
     <string name="usage">Usage</string>
 
@@ -7618,6 +7681,8 @@
     <string name="notification_log_details_importance">importance</string>
     <!-- Notification log debug tool: header: notification importance explanation -->
     <string name="notification_log_details_explanation">explanation</string>
+    <!-- Notification log debug tool: header: notification importance -->
+    <string name="notification_log_details_badge">can show badge</string>
     <!-- Notification log debug tool: header: notification contentIntent field -->
     <string name="notification_log_details_content_intent">intent</string>
     <!-- Notification log debug tool: header: notification deleteIntent field -->
@@ -8007,6 +8072,31 @@
     <string name="enterprise_privacy_security_logs">Your most recent security log</string>
     <!-- Label indicating that the date at which the admin last took a particular action was "never" (i.e. the admin never took the action so far). -->
     <string name="enterprise_privacy_never">Never</string>
+    <!-- Label indicating how many apps were installed on the device by the admin. [CHAR LIMIT=NONE] -->
+    <plurals name="enterprise_privacy_number_enterprise_installed_packages">
+        <item quantity="one"><xliff:g id="count">%d</xliff:g> app installed by your admin</item>
+        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps installed by your admin</item>
+    </plurals>
+    <!-- Label indicating how many apps were granted permission to access the device's location by the admin. [CHAR LIMIT=NONE] -->
+    <plurals name="enterprise_privacy_number_location_access_packages">
+        <item quantity="one"><xliff:g id="count">%d</xliff:g> app allowed access to your location by your admin</item>
+        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps allowed access to your location by your admin</item>
+    </plurals>
+    <!-- Label indicating how many apps were granted permission to access the microphone by the admin. [CHAR LIMIT=NONE] -->
+    <plurals name="enterprise_privacy_number_microphone_access_packages">
+        <item quantity="one"><xliff:g id="count">%d</xliff:g> app allowed access to your microphone by your admin</item>
+        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps allowed access to your microphone by your admin</item>
+    </plurals>
+    <!-- Label indicating how many apps were granted permission to access the camera by the admin. [CHAR LIMIT=NONE] -->
+    <plurals name="enterprise_privacy_number_camera_access_packages">
+        <item quantity="one"><xliff:g id="count">%d</xliff:g> app allowed access to your camera by your admin</item>
+        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps allowed access to your camera by your admin</item>
+    </plurals>
+    <!-- Label indicating how many apps were set as default defaults for common actions (e.g. open browser, send e-mail) by the admin. [CHAR LIMIT=NONE] -->
+    <plurals name="enterprise_privacy_number_enterprise_set_default_apps">
+        <item quantity="one"><xliff:g id="count">%d</xliff:g> default app set by your admin</item>
+        <item quantity="other"><xliff:g id="count">%d</xliff:g> default apps set by your admin</item>
+    </plurals>
     <!-- Label explaining that an always-on VPN was set by the admin for the entire device. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_always_on_vpn_device">Always-on VPN turned on</string>
     <!-- Label explaining that an always-on VPN was set by the admin in the personal profile. [CHAR LIMIT=NONE] -->
@@ -8015,11 +8105,18 @@
     <string name="enterprise_privacy_always_on_vpn_work">Always-on VPN turned on in your work profile</string>
     <!-- Label explaining that a global HTTP proxy was set by the admin. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_global_http_proxy">Global HTTP proxy set</string>
-    <!-- Label indicating how many apps were installed on the device by the admin. [CHAR LIMIT=NONE] -->
-    <plurals name="enterprise_privacy_number_enterprise_installed_packages">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> app installed by your admin</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps installed by your admin</item>
-    </plurals>
+    <!-- Label explaining that the admin can lock the device and change the user's password. [CHAR LIMIT=NONE] -->
+    <string name="enterprise_privacy_lock_device">Admin can lock device and reset password</string>
+    <!-- Label explaining that the admin can wipe the device remotely. [CHAR LIMIT=NONE] -->
+    <string name="enterprise_privacy_wipe_device">Admin can delete all device data</string>
+    <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
+    <string name="do_disclosure_generic">This device is managed.</string>
+    <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
+    <string name="do_disclosure_with_name">This device is managed by <xliff:g id="organization_name" example="Foo, Inc.">%s</xliff:g>.</string>
+    <!-- Message indicating that the device is enterprise-managed: Space that separates the main text and the "learn more" link that follows it. [CHAR LIMIT=NONE] -->
+    <string name="do_disclosure_learn_more_separator">" "</string>
+    <!-- Message indicating that the device is enterprise-managed: Link to learn more about what a Device Owner app can do [CHAR LIMIT=NONE] -->
+    <string name="do_disclosure_learn_more">Learn more</string>
 
     <!-- Preference label for the Photos & Videos storage section. [CHAR LIMIT=50] -->
     <string name="storage_photos_videos">Photos &amp; Videos</string>
@@ -8055,4 +8152,29 @@
     <!-- On status for the automatic storage manager. [CHAR_LIMIT=10] -->
     <string name="storage_manager_indicator_on">On</string>
 
+    <!-- Title of games app storage screen [CHAR LIMIT=30] -->
+    <string name="game_storage_settings">Games</string>
+
+    <!-- UI webview setting: WebView uninstalled-for-user explanatory text [CHAR LIMIT=30] -->
+    <string name="webview_uninstalled_for_user">Uninstalled for user <xliff:g id="user" example="John Doe">%s</xliff:g>\n</string>
+    <!-- UI webview setting: WebView disabled-for-user explanatory text [CHAR LIMIT=30] -->
+    <string name="webview_disabled_for_user">Disabled for user <xliff:g id="user" example="John Doe">%s</xliff:g>\n</string>
+
+    <!-- AutoFill strings -->
+    <!-- Preference label for the auto-fill app. [CHAR LIMIT=60] -->
+    <string name="autofill_app">Autofill app</string>
+    <!-- Keywords for the auto-fill feature. [CHAR LIMIT=NONE] -->
+    <string name="autofill_keywords">auto, fill, autofill</string>
+    <!-- Title of the warning dialog for setting the auto-fill app. [CHAR_LIMIT=NONE] -->
+    <string name="autofill_confirmation_message">
+        Make <xliff:g id="app_name">%1$s</xliff:g> your autofill app? <xliff:g id="app_name">%1$s</xliff:g> will be able to read your screen and fill fields in other apps.
+    </string>
+
+    <!-- Name of setting for switching device theme [CHAR LIMIT=60] -->
+    <string name="device_theme">Device theme</string>
+    <!-- Name of default device theme [CHAR LIMIT=60] -->
+    <string name="default_theme">Default</string>
+    <!-- Temporary reboot string, will be removed -->
+    <string name="change_theme_reboot" translatable="false">Changing the theme requires a restart.</string>
+
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 29cb390..092d997 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -293,10 +293,6 @@
     <!-- Scrollbar style OUTSIDE_OVERLAY -->
     <integer name="preference_scrollbar_style">33554432</integer>
 
-    <style name="AppListSwitchPreference" parent="@*android:style/Preference.Material.DialogPreference">
-        <item name="android:widgetLayout">@*android:layout/preference_widget_switch</item>
-    </style>
-
     <style name="TextAppearance.Medium" parent="@android:style/TextAppearance.Material.Medium" />
     <style name="TextAppearance.Small" parent="@android:style/TextAppearance.Material.Small" />
     <style name="TextAppearance.Switch" parent="@android:style/TextAppearance.Material.Title" />
diff --git a/res/values/themes.xml b/res/values/themes.xml
index f1cca37..fe5b3ca 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -35,6 +35,7 @@
         <item name="side_margin">0dip</item>
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>
         <item name="wifi_signal">@drawable/wifi_signal</item>
+        <item name="wifi_friction">@drawable/wifi_friction</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
@@ -57,6 +58,7 @@
         <item name="side_margin">0dip</item>
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>
         <item name="wifi_signal">@drawable/wifi_signal</item>
+        <item name="wifi_friction">@drawable/wifi_friction</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
@@ -120,7 +122,7 @@
          layouts against a remote context using our local theme colors. Due to the implementation
          details of Theme, we can't reference any local resources and MUST instead use the values
          directly. So use #ff263238 instead of @color/theme_primary and so on. -->
-    <style name="Theme.SettingsBase" parent="@*android:style/Theme.DeviceDefault.Settings.LightActionBar" />
+    <style name="Theme.SettingsBase" parent="@android:style/Theme.DeviceDefault.Settings" />
 
     <style name="Theme.Settings" parent="Theme.SettingsBase">
         <item name="preferenceTheme">@style/PreferenceTheme</item>
@@ -136,12 +138,12 @@
         <item name="ic_wps">@drawable/ic_wps_light</item>
         <item name="wifi_signal">@drawable/wifi_signal</item>
         <item name="wifi_signal_color">?android:attr/colorAccent</item>
+        <item name="wifi_friction">@drawable/wifi_friction</item>
         <item name="side_margin">@dimen/settings_side_margin</item>
         <item name="suwListItemIconColor">?android:attr/colorAccent</item>
 
         <!-- Redefine the ActionBar style for contentInsetStart -->
         <item name="android:actionBarStyle">@style/Theme.ActionBar</item>
-        <item name="*android:actionBarSize">@dimen/actionbar_size</item>
 
         <item name="switchBarTheme">@style/ThemeOverlay.SwitchBar.Settings</item>
 
@@ -154,8 +156,6 @@
         <item name="*android:regularColor">@color/lock_pattern_view_regular_color</item>
         <item name="*android:successColor">@color/lock_pattern_view_success_color</item>
         <item name="*android:errorColor">@color/lock_pattern_view_error_color</item>
-
-        <item name="android:statusBarColor">@color/status_bar_color</item>
     </style>
 
     <style name="Theme.SubSettings" parent="Theme.Settings">
@@ -175,7 +175,7 @@
         <item name="android:backgroundDimEnabled">false</item>
     </style>
 
-    <style name="Theme.ActionBar" parent="@android:style/Widget.DeviceDefault.Light.ActionBar">
+    <style name="Theme.ActionBar" parent="@android:style/Widget.Material.ActionBar.Solid">
         <item name="android:contentInsetStart">@dimen/actionbar_contentInsetStart</item>
     </style>
 
@@ -183,23 +183,16 @@
         <item name="android:contentInsetStart">@dimen/actionbar_subsettings_contentInsetStart</item>
     </style>
 
-    <style name="ThemeOverlay.SwitchBar.Settings" parent="@*android:style/ThemeOverlay.DeviceDefault.ActionBar.Accent">
+    <style name="ThemeOverlay.SwitchBar.Settings" parent="@android:style/ThemeOverlay.Material.ActionBar">
         <item name="switchBarMarginStart">@dimen/switchbar_subsettings_margin_start</item>
         <item name="switchBarMarginEnd">@dimen/switchbar_subsettings_margin_end</item>
-        <item name="switchBarBackgroundColor">?android:attr/colorBackground</item>
+        <item name="switchBarBackgroundColor">?android:attr/colorSecondary</item>
     </style>
 
-    <style name="ThemeOverlay.SwitchBar.SubSettings" parent="@*android:style/ThemeOverlay.DeviceDefault.ActionBar.Accent">
+    <style name="ThemeOverlay.SwitchBar.SubSettings" parent="@android:style/ThemeOverlay.Material.ActionBar">
         <item name="switchBarMarginStart">@dimen/switchbar_subsettings_margin_start</item>
         <item name="switchBarMarginEnd">@dimen/switchbar_subsettings_margin_end</item>
-        <item name="switchBarBackgroundColor">?android:attr/colorBackground</item>
-    </style>
-
-    <style name="Theme.DialogWhenLarge" parent="@*android:style/Theme.DeviceDefault.Settings.DialogWhenLarge">
-        <!-- Redefine the ActionBar style for contentInsetStart -->
-        <item name="android:actionBarStyle">@style/Theme.ActionBar</item>
-
-        <item name="preferenceBackgroundColor">@drawable/preference_background</item>
+        <item name="switchBarBackgroundColor">?android:attr/colorSecondary</item>
     </style>
 
     <style name="Theme.CryptKeeper" parent="@android:style/Theme.Material.NoActionBar">
@@ -214,13 +207,6 @@
         <item name="*android:errorColor">@color/unlock_pattern_view_error_color</item>
     </style>
 
-    <style name="Theme.SubSettingsDialogWhenLarge" parent="Theme.DialogWhenLarge">
-        <item name="preferenceTheme">@style/PreferenceTheme</item>
-        <item name="android:actionBarWidgetTheme">@null</item>
-        <item name="android:actionBarTheme">@*android:style/ThemeOverlay.DeviceDefault.ActionBar.Accent</item>
-        <item name="preferenceBackgroundColor">@drawable/preference_background</item>
-    </style>
-
     <style name="ThemeOverlay.AlertDialog" parent="@android:style/ThemeOverlay.Material.Dialog.Alert">
         <item name="android:windowSoftInputMode">adjustResize</item>
     </style>
@@ -241,6 +227,7 @@
     </style>
 
     <style name="Theme.ConfirmDeviceCredentials" parent="Theme.SubSettings">
+        <item name="android:windowLightStatusBar">false</item>
         <item name="confirmDeviceCredentialsSideMargin">@dimen/confirm_credentials_side_margin</item>
         <item name="confirmDeviceCredentialsTopMargin">@dimen/confirm_credentials_top_margin</item>
     </style>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 8bb54c6..fb9e171 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -81,9 +81,8 @@
                 android:summary="@string/accessibility_toggle_master_mono_summary"
                 android:persistent="false"/>
 
-        <Preference
-                android:fragment="com.android.settings.accessibility.ToggleGlobalGesturePreferenceFragment"
-                android:key="enable_global_gesture_preference_screen"
+        <ListPreference
+                android:key="accessibility_shortcut_preference"
                 android:title="@string/accessibility_global_gesture_preference_title"/>
 
         <Preference
diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml
index c938f24..42b137b 100644
--- a/res/xml/accessibility_settings_for_setup_wizard.xml
+++ b/res/xml/accessibility_settings_for_setup_wizard.xml
@@ -46,6 +46,13 @@
 
     <Preference
         android:fragment=
+                "com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard"
+        android:key="select_to_speak_preference"
+        android:summary="@string/select_to_speak_summary"
+        android:persistent="true" />
+
+    <Preference
+        android:fragment=
                 "com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard"
         android:key="screen_reader_preference"
         android:summary="@string/talkback_summary"
diff --git a/res/xml/advanced_apps.xml b/res/xml/advanced_apps.xml
deleted file mode 100644
index 0f9f82b..0000000
--- a/res/xml/advanced_apps.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-    android:key="applications_settings">
-
-    <Preference
-        android:key="manage_perms"
-        android:title="@string/app_permissions"
-        settings:keywords="@string/keywords_app_permissions">
-        <intent android:action="android.intent.action.MANAGE_PERMISSIONS"/>
-    </Preference>
-
-    <PreferenceCategory
-        android:title="@string/default_apps_title">
-
-        <Preference
-            android:key="domain_urls"
-            android:title="@string/domain_urls_title"
-            android:fragment="com.android.settings.applications.ManageDomainUrls" />
-
-        <Preference
-            android:key="assist_and_voice_input"
-            android:fragment="com.android.settings.applications.ManageAssist"
-            android:title="@string/assist_and_voice_input_title" />
-
-        <com.android.settings.applications.DefaultHomePreference
-            android:key="default_home"
-            android:title="@string/home_app"
-            android:summary="@string/no_default_home"
-            settings:keywords="@string/keywords_home" />
-
-        <com.android.settings.applications.DefaultBrowserPreference
-            android:key="default_browser"
-            android:title="@string/default_browser_title"
-            android:summary="@string/default_browser_title_none" />
-
-        <com.android.settings.applications.DefaultPhonePreference
-            android:key="default_phone_app"
-            android:title="@string/default_phone_title"
-            settings:keywords="@string/keywords_default_phone_app" />
-
-        <com.android.settings.applications.DefaultEmergencyPreference
-            android:key="default_emergency_app"
-            android:title="@string/default_emergency_app"
-            settings:keywords="@string/keywords_emergency_app" />
-
-        <com.android.settings.applications.DefaultSmsPreference
-            android:key="default_sms_app"
-            android:title="@string/sms_application_title"
-            settings:keywords="@string/keywords_more_default_sms_app" />
-
-        <com.android.settings.applications.DefaultNotificationAssistantPreference
-            android:key="default_notification_asst_app"
-            android:title="@string/default_notification_assistant" />
-
-    </PreferenceCategory>
-
-    <com.android.settings.WorkOnlyCategory
-        android:key="work_defaults"
-        android:title="@string/default_for_work">
-
-        <com.android.settings.applications.DefaultBrowserPreference
-            android:key="work_default_browser"
-            android:title="@string/default_browser_title"
-            android:summary="@string/default_browser_title_none"
-            settings:forWork="true" />
-
-        <com.android.settings.applications.DefaultPhonePreference
-            android:key="work_default_phone_app"
-            android:title="@string/default_phone_title"
-            settings:keywords="@string/keywords_default_phone_app"
-            settings:forWork="true" />
-
-    </com.android.settings.WorkOnlyCategory>
-
-    <PreferenceCategory
-        android:title="@string/advanced_apps">
-
-        <Preference
-            android:key="special_access"
-            android:fragment="com.android.settings.applications.SpecialAccessSettings"
-            android:title="@string/special_access" />
-
-    </PreferenceCategory>
-</PreferenceScreen>
diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml
index a05d547..eac78e9 100644
--- a/res/xml/apn_editor.xml
+++ b/res/xml/apn_editor.xml
@@ -15,8 +15,7 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/apn_edit">
+                  android:title="@string/apn_edit">
     <EditTextPreference
         android:title="@string/apn_name"
         android:dialogTitle="@string/apn_name"
diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml
index 5da5326..27200e7 100644
--- a/res/xml/app_default_settings.xml
+++ b/res/xml/app_default_settings.xml
@@ -17,7 +17,8 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+    android:title="@string/app_default_dashboard_title">
 
     <Preference
         android:key="assist_and_voice_input"
@@ -25,41 +26,53 @@
         android:fragment="com.android.settings.applications.ManageAssist"
         android:order="-20"/>
 
-    <com.android.settings.applications.DefaultBrowserPreference
+    <com.android.settings.applications.DefaultAutoFillPreference
+        android:key="default_autofill"
+        android:title="@string/autofill_app"
+        android:summary="@string/app_list_preference_none"
+        settings:keywords="@string/autofill_keywords"
+        android:order="-19"/>
+
+    <Preference
         android:key="default_browser"
         android:title="@string/default_browser_title"
         android:summary="@string/default_browser_title_none"
-        android:order="-19"/>
+        android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker"
+        android:order="-18">
+        <extra android:name="for_work" android:value="false"/>
+    </Preference>
 
-    <com.android.settings.applications.DefaultHomePreference
+    <Preference
         android:key="default_home"
         android:title="@string/home_app"
         android:summary="@string/no_default_home"
         settings:keywords="@string/keywords_home"
-        android:order="-18"/>
-
-    <com.android.settings.applications.DefaultPhonePreference
-        android:key="default_phone_app"
-        android:title="@string/default_phone_title"
-        settings:keywords="@string/keywords_default_phone_app"
         android:order="-17"/>
 
-    <com.android.settings.applications.DefaultSmsPreference
-        android:key="default_sms_app"
-        android:title="@string/sms_application_title"
-        settings:keywords="@string/keywords_more_default_sms_app"
+    <Preference
+        android:key="default_phone_app"
+        android:title="@string/default_phone_title"
+        android:fragment="com.android.settings.applications.defaultapps.DefaultPhonePicker"
+        settings:keywords="@string/keywords_default_phone_app"
         android:order="-16"/>
 
-    <com.android.settings.applications.DefaultEmergencyPreference
+    <Preference
+        android:key="default_sms_app"
+        android:title="@string/sms_application_title"
+        android:fragment="com.android.settings.applications.defaultapps.DefaultSmsPicker"
+        settings:keywords="@string/keywords_more_default_sms_app"
+        android:order="-15"/>
+
+    <Preference
         android:key="default_emergency_app"
         android:title="@string/default_emergency_app"
         settings:keywords="@string/keywords_emergency_app"
-        android:order="-15"/>
+        android:order="-14"/>
 
-    <com.android.settings.applications.DefaultNotificationAssistantPreference
+    <Preference
         android:key="default_notification_asst_app"
         android:title="@string/default_notification_assistant"
-        android:order="-14"/>
+        android:order="-13"/>
 
     <Preference
         android:key="domain_urls"
@@ -70,17 +83,21 @@
         android:key="work_defaults"
         android:title="@string/default_for_work">
 
-        <com.android.settings.applications.DefaultBrowserPreference
+        <Preference
             android:key="work_default_browser"
             android:title="@string/default_browser_title"
             android:summary="@string/default_browser_title_none"
-            settings:forWork="true"/>
+            android:fragment="com.android.settings.applications.defaultapps.DefaultBrowserPicker">
+            <extra android:name="for_work" android:value="true"/>
+        </Preference>
 
-        <com.android.settings.applications.DefaultPhonePreference
-            android:key="work_default_phone_app"
-            android:title="@string/default_phone_title"
-            settings:keywords="@string/keywords_default_phone_app"
-            settings:forWork="true"/>
+        <Preference
+            android:key="work_default_phone_app_new"
+            android:title="new phone pref work"
+            android:fragment="com.android.settings.applications.defaultapps.DefaultPhonePicker"
+            settings:keywords="@string/keywords_default_phone_app">
+            <extra android:name="for_work" android:value="true"/>
+        </Preference>
 
     </com.android.settings.WorkOnlyCategory>
 
@@ -89,4 +106,4 @@
         android:fragment="com.android.settings.applications.SpecialAccessSettings"
         android:title="@string/special_access"/>
 
-</PreferenceScreen>
\ No newline at end of file
+</PreferenceScreen>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 82660dc..7d51fa8 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -23,6 +23,15 @@
         android:key="block"
         android:title="@string/app_notification_block_title"
         android:summary="@string/app_notification_block_summary"
+        android:order="1"
+        settings:useAdditionalSummary="true"
+        settings:restrictedSwitchSummary="@string/enabled_by_admin" />
+
+    <!-- Show badge -->
+    <com.android.settingslib.RestrictedSwitchPreference
+        android:key="badge"
+        android:title="@string/notification_badge_title"
+        android:summary="@string/notification_badge_summary"
         android:order="2"
         settings:useAdditionalSummary="true"
         settings:restrictedSwitchSummary="@string/enabled_by_admin" />
diff --git a/res/xml/app_picker_prefs.xml b/res/xml/app_picker_prefs.xml
new file mode 100644
index 0000000..9a921ee
--- /dev/null
+++ b/res/xml/app_picker_prefs.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2017 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<PreferenceScreen>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml
index e1d6d55..4af9fe8 100644
--- a/res/xml/channel_notification_settings.xml
+++ b/res/xml/channel_notification_settings.xml
@@ -27,54 +27,55 @@
         settings:useAdditionalSummary="true"
         settings:restrictedSwitchSummary="@string/enabled_by_admin" />
 
+    <!-- Importance -->
+    <com.android.settings.notification.RestrictedDropDownPreference
+        android:key="importance"
+        android:title="@string/notification_importance_title"
+        android:order="2"/>
+
+    <!-- Default ringtone -->
+    <com.android.settings.notification.DefaultNotificationTonePreference
+        android:key="ringtone"
+        android:title="@string/notification_ringtone_title"
+        android:dialogTitle="@string/notification_ringtone_title"
+        android:order="3"
+        android:ringtoneType="notification" />
+
+    <!-- Vibration -->
+    <com.android.settingslib.RestrictedSwitchPreference
+        android:key="vibrate"
+        android:title="@string/notification_vibrate_title"
+        android:order="4"
+        settings:useAdditionalSummary="true" />
+
     <!-- Show badge -->
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="badge"
         android:title="@string/notification_badge_title"
         android:summary="@string/notification_badge_summary"
-        android:order="3"
+        android:order="5"
         settings:useAdditionalSummary="true"
         settings:restrictedSwitchSummary="@string/enabled_by_admin" />
 
-    <!-- Importance -->
-    <com.android.settings.notification.RestrictedDropDownPreference
-            android:key="importance"
-            android:title="@string/notification_importance_title"
-            android:order="4"/>
+    <!-- Lights -->
+    <com.android.settingslib.RestrictedSwitchPreference
+        android:key="lights"
+        android:title="@string/notification_show_lights_title"
+        android:order="6"
+        settings:useAdditionalSummary="true" />
 
     <!-- Visibility Override -->
     <com.android.settings.notification.RestrictedDropDownPreference
             android:key="visibility_override"
             android:title="@string/app_notification_visibility_override_title"
-            android:order="5" />
+            android:order="7" />
 
     <!-- Bypass DND -->
     <com.android.settingslib.RestrictedSwitchPreference
             android:key="bypass_dnd"
             android:title="@string/app_notification_override_dnd_title"
             android:summary="@string/app_notification_override_dnd_summary"
-            android:order="6"
-            settings:useAdditionalSummary="true" />
-
-    <!-- Lights -->
-    <com.android.settingslib.RestrictedSwitchPreference
-            android:key="lights"
-            android:title="@string/notification_show_lights_title"
-            android:order="7"
-            settings:useAdditionalSummary="true" />
-
-    <!-- Vibration -->
-    <com.android.settingslib.RestrictedSwitchPreference
-            android:key="vibrate"
-            android:title="@string/notification_vibrate_title"
             android:order="8"
             settings:useAdditionalSummary="true" />
 
-    <!-- Default ringtone -->
-    <com.android.settings.notification.DefaultNotificationTonePreference
-            android:key="ringtone"
-            android:title="@string/notification_ringtone_title"
-            android:dialogTitle="@string/notification_ringtone_title"
-            android:order="9"
-            android:ringtoneType="notification" />
 </PreferenceScreen>
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index abf493f..d70cc33 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -18,6 +18,13 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:title="@string/connected_devices_dashboard_title">
 
+    <com.android.settings.widget.MasterSwitchPreference
+      android:fragment="com.android.settings.bluetooth.BluetoothSettings"
+      android:key="toggle_bluetooth"
+      android:title="@string/bluetooth_settings_title"
+      android:icon="@drawable/ic_settings_bluetooth"
+      android:order="-7"/>
+
     <SwitchPreference
         android:key="toggle_nfc"
         android:title="@string/nfc_quick_toggle_title"
diff --git a/res/xml/data_usage_cellular.xml b/res/xml/data_usage_cellular.xml
index 8bfd37d..a5aa316 100644
--- a/res/xml/data_usage_cellular.xml
+++ b/res/xml/data_usage_cellular.xml
@@ -15,7 +15,8 @@
 -->
 
 <PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:title="@string/data_usage_summary_title">
 
     <com.android.settings.datausage.TemplatePreferenceCategory
         android:key="mobile_category"
diff --git a/res/xml/data_usage_wifi.xml b/res/xml/data_usage_wifi.xml
index 62ff17f..ceb5fc8 100644
--- a/res/xml/data_usage_wifi.xml
+++ b/res/xml/data_usage_wifi.xml
@@ -15,7 +15,8 @@
 -->
 
 <PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android">
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:title="@string/data_usage_summary_title">
 
     <com.android.settings.datausage.TemplatePreferenceCategory
         android:key="wifi_category"
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 3c2bab9..b8043c9 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -74,11 +74,9 @@
         android:title="@string/picture_color_mode"
         android:summary="@string/picture_color_mode_desc" />
 
-    <ListPreference
-        android:key="select_webview_provider"
+    <Preference android:key="select_webview_provider"
         android:title="@string/select_webview_provider_title"
-        android:dialogTitle="@string/select_webview_provider_dialog_title"
-        android:summary="%s" />
+        android:dialogTitle="@string/select_webview_provider_dialog_title" />
 
     <SwitchPreference
         android:key="enable_webview_multiprocess"
@@ -91,6 +89,10 @@
         android:summary="@string/color_temperature_desc" />
 
     <SwitchPreference
+        android:key="enable_hal_binderization"
+        android:title="@string/enable_hal_binderization" />
+
+    <SwitchPreference
         android:key="ota_disable_automatic_update"
         android:title="@string/ota_disable_automatic_update" />
 
diff --git a/res/xml/double_tap_power_settings.xml b/res/xml/double_tap_power_settings.xml
index 3376f3c..54854a8 100644
--- a/res/xml/double_tap_power_settings.xml
+++ b/res/xml/double_tap_power_settings.xml
@@ -16,7 +16,8 @@
   -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:app="http://schemas.android.com/apk/res-auto">
+                  xmlns:app="http://schemas.android.com/apk/res-auto"
+                  android:title="@string/double_tap_power_for_camera_title">
 
     <com.android.settings.widget.VideoPreference
         android:key="gesture_double_tap_power_video"
diff --git a/res/xml/double_tap_screen_settings.xml b/res/xml/double_tap_screen_settings.xml
index a76a487..f7fe853 100644
--- a/res/xml/double_tap_screen_settings.xml
+++ b/res/xml/double_tap_screen_settings.xml
@@ -16,7 +16,8 @@
   -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:app="http://schemas.android.com/apk/res-auto">
+                  xmlns:app="http://schemas.android.com/apk/res-auto"
+                  android:title="@string/ambient_display_title">
 
     <com.android.settings.widget.VideoPreference
         android:key="gesture_double_tap_screen_video"
diff --git a/res/xml/double_twist_gesture_settings.xml b/res/xml/double_twist_gesture_settings.xml
index e8d0abe..f77d778 100644
--- a/res/xml/double_twist_gesture_settings.xml
+++ b/res/xml/double_twist_gesture_settings.xml
@@ -16,7 +16,8 @@
   -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:app="http://schemas.android.com/apk/res-auto">
+                  xmlns:app="http://schemas.android.com/apk/res-auto"
+                  android:title="@string/double_twist_for_camera_mode_title">
 
     <com.android.settings.widget.VideoPreference
         android:key="gesture_double_twist_video"
diff --git a/res/xml/enterprise_privacy_settings.xml b/res/xml/enterprise_privacy_settings.xml
index 9fed938..cc63d5f 100644
--- a/res/xml/enterprise_privacy_settings.xml
+++ b/res/xml/enterprise_privacy_settings.xml
@@ -60,6 +60,26 @@
 
     <PreferenceCategory android:title="@string/enterprise_privacy_exposure_changes_category">
         <com.android.settings.DividerPreference
+                android:key="number_enterprise_installed_packages"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
+                android:key="enterprise_privacy_number_location_access_packages"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
+                android:key="enterprise_privacy_number_microphone_access_packages"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
+                android:key="enterprise_privacy_number_camera_access_packages"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
+                android:key="number_enterprise_set_default_apps"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
                 android:key="always_on_vpn_primary_user"
                 settings:allowDividerBelow="true"
                 settings:multiLine="true"/>
@@ -73,12 +93,18 @@
                 android:title="@string/enterprise_privacy_global_http_proxy"
                 settings:allowDividerBelow="true"
                 settings:multiLine="true"/>
-        <com.android.settings.DividerPreference
-                android:key="number_enterprise_installed_packages"
-                settings:allowDividerBelow="true"
-                settings:multiLine="true"/>
     </PreferenceCategory>
 
     <PreferenceCategory android:title="@string/enterprise_privacy_device_access_category">
+        <com.android.settings.DividerPreference
+                android:key="lock_device"
+                android:title="@string/enterprise_privacy_lock_device"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
+        <com.android.settings.DividerPreference
+                android:key="wipe_device"
+                android:title="@string/enterprise_privacy_wipe_device"
+                settings:allowDividerBelow="true"
+                settings:multiLine="true"/>
     </PreferenceCategory>
 </PreferenceScreen>
diff --git a/res/xml/external_sources_details.xml b/res/xml/external_sources_details.xml
new file mode 100644
index 0000000..fb443f4
--- /dev/null
+++ b/res/xml/external_sources_details.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <SwitchPreference
+        android:key="external_sources_settings_switch" />
+
+    <Preference
+        android:key="external_sources_settings_description"
+        android:selectable="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/ia_display_settings.xml b/res/xml/ia_display_settings.xml
index 946466b..ed026f1 100644
--- a/res/xml/ia_display_settings.xml
+++ b/res/xml/ia_display_settings.xml
@@ -105,6 +105,11 @@
                 android:title="@string/tap_to_wake"
                 android:summary="@string/tap_to_wake_summary" />
 
+        <ListPreference
+                android:key="theme"
+                android:title="@string/device_theme"
+                android:summary="%s" />
+
         <Preference
                 android:key="wifi_display"
                 android:title="@string/wifi_display_settings_title"
diff --git a/res/xml/ia_sound_settings.xml b/res/xml/ia_sound_settings.xml
new file mode 100644
index 0000000..e63db0d
--- /dev/null
+++ b/res/xml/ia_sound_settings.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+                  xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+          android:title="@string/sound_settings"
+          android:key="sound_settings"
+          settings:keywords="@string/keywords_sounds">
+
+        <!-- Media volume -->
+        <com.android.settings.notification.VolumeSeekBarPreference
+                android:key="media_volume"
+                android:icon="@*android:drawable/ic_audio_media"
+                android:title="@string/media_volume_option_title" />
+
+        <!-- Alarm volume -->
+        <com.android.settings.notification.VolumeSeekBarPreference
+                android:key="alarm_volume"
+                android:icon="@*android:drawable/ic_audio_alarm"
+                android:title="@string/alarm_volume_option_title" />
+
+        <!-- Ring volume -->
+        <com.android.settings.notification.VolumeSeekBarPreference
+                android:key="ring_volume"
+                android:icon="@*android:drawable/ic_audio_ring_notif"
+                android:title="@string/ring_volume_option_title" />
+
+        <!-- Notification volume -->
+        <com.android.settings.notification.VolumeSeekBarPreference
+                android:key="notification_volume"
+                android:icon="@*android:drawable/ic_audio_ring_notif"
+                android:title="@string/notification_volume_option_title" />
+
+        <!-- Also vibrate for calls -->
+        <SwitchPreference
+                android:key="vibrate_when_ringing"
+                android:title="@string/vibrate_when_ringing_title" />
+
+
+        <!-- Interruptions -->
+        <com.android.settingslib.RestrictedPreference
+                android:key="zen_mode"
+                android:title="@string/zen_mode_settings_title"
+                settings:useAdminDisabledSummary="true"
+                settings:keywords="@string/keywords_sounds_and_notifications_interruptions"
+                android:fragment="com.android.settings.notification.ZenModeSettings" />
+
+        <PreferenceCategory
+          android:key="ringtones_preferecence_category"
+          android:title="@string/ringtones_category_preference_title" />
+
+        <!-- Phone ringtone -->
+        <com.android.settings.DefaultRingtonePreference
+                android:key="ringtone"
+                android:title="@string/ringtone_title"
+                android:dialogTitle="@string/ringtone_title"
+                android:summary="@string/ringtone_summary"
+                android:ringtoneType="ringtone" />
+
+        <!-- Default notification ringtone -->
+        <com.android.settings.DefaultRingtonePreference
+                android:key="notification_ringtone"
+                android:title="@string/notification_ringtone_title"
+                android:dialogTitle="@string/notification_ringtone_title"
+                android:summary="@string/ringtone_summary"
+                android:ringtoneType="notification" />
+
+        <!-- Default alarm ringtone -->
+        <com.android.settings.DefaultRingtonePreference
+                android:key="alarm_ringtone"
+                android:title="@string/alarm_ringtone_title"
+                android:dialogTitle="@string/alarm_ringtone_title"
+                android:summary="@string/ringtone_summary"
+                android:persistent="false"
+                android:ringtoneType="alarm" />
+
+        <!-- Other sounds -->
+        <PreferenceCategory
+          android:key="other_sound_preferecence_category"
+          android:title="@string/other_sound_category_preference_title" />
+
+        <!-- Dial pad tones -->
+        <SwitchPreference
+          android:key="dial_pad_tones"
+          android:title="@string/dial_pad_tones_title" />
+
+        <!-- Screen locking sounds -->
+        <SwitchPreference
+          android:key="screen_locking_sounds"
+          android:title="@string/screen_locking_sounds_title" />
+
+        <!-- Charging sounds -->
+        <SwitchPreference
+          android:key="charging_sounds"
+          android:title="@string/charging_sounds_title" />
+
+        <!-- Docking sounds -->
+        <SwitchPreference
+          android:key="docking_sounds"
+          android:title="@string/docking_sounds_title" />
+
+        <!-- Touch sounds -->
+        <SwitchPreference
+          android:key="touch_sounds"
+          android:title="@string/touch_sounds_title" />
+
+        <!-- Vibrate on touch -->
+        <SwitchPreference
+          android:key="vibrate_on_touch"
+          android:title="@string/vibrate_on_touch_title" />
+
+        <!-- Dock speaker plays -->
+        <DropDownPreference
+          android:key="dock_audio_media"
+          android:title="@string/dock_audio_media_title"
+          android:summary="%s" />
+
+        <!-- Boot sounds -->
+        <SwitchPreference
+          android:key="boot_sounds"
+          android:title="@string/boot_sounds_title" />
+
+        <!-- Emergency tone -->
+        <DropDownPreference
+          android:key="emergency_tone"
+          android:title="@string/emergency_tone_title"
+          android:summary="%s" />
+
+        <com.android.settingslib.RestrictedPreference
+          android:key="cell_broadcast_settings"
+          android:title="@string/cell_broadcast_settings"
+          settings:useAdminDisabledSummary="true">
+                <intent
+                  android:action="android.intent.action.MAIN"
+                  android:targetPackage="com.android.cellbroadcastreceiver"
+                  android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
+        </com.android.settingslib.RestrictedPreference>
+
+</PreferenceScreen>
diff --git a/res/xml/input_and_gesture.xml b/res/xml/input_and_gesture.xml
index c30178b..9abc797 100644
--- a/res/xml/input_and_gesture.xml
+++ b/res/xml/input_and_gesture.xml
@@ -15,7 +15,9 @@
   limitations under the License.
   -->
 
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:title="@string/input_gesture_settings_title">
 
     <PreferenceCategory
         android:title="@string/keyboard_and_input_methods_category">
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index 1abf9be..ecce221 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -34,6 +34,11 @@
             android:enabled="false"
             android:selectable="true" />
 
+        <!-- This preference category gets removed if new_recent_location_ui is disabled -->
+        <Preference
+            android:key="app_level_permissions"
+            android:title="@string/location_app_level_permissions" />
+
         <com.android.settings.DividedCategory
             android:key="recent_location_requests"
             android:title="@string/location_category_recent_location_requests" />
diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml
index dc2efd8..7c41498 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -19,12 +19,23 @@
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
     android:title="@string/network_dashboard_title">
 
+    <com.android.settings.widget.MasterSwitchPreference
+        android:fragment="com.android.settings.wifi.WifiSettings"
+        android:key="toggle_wifi"
+        android:title="@string/wifi_settings"
+        android:icon="@drawable/ic_settings_wireless"
+        android:order="-30">
+        <intent
+          android:action="android.settings.WIFI_SETTINGS"
+          android:targetClass="Settings$WifiSettingsActivity" />
+    </com.android.settings.widget.MasterSwitchPreference>
+
     <SwitchPreference
         android:key="toggle_airplane"
         android:title="@string/airplane_mode"
         android:icon="@drawable/ic_airplanemode_active"
         android:disableDependentsState="true"
-        android:order="-30"/>
+        android:order="5"/>
 
     <com.android.settingslib.RestrictedPreference
         android:key="mobile_network_settings"
diff --git a/res/xml/pick_up_gesture_settings.xml b/res/xml/pick_up_gesture_settings.xml
index 6b67e64..78122aa 100644
--- a/res/xml/pick_up_gesture_settings.xml
+++ b/res/xml/pick_up_gesture_settings.xml
@@ -17,7 +17,8 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:title="@string/ambient_display_pickup_title">
 
     <com.android.settings.widget.VideoPreference
         android:key="gesture_pick_up_video"
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 1ae0a44..b4ac7e2 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -14,20 +14,43 @@
      limitations under the License.
 -->
 
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/power_usage_summary_title"
-        settings:keywords="@string/keywords_battery">
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+    android:title="@string/power_usage_summary_title"
+    settings:keywords="@string/keywords_battery">
 
-        <com.android.settings.fuelgauge.BatterySaverPreference
+    <com.android.settings.fuelgauge.BatteryHistoryPreference
+        android:key="battery_history"/>
+
+    <PreferenceCategory
+        android:key="power_management"
+        android:title="@string/battery_power_management">
+
+        <com.android.settings.widget.MasterSwitchPreference
+            android:key="battery_saver"
             android:title="@string/battery_saver"
-            android:fragment="com.android.settings.fuelgauge.BatterySaverSettings" />
+            android:fragment="com.android.settings.fuelgauge.BatterySaverSettings"/>
 
-        <com.android.settings.fuelgauge.BatteryHistoryPreference
-            android:key="battery_history" />
+        <!-- Cross-listed item, if you change this, also change it in ia_display_settings.xml -->
+        <SwitchPreference
+            android:key="auto_brightness"
+            android:title="@string/auto_brightness_title"
+            android:summary="@string/auto_brightness_summary"
+            settings:keywords="@string/keywords_display_auto_brightness"/>
 
-        <PreferenceCategory
-            android:key="app_list"
-            android:title="@string/power_usage_list_summary" />
+        <!-- Cross-listed item, if you change this, also change it in ia_display_settings.xml -->
+        <com.android.settings.TimeoutListPreference
+            android:key="screen_timeout"
+            android:title="@string/screen_timeout"
+            android:summary="@string/screen_timeout_summary"
+            android:entries="@array/screen_timeout_entries"
+            android:entryValues="@array/screen_timeout_values"/>
+
+    </PreferenceCategory>
+
+    <PreferenceCategory
+        android:key="app_list"
+        android:title="@string/power_usage_list_summary"/>
 
 </PreferenceScreen>
diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml
index eeef64c..715f33b 100644
--- a/res/xml/privacy_settings.xml
+++ b/res/xml/privacy_settings.xml
@@ -50,13 +50,4 @@
         android:enabled="false"
         android:selectable="false" />
 
-    <!-- Factory reset -->
-    <com.android.settingslib.RestrictedPreference
-        android:key="factory_reset"
-        android:title="@string/master_clear_title"
-        settings:keywords="@string/keywords_factory_data_reset"
-        settings:userRestriction="no_factory_reset"
-        settings:useAdminDisabledSummary="true"
-        android:fragment="com.android.settings.MasterClear" />
-
 </PreferenceScreen>
diff --git a/res/xml/security_settings_status.xml b/res/xml/security_settings_status.xml
new file mode 100644
index 0000000..06930f9
--- /dev/null
+++ b/res/xml/security_settings_status.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+                  android:title="@string/security_settings_title">
+
+    <PreferenceCategory
+        android:key="security_status"
+        android:title="@string/security_status_title"/>
+
+</PreferenceScreen>
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index 4de167a..8bf5c56 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.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">
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+        android:title="@string/special_access">
 
     <Preference
         android:key="high_power_apps"
@@ -74,6 +75,11 @@
         android:fragment="com.android.settings.notification.NotificationAccessSettings" />
 
     <Preference
+        android:key="picture_in_picture"
+        android:title="@string/picture_in_picture_title"
+        android:fragment="com.android.settings.applications.PictureInPictureSettings"
+        settings:keywords="@string/picture_in_picture_keywords" />
+    <Preference
         android:key="premium_sms"
         android:title="@string/premium_sms_access"
         android:fragment="com.android.settings.applications.PremiumSmsAccess" />
@@ -92,4 +98,15 @@
             android:name="classname"
             android:value="com.android.settings.Settings$UsageAccessSettingsActivity" />
     </Preference>
+
+    <Preference
+        android:key="manage_external_sources"
+        android:title="@string/install_other_apps"
+        android:fragment="com.android.settings.applications.ManageApplications"
+        settings:keywords="@string/keywords_install_other_apps">
+        <extra
+            android:name="classname"
+            android:value="com.android.settings.Settings$ManageExternalSourcesActivity" />
+    </Preference>
+
 </PreferenceScreen>
diff --git a/res/xml/swipe_to_notification_settings.xml b/res/xml/swipe_to_notification_settings.xml
index a4dedfb..b26af38 100644
--- a/res/xml/swipe_to_notification_settings.xml
+++ b/res/xml/swipe_to_notification_settings.xml
@@ -16,7 +16,8 @@
   -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:app="http://schemas.android.com/apk/res-auto">
+                  xmlns:app="http://schemas.android.com/apk/res-auto"
+                  android:title="@string/fingerprint_swipe_for_notifications_title">
 
     <com.android.settings.widget.VideoPreference
         android:key="gesture_swipe_down_fingerprint_video"
diff --git a/res/xml/system_dashboard_fragment.xml b/res/xml/system_dashboard_fragment.xml
index 3ad1c61..14579c5 100644
--- a/res/xml/system_dashboard_fragment.xml
+++ b/res/xml/system_dashboard_fragment.xml
@@ -16,6 +16,7 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
     android:title="@string/header_category_system">
 
     <!-- System updates -->
@@ -37,4 +38,14 @@
                 android:targetClass="@string/additional_system_update_menu"/>
     </Preference>
 
+    <!-- Factory reset -->
+    <com.android.settingslib.RestrictedPreference
+        android:key="factory_reset"
+        android:title="@string/device_reset_title"
+        android:icon="@drawable/ic_restore"
+        android:order="-20"
+        settings:keywords="@string/keywords_factory_data_reset"
+        settings:userRestriction="no_factory_reset"
+        settings:useAdminDisabledSummary="true"
+        android:fragment="com.android.settings.MasterClear" />
 </PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/tts_engine_picker.xml b/res/xml/tts_engine_picker.xml
new file mode 100644
index 0000000..61e3e7e
--- /dev/null
+++ b/res/xml/tts_engine_picker.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/tts_settings_title">
+
+    <PreferenceCategory android:key="tts_engine_preference_category"
+        android:title="@string/tts_engine_preference_title"/>
+
+</PreferenceScreen>
diff --git a/res/xml/tts_engine_settings.xml b/res/xml/tts_engine_settings.xml
deleted file mode 100644
index d00c102..0000000
--- a/res/xml/tts_engine_settings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="">
-    <ListPreference
-        android:key="tts_default_lang"
-        android:title="@string/tts_default_lang_title"
-        android:summary="@string/tts_default_lang_summary"
-        android:order="100" />
-
-    <Preference
-        android:key="tts_engine_settings"
-        android:persistent="false"
-        android:title="@string/tts_engine_settings_title"
-        android:order="200" />
-
-    <Preference
-        android:key="tts_install_data"
-        android:persistent="false"
-        android:title="@string/tts_install_data_title"
-        android:summary="@string/tts_install_data_summary"
-        android:order="300" />
-</PreferenceScreen>
diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml
index 31d2b17..b02a749 100644
--- a/res/xml/tts_settings.xml
+++ b/res/xml/tts_settings.xml
@@ -17,38 +17,40 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
         android:title="@string/tts_settings_title">
 
-    <!-- The contents of this category are filled in by the Java code
-         based on the list of available engines. -->
-    <PreferenceCategory android:key="tts_engine_preference_section"
-        android:title="@string/tts_engine_preference_section_title" />
+    <PreferenceCategory android:key="tts_engine_section"
+         android:title="@string/tts_engine_section_title">
+
+    <com.android.settingslib.RestrictedPreference android:key="tts_engine_preference"
+        android:title="@string/tts_engine_preference_title"
+        android:fragment="com.android.settings.tts.TtsEnginePreferenceFragment"/>
+
+    <Preference
+        android:key="tts_engine_settings"
+        android:persistent="false"
+        android:title="@string/tts_engine_settings_title"
+        android:order="200" />
+
+    <Preference
+        android:key="tts_install_data"
+        android:persistent="false"
+        android:title="@string/tts_install_voice_title"
+        android:order="300" />
+
+    </PreferenceCategory>
 
     <PreferenceCategory android:key="tts_general_section"
          android:title="@string/tts_general_section_title">
-        <!-- The max value for seek bars here should be kept in sync
-             with the max value specified in TextToSpeechSettings class. -->
-        <com.android.settings.SeekBarPreference
-            android:key="tts_default_rate"
-            android:title="@string/tts_default_rate_title"
-            android:summary="@string/tts_default_rate_summary"
-            android:defaultValue="50"
-            android:max="600"/>
 
-        <com.android.settings.SeekBarPreference
-            android:key="tts_default_pitch"
-            android:title="@string/tts_default_pitch_title"
-            android:summary="@string/tts_default_pitch_summary"
-            android:defaultValue="100"
-            android:max="400"/>
+    <com.android.settingslib.RestrictedPreference
+        android:key="tts_sliders"
+        android:title="@string/tts_sliders_title"
+        android:fragment="com.android.settings.tts.TtsSlidersFragment"/>
 
-        <Preference android:key="reset_speech_rate"
-            android:persistent="false"
-            android:title="@string/tts_reset_speech_rate_title"
-            android:summary="@string/tts_reset_speech_rate_summary" />
-
-        <Preference android:key="reset_speech_pitch"
-            android:persistent="false"
-            android:title="@string/tts_reset_speech_pitch_title"
-            android:summary="@string/tts_reset_speech_pitch_summary" />
+        <ListPreference
+            android:key="tts_default_lang"
+            android:title="@string/tts_default_lang_title"
+            android:summary="@string/tts_default_lang_summary"
+            android:persistent="false" />
 
         <Preference android:key="tts_play_example"
             android:persistent="false"
diff --git a/res/xml/tts_sliders.xml b/res/xml/tts_sliders.xml
new file mode 100644
index 0000000..3c767b0
--- /dev/null
+++ b/res/xml/tts_sliders.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/tts_settings_title">
+
+        <!-- The max value for seek bars here should be kept in sync
+             with the max value specified in TextToSpeechSettings class. -->
+        <com.android.settings.SeekBarPreference
+            android:key="tts_default_rate"
+            android:title="@string/tts_default_rate_title"
+            android:summary="@string/tts_default_rate_summary"
+            android:defaultValue="50"
+            android:max="600"/>
+
+        <com.android.settings.SeekBarPreference
+            android:key="tts_default_pitch"
+            android:title="@string/tts_default_pitch_title"
+            android:summary="@string/tts_default_pitch_summary"
+            android:defaultValue="100"
+            android:max="400"/>
+
+        <Preference android:key="reset_speech_rate"
+            android:persistent="false"
+            android:title="@string/tts_reset_speech_rate_title"
+            android:summary="@string/tts_reset_speech_rate_summary" />
+
+        <Preference android:key="reset_speech_pitch"
+            android:persistent="false"
+            android:title="@string/tts_reset_speech_pitch_title"
+            android:summary="@string/tts_reset_speech_pitch_summary" />
+
+</PreferenceScreen>
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index a43ea87..1e04749 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -17,11 +17,6 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
         android:title="@string/wifi_configure_titlebar">
 
-    <Preference
-        android:key="saved_networks"
-        android:title="@string/wifi_saved_access_points_label"
-        android:fragment="com.android.settings.wifi.SavedAccessPointsWifiSettings" />
-
     <!-- android:dependency="enable_wifi" -->
     <ListPreference
         android:key="sleep_policy"
diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml
index b4ab126..15743ea 100644
--- a/res/xml/wifi_settings.xml
+++ b/res/xml/wifi_settings.xml
@@ -14,14 +14,23 @@
      limitations under the License.
 -->
 
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+<PreferenceScreen
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
         android:title="@string/wifi_settings"
         settings:keywords="@string/keywords_wifi">
 
-    <!-- Needed so PreferenceGroupAdapter allows AccessPointPreference to be
-         recycled. Removed in onResume -->
-    <com.android.settings.wifi.LongPressAccessPointPreference
-        android:key="dummy" />
+    <PreferenceCategory android:key="access_points"/>
 
+    <PreferenceCategory android:key="additional_settings">
+        <Preference
+                android:key="configure_settings"
+                android:title="@string/wifi_configure_settings_preference_title"
+                android:fragment="com.android.settings.wifi.ConfigureWifiSettings" />
+
+        <Preference
+                android:key="saved_networks"
+                android:title="@string/wifi_saved_access_points_label"
+                android:fragment="com.android.settings.wifi.SavedAccessPointsWifiSettings" />
+    </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/com/android/settings/AppListPreference.java b/src/com/android/settings/AppListPreference.java
index 1fe0c13..8585454 100644
--- a/src/com/android/settings/AppListPreference.java
+++ b/src/com/android/settings/AppListPreference.java
@@ -49,7 +49,11 @@
  * Extends ListPreference to allow us to show the icons for a given list of applications. We do this
  * because the names of applications are very similar and the user may not be able to determine what
  * app they are selecting without an icon.
+ *
+ * @deprecated Selecting app from a list should be done in full UI. Use DefaultAppPickerFragment
+ * instead.
  */
+@Deprecated
 public class AppListPreference extends CustomListPreference {
 
     public static final String ITEM_NONE_VALUE = "";
@@ -57,6 +61,8 @@
     protected final boolean mForWork;
     protected final int mUserId;
 
+
+    private boolean mSavesState = true;
     private Drawable[] mEntryDrawables;
     private boolean mShowItemNone = false;
     private CharSequence[] mSummaries;
@@ -126,6 +132,10 @@
                 : UserHandle.myUserId();
     }
 
+    public void setSavesState(boolean savesState) {
+        mSavesState = savesState;
+    }
+
     public void setShowItemNone(boolean showItemNone) {
         mShowItemNone = showItemNone;
     }
@@ -257,12 +267,16 @@
     @Override
     protected Parcelable onSaveInstanceState() {
         Parcelable superState = super.onSaveInstanceState();
-        return new SavedState(getEntryValues(), getValue(), mSummaries, mShowItemNone, superState);
+        if (mSavesState) {
+            return new SavedState(getEntryValues(), getValue(), mSummaries, mShowItemNone, superState);
+        } else {
+            return superState;
+        }
     }
 
     @Override
     protected void onRestoreInstanceState(Parcelable state) {
-        if (state instanceof SavedState) {
+        if (mSavesState || state instanceof SavedState) {
             SavedState savedState = (SavedState) state;
             mShowItemNone = savedState.showItemNone;
             setPackageNames(savedState.entryValues, savedState.value);
diff --git a/src/com/android/settings/AppListSwitchPreference.java b/src/com/android/settings/AppListSwitchPreference.java
deleted file mode 100644
index 007f243..0000000
--- a/src/com/android/settings/AppListSwitchPreference.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.android.settings;
-
-import android.content.Context;
-import android.support.v7.preference.PreferenceViewHolder;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.Checkable;
-
-/**
- * A hybrid of AppListPreference and SwitchPreference, representing a preference which can be on or
- * off but must have a selected value when turned on.
- *
- * It is invalid to show this preference when zero valid apps are present.
- */
-public class AppListSwitchPreference extends AppListPreference {
-    private static final String TAG = "AppListSwitchPref";
-
-    private Checkable mSwitch;
-
-    public AppListSwitchPreference(Context context, AttributeSet attrs) {
-        super(context, attrs, 0, R.style.AppListSwitchPreference);
-    }
-
-    @Override
-    public void onBindViewHolder(PreferenceViewHolder view) {
-        super.onBindViewHolder(view);
-        mSwitch = (Checkable) view.findViewById(com.android.internal.R.id.switch_widget);
-        mSwitch.setChecked(getValue() != null);
-    }
-
-    @Override
-    protected void onClick() {
-        if (getValue() != null) {
-            // Turning off the current value.
-            if (callChangeListener(null)) {
-                setValue(null);
-            }
-        } else if (getEntryValues() == null || getEntryValues().length == 0) {
-            Log.e(TAG, "Attempting to show dialog with zero entries: " + getKey());
-        } else if (getEntryValues().length == 1) {
-            // Suppress the dialog and just toggle the preference with the only choice.
-            String value = getEntryValues()[0].toString();
-            if (callChangeListener(value)) {
-                setValue(value);
-            }
-        } else {
-            super.onClick();
-        }
-    }
-
-    @Override
-    public void setValue(String value) {
-        super.setValue(value);
-        if (mSwitch != null) {
-            mSwitch.setChecked(value != null);
-        }
-    }
-}
diff --git a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
index 5aa66bb..cabc805 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
@@ -90,9 +90,6 @@
         final UserManager userManager = UserManager.get(getActivity());
         mEffectiveUserId = userManager.getCredentialOwnerProfile(mUserId);
         mLockPatternUtils = new LockPatternUtils(getActivity());
-        mIsStrongAuthRequired = isFingerprintDisallowedByStrongAuth();
-        mAllowFpAuthentication = mAllowFpAuthentication && !isFingerprintDisabledByAdmin()
-                && !mReturnCredentials && !mIsStrongAuthRequired;
     }
 
     @Override
@@ -141,6 +138,10 @@
     @Override
     public void onResume() {
         super.onResume();
+        mIsStrongAuthRequired = isFingerprintDisallowedByStrongAuth();
+        mAllowFpAuthentication = getActivity().getIntent().getBooleanExtra(
+                        ALLOW_FP_AUTHENTICATION, false)
+                && !isFingerprintDisabledByAdmin() && !mReturnCredentials && !mIsStrongAuthRequired;
         refreshLockScreen();
     }
 
diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java
index 7cd6748..726bf0a 100644
--- a/src/com/android/settings/CreateShortcut.java
+++ b/src/com/android/settings/CreateShortcut.java
@@ -17,15 +17,21 @@
 package com.android.settings;
 
 import android.app.LauncherActivity;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutManager;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
+import android.graphics.drawable.Icon;
 import android.net.ConnectivityManager;
+import android.os.AsyncTask;
+import android.support.annotation.VisibleForTesting;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -35,34 +41,52 @@
 
 import com.android.settings.Settings.TetherSettingsActivity;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class CreateShortcut extends LauncherActivity {
 
+    @VisibleForTesting
+    static final String SHORTCUT_ID_PREFIX = "component-shortcut-";
+
     @Override
     protected Intent getTargetIntent() {
-        Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
-        targetIntent.addCategory("com.android.settings.SHORTCUT");
-        targetIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        return targetIntent;
+        return getBaseIntent().addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     }
 
     @Override
     protected void onListItemClick(ListView l, View v, int position, long id) {
-        Intent shortcutIntent = intentForPosition(position);
+        ListItem item = itemForPosition(position);
+        setResult(RESULT_OK, createResultIntent(intentForPosition(position),
+                item.resolveInfo, item.label));
+        finish();
+    }
+
+    protected Intent createResultIntent(Intent shortcutIntent, ResolveInfo resolveInfo,
+            CharSequence label) {
         shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-        Intent intent = new Intent();
+
+        ActivityInfo activityInfo = resolveInfo.activityInfo;
+        Bitmap icon = activityInfo.icon != 0 ? createIcon(activityInfo.icon) : null;
+
+        String shortcutId = SHORTCUT_ID_PREFIX +
+                shortcutIntent.getComponent().flattenToShortString();
+        ShortcutInfo info = new ShortcutInfo.Builder(this, shortcutId)
+                .setShortLabel(label)
+                .setIntent(shortcutIntent)
+                .setIcon(icon != null ? Icon.createWithBitmap(icon) :
+                        Icon.createWithResource(this, R.mipmap.ic_launcher_settings))
+                .build();
+        Intent intent = getSystemService(ShortcutManager.class).createShortcutResultIntent(info);
+        if (intent == null) {
+            intent = new Intent();
+        }
         intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                 Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher_settings));
         intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
-        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, itemForPosition(position).label);
-        ResolveInfo resolveInfo = itemForPosition(position).resolveInfo;
-        ActivityInfo activityInfo = resolveInfo.activityInfo;
-        if (activityInfo.icon != 0) {
-            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createIcon(activityInfo.icon));
-        }
-        setResult(RESULT_OK, intent);
-        finish();
+        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, label);
+        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+        return intent;
     }
 
     private Bitmap createIcon(int resource) {
@@ -110,4 +134,43 @@
         }
         return activities;
     }
+
+    @VisibleForTesting
+    static Intent getBaseIntent() {
+        return new Intent(Intent.ACTION_MAIN).addCategory("com.android.settings.SHORTCUT");
+    }
+
+    public static class ShortcutsUpdateTask extends AsyncTask<Void, Void, Void> {
+
+        private final Context mContext;
+
+        public ShortcutsUpdateTask(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public Void doInBackground(Void... params) {
+            ShortcutManager sm = mContext.getSystemService(ShortcutManager.class);
+            PackageManager pm = mContext.getPackageManager();
+
+            List<ShortcutInfo> updates = new ArrayList<>();
+            for (ShortcutInfo info : sm.getPinnedShortcuts()) {
+                if (!info.getId().startsWith(SHORTCUT_ID_PREFIX)) {
+                    continue;
+                }
+                ComponentName cn = ComponentName.unflattenFromString(
+                        info.getId().substring(SHORTCUT_ID_PREFIX.length()));
+                ResolveInfo ri = pm.resolveActivity(getBaseIntent().setComponent(cn), 0);
+                if (ri == null) {
+                    continue;
+                }
+                updates.add(new ShortcutInfo.Builder(mContext, info.getId())
+                    .setShortLabel(ri.loadLabel(pm)).build());
+            }
+            if (!updates.isEmpty()) {
+                sm.updateShortcuts(updates);
+            }
+            return null;
+        }
+    }
 }
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index f228f3e..20de9a2 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -47,6 +47,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.org.bouncycastle.asn1.ASN1InputStream;
 import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+import com.android.settings.vpn2.VpnUtils;
 
 import sun.security.util.ObjectIdentifier;
 import sun.security.x509.AlgorithmId;
@@ -361,6 +362,7 @@
             if (success) {
                 Toast.makeText(CredentialStorage.this,
                                R.string.credentials_erased, Toast.LENGTH_SHORT).show();
+                clearLegacyVpnIfEstablished();
             } else {
                 Toast.makeText(CredentialStorage.this,
                                R.string.credentials_not_erased, Toast.LENGTH_SHORT).show();
@@ -369,6 +371,14 @@
         }
     }
 
+    private void clearLegacyVpnIfEstablished() {
+        boolean isDone = VpnUtils.disconnectLegacyVpn(getApplicationContext());
+        if (isDone) {
+            Toast.makeText(CredentialStorage.this, R.string.vpn_disconnected,
+                    Toast.LENGTH_SHORT).show();
+        }
+    }
+
     /**
      * Prompt for key guard configuration confirmation.
      */
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index fc47fef..326f200 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -56,11 +56,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 49eb1b0..2c50c5f 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -78,7 +78,7 @@
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
 import android.webkit.IWebViewUpdateService;
-import android.webkit.WebViewProviderInfo;
+import android.webkit.WebViewFactory;
 import android.widget.Switch;
 import android.widget.Toast;
 
@@ -92,6 +92,7 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
+import com.android.settings.webview.WebViewAppPreferenceController;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -126,7 +127,6 @@
     private static final String ENABLE_TERMINAL = "enable_terminal";
     private static final String KEEP_SCREEN_ON = "keep_screen_on";
     private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
-    private static final String WEBVIEW_PROVIDER_KEY = "select_webview_provider";
     private static final String WEBVIEW_MULTIPROCESS_KEY = "enable_webview_multiprocess";
     private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
     private static final String HDCP_CHECKING_KEY = "hdcp_checking";
@@ -227,9 +227,12 @@
     private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
 
     private static final String OTA_DISABLE_AUTOMATIC_UPDATE_KEY = "ota_disable_automatic_update";
+    private static final String ENABLE_HAL_BINDERIZATION_KEY = "enable_hal_binderization";
+    private static final String ENABLE_HAL_BINDERIZATION_PROPERTY = "persist.hal.binderization";
 
     private static final int RESULT_DEBUG_APP = 1000;
     private static final int RESULT_MOCK_LOCATION_APP = 1001;
+    private static final int RESULT_WEBVIEW_APP = 1002;
 
     private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
     private static final String FLASH_LOCKED_PROP = "ro.boot.flash.locked";
@@ -287,6 +290,7 @@
     private ListPreference mBluetoothSelectA2dpLdacPlaybackQuality;
 
     private SwitchPreference mOtaDisableAutomaticUpdate;
+    private SwitchPreference mEnableHalBinderization;
     private SwitchPreference mWifiAllowScansWithTraffic;
     private SwitchPreference mStrictMode;
     private SwitchPreference mPointerLocation;
@@ -310,8 +314,8 @@
     private ListPreference mAnimatorDurationScale;
     private ListPreference mOverlayDisplayDevices;
 
+    private WebViewAppPreferenceController mWebViewAppPrefController;
     private SwitchPreference mWebViewMultiprocess;
-    private ListPreference mWebViewProvider;
 
     private ListPreference mSimulateColorSpace;
 
@@ -371,8 +375,7 @@
         mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
         mBackupManager = IBackupManager.Stub.asInterface(
                 ServiceManager.getService(Context.BACKUP_SERVICE));
-        mWebViewUpdateService =
-                IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+        mWebViewUpdateService = WebViewFactory.getUpdateService();
         mOemUnlockManager = (PersistentDataBlockManager) getActivity()
                 .getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
         mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
@@ -384,6 +387,7 @@
 
         mBugReportController = new BugReportPreferenceController(getActivity());
         mBugReportInPowerController = new BugReportInPowerPreferenceController(getActivity());
+        mWebViewAppPrefController = new WebViewAppPreferenceController(getActivity());
 
         setIfOnlyAvailableForAdmins(true);
         if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
@@ -414,6 +418,7 @@
 
         mBugReportController.displayPreference(getPreferenceScreen());
         mBugReportInPowerController.displayPreference(getPreferenceScreen());
+        mWebViewAppPrefController.displayPreference(getPreferenceScreen());
 
         mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
         mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
@@ -483,7 +488,6 @@
             mLogpersist = null;
         }
         mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
-        mWebViewProvider = addListPreference(WEBVIEW_PROVIDER_KEY);
         mWebViewMultiprocess = findAndInitSwitchPref(WEBVIEW_MULTIPROCESS_KEY);
         mBluetoothDisableAbsVolume = findAndInitSwitchPref(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY);
 
@@ -538,13 +542,14 @@
 
         mOtaDisableAutomaticUpdate = findAndInitSwitchPref(OTA_DISABLE_AUTOMATIC_UPDATE_KEY);
 
+        mEnableHalBinderization = findAndInitSwitchPref(ENABLE_HAL_BINDERIZATION_KEY);
+
         mColorModePreference = (ColorModePreference) findPreference(KEY_COLOR_MODE);
         mColorModePreference.updateCurrentAndSupported();
         if (mColorModePreference.getColorModeCount() < 2) {
             removePreference(KEY_COLOR_MODE);
             mColorModePreference = null;
         }
-        updateWebViewProviderOptions();
 
         mColorTemperaturePreference = (SwitchPreference) findPreference(COLOR_TEMPERATURE_KEY);
         if (getResources().getBoolean(R.bool.config_enableColorTemperature)) {
@@ -629,6 +634,7 @@
             pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
         }
         mBugReportInPowerController.enablePreference(enabled);
+        mWebViewAppPrefController.enablePreference(enabled);
         updateAllOptions();
     }
 
@@ -781,6 +787,7 @@
         updateShowAllANRsOptions();
         updateVerifyAppsOverUsbOptions();
         updateOtaDisableAutomaticUpdateOptions();
+        updateEnableHalBinderizationOptions();
         updateBugreportOptions();
         updateForceRtlOptions();
         updateLogdSizeValues();
@@ -793,8 +800,8 @@
         updateSimulateColorSpace();
         updateUSBAudioOptions();
         updateForceResizableOptions();
+        mWebViewAppPrefController.updateState(null);
         updateWebViewMultiprocessOptions();
-        updateWebViewProviderOptions();
         updateOemUnlockOptions();
         if (mColorTemperaturePreference != null) {
             updateColorTemperature();
@@ -831,54 +838,17 @@
         pokeSystemProperties();
     }
 
-    private void updateWebViewProviderOptions() {
+    private void updateWebViewMultiprocessOptions() {
         try {
-            WebViewProviderInfo[] providers = mWebViewUpdateService.getValidWebViewPackages();
-            if (providers == null) {
-                Log.e(TAG, "No WebView providers available");
-                return;
-            }
-            ArrayList<String> options = new ArrayList<String>();
-            ArrayList<String> values = new ArrayList<String>();
-            for (int n = 0; n < providers.length; n++) {
-                if (Utils.isPackageEnabled(getActivity(), providers[n].packageName)) {
-                    options.add(providers[n].description);
-                    values.add(providers[n].packageName);
-                }
-            }
-            mWebViewProvider.setEntries(options.toArray(new String[options.size()]));
-            mWebViewProvider.setEntryValues(values.toArray(new String[values.size()]));
-
-            String value = mWebViewUpdateService.getCurrentWebViewPackageName();
-            if (value == null) {
-                value = "";
-            }
-
-            for (int i = 0; i < values.size(); i++) {
-                if (value.contentEquals(values.get(i))) {
-                    mWebViewProvider.setValueIndex(i);
-                    return;
-                }
-            }
+            updateSwitchPreference(mWebViewMultiprocess,
+                                   mWebViewUpdateService.isMultiProcessEnabled());
         } catch (RemoteException e) {
         }
     }
 
-    private void updateWebViewMultiprocessOptions() {
-        updateSwitchPreference(mWebViewMultiprocess,
-                Settings.Global.getInt(getActivity().getContentResolver(),
-                        Settings.Global.WEBVIEW_MULTIPROCESS, 0) != 0);
-    }
-
     private void writeWebViewMultiprocessOptions() {
-        boolean value = mWebViewMultiprocess.isChecked();
-        Settings.Global.putInt(getActivity().getContentResolver(),
-                Settings.Global.WEBVIEW_MULTIPROCESS, value ? 1 : 0);
-
         try {
-            String wv_package = mWebViewUpdateService.getCurrentWebViewPackageName();
-            ActivityManager.getService().killPackageDependents(
-                    wv_package, UserHandle.USER_ALL);
+            mWebViewUpdateService.enableMultiProcess(mWebViewMultiprocess.isChecked());
         } catch (RemoteException e) {
         }
     }
@@ -922,17 +892,6 @@
                 mBtHciSnoopLog.isChecked() ? 1 : 0);
     }
 
-    private boolean writeWebViewProviderOptions(Object newValue) {
-        try {
-            String updatedProvider = mWebViewUpdateService.changeProviderAndSetting(
-                    newValue == null ? "" : newValue.toString());
-            updateWebViewProviderOptions();
-            return newValue != null && newValue.equals(updatedProvider);
-        } catch (RemoteException e) {
-        }
-        return false;
-    }
-
     private void writeDebuggerOptions() {
         try {
             ActivityManager.getService().setDebugApp(
@@ -1072,6 +1031,17 @@
                 mOtaDisableAutomaticUpdate.isChecked() ? 0 : 1);
     }
 
+    private void updateEnableHalBinderizationOptions() {
+        updateSwitchPreference(mEnableHalBinderization,
+                SystemProperties.getBoolean(ENABLE_HAL_BINDERIZATION_PROPERTY, false));
+    }
+
+    private void writeEnableHalBinderizationOptions() {
+        SystemProperties.set(ENABLE_HAL_BINDERIZATION_PROPERTY,
+                             mEnableHalBinderization.isChecked() ? "true" : "false");
+        pokeSystemProperties();
+    }
+
     private boolean enableVerifierSetting() {
         final ContentResolver cr = getActivity().getContentResolver();
         if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
@@ -1783,49 +1753,50 @@
 
     private void initBluetoothConfigurationValues() {
         String[] values;
-        String[] titles;
+        String[] summaries;
         int index;
 
         // Init the Codec Type - Default
         values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_values);
-        titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_titles);
+        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
         index = 0;
         mBluetoothSelectA2dpCodec.setValue(values[index]);
-        mBluetoothSelectA2dpCodec.setSummary(titles[index]);
+        mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
 
         // Init the Sample Rate - Default
         values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_values);
-        titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_titles);
+        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
         index = 0;
         mBluetoothSelectA2dpSampleRate.setValue(values[index]);
-        mBluetoothSelectA2dpSampleRate.setSummary(titles[index]);
+        mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
 
         // Init the Bits Per Sample - Default
         values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_values);
-        titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_titles);
+        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
         index = 0;
         mBluetoothSelectA2dpBitsPerSample.setValue(values[index]);
-        mBluetoothSelectA2dpBitsPerSample.setSummary(titles[index]);
+        mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
 
         // Init the Channel Mode - Default
         values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_values);
-        titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_titles);
+        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
         index = 0;
         mBluetoothSelectA2dpChannelMode.setValue(values[index]);
-        mBluetoothSelectA2dpChannelMode.setSummary(titles[index]);
+        mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
 
         // Init the LDAC Playback Quality - High
         values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_values);
-        titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_titles);
+        summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
         index = 0;
         mBluetoothSelectA2dpLdacPlaybackQuality.setValue(values[index]);
-        mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(titles[index]);
+        mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
     }
 
     private void updateBluetoothA2dpConfigurationValues() {
         int index;
-        String[] titles;
+        String[] summaries;
         BluetoothCodecConfig codecConfig = null;
+        String streaming;
 
         synchronized (mBluetoothA2dpLock) {
             if (mBluetoothA2dp != null) {
@@ -1841,22 +1812,26 @@
         case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC:
             index = 1;
             break;
-        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
+        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC:
             index = 2;
             break;
-        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
+        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
             index = 3;
             break;
-        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
+        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
             index = 4;
             break;
+        case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
+            index = 5;
+            break;
         case BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID:
         default:
             break;
         }
         if (index >= 0) {
-            titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_titles);
-            mBluetoothSelectA2dpCodec.setSummary("Streaming: " + titles[index]);
+            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
+            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
+            mBluetoothSelectA2dpCodec.setSummary(streaming);
         }
 
         // Update the Sample Rate
@@ -1881,8 +1856,9 @@
             break;
         }
         if (index >= 0) {
-            titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_titles);
-            mBluetoothSelectA2dpSampleRate.setSummary("Streaming: " + titles[index]);
+            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
+            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
+             mBluetoothSelectA2dpSampleRate.setSummary(streaming);
         }
 
         // Update the Bits Per Sample
@@ -1902,8 +1878,9 @@
             break;
         }
         if (index >= 0) {
-            titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_titles);
-            mBluetoothSelectA2dpBitsPerSample.setSummary("Streaming: " + titles[index]);
+            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
+            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
+            mBluetoothSelectA2dpBitsPerSample.setSummary(streaming);
         }
 
         // Update the Channel Mode
@@ -1920,34 +1897,41 @@
             break;
         }
         if (index >= 0) {
-            titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_titles);
-            mBluetoothSelectA2dpChannelMode.setSummary("Streaming: " + titles[index]);
+            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
+            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
+             mBluetoothSelectA2dpChannelMode.setSummary(streaming);
         }
 
         // Update the LDAC Playback Quality
-        index = -1;
-        switch ((int)codecConfig.getCodecSpecific1()) {
-        case 1000:
-            index = 0;
-            break;
-        case 1001:
-            index = 1;
-            break;
-        case 1002:
-            index = 2;
+        // The actual values are 0, 1, 2 - those are extracted
+        // as mod-10 remainders of a larger value.
+        // The reason is because within BluetoothCodecConfig we cannot use
+        // a codec-specific value of zero.
+        index = (int)codecConfig.getCodecSpecific1();
+        if (index > 0) {
+            index %= 10;
+        } else {
+            index = -1;
+        }
+        switch (index) {
+        case 0:
+        case 1:
+        case 2:
             break;
         default:
+            index = -1;
             break;
         }
         if (index >= 0) {
-            titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_titles);
-            mBluetoothSelectA2dpLdacPlaybackQuality.setSummary("Streaming: " + titles[index]);
+            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
+            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
+            mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(streaming);
         }
     }
 
     private void writeBluetoothConfigurationOption(Preference preference,
                                                    Object newValue) {
-        String[] titles;
+        String[] summaries;
         int index;
         int codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
         int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
@@ -1965,8 +1949,8 @@
             codecType = newValue.toString();
             index = mBluetoothSelectA2dpCodec.findIndexOfValue(newValue.toString());
             if (index >= 0) {
-                titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_titles);
-                mBluetoothSelectA2dpCodec.setSummary(titles[index]);
+                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
+                mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
             }
         }
         index = mBluetoothSelectA2dpCodec.findIndexOfValue(codecType);
@@ -1981,12 +1965,15 @@
                 codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
                 break;
             case 2:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
+                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
                 break;
             case 3:
-                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
+                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
                 break;
             case 4:
+                codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
+                break;
+            case 5:
                 codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
                 break;
             default:
@@ -1998,14 +1985,18 @@
             codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
             break;
         case 2:
-            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
+            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
             codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
             break;
         case 3:
-            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
+            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
             codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
             break;
         case 4:
+            codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
+            codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
+            break;
+        case 5:
             codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
             codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
             break;
@@ -2019,8 +2010,8 @@
             sampleRate = newValue.toString();
             index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(newValue.toString());
             if (index >= 0) {
-                titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_titles);
-                mBluetoothSelectA2dpSampleRate.setSummary(titles[index]);
+                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
+                mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
             }
         }
         index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(sampleRate);
@@ -2050,8 +2041,8 @@
             bitsPerSample = newValue.toString();
             index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(newValue.toString());
             if (index >= 0) {
-                titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_titles);
-                mBluetoothSelectA2dpBitsPerSample.setSummary(titles[index]);
+                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
+                mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
             }
         }
         index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(bitsPerSample);
@@ -2078,8 +2069,8 @@
             channelMode = newValue.toString();
             index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(newValue.toString());
             if (index >= 0) {
-                titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_titles);
-                mBluetoothSelectA2dpChannelMode.setSummary(titles[index]);
+                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
+                mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
             }
         }
         index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(channelMode);
@@ -2103,20 +2094,16 @@
             ldacPlaybackQuality = newValue.toString();
             index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(newValue.toString());
             if (index >= 0) {
-                titles = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_titles);
-                mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(titles[index]);
+                summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
+                mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
             }
         }
         index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(ldacPlaybackQuality);
         switch (index) {
         case 0:
-            codecSpecific1Value = 1000;
-            break;
         case 1:
-            codecSpecific1Value = 1001;
-            break;
         case 2:
-            codecSpecific1Value = 1002;
+            codecSpecific1Value = 1000 + index;
             break;
         default:
             break;
@@ -2324,6 +2311,8 @@
                 writeMockLocation();
                 updateMockLocation();
             }
+        } else if (requestCode == RESULT_WEBVIEW_APP) {
+            mWebViewAppPrefController.onActivityResult(resultCode, data);
         } else if (requestCode == REQUEST_CODE_ENABLE_OEM_UNLOCK) {
             if (resultCode == Activity.RESULT_OK) {
                 if (mEnableOemUnlock.isChecked()) {
@@ -2346,6 +2335,10 @@
         if (mBugReportInPowerController.handlePreferenceTreeClick(preference)) {
             return true;
         }
+        if (mWebViewAppPrefController.handlePreferenceTreeClick(preference)) {
+            startActivityForResult(
+                    mWebViewAppPrefController.getActivityIntent(), RESULT_WEBVIEW_APP);
+        }
 
         if (preference == mEnableAdb) {
             if (mEnableAdb.isChecked()) {
@@ -2416,6 +2409,8 @@
             writeVerifyAppsOverUsbOptions();
         } else if (preference == mOtaDisableAutomaticUpdate) {
             writeOtaDisableAutomaticUpdateOptions();
+        } else if (preference == mEnableHalBinderization) {
+            writeEnableHalBinderizationOptions();
         } else if (preference == mStrictMode) {
             writeStrictModeVisualOptions();
         } else if (preference == mPointerLocation) {
@@ -2499,21 +2494,6 @@
             updateHdcpValues();
             pokeSystemProperties();
             return true;
-        } else if (preference == mWebViewProvider) {
-            if (newValue == null) {
-                Log.e(TAG, "Tried to set a null WebView provider");
-                return false;
-            }
-            if (writeWebViewProviderOptions(newValue)) {
-                return true;
-            } else {
-                // The user chose a package that became invalid since the list was last updated,
-                // show a Toast to explain the situation.
-                Toast toast = Toast.makeText(getActivity(),
-                        R.string.select_webview_provider_toast_text, Toast.LENGTH_SHORT);
-                toast.show();
-            }
-            return false;
         } else if ((preference == mBluetoothSelectA2dpCodec) ||
                    (preference == mBluetoothSelectA2dpSampleRate) ||
                    (preference == mBluetoothSelectA2dpBitsPerSample) ||
diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java
index 14d42c0..d6a072c 100644
--- a/src/com/android/settings/DeviceAdminAdd.java
+++ b/src/com/android/settings/DeviceAdminAdd.java
@@ -58,6 +58,9 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.users.UserDialogs;
 
 import org.xmlpull.v1.XmlPullParserException;
@@ -395,6 +398,7 @@
 
     void addAndFinish() {
         try {
+            logSpecialPermissionChange(true, mDeviceAdmin.getComponent().getPackageName());
             mDPM.setActiveAdmin(mDeviceAdmin.getComponent(), mRefreshing);
             EventLog.writeEvent(EventLogTags.EXP_DET_DEVICE_ADMIN_ACTIVATED_BY_USER,
                 mDeviceAdmin.getActivityInfo().applicationInfo.uid);
@@ -429,6 +433,7 @@
                 ActivityManager.getService().resumeAppSwitches();
             } catch (RemoteException e) {
             }
+            logSpecialPermissionChange(false, mDeviceAdmin.getComponent().getPackageName());
             mDPM.removeActiveAdmin(mDeviceAdmin.getComponent());
             finish();
         } else {
@@ -444,6 +449,12 @@
         }
     }
 
+    void logSpecialPermissionChange(boolean allow, String packageName) {
+        int logCategory = allow ? MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_ALLOW :
+                MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_DENY;
+        FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this, logCategory, packageName);
+    }
+
     @Override
     protected void onResume() {
         super.onResume();
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 91b193d..320cb83 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -35,6 +35,7 @@
 import com.android.settings.display.NightModePreferenceController;
 import com.android.settings.display.ScreenSaverPreferenceController;
 import com.android.settings.display.TapToWakePreferenceController;
+import com.android.settings.display.ThemePreferenceController;
 import com.android.settings.display.TimeoutPreferenceController;
 import com.android.settings.display.VrDisplayPreferenceController;
 import com.android.settings.display.WallpaperPreferenceController;
@@ -68,11 +69,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_DISPLAY;
-    }
-
-    @Override
     protected int getPreferenceScreenResId() {
         if (mDashboardFeatureProvider.isEnabled()) {
             return R.xml.ia_display_settings;
@@ -97,6 +93,7 @@
         controllers.add(new TimeoutPreferenceController(context));
         controllers.add(new VrDisplayPreferenceController(context));
         controllers.add(new WallpaperPreferenceController(context));
+        controllers.add(new ThemePreferenceController(context));
         return controllers;
     }
 
@@ -182,6 +179,7 @@
                     new TimeoutPreferenceController(context).updateNonIndexableKeys(result);
                     new VrDisplayPreferenceController(context).updateNonIndexableKeys(result);
                     new WallpaperPreferenceController(context).updateNonIndexableKeys(result);
+                    new ThemePreferenceController(context).updateNonIndexableKeys(result);
 
                     return result;
                 }
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b092857..436745f 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -25,6 +25,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.IContentProvider;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -38,6 +39,7 @@
 import android.provider.Settings;
 import android.security.KeyStore;
 import android.service.trust.TrustAgentService;
+import android.support.annotation.VisibleForTesting;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
@@ -49,6 +51,7 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 import android.util.Log;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -56,6 +59,7 @@
 import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.fingerprint.FingerprintSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -63,12 +67,14 @@
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settings.security.SecurityFeatureProvider;
+import com.android.settings.trustagent.TrustAgentManager;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.RestrictedSwitchPreference;
 import com.android.settingslib.drawer.CategoryKey;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.drawer.TileUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -120,6 +126,15 @@
     private static final String KEY_TRUST_AGENT = "trust_agent";
     private static final String KEY_SCREEN_PINNING = "screen_pinning_settings";
 
+    // Security status
+    private static final String KEY_SECURITY_STATUS = "security_status";
+    private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_";
+
+    // Package verifier Settings
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    static final String KEY_PACKAGE_VERIFIER_STATUS = "security_status_package_verifier";
+    private static final int PACKAGE_VERIFIER_STATE_ENABLED = 1;
+
     // These switch preferences need special handling since they're not all stored in Settings.
     private static final String SWITCH_PREFERENCE_KEYS[] = {
             KEY_SHOW_PASSWORD, KEY_TOGGLE_INSTALL_APPLICATIONS, KEY_UNIFICATION,
@@ -134,6 +149,7 @@
     private DashboardFeatureProvider mDashboardFeatureProvider;
     private DevicePolicyManager mDPM;
     private SecurityFeatureProvider mSecurityFeatureProvider;
+    private TrustAgentManager mTrustAgentManager;
     private SubscriptionManager mSubscriptionManager;
     private UserManager mUm;
 
@@ -189,6 +205,8 @@
 
         mSecurityFeatureProvider = FeatureFactory.getFactory(activity).getSecurityFeatureProvider();
 
+        mTrustAgentManager = mSecurityFeatureProvider.getTrustAgentManager();
+
         if (savedInstanceState != null
                 && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) {
             mTrustAgentClickIntent = savedInstanceState.getParcelable(TRUST_AGENT_CLICK_INTENT);
@@ -247,6 +265,9 @@
         addPreferencesFromResource(R.xml.security_settings);
         root = getPreferenceScreen();
 
+        // Add category for security status
+        addPreferencesFromResource(R.xml.security_settings_status);
+
         // Add options for lock/unlock screen
         final int resid = getResIdForLockUnlockScreen(getActivity(), mLockPatternUtils,
                 mManagedPasswordProvider, MY_USER_ID);
@@ -414,18 +435,39 @@
         Index.getInstance(getActivity())
                 .updateFromClassNameResource(SecuritySettings.class.getName(), true, true);
 
-        final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
-                getActivity(), getPrefContext(), CategoryKey.CATEGORY_SECURITY);
-        if (tilePrefs != null && !tilePrefs.isEmpty()) {
-            for (Preference preference : tilePrefs) {
-                root.addPreference(preference);
+        PreferenceGroup securityStatusPreferenceGroup =
+                (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);
+        if (mDashboardFeatureProvider.isEnabled()) {
+            final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
+                    getActivity(), getPrefContext(), CategoryKey.CATEGORY_SECURITY);
+            int numSecurityStatusPrefs = 0;
+            if (tilePrefs != null && !tilePrefs.isEmpty()) {
+                for (Preference preference : tilePrefs) {
+                    if (!TextUtils.isEmpty(preference.getKey())
+                            && preference.getKey().startsWith(SECURITY_STATUS_KEY_PREFIX)) {
+                        // Injected security status settings are placed under the Security status
+                        // category.
+                        securityStatusPreferenceGroup.addPreference(preference);
+                        numSecurityStatusPrefs++;
+                    } else {
+                        // Other injected settings are placed under the Security preference screen.
+                        root.addPreference(preference);
+                    }
+                }
             }
-        }
 
-        // Update preference data with tile data. Security feature provider only updates the data
-        // if it actually needs to be changed.
-        mSecurityFeatureProvider.updatePreferences(getActivity(), root,
-                mDashboardFeatureProvider.getTilesForCategory(CategoryKey.CATEGORY_SECURITY));
+            if (numSecurityStatusPrefs == 0) {
+                root.removePreference(securityStatusPreferenceGroup);
+            } else if (numSecurityStatusPrefs > 0) {
+                // Update preference data with tile data. Security feature provider only updates the
+                // data if it actually needs to be changed.
+                mSecurityFeatureProvider.updatePreferences(getActivity(), root,
+                        mDashboardFeatureProvider.getTilesForCategory(
+                                CategoryKey.CATEGORY_SECURITY));
+            }
+        } else {
+            root.removePreference(root.findPreference(KEY_SECURITY_STATUS));
+        }
 
         for (int i = 0; i < SWITCH_PREFERENCE_KEYS.length; i++) {
             final Preference pref = findPreference(SWITCH_PREFERENCE_KEYS[i]);
@@ -460,8 +502,8 @@
 
     private void addTrustAgentSettings(PreferenceGroup securityCategory) {
         final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID);
-        ArrayList<TrustAgentComponentInfo> agents =
-                getActiveTrustAgents(getActivity(), mLockPatternUtils, mDPM);
+        ArrayList<TrustAgentComponentInfo> agents = getActiveTrustAgents(
+            getActivity(), mTrustAgentManager, mLockPatternUtils, mDPM);
         for (int i = 0; i < agents.size(); i++) {
             final TrustAgentComponentInfo agent = agents.get(i);
             RestrictedPreference trustAgentPreference =
@@ -522,8 +564,9 @@
         return false;
     }
 
-    private static ArrayList<TrustAgentComponentInfo> getActiveTrustAgents(
-            Context context, LockPatternUtils utils, DevicePolicyManager dpm) {
+    private static ArrayList<TrustAgentComponentInfo> getActiveTrustAgents(Context context,
+        TrustAgentManager trustAgentManager, LockPatternUtils utils,
+        DevicePolicyManager dpm) {
         PackageManager pm = context.getPackageManager();
         ArrayList<TrustAgentComponentInfo> result = new ArrayList<TrustAgentComponentInfo>();
         List<ResolveInfo> resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT,
@@ -537,7 +580,9 @@
             for (int i = 0; i < resolveInfos.size(); i++) {
                 ResolveInfo resolveInfo = resolveInfos.get(i);
                 if (resolveInfo.serviceInfo == null) continue;
-                if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue;
+                if (!trustAgentManager.shouldProvideTrust(resolveInfo, pm)) {
+                    continue;
+                }
                 TrustAgentComponentInfo trustAgentComponentInfo =
                         TrustAgentUtils.getSettingsComponent(pm, resolveInfo);
                 if (trustAgentComponentInfo.componentName == null ||
@@ -977,8 +1022,11 @@
 
             // Advanced
             if (lockPatternUtils.isSecure(MY_USER_ID)) {
-                ArrayList<TrustAgentComponentInfo> agents =
-                        getActiveTrustAgents(context, lockPatternUtils,
+                final TrustAgentManager trustAgentManager =
+                    FeatureFactory.getFactory(context).getSecurityFeatureProvider()
+                        .getTrustAgentManager();
+                final List<TrustAgentComponentInfo> agents =
+                        getActiveTrustAgents(context, trustAgentManager, lockPatternUtils,
                                 context.getSystemService(DevicePolicyManager.class));
                 for (int i = 0; i < agents.size(); i++) {
                     final TrustAgentComponentInfo agent = agents.get(i);
@@ -1306,4 +1354,63 @@
         }
     }
 
+    static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (!listening) {
+                return;
+            }
+            int packageVerifierState = Settings.Secure.getInt(mContext.getContentResolver(),
+                    Settings.Secure.PACKAGE_VERIFIER_STATE, 0);
+            DashboardFeatureProvider dashboardFeatureProvider =
+                    FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext);
+            if (dashboardFeatureProvider.isEnabled()
+                    && (packageVerifierState == PACKAGE_VERIFIER_STATE_ENABLED)) {
+                DashboardCategory dashboardCategory =
+                        dashboardFeatureProvider.getTilesForCategory(CategoryKey.CATEGORY_SECURITY);
+                mSummaryLoader.setSummary(this, getPackageVerifierSummary(dashboardCategory));
+            } else {
+                mSummaryLoader.setSummary(this, null);
+            }
+        }
+
+        @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+        String getPackageVerifierSummary(DashboardCategory dashboardCategory) {
+            int tilesCount = (dashboardCategory != null) ? dashboardCategory.getTilesCount() : 0;
+            if (tilesCount == 0) {
+                return null;
+            }
+            for (int i = 0; i < tilesCount; i++) {
+                Tile tile = dashboardCategory.getTile(i);
+                if (!KEY_PACKAGE_VERIFIER_STATUS.equals(tile.key)) {
+                    continue;
+                }
+                String summaryUri = tile.metaData.getString(
+                        TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, null);
+                return TileUtils.getTextFromUri(mContext, summaryUri,
+                            new ArrayMap<String, IContentProvider>(),
+                            TileUtils.META_DATA_PREFERENCE_SUMMARY);
+            }
+            return null;
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
+            new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
 }
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 97e53e5..360d258 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -105,6 +105,7 @@
     public static class UserSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NotificationAccessSettingsActivity extends SettingsActivity { /* empty */ }
     public static class VrListenersSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class PictureInPictureSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenAccessSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ConditionProviderSettingsActivity extends SettingsActivity { /* empty */ }
     public static class UsbSettingsActivity extends SettingsActivity { /* empty */ }
@@ -123,9 +124,11 @@
     public static class ConfigureNotificationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NotificationAppListActivity extends SettingsActivity { /* empty */ }
     public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class ChannelNotificationSettingsActivity extends SettingsActivity { /* empty */ }
     public static class OtherSoundSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ManageDomainUrlsActivity extends SettingsActivity { /* empty */ }
     public static class AutomaticStorageManagerSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class GamesStorageActivity extends SettingsActivity { /* empty */ }
 
     public static class TopLevelSettings extends SettingsActivity { /* empty */ }
     public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
@@ -138,6 +141,9 @@
     public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AdvancedAppsActivity extends SettingsActivity { /* empty */ }
 
+    public static class ManageExternalSourcesActivity extends SettingsActivity {
+        /* empty */ }
+
     public static class WifiCallingSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeAutomationSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class FingerprintSuggestionActivity extends FingerprintSettings { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 0751b81..c01e4c4 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -191,10 +191,12 @@
     private final BroadcastReceiver mUserAddRemoveReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (action.equals(Intent.ACTION_USER_ADDED)
-                    || action.equals(Intent.ACTION_USER_REMOVED)) {
-                mSearchFeatureProvider.updateIndex(getApplicationContext());
+            if (mSearchFeatureProvider != null && !mSearchFeatureProvider.isEnabled(context)) {
+                String action = intent.getAction();
+                if (action.equals(Intent.ACTION_USER_ADDED)
+                        || action.equals(Intent.ACTION_USER_REMOVED)) {
+                    mSearchFeatureProvider.updateIndex(getApplicationContext());
+                }
             }
         }
     };
@@ -251,7 +253,9 @@
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
-        mSearchFeatureProvider.updateIndex(getApplicationContext());
+        if (!mSearchFeatureProvider.isEnabled(this)) {
+            mSearchFeatureProvider.updateIndex(getApplicationContext());
+        }
     }
 
     @Override
@@ -383,14 +387,10 @@
         final boolean isSubSettings = this instanceof SubSettings ||
                 intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
 
-        // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content insets
+        // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content
+        // insets
         if (isSubSettings) {
-            // Check also that we are not a Theme Dialog as we don't want to override them
-            final int themeResId = getThemeResId();
-            if (themeResId != R.style.Theme_DialogWhenLarge &&
-                    themeResId != R.style.Theme_SubSettingsDialogWhenLarge) {
-                setTheme(R.style.Theme_SubSettings);
-            }
+            setTheme(R.style.Theme_SubSettings);
         }
 
         setContentView(mIsShowingDashboard ?
@@ -400,7 +400,7 @@
 
         getFragmentManager().addOnBackStackChangedListener(this);
 
-        if (mIsShowingDashboard) {
+        if (mIsShowingDashboard && !mSearchFeatureProvider.isEnabled(this)) {
             // Run the Index update only if we have some space
             if (!Utils.isLowStorage(this)) {
                 mSearchFeatureProvider.updateIndex(getApplicationContext());
@@ -642,8 +642,10 @@
                 mDevelopmentPreferencesListener);
 
         registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-        registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_ADDED));
-        registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_REMOVED));
+        if (!mSearchFeatureProvider.isEnabled(this)) {
+            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_ADDED));
+            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_REMOVED));
+        }
         if (mDynamicIndexableContentMonitor == null) {
             mDynamicIndexableContentMonitor = new DynamicIndexableContentMonitor();
         }
@@ -659,7 +661,9 @@
     protected void onPause() {
         super.onPause();
         unregisterReceiver(mBatteryInfoReceiver);
-        unregisterReceiver(mUserAddRemoveReceiver);
+        if (!mSearchFeatureProvider.isEnabled(this)) {
+            unregisterReceiver(mUserAddRemoveReceiver);
+        }
         if (mDynamicIndexableContentMonitor != null) {
             mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR);
         }
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index 07fec07..66fc4d6 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -44,6 +44,8 @@
     private static final String TAG = "Settings";
     private static final String PRIMARY_PROFILE_SETTING =
             "com.android.settings.PRIMARY_PROFILE_CONTROLLED";
+    private static final String SETTINGS_PACKAGE = "com.android.settings";
+    private static final String WEBVIEW_IMPLEMENTATION_ACTIVITY = ".WebViewImplementation";
 
     @Override
     public void onReceive(Context context, Intent broadcast) {
@@ -100,7 +102,7 @@
             return;
         }
         ComponentName settingsComponentName =
-            new ComponentName(context, WebViewImplementation.class);
+            new ComponentName(SETTINGS_PACKAGE, SETTINGS_PACKAGE + WEBVIEW_IMPLEMENTATION_ACTIVITY);
         pm.setComponentEnabledSetting(settingsComponentName,
                 userInfo.isAdmin() ?
                         PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index ee500a9..3bad5f3 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -727,10 +727,6 @@
         getActivity().setResult(result);
     }
 
-    protected final Context getPrefContext() {
-        return getPreferenceManager().getContext();
-    }
-
     public boolean startFragment(Fragment caller, String fragmentClass, int titleRes,
             int requestCode, Bundle extras) {
         final Activity activity = getActivity();
diff --git a/src/com/android/settings/TrustAgentSettings.java b/src/com/android/settings/TrustAgentSettings.java
index 1eb023d..2f4660e 100644
--- a/src/com/android/settings/TrustAgentSettings.java
+++ b/src/com/android/settings/TrustAgentSettings.java
@@ -34,6 +34,9 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.security.SecurityFeatureProvider;
+import com.android.settings.trustagent.TrustAgentManager;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
 
@@ -49,6 +52,7 @@
     private final ArraySet<ComponentName> mActiveAgents = new ArraySet<ComponentName>();
     private LockPatternUtils mLockPatternUtils;
     private DevicePolicyManager mDpm;
+    private TrustAgentManager mTrustAgentManager;
 
     public static final class AgentInfo {
         CharSequence label;
@@ -78,6 +82,10 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         mDpm = getActivity().getSystemService(DevicePolicyManager.class);
+        mTrustAgentManager =
+            FeatureFactory.getFactory(getActivity()).getSecurityFeatureProvider()
+                .getTrustAgentManager();
+
         addPreferencesFromResource(R.xml.trust_agent_settings);
     }
 
@@ -151,8 +159,12 @@
         agents.ensureCapacity(count);
         for (int i = 0; i < count; i++ ) {
             ResolveInfo resolveInfo = resolveInfos.get(i);
-            if (resolveInfo.serviceInfo == null) continue;
-            if (!TrustAgentUtils.checkProvidePermission(resolveInfo, pm)) continue;
+            if (resolveInfo.serviceInfo == null) {
+                continue;
+            }
+            if (!mTrustAgentManager.shouldProvideTrust(resolveInfo, pm)) {
+                continue;
+            }
             ComponentName name = TrustAgentUtils.getComponentName(resolveInfo);
             AgentInfo agentInfo = new AgentInfo();
             agentInfo.label = resolveInfo.loadLabel(pm);
diff --git a/src/com/android/settings/TrustAgentUtils.java b/src/com/android/settings/TrustAgentUtils.java
index 9c8d229..b3d560f 100644
--- a/src/com/android/settings/TrustAgentUtils.java
+++ b/src/com/android/settings/TrustAgentUtils.java
@@ -24,7 +24,6 @@
 import android.content.res.XmlResourceParser;
 import android.service.trust.TrustAgentService;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.util.Slog;
 import android.util.Xml;
 
@@ -35,25 +34,11 @@
 
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
+// TODO(b/34461256): Refactor TrustAgentUtils into TrustAgentManager.
 public class TrustAgentUtils {
     static final String TAG = "TrustAgentUtils";
 
     private static final String TRUST_AGENT_META_DATA = TrustAgentService.TRUST_AGENT_META_DATA;
-    private static final String PERMISSION_PROVIDE_AGENT = android.Manifest.permission.PROVIDE_TRUST_AGENT;
-
-    /**
-     * @return true, if the service in resolveInfo has the permission to provide a trust agent.
-     */
-    public static boolean checkProvidePermission(ResolveInfo resolveInfo, PackageManager pm) {
-        String packageName = resolveInfo.serviceInfo.packageName;
-        if (pm.checkPermission(PERMISSION_PROVIDE_AGENT, packageName)
-                != PackageManager.PERMISSION_GRANTED) {
-            Log.w(TAG, "Skipping agent because package " + packageName
-                    + " does not have permission " + PERMISSION_PROVIDE_AGENT + ".");
-            return false;
-        }
-        return true;
-    }
 
     public static class TrustAgentComponentInfo {
         ComponentName componentName;
diff --git a/src/com/android/settings/WebViewImplementation.java b/src/com/android/settings/WebViewImplementation.java
deleted file mode 100644
index 349f5e9..0000000
--- a/src/com/android/settings/WebViewImplementation.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings;
-
-import android.annotation.Nullable;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.DialogInterface.OnClickListener;
-import android.content.DialogInterface.OnDismissListener;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserManager;
-import android.util.Log;
-import android.webkit.IWebViewUpdateService;
-import android.webkit.WebViewProviderInfo;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.core.InstrumentedActivity;
-
-import java.util.ArrayList;
-
-public class WebViewImplementation extends InstrumentedActivity implements
-        OnCancelListener, OnDismissListener {
-
-    private static final String TAG = "WebViewImplementation";
-
-    private IWebViewUpdateService mWebViewUpdateService;
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (!UserManager.get(this).isAdminUser()) {
-            finish();
-            return;
-        }
-        mWebViewUpdateService  =
-                IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
-        try {
-            WebViewProviderInfo[] providers = mWebViewUpdateService.getValidWebViewPackages();
-            if (providers == null) {
-                Log.e(TAG, "No WebView providers available");
-                finish();
-                return;
-            }
-
-            String currentValue = mWebViewUpdateService.getCurrentWebViewPackageName();
-            if (currentValue == null) {
-                currentValue = "";
-            }
-
-            int currentIndex = -1;
-            ArrayList<String> options = new ArrayList<>();
-            final ArrayList<String> values = new ArrayList<>();
-            for (WebViewProviderInfo provider : providers) {
-                if (Utils.isPackageEnabled(this, provider.packageName)) {
-                    options.add(provider.description);
-                    values.add(provider.packageName);
-                    if (currentValue.contentEquals(provider.packageName)) {
-                        currentIndex = values.size() - 1;
-                    }
-                }
-            }
-
-            new AlertDialog.Builder(this)
-                    .setTitle(R.string.select_webview_provider_dialog_title)
-                    .setSingleChoiceItems(options.toArray(new String[0]), currentIndex,
-                            new OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            try {
-                                mWebViewUpdateService.changeProviderAndSetting(values.get(which));
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Problem reaching webviewupdate service", e);
-                            }
-                            finish();
-                        }
-                    }).setNegativeButton(android.R.string.cancel, null)
-                    .setOnCancelListener(this)
-                    .setOnDismissListener(this)
-                    .show();
-        } catch (RemoteException e) {
-            Log.w(TAG, "Problem reaching webviewupdate service", e);
-            finish();
-        }
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.WEBVIEW_IMPLEMENTATION;
-    }
-
-    @Override
-    public void onCancel(DialogInterface dialog) {
-        finish();
-    }
-
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        finish();
-    }
-}
diff --git a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
new file mode 100644
index 0000000..2d33902
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.storage.StorageManager;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.settings.R;
+
+import java.util.List;
+
+/**
+ * Utility class for creating the dialog that asks users for explicit permission to grant
+ * all of the requested capabilities to an accessibility service before the service is enabled
+ */
+public class AccessibilityServiceWarning {
+    public static Dialog createCapabilitiesDialog(Activity parentActivity,
+            AccessibilityServiceInfo info, DialogInterface.OnClickListener listener) {
+        final AlertDialog ad = new AlertDialog.Builder(parentActivity)
+                .setTitle(parentActivity.getString(R.string.enable_service_title,
+                        info.getResolveInfo().loadLabel(parentActivity.getPackageManager())))
+                .setView(createEnableDialogContentView(parentActivity, info))
+                .setCancelable(true)
+                .setPositiveButton(android.R.string.ok, listener)
+                .setNegativeButton(android.R.string.cancel, listener)
+                .create();
+
+        final View.OnTouchListener filterTouchListener = (View v, MotionEvent event) -> {
+            // Filter obscured touches by consuming them.
+            if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
+                if (event.getAction() == MotionEvent.ACTION_UP) {
+                    Toast.makeText(v.getContext(), R.string.touch_filtered_warning,
+                            Toast.LENGTH_SHORT).show();
+                }
+                return true;
+            }
+            return false;
+        };
+
+        ad.create();
+        ad.getButton(AlertDialog.BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
+        return ad;
+    }
+
+    /**
+     * Return whether the device is encrypted with legacy full disk encryption. Newer devices
+     * should be using File Based Encryption.
+     *
+     * @return true if device is encrypted
+     */
+    private static boolean isFullDiskEncrypted() {
+        return StorageManager.isNonDefaultBlockEncrypted();
+    }
+
+    private static View createEnableDialogContentView(Activity parentActivity,
+            AccessibilityServiceInfo info) {
+        LayoutInflater inflater = (LayoutInflater) parentActivity.getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+
+        View content = inflater.inflate(R.layout.enable_accessibility_service_dialog_content,
+                null);
+
+        TextView encryptionWarningView = (TextView) content.findViewById(
+                R.id.encryption_warning);
+        if (isFullDiskEncrypted()) {
+            String text = parentActivity.getString(R.string.enable_service_encryption_warning,
+                    info.getResolveInfo().loadLabel(parentActivity.getPackageManager()));
+            encryptionWarningView.setText(text);
+            encryptionWarningView.setVisibility(View.VISIBLE);
+        } else {
+            encryptionWarningView.setVisibility(View.GONE);
+        }
+
+        TextView capabilitiesHeaderView = (TextView) content.findViewById(
+                R.id.capabilities_header);
+        capabilitiesHeaderView.setText(parentActivity.getString(R.string.capabilities_list_title,
+                info.getResolveInfo().loadLabel(parentActivity.getPackageManager())));
+
+        LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities);
+
+        // This capability is implicit for all services.
+        View capabilityView = inflater.inflate(
+                com.android.internal.R.layout.app_permission_item_old, null);
+
+        ImageView imageView = (ImageView) capabilityView.findViewById(
+                com.android.internal.R.id.perm_icon);
+        imageView.setImageDrawable(parentActivity.getDrawable(
+                com.android.internal.R.drawable.ic_text_dot));
+
+        TextView labelView = (TextView) capabilityView.findViewById(
+                com.android.internal.R.id.permission_group);
+        labelView.setText(parentActivity.getString(
+                R.string.capability_title_receiveAccessibilityEvents));
+
+        TextView descriptionView = (TextView) capabilityView.findViewById(
+                com.android.internal.R.id.permission_list);
+        descriptionView.setText(
+                parentActivity.getString(R.string.capability_desc_receiveAccessibilityEvents));
+
+        List<AccessibilityServiceInfo.CapabilityInfo> capabilities =
+                info.getCapabilityInfos();
+
+        capabilitiesView.addView(capabilityView);
+
+        // Service-specific capabilities.
+        final int capabilityCount = capabilities.size();
+        for (int i = 0; i < capabilityCount; i++) {
+            AccessibilityServiceInfo.CapabilityInfo capability = capabilities.get(i);
+
+            capabilityView = inflater.inflate(
+                    com.android.internal.R.layout.app_permission_item_old, null);
+
+            imageView = (ImageView) capabilityView.findViewById(
+                    com.android.internal.R.id.perm_icon);
+            imageView.setImageDrawable(parentActivity.getDrawable(
+                    com.android.internal.R.drawable.ic_text_dot));
+
+            labelView = (TextView) capabilityView.findViewById(
+                    com.android.internal.R.id.permission_group);
+            labelView.setText(parentActivity.getString(capability.titleResId));
+
+            descriptionView = (TextView) capabilityView.findViewById(
+                    com.android.internal.R.id.permission_list);
+            descriptionView.setText(parentActivity.getString(capability.descResId));
+
+            capabilitiesView.addView(capabilityView);
+        }
+
+        return content;
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index af5b5cd..dc57bdd 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -17,9 +17,11 @@
 package com.android.settings.accessibility;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
@@ -87,8 +89,8 @@
             "toggle_master_mono";
     private static final String SELECT_LONG_PRESS_TIMEOUT_PREFERENCE =
             "select_long_press_timeout_preference";
-    private static final String ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN =
-            "enable_global_gesture_preference_screen";
+    private static final String ACCESSIBILITY_SHORTCUT_PREFERENCE =
+            "accessibility_shortcut_preference";
     private static final String CAPTIONING_PREFERENCE_SCREEN =
             "captioning_preference_screen";
     private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
@@ -115,6 +117,9 @@
     // presentation.
     private static final long DELAY_UPDATE_SERVICES_MILLIS = 1000;
 
+    // ID for dialog that confirms shortcut capabilities
+    private static final int DIALOG_ID_ADD_SHORTCUT_WARNING = 1;
+
     // Auxiliary members.
     static final Set<ComponentName> sInstalledServices = new HashSet<>();
 
@@ -188,7 +193,7 @@
     private Preference mDisplayMagnificationPreferenceScreen;
     private Preference mFontSizePreferenceScreen;
     private Preference mAutoclickPreferenceScreen;
-    private Preference mGlobalGesturePreferenceScreen;
+    private ListPreference mAccessibilityShortcutPreference;
     private Preference mDisplayDaltonizerPreferenceScreen;
     private SwitchPreference mToggleInversionPreference;
 
@@ -247,6 +252,9 @@
         } else if (mToggleInversionPreference == preference) {
             handleToggleInversionPreferenceChange((Boolean) newValue);
             return true;
+        } else if (mAccessibilityShortcutPreference == preference) {
+            handleAccessibilityShortcutPreferenceChange((String) newValue);
+            return true;
         }
         return false;
     }
@@ -263,6 +271,58 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, (checked ? 1 : 0));
     }
 
+    private void handleAccessibilityShortcutPreferenceChange(String serviceComponentName) {
+        // When assigning a service to the shortcut the user must explicitly agree to the same
+        // capabilities that are present if the service were being enabled.
+        // No need if clearing the setting or the service is already enabled.
+        if (TextUtils.isEmpty(serviceComponentName)
+                || AccessibilityUtils.getEnabledServicesFromSettings(getActivity())
+                        .contains(ComponentName.unflattenFromString(serviceComponentName))) {
+            Settings.Secure.putString(getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, serviceComponentName);
+            updateAccessibilityShortcut();
+            return;
+        }
+        if (!serviceComponentName.equals(mAccessibilityShortcutPreference.getValue())) {
+            showDialog(DIALOG_ID_ADD_SHORTCUT_WARNING);
+        }
+    }
+
+    @Override
+    public Dialog onCreateDialog(int dialogId) {
+        switch (dialogId) {
+            case DIALOG_ID_ADD_SHORTCUT_WARNING: {
+                DialogInterface.OnClickListener listener =
+                        (DialogInterface dialogInterface, int buttonId) -> {
+                            if (buttonId == DialogInterface.BUTTON_POSITIVE) {
+                                Settings.Secure.putString(getContentResolver(),
+                                        Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE,
+                                        mAccessibilityShortcutPreference.getValue());
+                            }
+                            updateAccessibilityShortcut();
+                        };
+                AccessibilityServiceInfo info = AccessibilityManager.getInstance(getActivity())
+                        .getInstalledServiceInfoWithComponentName(
+                                ComponentName.unflattenFromString(
+                                        mAccessibilityShortcutPreference.getValue()));
+                if (info == null) {
+                    return null;
+                }
+                return AccessibilityServiceWarning
+                        .createCapabilitiesDialog(getActivity(), info, listener);
+            }
+            default: {
+                throw new IllegalArgumentException();
+            }
+        }
+    }
+
+    @Override
+    public int getDialogMetricsCategory(int dialogId) {
+        // The only dialog is the one that confirms the properties for the accessibility shortcut
+        return MetricsEvent.ACCESSIBILITY_TOGGLE_GLOBAL_GESTURE;
+    }
+
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (mToggleHighTextContrastPreference == preference) {
@@ -283,9 +343,6 @@
         } else if (mToggleMasterMonoPreference == preference) {
             handleToggleMasterMonoPreferenceClick();
             return true;
-        } else if (mGlobalGesturePreferenceScreen == preference) {
-            handleToggleEnableAccessibilityGesturePreferenceClick();
-            return true;
         } else if (mDisplayMagnificationPreferenceScreen == preference) {
             handleDisplayMagnificationPreferenceScreenClick();
             return true;
@@ -329,17 +386,6 @@
                 mToggleMasterMonoPreference.isChecked() ? 1 : 0, UserHandle.USER_CURRENT);
     }
 
-    private void handleToggleEnableAccessibilityGesturePreferenceClick() {
-        Bundle extras = mGlobalGesturePreferenceScreen.getExtras();
-        extras.putString(EXTRA_TITLE, getString(
-                R.string.accessibility_global_gesture_preference_title));
-        extras.putString(EXTRA_SUMMARY, getString(
-                R.string.accessibility_global_gesture_preference_description));
-        extras.putBoolean(EXTRA_CHECKED, Settings.Global.getInt(getContentResolver(),
-                Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1);
-        super.onPreferenceTreeClick(mGlobalGesturePreferenceScreen);
-    }
-
     private void handleDisplayMagnificationPreferenceScreenClick() {
         Bundle extras = mDisplayMagnificationPreferenceScreen.getExtras();
         extras.putString(EXTRA_TITLE, getString(
@@ -422,18 +468,10 @@
         // Display color adjustments.
         mDisplayDaltonizerPreferenceScreen = findPreference(DISPLAY_DALTONIZER_PREFERENCE_SCREEN);
 
-        // Global gesture.
-        mGlobalGesturePreferenceScreen = findPreference(
-                ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN);
-        final int longPressOnPowerBehavior = getActivity().getResources().getInteger(
-                com.android.internal.R.integer.config_longPressOnPowerBehavior);
-        final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
-        if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
-                || longPressOnPowerBehavior != LONG_PRESS_POWER_GLOBAL_ACTIONS) {
-            // Remove accessibility shortcut if power key is not present
-            // nor long press power does not show global actions menu.
-            mSystemsCategory.removePreference(mGlobalGesturePreferenceScreen);
-        }
+        // Accessibility shortcut
+        mAccessibilityShortcutPreference =
+                (ListPreference) findPreference(ACCESSIBILITY_SHORTCUT_PREFERENCE);
+        mAccessibilityShortcutPreference.setOnPreferenceChangeListener(this);
     }
 
     private void updateAllPreferences() {
@@ -598,16 +636,7 @@
 
         updateAutoclickSummary(mAutoclickPreferenceScreen);
 
-        // Global gesture
-        final boolean globalGestureEnabled = Settings.Global.getInt(getContentResolver(),
-                Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1;
-        if (globalGestureEnabled) {
-            mGlobalGesturePreferenceScreen.setSummary(
-                    R.string.accessibility_global_gesture_preference_summary_on);
-        } else {
-            mGlobalGesturePreferenceScreen.setSummary(
-                    R.string.accessibility_global_gesture_preference_summary_off);
-        }
+        updateAccessibilityShortcut();
     }
 
     private void updateFeatureSummary(String prefKey, Preference pref) {
@@ -656,6 +685,37 @@
         mToggleMasterMonoPreference.setChecked(masterMono);
     }
 
+    private void updateAccessibilityShortcut() {
+        String currentShortcutNameString =
+                AccessibilityUtils.getShortcutTargetServiceComponentNameString(getActivity(),
+                        UserHandle.myUserId());
+        final PackageManager pm = getPackageManager();
+        final AccessibilityManager accessibilityManager = getActivity()
+                .getSystemService(AccessibilityManager.class);
+        final List<AccessibilityServiceInfo> installedServices =
+                accessibilityManager.getInstalledAccessibilityServiceList();
+        final int numInstalledServices = installedServices.size();
+
+        CharSequence[] entries = new CharSequence[numInstalledServices + 1];
+        CharSequence[] entryValues = new CharSequence[numInstalledServices + 1];
+        int currentSettingIndex = numInstalledServices;
+        for (int i = 0; i < numInstalledServices; i++) {
+            AccessibilityServiceInfo installedService = installedServices.get(i);
+            entries[i] = installedService.getResolveInfo().loadLabel(pm);
+            entryValues[i] = installedService.getComponentName().flattenToShortString();
+            if (installedService.getId().equals(currentShortcutNameString)) {
+                currentSettingIndex = i;
+            }
+        }
+        entries[numInstalledServices] =
+                getString(com.android.internal.R.string.disable_accessibility_shortcut);
+        entryValues[numInstalledServices] = "";
+        mAccessibilityShortcutPreference.setEntryValues(entryValues);
+        mAccessibilityShortcutPreference.setEntries(entries);
+        mAccessibilityShortcutPreference.setSummary(entries[currentSettingIndex]);
+        mAccessibilityShortcutPreference.setValueIndex(currentSettingIndex);
+    }
+
     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
         @Override
@@ -663,8 +723,8 @@
             List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>();
 
             PackageManager packageManager = context.getPackageManager();
-            AccessibilityManager accessibilityManager = (AccessibilityManager)
-                    context.getSystemService(Context.ACCESSIBILITY_SERVICE);
+            AccessibilityManager accessibilityManager =
+                    context.getSystemService(AccessibilityManager.class);
 
             String screenTitle = context.getResources().getString(
                     R.string.accessibility_services_title);
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index 009fa5d..b8f3af5 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -41,11 +41,21 @@
     private static final String DISPLAY_MAGNIFICATION_PREFERENCE =
             "screen_magnification_preference";
     private static final String SCREEN_READER_PREFERENCE = "screen_reader_preference";
+    private static final String SELECT_TO_SPEAK_PREFERENCE = "select_to_speak_preference";
     private static final String FONT_SIZE_PREFERENCE = "font_size_preference";
 
+    // Package names and service names used to identify screen reader and SelectToSpeak services.
+    private static final String SCREEN_READER_PACKAGE_NAME = "com.google.android.marvin.talkback";
+    private static final String SCREEN_READER_SERVICE_NAME =
+            "com.google.android.marvin.talkback.TalkBackService";
+    private static final String SELECT_TO_SPEAK_PACKAGE_NAME = "com.google.android.marvin.talkback";
+    private static final String SELECT_TO_SPEAK_SERVICE_NAME =
+            "com.google.android.accessibility.selecttospeak.SelectToSpeakService";
+
     // Preference controls.
     private Preference mDisplayMagnificationPreference;
     private Preference mScreenReaderPreference;
+    private Preference mSelectToSpeakPreference;
 
     @Override
     public int getMetricsCategory() {
@@ -59,12 +69,16 @@
 
         mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE);
         mScreenReaderPreference = findPreference(SCREEN_READER_PREFERENCE);
+        mSelectToSpeakPreference = findPreference(SELECT_TO_SPEAK_PREFERENCE);
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        updateScreenReaderPreference();
+        updateAccessibilityServicePreference(mScreenReaderPreference,
+                findService(SCREEN_READER_PACKAGE_NAME, SCREEN_READER_SERVICE_NAME));
+        updateAccessibilityServicePreference(mSelectToSpeakPreference,
+                findService(SELECT_TO_SPEAK_PACKAGE_NAME, SELECT_TO_SPEAK_SERVICE_NAME));
     }
 
     @Override
@@ -94,13 +108,15 @@
         return super.onPreferenceTreeClick(preference);
     }
 
-    private AccessibilityServiceInfo findFirstServiceWithSpokenFeedback() {
+    private AccessibilityServiceInfo findService(String packageName, String serviceName) {
         final AccessibilityManager manager =
                 getActivity().getSystemService(AccessibilityManager.class);
         final List<AccessibilityServiceInfo> accessibilityServices =
                 manager.getInstalledAccessibilityServiceList();
         for (AccessibilityServiceInfo info : accessibilityServices) {
-            if ((info.feedbackType & AccessibilityServiceInfo.FEEDBACK_SPOKEN) != 0) {
+            ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
+            if (packageName.equals(serviceInfo.packageName)
+                    && serviceName.equals(serviceInfo.name)) {
                 return info;
             }
         }
@@ -108,28 +124,25 @@
         return null;
     }
 
-    private void updateScreenReaderPreference() {
-        // Find a screen reader.
-        AccessibilityServiceInfo info = findFirstServiceWithSpokenFeedback();
+    private void updateAccessibilityServicePreference(Preference preference,
+            AccessibilityServiceInfo info) {
         if (info == null) {
-            mScreenReaderPreference.setEnabled(false);
-        } else {
-            mScreenReaderPreference.setEnabled(true);
+            getPreferenceScreen().removePreference(preference);
+            return;
         }
 
         ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
         String title = info.getResolveInfo().loadLabel(getPackageManager()).toString();
-        mScreenReaderPreference.setTitle(title);
-
+        preference.setTitle(title);
         ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name);
-        mScreenReaderPreference.setKey(componentName.flattenToString());
+        preference.setKey(componentName.flattenToString());
 
         // Update the extras.
-        Bundle extras = mScreenReaderPreference.getExtras();
+        Bundle extras = preference.getExtras();
         extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName);
 
         extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY,
-                mScreenReaderPreference.getKey());
+            preference.getKey());
         extras.putString(AccessibilitySettings.EXTRA_TITLE, title);
 
         String description = info.loadDescription(getPackageManager());
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 3bd450b..9c01a5f 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -146,39 +146,13 @@
         switch (dialogId) {
             case DIALOG_ID_ENABLE_WARNING: {
                 mShownDialogId = DIALOG_ID_ENABLE_WARNING;
-
                 final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
                 if (info == null) {
                     return null;
                 }
 
-                final AlertDialog ad = new AlertDialog.Builder(getActivity())
-                        .setTitle(getString(R.string.enable_service_title,
-                                info.getResolveInfo().loadLabel(getPackageManager())))
-                        .setView(createEnableDialogContentView(info))
-                        .setCancelable(true)
-                        .setPositiveButton(android.R.string.ok, this)
-                        .setNegativeButton(android.R.string.cancel, this)
-                        .create();
-
-                final View.OnTouchListener filterTouchListener = new View.OnTouchListener() {
-                    @Override
-                    public boolean onTouch(View v, MotionEvent event) {
-                        // Filter obscured touches by consuming them.
-                        if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
-                            if (event.getAction() == MotionEvent.ACTION_UP) {
-                                Toast.makeText(v.getContext(), R.string.touch_filtered_warning,
-                                        Toast.LENGTH_SHORT).show();
-                            }
-                            return true;
-                        }
-                        return false;
-                    }
-                };
-
-                ad.create();
-                ad.getButton(AlertDialog.BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
-                return ad;
+                return AccessibilityServiceWarning
+                        .createCapabilitiesDialog(getActivity(), info, this);
             }
             case DIALOG_ID_DISABLE_WARNING: {
                 mShownDialogId = DIALOG_ID_DISABLE_WARNING;
@@ -227,80 +201,6 @@
         return StorageManager.isNonDefaultBlockEncrypted();
     }
 
-    private View createEnableDialogContentView(AccessibilityServiceInfo info) {
-        LayoutInflater inflater = (LayoutInflater) getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-
-        View content = inflater.inflate(R.layout.enable_accessibility_service_dialog_content,
-                null);
-
-        TextView encryptionWarningView = (TextView) content.findViewById(
-                R.id.encryption_warning);
-        if (isFullDiskEncrypted()) {
-            String text = getString(R.string.enable_service_encryption_warning,
-                    info.getResolveInfo().loadLabel(getPackageManager()));
-            encryptionWarningView.setText(text);
-            encryptionWarningView.setVisibility(View.VISIBLE);
-        } else {
-            encryptionWarningView.setVisibility(View.GONE);
-        }
-
-        TextView capabilitiesHeaderView = (TextView) content.findViewById(
-                R.id.capabilities_header);
-        capabilitiesHeaderView.setText(getString(R.string.capabilities_list_title,
-                info.getResolveInfo().loadLabel(getPackageManager())));
-
-        LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities);
-
-        // This capability is implicit for all services.
-        View capabilityView = inflater.inflate(
-                com.android.internal.R.layout.app_permission_item_old, null);
-
-        ImageView imageView = (ImageView) capabilityView.findViewById(
-                com.android.internal.R.id.perm_icon);
-        imageView.setImageDrawable(getActivity().getDrawable(
-                com.android.internal.R.drawable.ic_text_dot));
-
-        TextView labelView = (TextView) capabilityView.findViewById(
-                com.android.internal.R.id.permission_group);
-        labelView.setText(getString(R.string.capability_title_receiveAccessibilityEvents));
-
-        TextView descriptionView = (TextView) capabilityView.findViewById(
-                com.android.internal.R.id.permission_list);
-        descriptionView.setText(getString(R.string.capability_desc_receiveAccessibilityEvents));
-
-        List<AccessibilityServiceInfo.CapabilityInfo> capabilities =
-                info.getCapabilityInfos();
-
-        capabilitiesView.addView(capabilityView);
-
-        // Service specific capabilities.
-        final int capabilityCount = capabilities.size();
-        for (int i = 0; i < capabilityCount; i++) {
-            AccessibilityServiceInfo.CapabilityInfo capability = capabilities.get(i);
-
-            capabilityView = inflater.inflate(
-                    com.android.internal.R.layout.app_permission_item_old, null);
-
-            imageView = (ImageView) capabilityView.findViewById(
-                    com.android.internal.R.id.perm_icon);
-            imageView.setImageDrawable(getActivity().getDrawable(
-                    com.android.internal.R.drawable.ic_text_dot));
-
-            labelView = (TextView) capabilityView.findViewById(
-                    com.android.internal.R.id.permission_group);
-            labelView.setText(getString(capability.titleResId));
-
-            descriptionView = (TextView) capabilityView.findViewById(
-                    com.android.internal.R.id.permission_list);
-            descriptionView.setText(getString(capability.descResId));
-
-            capabilitiesView.addView(capabilityView);
-        }
-
-        return content;
-    }
-
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION) {
diff --git a/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java
deleted file mode 100644
index 5d95d7e..0000000
--- a/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2013 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.accessibility;
-
-import android.provider.Settings;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.widget.ToggleSwitch;
-import com.android.settings.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
-
-public class ToggleGlobalGesturePreferenceFragment
-        extends ToggleFeaturePreferenceFragment {
-    @Override
-    protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
-        Settings.Global.putInt(getContentResolver(),
-                Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, enabled ? 1 : 0);
-    }
-
-    @Override
-    protected void onInstallSwitchBarToggleSwitch() {
-        super.onInstallSwitchBarToggleSwitch();
-        mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
-                @Override
-            public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
-                mSwitchBar.setCheckedInternal(checked);
-                getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked);
-                onPreferenceToggled(mPreferenceKey, checked);
-                return false;
-            }
-        });
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.ACCESSIBILITY_TOGGLE_GLOBAL_GESTURE;
-    }
-}
diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
new file mode 100644
index 0000000..2c9b58c
--- /dev/null
+++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
@@ -0,0 +1,51 @@
+/*
+ * 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.accessibility;
+
+import android.os.Bundle;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard
+        extends ToggleAccessibilityServicePreferenceFragment {
+
+    private boolean mToggleSwitchWasInitiallyChecked;
+
+    @Override
+    protected void onProcessArguments(Bundle arguments) {
+        super.onProcessArguments(arguments);
+        mToggleSwitchWasInitiallyChecked = mToggleSwitch.isChecked();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER;
+    }
+
+    @Override
+    public void onStop() {
+        // Log the final choice in value if it's different from the previous value.
+        if (mToggleSwitch.isChecked() != mToggleSwitchWasInitiallyChecked) {
+            mMetricsFeatureProvider.action(getContext(),
+                    MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK,
+                    mToggleSwitch.isChecked());
+        }
+
+        super.onStop();
+    }
+}
+
diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
index 12f78ff..8143e96 100644
--- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
@@ -22,15 +22,14 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.support.annotation.VisibleForTesting;
-
 import android.support.v7.preference.Preference;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.accounts.AuthenticatorHelper;
-import com.android.settingslib.drawer.CategoryKey;
 import com.android.settingslib.drawer.Tile;
 
 import java.util.ArrayList;
@@ -62,8 +61,8 @@
         Bundle args = getArguments();
         final Activity activity = getActivity();
         UserHandle userHandle = Utils.getSecureTargetUser(activity.getActivityToken(),
-            (UserManager) getSystemService(Context.USER_SERVICE), args,
-            activity.getIntent().getExtras());
+                (UserManager) getSystemService(Context.USER_SERVICE), args,
+                activity.getIntent().getExtras());
         if (args != null) {
             if (args.containsKey(KEY_ACCOUNT)) {
                 mAccount = args.getParcelable(KEY_ACCOUNT);
@@ -94,11 +93,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_ACCOUNT;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -142,6 +136,6 @@
         }
         final AuthenticatorHelper helper = new AuthenticatorHelper(context, userHandle, null);
         headerPreference.setIcon(helper.getDrawableForType(context, mAccountType));
-   }
+    }
 
 }
\ No newline at end of file
diff --git a/src/com/android/settings/accounts/ChooseAccountActivity.java b/src/com/android/settings/accounts/ChooseAccountActivity.java
index ea39426..6f0c110 100644
--- a/src/com/android/settings/accounts/ChooseAccountActivity.java
+++ b/src/com/android/settings/accounts/ChooseAccountActivity.java
@@ -22,6 +22,7 @@
 
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorDescription;
+import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -41,6 +42,10 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.FooterPreference;
+import com.android.settings.widget.FooterPreferenceMixin;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
@@ -61,6 +66,10 @@
 public class ChooseAccountActivity extends SettingsPreferenceFragment {
 
     private static final String TAG = "ChooseAccountActivity";
+
+    private EnterprisePrivacyFeatureProvider mFeatureProvider;
+    private FooterPreference mEnterpriseDisclosurePreference = null;
+
     private String[] mAuthorities;
     private PreferenceGroup mAddAccountGroup;
     private final ArrayList<ProviderEntry> mProviderList = new ArrayList<ProviderEntry>();
@@ -101,6 +110,10 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        final Activity activity = getActivity();
+        mFeatureProvider = FeatureFactory.getFactory(activity)
+                .getEnterprisePrivacyFeatureProvider(activity);
+
         addPreferencesFromResource(R.xml.add_account_settings);
         mAuthorities = getIntent().getStringArrayExtra(
                 AccountPreferenceBase.AUTHORITIES_FILTER_KEY);
@@ -187,6 +200,7 @@
                 p.checkAccountManagementAndSetDisabled(mUserHandle.getIdentifier());
                 mAddAccountGroup.addPreference(p);
             }
+            addEnterpriseDisclosure();
         } else {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 final StringBuilder auths = new StringBuilder();
@@ -201,6 +215,19 @@
         }
     }
 
+    private void addEnterpriseDisclosure() {
+        final CharSequence disclosure = mFeatureProvider.getDeviceOwnerDisclosure(getActivity());
+        if (disclosure == null) {
+            return;
+        }
+        if (mEnterpriseDisclosurePreference == null) {
+            mEnterpriseDisclosurePreference = mFooterPreferenceMixin.createFooterPreference();
+            mEnterpriseDisclosurePreference.setSelectable(false);
+        }
+        mEnterpriseDisclosurePreference.setTitle(disclosure);
+        mAddAccountGroup.addPreference(mEnterpriseDisclosurePreference);
+    }
+
     public ArrayList<String> getAuthoritiesForAccountType(String type) {
         if (mAccountTypeToAuthorities == null) {
             mAccountTypeToAuthorities = Maps.newHashMap();
diff --git a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java
index 4113152..dbc0292 100644
--- a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java
@@ -25,7 +25,6 @@
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.drawer.CategoryKey;
 import com.android.settingslib.drawer.Tile;
 
 import java.util.ArrayList;
@@ -45,11 +44,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_ACCOUNT;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/applications/ActivityInfoWrapper.java b/src/com/android/settings/applications/ActivityInfoWrapper.java
new file mode 100644
index 0000000..4cb6e68
--- /dev/null
+++ b/src/com/android/settings/applications/ActivityInfoWrapper.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+/**
+ * This interface replicates a subset of the android.content.pm.ActivityInfo. The interface
+ * exists so that we can use a thin wrapper around the ActivityInfo in production code and a mock in
+ * tests.
+ */
+public interface ActivityInfoWrapper {
+
+    /**
+     * Returns whether this activity supports picture-in-picture.
+     */
+    boolean supportsPictureInPicture();
+}
diff --git a/src/com/android/settings/applications/ActivityInfoWrapperImpl.java b/src/com/android/settings/applications/ActivityInfoWrapperImpl.java
new file mode 100644
index 0000000..b70a1e8
--- /dev/null
+++ b/src/com/android/settings/applications/ActivityInfoWrapperImpl.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.content.pm.ActivityInfo;
+
+public class ActivityInfoWrapperImpl implements ActivityInfoWrapper {
+
+    private final ActivityInfo mInfo;
+
+    public ActivityInfoWrapperImpl(ActivityInfo info) {
+        mInfo = info;
+    }
+
+    @Override
+    public boolean supportsPictureInPicture() {
+        return mInfo.supportsPictureInPicture();
+    }
+}
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index 5bce24d..e59f94b 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 The Android Open Source Project
+ * 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.
@@ -20,14 +20,19 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.Utils;
+import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultWorkBrowserPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settingslib.drawer.CategoryKey;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -36,25 +41,26 @@
     static final String TAG = "AdvancedAppSettings";
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_APPS_DEFAULT;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
 
     @Override
     protected int getPreferenceScreenResId() {
-        return mDashboardFeatureProvider.isEnabled()
-                ? R.xml.app_default_settings
-                : R.xml.advanced_apps;
+        return R.xml.app_default_settings;
     }
 
     @Override
     protected List<PreferenceController> getPreferenceControllers(Context context) {
-        return null;
+        final List<PreferenceController> controllers = new ArrayList<>();
+        controllers.add(new DefaultBrowserPreferenceController(context));
+        controllers.add(new DefaultWorkBrowserPreferenceController(context));
+        controllers.add(new DefaultPhonePreferenceController(context));
+        controllers.add(new DefaultWorkPhonePreferenceController(context));
+        controllers.add(new DefaultSmsPreferenceController(context));
+        controllers.add(new DefaultEmergencyPreferenceController(context));
+        controllers.add(new DefaultHomePreferenceController(context));
+        return controllers;
     }
 
     @Override
@@ -68,16 +74,8 @@
                 public List<SearchIndexableResource> getXmlResourcesToIndex(
                         Context context, boolean enabled) {
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = FeatureFactory.getFactory(context)
-                            .getDashboardFeatureProvider(context).isEnabled()
-                            ? R.xml.app_default_settings
-                            : R.xml.advanced_apps;
+                    sir.xmlResId = R.xml.app_default_settings;
                     return Arrays.asList(sir);
                 }
-
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    return Utils.getNonIndexable(R.xml.advanced_apps, context);
-                }
             };
 }
diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
index be70f86..5dda9c1 100644
--- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
+++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
@@ -25,7 +25,6 @@
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.Arrays;
 import java.util.List;
@@ -40,17 +39,6 @@
     }
 
     @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        mProgressiveDisclosureMixin.setTileLimit(3);
-    }
-
-    @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_APPS;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/applications/AppStateInstallAppsBridge.java b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
new file mode 100644
index 0000000..6d22e25
--- /dev/null
+++ b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.applications;
+
+import android.Manifest;
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.settings.R;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import com.android.settingslib.applications.ApplicationsState.AppFilter;
+
+import java.util.List;
+
+/**
+ * Connects app op info to the ApplicationsState. Wraps around the generic AppStateBaseBridge
+ * class to tailor to the semantics of {@link AppOpsManager#OP_REQUEST_INSTALL_PACKAGES}
+ * Also provides app filters that can use the info.
+ */
+public class AppStateInstallAppsBridge extends AppStateBaseBridge {
+
+    private static final String TAG = AppStateInstallAppsBridge.class.getSimpleName();
+
+    private final IPackageManager mIpm;
+    private final AppOpsManager mAppOpsManager;
+    private final Context mContext;
+
+    public AppStateInstallAppsBridge(Context context, ApplicationsState appState,
+            Callback callback) {
+        super(appState, callback);
+        mContext = context;
+        mIpm = AppGlobals.getPackageManager();
+        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+    }
+
+    @Override
+    protected void updateExtraInfo(AppEntry app, String packageName, int uid) {
+        app.extraInfo = createInstallAppsStateFor(packageName, uid);
+    }
+
+    @Override
+    protected void loadAllExtraInfo() {
+        // TODO: consider making this a batch operation with a single binder call
+        final List<AppEntry> allApps = mAppSession.getAllApps();
+        for (int i = 0; i < allApps.size(); i++) {
+            AppEntry currentEntry = allApps.get(i);
+            updateExtraInfo(currentEntry, currentEntry.info.packageName, currentEntry.info.uid);
+        }
+    }
+
+    private boolean hasRequestedAppOpPermission(String permission, String packageName) {
+        try {
+            String[] packages = mIpm.getAppOpPermissionPackages(permission);
+            return ArrayUtils.contains(packages, packageName);
+        } catch (RemoteException exc) {
+            Log.e(TAG, "PackageManager dead. Cannot get permission info");
+            return false;
+        }
+    }
+
+    private boolean hasPermission(String permission, int uid) {
+        try {
+            int result = mIpm.checkUidPermission(permission, uid);
+            return result == PackageManager.PERMISSION_GRANTED;
+        } catch (RemoteException e) {
+            Log.e(TAG, "PackageManager dead. Cannot get permission info");
+            return false;
+        }
+    }
+
+    private int getAppOpMode(int appOpCode, int uid, String packageName) {
+        return mAppOpsManager.checkOpNoThrow(appOpCode, uid, packageName);
+    }
+
+    InstallAppsState createInstallAppsStateFor(String packageName, int uid) {
+        final InstallAppsState appState = new InstallAppsState();
+        appState.permissionRequested = hasRequestedAppOpPermission(
+                Manifest.permission.REQUEST_INSTALL_PACKAGES, packageName);
+        appState.permissionGranted = hasPermission(Manifest.permission.REQUEST_INSTALL_PACKAGES,
+                uid);
+        appState.appOpMode = getAppOpMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES, uid,
+                packageName);
+        return appState;
+    }
+
+    /**
+     * Collection of information to be used as {@link AppEntry#extraInfo} objects
+     */
+    public static class InstallAppsState {
+        boolean permissionRequested;
+        boolean permissionGranted;
+        int appOpMode;
+
+        public InstallAppsState() {
+            this.appOpMode = AppOpsManager.MODE_DEFAULT;
+        }
+
+        public boolean canInstallApps() {
+            if (appOpMode == AppOpsManager.MODE_DEFAULT) {
+                return permissionGranted;
+            } else {
+                return appOpMode == AppOpsManager.MODE_ALLOWED;
+            }
+        }
+
+        public int getSummary() {
+            return canInstallApps() ? R.string.external_source_trusted
+                    : R.string.external_source_untrusted;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder("[permissionGranted: " + permissionGranted);
+            sb.append(", permissionRequested: " + permissionRequested);
+            sb.append(", appOpMode: " + appOpMode);
+            sb.append("]");
+            return sb.toString();
+        }
+    }
+
+    static final AppFilter FILTER_APP_SOURCES = new AppFilter() {
+
+        @Override
+        public void init() {
+        }
+
+        @Override
+        public boolean filterApp(AppEntry info) {
+            if (info.extraInfo == null || !(info.extraInfo instanceof InstallAppsState)) {
+                return false;
+            }
+            InstallAppsState state = (InstallAppsState) info.extraInfo;
+            return (state.appOpMode != AppOpsManager.MODE_DEFAULT) || state.permissionRequested;
+        }
+    };
+}
diff --git a/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java
new file mode 100644
index 0000000..52f1da5
--- /dev/null
+++ b/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounter.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.RemoteException;
+import android.os.UserHandle;
+
+import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+
+/**
+ * Counts installed apps across all users that have been granted one or more specific permissions by
+ * the admin.
+ */
+public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter {
+
+    private final String[] mPermissions;
+    private final PackageManagerWrapper mPackageManager;
+    private final IPackageManagerWrapper mPackageManagerService;
+    private final DevicePolicyManagerWrapper mDevicePolicyManager;
+
+    public AppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
+            PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
+            DevicePolicyManagerWrapper devicePolicyManager) {
+        super(context, packageManager);
+        mPermissions = permissions;
+        mPackageManager = packageManager;
+        mPackageManagerService = packageManagerService;
+        mDevicePolicyManager = devicePolicyManager;
+    }
+
+    @Override
+    protected boolean includeInCount(ApplicationInfo info) {
+        if (info.targetSdkVersion >= Build.VERSION_CODES.M) {
+            // The app uses run-time permissions. Check whether one or more of the permissions were
+            // granted by enterprise policy.
+            for (final String permission : mPermissions) {
+                if (mDevicePolicyManager.getPermissionGrantState(null /* admin */, info.packageName,
+                        permission) == DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        // The app uses install-time permissions. Check whether the app requested one or more of the
+        // permissions and was installed by enterprise policy, implicitly granting permissions.
+        if (mPackageManager.getInstallReason(info.packageName,
+                new UserHandle(UserHandle.getUserId(info.uid)))
+                        != PackageManager.INSTALL_REASON_POLICY) {
+            return false;
+        }
+        try {
+            for (final String permission : mPermissions) {
+                if (mPackageManagerService.checkUidPermission(permission, info.uid)
+                        == PackageManager.PERMISSION_GRANTED) {
+                    return true;
+                }
+            }
+        } catch (RemoteException exception) {
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/settings/applications/ApplicationFeatureProvider.java b/src/com/android/settings/applications/ApplicationFeatureProvider.java
index 1db33a6..fccbbd3 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProvider.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProvider.java
@@ -17,8 +17,11 @@
 package com.android.settings.applications;
 
 import android.app.Fragment;
+import android.content.Intent;
 import android.view.View;
 
+import java.util.Set;
+
 public interface ApplicationFeatureProvider {
 
     /**
@@ -35,17 +38,67 @@
      * Asynchronously calculates the total number of apps installed on the device, across all users
      * and managed profiles.
      *
-     * @param installReason Only consider packages with this install reason; may be any install
-     *         reason defined in {@link android.content.pm.PackageManager} or
-     *         {@link #IGNORE_INSTALL_REASON} to count all packages, irrespective of install reason.
+     * @param installReason Only consider apps with this install reason; may be any install reason
+     *         defined in {@link android.content.pm.PackageManager} or
+     *         {@link #IGNORE_INSTALL_REASON} to count all apps, irrespective of install reason.
      * @param callback The callback to invoke with the result
      */
-    void calculateNumberOfInstalledApps(int installReason, NumberOfInstalledAppsCallback callback);
+    void calculateNumberOfInstalledApps(int installReason, NumberOfAppsCallback callback);
 
     /**
-     * Callback that receives the total number of packages installed on the device.
+     * Asynchronously calculates the total number of apps installed on the device, across all users
+     * and managed profiles, that have been granted one or more of the given permissions by the
+     * admin.
+     *
+     * @param permissions Only consider apps that have been granted one or more of these permissions
+     *        by the admin, either at run-time or install-time
+     * @param callback The callback to invoke with the result
      */
-    interface NumberOfInstalledAppsCallback {
-        void onNumberOfInstalledAppsResult(int num);
+    void calculateNumberOfAppsWithAdminGrantedPermissions(String[] permissions,
+            NumberOfAppsCallback callback);
+
+    /**
+     * Return the persistent preferred activities configured by the admin for the current user and
+     * all its managed profiles. A persistent preferred activity is an activity that the admin
+     * configured to always handle a given intent (e.g. open browser), even if the user has other
+     * apps installed that would also be able to handle the intent.
+     *
+     * @param intent The intents for which to find persistent preferred activities
+     *
+     * @return the persistent preferred activites for the given intent
+     */
+    Set<PersistentPreferredActivityInfo> findPersistentPreferredActivities(Intent[] intents);
+
+    /**
+     * Callback that receives the number of packages installed on the device.
+     */
+    interface NumberOfAppsCallback {
+        void onNumberOfAppsResult(int num);
+    }
+
+    public static class PersistentPreferredActivityInfo {
+        public final String packageName;
+        public final int userId;
+
+        public PersistentPreferredActivityInfo(String packageName, int userId) {
+            this.packageName = packageName;
+            this.userId = userId;
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof PersistentPreferredActivityInfo)) {
+                return false;
+            }
+            final PersistentPreferredActivityInfo otherActivityInfo
+                    = (PersistentPreferredActivityInfo) other;
+            return otherActivityInfo.packageName.equals(packageName)
+                    && otherActivityInfo.userId == userId;
+        }
+
+        @Override
+        public int hashCode() {
+            return packageName.hashCode() ^ userId;
+        }
     }
 }
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 902008c..2d2bce0 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -18,21 +18,38 @@
 
 import android.app.Fragment;
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ComponentInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.ArraySet;
 import android.view.View;
 
+import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+
 import java.util.List;
+import java.util.Set;
 
 public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvider {
 
     private final Context mContext;
     private final PackageManagerWrapper mPm;
+    private final IPackageManagerWrapper mPms;
+    private final DevicePolicyManagerWrapper mDpm;
     private final UserManager mUm;
 
-    public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm) {
+    public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm,
+            IPackageManagerWrapper pms, DevicePolicyManagerWrapper dpm) {
         mContext = context.getApplicationContext();
         mPm = pm;
+        mPms = pms;
+        mDpm = dpm;
         mUm = UserManager.get(mContext);
     }
 
@@ -42,22 +59,84 @@
     }
 
     @Override
-    public void calculateNumberOfInstalledApps(int installReason,
-            NumberOfInstalledAppsCallback callback) {
-        new AllUserInstalledAppCounter(installReason, callback).execute();
+    public void calculateNumberOfInstalledApps(int installReason, NumberOfAppsCallback callback) {
+        new AllUserInstalledAppCounter(mContext, installReason, mPm, callback).execute();
     }
 
-    private class AllUserInstalledAppCounter extends InstalledAppCounter {
-        private NumberOfInstalledAppsCallback mCallback;
+    @Override
+    public void calculateNumberOfAppsWithAdminGrantedPermissions(String[] permissions,
+            NumberOfAppsCallback callback) {
+        new AllUserAppWithAdminGrantedPermissionsCounter(mContext, permissions, mPm, mPms, mDpm,
+                callback).execute();
+    }
 
-        AllUserInstalledAppCounter(int installReason, NumberOfInstalledAppsCallback callback) {
-            super(mContext, installReason, ApplicationFeatureProviderImpl.this.mPm);
+    @Override
+    public Set<PersistentPreferredActivityInfo> findPersistentPreferredActivities(
+            Intent[] intents) {
+        final Set<PersistentPreferredActivityInfo> activities = new ArraySet<>();
+        final List<UserHandle> users = mUm.getUserProfiles();
+        for (final Intent intent : intents) {
+            for (final UserHandle user : users) {
+                final int userId = user.getIdentifier();
+                try {
+                    final ResolveInfo resolveInfo = mPms.findPersistentPreferredActivity(intent,
+                            userId);
+                    if (resolveInfo != null) {
+                        ComponentInfo componentInfo = null;
+                        if (resolveInfo.activityInfo != null) {
+                            componentInfo = resolveInfo.activityInfo;
+                        } else if (resolveInfo.serviceInfo != null) {
+                            componentInfo = resolveInfo.serviceInfo;
+                        } else if (resolveInfo.providerInfo != null) {
+                            componentInfo = resolveInfo.providerInfo;
+                        }
+                        if (componentInfo != null) {
+                            activities.add(new PersistentPreferredActivityInfo(
+                                    componentInfo.packageName, userId));
+                        }
+                    }
+                } catch (RemoteException exception) {
+                }
+            }
+
+        }
+        return activities;
+    }
+
+    private static class AllUserInstalledAppCounter extends InstalledAppCounter {
+        private NumberOfAppsCallback mCallback;
+
+        AllUserInstalledAppCounter(Context context, int installReason,
+                PackageManagerWrapper packageManager, NumberOfAppsCallback callback) {
+            super(context, installReason, packageManager);
             mCallback = callback;
         }
 
         @Override
         protected void onCountComplete(int num) {
-            mCallback.onNumberOfInstalledAppsResult(num);
+            mCallback.onNumberOfAppsResult(num);
+        }
+
+        @Override
+        protected List<UserInfo> getUsersToCount() {
+            return mUm.getUsers(true /* excludeDying */);
+        }
+    }
+
+    private static class AllUserAppWithAdminGrantedPermissionsCounter extends
+            AppWithAdminGrantedPermissionsCounter {
+        private NumberOfAppsCallback mCallback;
+
+        AllUserAppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
+                PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
+                DevicePolicyManagerWrapper devicePolicyManager, NumberOfAppsCallback callback) {
+            super(context, permissions, packageManager, packageManagerService, devicePolicyManager);
+            mCallback = callback;
+        }
+
+        @Override
+        protected void onCountComplete(int num) {
+            mCallback.onNumberOfAppsResult(num);
         }
 
         @Override
diff --git a/src/com/android/settings/applications/DefaultAutoFillPreference.java b/src/com/android/settings/applications/DefaultAutoFillPreference.java
new file mode 100644
index 0000000..9ed2e19
--- /dev/null
+++ b/src/com/android/settings/applications/DefaultAutoFillPreference.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.os.Parcelable;
+import android.provider.Settings;
+import android.service.autofill.AutoFillService;
+import android.service.autofill.AutoFillServiceInfo;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.AppListPreferenceWithSettings;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultAutoFillPreference extends AppListPreferenceWithSettings {
+    private static final String TAG = "DefaultAutoFill";
+
+    private static final String SETTING = Settings.Secure.AUTO_FILL_SERVICE;
+
+    public DefaultAutoFillPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        setSavesState(false);
+        setShowItemNone(true);
+
+        refreshData();
+    }
+
+    @Override
+    protected CharSequence getConfirmationMessage(String value) {
+        if (value == null || value.isEmpty()) {
+            return null;
+        }
+
+        int index = findIndexOfValue(value);
+        CharSequence[] entries = getEntries();
+        if (index < 0 || index >= entries.length) {
+            return null;
+        }
+
+        CharSequence entry = entries[index];
+        return getContext().getString(R.string.autofill_confirmation_message, entry);
+    }
+
+    @Override
+    protected boolean persistString(String value) {
+        Settings.Secure.putString(getContext().getContentResolver(), SETTING, value);
+        refreshData();
+        return true;
+    }
+
+    private void refreshData() {
+        ComponentName selectedComponent = getSelectedComponentName();
+        List<AutoFillServiceInfo> infos = getInfos();
+
+        AutoFillServiceInfo selectedInfo = null;
+        int numberOfComponents = infos.size();
+        ComponentName[] components = new ComponentName[numberOfComponents];
+        for (int i = 0; i < numberOfComponents; ++i) {
+            AutoFillServiceInfo info = infos.get(i);
+            ServiceInfo serviceInfo = info.getServiceInfo();
+            ComponentName component =
+                    new ComponentName(serviceInfo.packageName, serviceInfo.name);
+            components[i] = component;
+
+            if (component.equals(selectedComponent)) {
+                selectedInfo = info;
+            }
+        }
+
+        ComponentName selectedComponentSettings = null;
+        if (selectedInfo != null) {
+            String settingsActivity = selectedInfo.getSettingsActivity();
+            selectedComponentSettings = settingsActivity != null
+                    ? new ComponentName(selectedComponent.getPackageName(), settingsActivity)
+                    : null;
+        } else { // selected component not found
+            Log.w(TAG, "Selected AutoFillService not found " + selectedComponent);
+            selectedComponent = null;
+            selectedComponentSettings = null;
+        }
+
+        setComponentNames(components, selectedComponent);
+        setSettingsComponent(selectedComponentSettings);
+        setSummary(getEntry());
+    }
+
+    @Nullable
+    private ComponentName getSelectedComponentName() {
+        String componentString =
+                Settings.Secure.getString(getContext().getContentResolver(), SETTING);
+        if (componentString == null) {
+            return null;
+        }
+
+        return ComponentName.unflattenFromString(componentString);
+    }
+
+    private List<AutoFillServiceInfo> getInfos() {
+        PackageManager pm = getContext().getPackageManager();
+        List<ResolveInfo> resolveInfos = pm.queryIntentServices(
+                new Intent(AutoFillService.SERVICE_INTERFACE),
+                PackageManager.GET_META_DATA);
+        List<AutoFillServiceInfo> infos = new ArrayList<>(resolveInfos.size());
+        for (ResolveInfo resolveInfo : resolveInfos) {
+            ServiceInfo serviceInfo = resolveInfo.serviceInfo;
+            AutoFillServiceInfo info = new AutoFillServiceInfo(pm, serviceInfo);
+            if (info.getParseError() == null) {
+                infos.add(info);
+            } else {
+                Log.i(TAG, "Invalid AutoFillService " + serviceInfo + ": " + info.getParseError());
+            }
+        }
+        return infos;
+    }
+}
diff --git a/src/com/android/settings/applications/DefaultBrowserPreference.java b/src/com/android/settings/applications/DefaultBrowserPreference.java
deleted file mode 100644
index 9d84e1e..0000000
--- a/src/com/android/settings/applications/DefaultBrowserPreference.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.UserHandle;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-
-import com.android.internal.content.PackageMonitor;
-import com.android.settings.AppListPreference;
-import com.android.settings.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class DefaultBrowserPreference extends AppListPreference {
-
-    private static final String TAG = "DefaultBrowserPref";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
-    private static final long DELAY_UPDATE_BROWSER_MILLIS = 500;
-    private static final Intent BROWSE_PROBE = new Intent()
-            .setAction(Intent.ACTION_VIEW)
-            .addCategory(Intent.CATEGORY_BROWSABLE)
-            .setData(Uri.parse("http:"));
-
-    private final Handler mHandler = new Handler();
-    private final PackageManager mPm;
-
-    public DefaultBrowserPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mPm = context.getPackageManager();
-        refreshBrowserApps();
-    }
-
-    @Override
-    public void onAttached() {
-        super.onAttached();
-        updateDefaultBrowserPreference();
-        mPackageMonitor.register(getContext(), getContext().getMainLooper(), false);
-    }
-
-    @Override
-    public void onDetached() {
-        mPackageMonitor.unregister();
-        super.onDetached();
-    }
-
-    @Override
-    protected boolean persistString(String newValue) {
-        final CharSequence packageName = newValue;
-        if (TextUtils.isEmpty(packageName)) {
-            return false;
-        }
-        boolean result = mPm.setDefaultBrowserPackageNameAsUser(
-                packageName.toString(), mUserId);
-        if (result) {
-            setSummary("%s");
-        }
-        return result && super.persistString(newValue);
-    }
-
-    public void refreshBrowserApps() {
-        List<String> browsers = resolveBrowserApps();
-
-        setPackageNames(browsers.toArray(new String[browsers.size()]), null);
-    }
-
-    private void updateDefaultBrowserPreference() {
-        refreshBrowserApps();
-
-        final PackageManager pm = getContext().getPackageManager();
-
-        String packageName = pm.getDefaultBrowserPackageNameAsUser(mUserId);
-        if (!TextUtils.isEmpty(packageName)) {
-            // Check if the default Browser package is still there
-            final Intent intent = new Intent(BROWSE_PROBE)
-                    .setPackage(packageName);
-
-            final ResolveInfo info = mPm.resolveActivityAsUser(intent, 0, mUserId);
-            if (info != null) {
-                setValue(packageName);
-                setSummary("%s");
-            } else {
-                setSummary(R.string.default_browser_title_none);
-            }
-        } else {
-            if (DEBUG) Log.d(TAG, "No default browser app.");
-            setSoleAppLabelAsSummary();
-        }
-    }
-
-    private List<String> resolveBrowserApps() {
-        List<String> result = new ArrayList<>();
-
-        // Resolve that intent and check that the handleAllWebDataURI boolean is set
-        List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(BROWSE_PROBE,
-                PackageManager.MATCH_ALL, mUserId);
-
-        final int count = list.size();
-        for (int i = 0; i < count; i++) {
-            ResolveInfo info = list.get(i);
-            if (info.activityInfo == null || result.contains(info.activityInfo.packageName)
-                    || !info.handleAllWebDataURI) {
-                continue;
-            }
-
-            result.add(info.activityInfo.packageName);
-        }
-
-        return result;
-    }
-
-    @Override
-    protected CharSequence getSoleAppLabel() {
-        // Resolve that intent and check that the handleAllWebDataURI boolean is set
-        List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(BROWSE_PROBE,
-                PackageManager.MATCH_ALL, mUserId);
-        if (list.size() == 1) {
-            return list.get(0).loadLabel(mPm);
-        }
-        return null;
-    }
-
-    private final Runnable mUpdateRunnable = new Runnable() {
-        @Override
-        public void run() {
-            updateDefaultBrowserPreference();
-        }
-    };
-
-    private final PackageMonitor mPackageMonitor = new PackageMonitor() {
-        @Override
-        public void onPackageAdded(String packageName, int uid) {
-            sendUpdate();
-        }
-
-        @Override
-        public void onPackageAppeared(String packageName, int reason) {
-            sendUpdate();
-        }
-
-        @Override
-        public void onPackageDisappeared(String packageName, int reason) {
-            sendUpdate();
-        }
-
-        @Override
-        public void onPackageRemoved(String packageName, int uid) {
-            sendUpdate();
-        }
-
-        private void sendUpdate() {
-            mHandler.postDelayed(mUpdateRunnable, DELAY_UPDATE_BROWSER_MILLIS);
-        }
-    };
-
-    public static boolean hasBrowserPreference(String pkg, Context context) {
-        Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_VIEW);
-        intent.addCategory(Intent.CATEGORY_BROWSABLE);
-        intent.setData(Uri.parse("http:"));
-        intent.setPackage(pkg);
-        final List<ResolveInfo> resolveInfos =
-                context.getPackageManager().queryIntentActivities(intent, 0);
-        return resolveInfos != null && resolveInfos.size() != 0;
-    }
-
-    public static boolean isBrowserDefault(String pkg, Context context) {
-        String defaultPackage = context.getPackageManager()
-                .getDefaultBrowserPackageNameAsUser(UserHandle.myUserId());
-        return defaultPackage != null && defaultPackage.equals(pkg);
-    }
-}
diff --git a/src/com/android/settings/applications/DefaultEmergencyPreference.java b/src/com/android/settings/applications/DefaultEmergencyPreference.java
deleted file mode 100644
index dd4dc2e..0000000
--- a/src/com/android/settings/applications/DefaultEmergencyPreference.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.settings.applications;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.AsyncTask;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.ArraySet;
-import android.util.AttributeSet;
-
-import com.android.settings.AppListPreference;
-import com.android.settings.R;
-import com.android.settings.SelfAvailablePreference;
-import com.android.settings.Utils;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * A preference for choosing the default emergency app
- */
-public class DefaultEmergencyPreference extends AppListPreference
-        implements SelfAvailablePreference {
-
-    private static final boolean DEFAULT_EMERGENCY_APP_IS_CONFIGURABLE = false;
-    private final ContentResolver mContentResolver;
-
-    public static final Intent QUERY_INTENT = new Intent(
-            TelephonyManager.ACTION_EMERGENCY_ASSISTANCE);
-
-    public DefaultEmergencyPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mContentResolver = context.getContentResolver();
-        load();
-    }
-
-    @Override
-    protected CharSequence getConfirmationMessage(String value) {
-        return Utils.isPackageDirectBootAware(getContext(), value) ? null
-                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        String previousValue = Settings.Secure.getString(mContentResolver,
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
-
-        if (!TextUtils.isEmpty(value) && !Objects.equals(value, previousValue)) {
-            Settings.Secure.putString(mContentResolver,
-                    Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
-                    value);
-        }
-        setSummary(getEntry());
-        return true;
-    }
-
-    private void load() {
-        new AsyncTask<Void, Void, Set<String>>() {
-            @Override
-            protected Set<String> doInBackground(Void[] params) {
-                return resolveAssistPackageAndQueryApps();
-            }
-
-            @Override
-            protected void onPostExecute(Set<String> entries) {
-                String currentPkg = Settings.Secure.getString(mContentResolver,
-                        Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
-                setPackageNames(entries.toArray(new String[entries.size()]), currentPkg);
-            }
-        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-    }
-
-    private Set<String> resolveAssistPackageAndQueryApps() {
-        Set<String> packages = new ArraySet<>();
-
-        PackageManager packageManager = getContext().getPackageManager();
-        List<ResolveInfo> infos = packageManager.queryIntentActivities(QUERY_INTENT, 0);
-
-        PackageInfo bestMatch = null;
-        final int size = infos.size();
-        for (int i = 0; i < size; i++) {
-            ResolveInfo info = infos.get(i);
-            if (info == null || info.activityInfo == null
-                    || packages.contains(info.activityInfo.packageName)) {
-                continue;
-            }
-
-            String packageName = info.activityInfo.packageName;
-
-            packages.add(packageName);
-
-            PackageInfo packageInfo;
-            try {
-                packageInfo = packageManager.getPackageInfo(packageName, 0);
-            } catch (PackageManager.NameNotFoundException e) {
-                continue;
-            }
-
-            // Get earliest installed system app.
-            if (isSystemApp(packageInfo) && (bestMatch == null ||
-                    bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
-                bestMatch = packageInfo;
-            }
-        }
-
-        String defaultPackage = Settings.Secure.getString(mContentResolver,
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
-        boolean defaultMissing = TextUtils.isEmpty(defaultPackage)
-                || !packages.contains(defaultPackage);
-        if (bestMatch != null && defaultMissing) {
-            Settings.Secure.putString(mContentResolver,
-                    Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
-                    bestMatch.packageName);
-        }
-
-        return packages;
-    }
-
-    private static boolean isCapable(Context context) {
-        return TelephonyManager.EMERGENCY_ASSISTANCE_ENABLED
-                && context.getResources().getBoolean(
-                com.android.internal.R.bool.config_voice_capable);
-    }
-
-    private static boolean isSystemApp(PackageInfo info) {
-        return info.applicationInfo != null
-                && (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-    }
-
-    public boolean isAvailable(Context context) {
-        return DEFAULT_EMERGENCY_APP_IS_CONFIGURABLE
-                && isCapable(context)
-                && context.getPackageManager().resolveActivity(QUERY_INTENT, 0) != null;
-    }
-
-    public static boolean hasEmergencyPreference(String pkg, Context context) {
-        Intent i = new Intent(QUERY_INTENT);
-        i.setPackage(pkg);
-        final List<ResolveInfo> resolveInfos =
-                context.getPackageManager().queryIntentActivities(i, 0);
-        return resolveInfos != null && resolveInfos.size() != 0;
-    }
-
-    public static boolean isEmergencyDefault(String pkg, Context context) {
-        String defaultPackage = Settings.Secure.getString(context.getContentResolver(),
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
-        return defaultPackage != null && defaultPackage.equals(pkg);
-    }
-}
diff --git a/src/com/android/settings/applications/DefaultHomePreference.java b/src/com/android/settings/applications/DefaultHomePreference.java
deleted file mode 100644
index 46fba66..0000000
--- a/src/com/android/settings/applications/DefaultHomePreference.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings.applications;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.UserInfo;
-import android.os.Build;
-import android.os.UserManager;
-import android.util.AttributeSet;
-
-import com.android.settings.AppListPreference;
-import com.android.settings.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class DefaultHomePreference extends AppListPreference {
-
-    private final ArrayList<ComponentName> mAllHomeComponents = new ArrayList<>();
-    private final IntentFilter mHomeFilter;
-    private final String mPackageName;
-
-    public DefaultHomePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mPackageName = getContext().getPackageName();
-        mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);
-        mHomeFilter.addCategory(Intent.CATEGORY_HOME);
-        mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);
-        refreshHomeOptions();
-    }
-
-    @Override
-    public void performClick() {
-        refreshHomeOptions();
-        super.performClick();
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        if (value != null) {
-            ComponentName component = ComponentName.unflattenFromString(value);
-            getContext().getPackageManager().replacePreferredActivity(mHomeFilter,
-                    IntentFilter.MATCH_CATEGORY_EMPTY,
-                    mAllHomeComponents.toArray(new ComponentName[0]), component);
-            setSummary(getEntry());
-        } else {
-            // If there is only 1 launcher, use its label as summary text.
-            setSoleAppLabelAsSummary();
-        }
-        return super.persistString(value);
-    }
-
-    @Override
-    protected CharSequence getSoleAppLabel() {
-        final PackageManager pm = getContext().getPackageManager();
-        final List<ResolveInfo> homeActivities = new ArrayList<>();
-        final List<CharSequence> appLabels = new ArrayList<>();
-
-        pm.getHomeActivities(homeActivities);
-        for (ResolveInfo candidate : homeActivities) {
-            final ActivityInfo info = candidate.activityInfo;
-            if (info.packageName.equals(mPackageName)) {
-                continue;
-            }
-            appLabels.add(info.loadLabel(pm));
-        }
-        return appLabels.size() == 1 ? appLabels.get(0) : null;
-    }
-
-    public void refreshHomeOptions() {
-        ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
-        PackageManager pm = getContext().getPackageManager();
-        ComponentName currentDefaultHome = pm.getHomeActivities(homeActivities);
-        ArrayList<ComponentName> components = new ArrayList<>();
-        mAllHomeComponents.clear();
-        List<CharSequence> summaries = new ArrayList<>();
-
-        boolean mustSupportManagedProfile = hasManagedProfile();
-        for (ResolveInfo candidate : homeActivities) {
-            final ActivityInfo info = candidate.activityInfo;
-            ComponentName activityName = new ComponentName(info.packageName, info.name);
-            mAllHomeComponents.add(activityName);
-            if (info.packageName.equals(mPackageName)) {
-                continue;
-            }
-            components.add(activityName);
-            if (mustSupportManagedProfile && !launcherHasManagedProfilesFeature(candidate, pm)) {
-                summaries.add(getContext().getString(R.string.home_work_profile_not_supported));
-            } else {
-                summaries.add(null);
-            }
-        }
-        setComponentNames(components.toArray(new ComponentName[0]), currentDefaultHome,
-                summaries.toArray(new CharSequence[0]));
-    }
-
-    private boolean launcherHasManagedProfilesFeature(ResolveInfo resolveInfo, PackageManager pm) {
-        try {
-            ApplicationInfo appInfo = pm.getApplicationInfo(
-                    resolveInfo.activityInfo.packageName, 0 /* default flags */);
-            return versionNumberAtLeastL(appInfo.targetSdkVersion);
-        } catch (PackageManager.NameNotFoundException e) {
-            return false;
-        }
-    }
-
-    private boolean versionNumberAtLeastL(int versionNumber) {
-        return versionNumber >= Build.VERSION_CODES.LOLLIPOP;
-    }
-
-    private boolean hasManagedProfile() {
-        UserManager userManager = getContext().getSystemService(UserManager.class);
-        List<UserInfo> profiles = userManager.getProfiles(getContext().getUserId());
-        for (UserInfo userInfo : profiles) {
-            if (userInfo.isManagedProfile()) return true;
-        }
-        return false;
-    }
-
-    public static boolean hasHomePreference(String pkg, Context context) {
-        ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
-        PackageManager pm = context.getPackageManager();
-        pm.getHomeActivities(homeActivities);
-        for (int i = 0; i < homeActivities.size(); i++) {
-            if (homeActivities.get(i).activityInfo.packageName.equals(pkg)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static boolean isHomeDefault(String pkg, Context context) {
-        ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
-        PackageManager pm = context.getPackageManager();
-        ComponentName def = pm.getHomeActivities(homeActivities);
-
-        return def != null && def.getPackageName().equals(pkg);
-    }
-}
diff --git a/src/com/android/settings/applications/DefaultPhonePreference.java b/src/com/android/settings/applications/DefaultPhonePreference.java
deleted file mode 100644
index e151274..0000000
--- a/src/com/android/settings/applications/DefaultPhonePreference.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.applications;
-
-import android.content.Context;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.telecom.DefaultDialerManager;
-import android.telecom.TelecomManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-
-import com.android.settings.AppListPreference;
-import com.android.settings.R;
-import com.android.settings.SelfAvailablePreference;
-import com.android.settings.Utils;
-
-import java.util.List;
-import java.util.Objects;
-
-public class DefaultPhonePreference extends AppListPreference implements SelfAvailablePreference {
-    public DefaultPhonePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        loadDialerApps();
-    }
-
-    @Override
-    protected CharSequence getConfirmationMessage(String value) {
-        return Utils.isPackageDirectBootAware(getContext(), value) ? null
-                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
-            DefaultDialerManager.setDefaultDialerApplication(getContext(), value, mUserId);
-        }
-        setSummary(getEntry());
-        return true;
-    }
-
-    private void loadDialerApps() {
-        List<String> dialerPackages =
-                DefaultDialerManager.getInstalledDialerApplications(getContext(), mUserId);
-
-        final String[] dialers = new String[dialerPackages.size()];
-        for (int i = 0; i < dialerPackages.size(); i++) {
-            dialers[i] = dialerPackages.get(i);
-        }
-        setPackageNames(dialers, getDefaultPackage(), getSystemPackage());
-    }
-
-    private String getDefaultPackage() {
-        return DefaultDialerManager.getDefaultDialerApplication(getContext(), mUserId);
-    }
-
-    private String getSystemPackage() {
-        TelecomManager tm = TelecomManager.from(getContext());
-        return tm.getSystemDialerPackage();
-    }
-
-    @Override
-    public boolean isAvailable(Context context) {
-        final TelephonyManager tm =
-                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-        if (!tm.isVoiceCapable()) {
-            return false;
-        }
-
-        final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        final boolean hasUserRestriction =
-                um.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS);
-        final CharSequence[] entries = getEntries();
-        return !hasUserRestriction
-                && entries != null
-                && entries.length > 0;
-    }
-
-    public static boolean hasPhonePreference(String pkg, Context context) {
-        List<String> dialerPackages =
-                DefaultDialerManager.getInstalledDialerApplications(context, UserHandle.myUserId());
-        return dialerPackages.contains(pkg);
-    }
-
-    public static boolean isPhoneDefault(String pkg, Context context) {
-        String def = DefaultDialerManager.getDefaultDialerApplication(context,
-                UserHandle.myUserId());
-        return def != null && def.equals(pkg);
-    }
-}
diff --git a/src/com/android/settings/applications/DefaultSmsPreference.java b/src/com/android/settings/applications/DefaultSmsPreference.java
deleted file mode 100644
index 96ac9a2..0000000
--- a/src/com/android/settings/applications/DefaultSmsPreference.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.applications;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-
-import com.android.internal.telephony.SmsApplication;
-import com.android.internal.telephony.SmsApplication.SmsApplicationData;
-import com.android.settings.AppListPreference;
-import com.android.settings.R;
-import com.android.settings.SelfAvailablePreference;
-import com.android.settings.Utils;
-
-import java.util.Collection;
-import java.util.Objects;
-
-public class DefaultSmsPreference extends AppListPreference implements SelfAvailablePreference {
-    public DefaultSmsPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        loadSmsApps();
-    }
-
-    private void loadSmsApps() {
-        Collection<SmsApplicationData> smsApplications =
-                SmsApplication.getApplicationCollection(getContext());
-
-        int count = smsApplications.size();
-        String[] packageNames = new String[count];
-        int i = 0;
-        for (SmsApplicationData smsApplicationData : smsApplications) {
-            packageNames[i++] = smsApplicationData.mPackageName;
-        }
-        setPackageNames(packageNames, getDefaultPackage());
-    }
-
-    private String getDefaultPackage() {
-        ComponentName appName = SmsApplication.getDefaultSmsApplication(getContext(), true);
-        if (appName != null) {
-            return appName.getPackageName();
-        }
-        return null;
-    }
-
-    @Override
-    protected CharSequence getConfirmationMessage(String value) {
-        return Utils.isPackageDirectBootAware(getContext(), value) ? null
-                : getContext().getText(R.string.direct_boot_unaware_dialog_message);
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
-            SmsApplication.setDefaultApplication(value, getContext());
-        }
-        setSummary(getEntry());
-        return true;
-    }
-
-    @Override
-    public boolean isAvailable(Context context) {
-        boolean isRestrictedUser =
-                UserManager.get(context)
-                        .getUserInfo(UserHandle.myUserId()).isRestricted();
-        TelephonyManager tm =
-                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-        return !isRestrictedUser && tm.isSmsCapable();
-    }
-
-    public static boolean hasSmsPreference(String pkg, Context context) {
-        Collection<SmsApplicationData> smsApplications =
-                SmsApplication.getApplicationCollection(context);
-        for (SmsApplicationData data : smsApplications) {
-            if (data.mPackageName.equals(pkg)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static boolean isSmsDefault(String pkg, Context context) {
-        ComponentName appName = SmsApplication.getDefaultSmsApplication(context, true);
-        return appName != null && appName.getPackageName().equals(pkg);
-    }
-}
diff --git a/src/com/android/settings/applications/DrawOverlayDetails.java b/src/com/android/settings/applications/DrawOverlayDetails.java
index dfaa95f..39b8919 100644
--- a/src/com/android/settings/applications/DrawOverlayDetails.java
+++ b/src/com/android/settings/applications/DrawOverlayDetails.java
@@ -31,10 +31,12 @@
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
 import com.android.settings.applications.AppStateOverlayBridge.OverlayState;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
 public class DrawOverlayDetails extends AppInfoWithHeader implements OnPreferenceChangeListener,
@@ -121,11 +123,20 @@
     }
 
     private void setCanDrawOverlay(boolean newState) {
+        logSpecialPermissionChange(newState, mPackageName);
         mAppOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
                 mPackageInfo.applicationInfo.uid, mPackageName, newState
                 ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
     }
 
+    @VisibleForTesting
+    void logSpecialPermissionChange(boolean newState, String packageName) {
+        int logCategory = newState ? MetricsEvent.APP_SPECIAL_PERMISSION_APPDRAW_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_APPDRAW_DENY;
+        FeatureFactory.getFactory(getContext())
+                .getMetricsFeatureProvider().action(getContext(), logCategory, packageName);
+    }
+
     private boolean canDrawOverlay(String pkgName) {
         int result = mAppOpsManager.noteOpNoThrow(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
                 mPackageInfo.applicationInfo.uid, pkgName);
diff --git a/src/com/android/settings/applications/ExternalSourcesDetails.java b/src/com/android/settings/applications/ExternalSourcesDetails.java
new file mode 100644
index 0000000..fd8221c
--- /dev/null
+++ b/src/com/android/settings/applications/ExternalSourcesDetails.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.applications;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+import android.app.AlertDialog;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+
+import com.android.settings.R;
+import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsState;
+
+public class ExternalSourcesDetails extends AppInfoWithHeader
+        implements OnPreferenceChangeListener {
+
+    private static final String KEY_EXTERNAL_SOURCES_SETTINGS_SWITCH =
+            "external_sources_settings_switch";
+    private static final String KEY_EXTERNAL_SOURCES_SETTINGS_DESC =
+            "external_sources_settings_description";
+
+    private AppStateInstallAppsBridge mAppBridge;
+    private AppOpsManager mAppOpsManager;
+    private SwitchPreference mSwitchPref;
+    private Preference mExternalSourcesSettingsDesc;
+    private InstallAppsState mInstallAppsState;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final Context context = getActivity();
+        mAppBridge = new AppStateInstallAppsBridge(context, mState, null);
+        mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+
+        addPreferencesFromResource(R.xml.external_sources_details);
+        mSwitchPref = (SwitchPreference) findPreference(KEY_EXTERNAL_SOURCES_SETTINGS_SWITCH);
+        mExternalSourcesSettingsDesc = findPreference(KEY_EXTERNAL_SOURCES_SETTINGS_DESC);
+
+        getPreferenceScreen().setTitle(R.string.install_other_apps);
+        mSwitchPref.setTitle(R.string.external_source_switch_title);
+        mExternalSourcesSettingsDesc.setSummary(R.string.install_all_warning);
+
+        mSwitchPref.setOnPreferenceChangeListener(this);
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean checked = (Boolean) newValue;
+        if (preference == mSwitchPref) {
+            if (mInstallAppsState != null && checked != mInstallAppsState.canInstallApps()) {
+                setCanInstallApps(checked);
+                refreshUi();
+            }
+            return true;
+        }
+        return false;
+    }
+
+    private void setCanInstallApps(boolean newState) {
+        mAppOpsManager.setMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
+                mPackageInfo.applicationInfo.uid, mPackageName,
+                newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
+    }
+
+    @Override
+    protected boolean refreshUi() {
+        mInstallAppsState = mAppBridge.createInstallAppsStateFor(mPackageName,
+                mPackageInfo.applicationInfo.uid);
+
+        final boolean canWrite = mInstallAppsState.canInstallApps();
+        mSwitchPref.setChecked(canWrite);
+        return true;
+    }
+
+    @Override
+    protected AlertDialog createDialog(int id, int errorCode) {
+        return null;
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.MANAGE_EXTERNAL_SOURCES;
+    }
+}
diff --git a/src/com/android/settings/applications/IPackageManagerWrapper.java b/src/com/android/settings/applications/IPackageManagerWrapper.java
new file mode 100644
index 0000000..f885985
--- /dev/null
+++ b/src/com/android/settings/applications/IPackageManagerWrapper.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.os.RemoteException;
+
+/**
+ * This interface replicates a subset of the android.content.pm.IPackageManager (PMS). The interface
+ * exists so that we can use a thin wrapper around the PMS in production code and a mock in tests.
+ * We cannot directly mock or shadow the PMS, because some of the methods we rely on are newer than
+ * the API version supported by Robolectric.
+ */
+public interface IPackageManagerWrapper {
+
+    /**
+     * Calls {@code IPackageManager.checkUidPermission()}.
+     *
+     * @see android.content.pm.IPackageManager#checkUidPermission
+     */
+    int checkUidPermission(String permName, int uid) throws RemoteException;
+
+    /**
+     * Calls {@code IPackageManager.findPersistentPreferredActivity()}.
+     *
+     * @see android.content.pm.IPackageManager#findPersistentPreferredActivity
+     */
+    ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) throws RemoteException;
+}
diff --git a/src/com/android/settings/applications/IPackageManagerWrapperImpl.java b/src/com/android/settings/applications/IPackageManagerWrapperImpl.java
new file mode 100644
index 0000000..5ea15b9
--- /dev/null
+++ b/src/com/android/settings/applications/IPackageManagerWrapperImpl.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.content.Intent;
+import android.content.pm.IPackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.RemoteException;
+
+public class IPackageManagerWrapperImpl implements IPackageManagerWrapper {
+
+    private final IPackageManager mPms;
+
+    public IPackageManagerWrapperImpl(IPackageManager pms) {
+        mPms = pms;
+    }
+
+    @Override
+    public int checkUidPermission(String permName, int uid) throws RemoteException {
+        return mPms.checkUidPermission(permName, uid);
+    }
+
+    @Override
+    public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId)
+            throws RemoteException {
+        return mPms.findPersistentPreferredActivity(intent, userId);
+    }
+}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index b5f0e76..873c5fd 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -21,8 +21,6 @@
 import android.app.ActivityManager;
 import android.app.AlertDialog;
 import android.app.LoaderManager.LoaderCallbacks;
-import android.app.Notification;
-import android.app.NotificationManager;
 import android.app.admin.DevicePolicyManager;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
@@ -52,9 +50,8 @@
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.provider.Settings;
-import android.service.notification.NotificationListenerService.Ranking;
 import android.support.annotation.VisibleForTesting;
+import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.support.v7.preference.PreferenceCategory;
@@ -78,7 +75,6 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
-import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.AppHeader;
 import com.android.settings.DeviceAdminAdd;
 import com.android.settings.R;
@@ -86,6 +82,11 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.PermissionsSummaryHelper.PermissionsResultCallback;
+import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.datausage.DataUsageList;
@@ -743,6 +744,8 @@
     }
 
     private void forceStopPackage(String pkgName) {
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                MetricsEvent.ACTION_APP_FORCE_STOP, pkgName);
         ActivityManager am = (ActivityManager) getActivity().getSystemService(
                 Context.ACTIVITY_SERVICE);
         am.forceStopPackage(pkgName);
@@ -906,34 +909,49 @@
             return;
         }
         final PreferenceScreen screen = getPreferenceScreen();
-        if (DefaultHomePreference.hasHomePreference(mPackageName, getContext())) {
+        final Context context = getContext();
+        if (DefaultHomePreferenceController.hasHomePreference(mPackageName, context)) {
             screen.addPreference(new ShortcutPreference(getPrefContext(),
                     AdvancedAppSettings.class, "default_home", R.string.home_app,
                     R.string.configure_apps));
         }
-        if (DefaultBrowserPreference.hasBrowserPreference(mPackageName, getContext())) {
+        if (DefaultBrowserPreferenceController.hasBrowserPreference(mPackageName, context)) {
             screen.addPreference(new ShortcutPreference(getPrefContext(),
                     AdvancedAppSettings.class, "default_browser", R.string.default_browser_title,
                     R.string.configure_apps));
         }
-        if (DefaultPhonePreference.hasPhonePreference(mPackageName, getContext())) {
+        if (DefaultPhonePreferenceController.hasPhonePreference(mPackageName, context)) {
             screen.addPreference(new ShortcutPreference(getPrefContext(),
                     AdvancedAppSettings.class, "default_phone_app", R.string.default_phone_title,
                     R.string.configure_apps));
         }
-        if (DefaultEmergencyPreference.hasEmergencyPreference(mPackageName, getContext())) {
+        if (DefaultEmergencyPreferenceController.hasEmergencyPreference(mPackageName, context)) {
             screen.addPreference(new ShortcutPreference(getPrefContext(),
                     AdvancedAppSettings.class, "default_emergency_app",
                     R.string.default_emergency_app, R.string.configure_apps));
         }
-        if (DefaultSmsPreference.hasSmsPreference(mPackageName, getContext())) {
+        if (DefaultSmsPreferenceController.hasSmsPreference(mPackageName, context)) {
             screen.addPreference(new ShortcutPreference(getPrefContext(),
                     AdvancedAppSettings.class, "default_sms_app", R.string.sms_application_title,
                     R.string.configure_apps));
         }
+
+        // Get the package info with the activities
+        PackageInfo packageInfoWithActivities = null;
+        try {
+            packageInfoWithActivities = mPm.getPackageInfoAsUser(mPackageName,
+                    PackageManager.GET_ACTIVITIES, UserHandle.myUserId());
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Exception while retrieving the package info of " + mPackageName, e);
+        }
+
         boolean hasDrawOverOtherApps = hasPermission(permission.SYSTEM_ALERT_WINDOW);
         boolean hasWriteSettings = hasPermission(permission.WRITE_SETTINGS);
-        if (hasDrawOverOtherApps || hasWriteSettings) {
+        boolean hasPictureInPictureActivities = (packageInfoWithActivities != null) &&
+                PictureInPictureSettings.checkPackageHasPictureInPictureActivities(
+                        packageInfoWithActivities.packageName,
+                        packageInfoWithActivities.activities);
+        if (hasDrawOverOtherApps || hasWriteSettings || hasPictureInPictureActivities) {
             PreferenceCategory category = new PreferenceCategory(getPrefContext());
             category.setTitle(R.string.advanced_apps);
             screen.addPreference(category);
@@ -966,6 +984,23 @@
                 });
                 category.addPreference(pref);
             }
+            if (hasPictureInPictureActivities) {
+                final SwitchPreference pref = new SwitchPreference(getPrefContext());
+                pref.setPersistent(false);
+                pref.setTitle(R.string.picture_in_picture_app_detail_title);
+                pref.setSummary(R.string.picture_in_picture_app_detail_summary);
+                pref.setChecked(PictureInPictureSettings.getEnterPipOnHideStateForPackage(
+                        getContext(), mPackageInfo.applicationInfo.uid, mPackageName));
+                pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                    @Override
+                    public boolean onPreferenceChange(Preference preference, Object newValue) {
+                        PictureInPictureSettings.setEnterPipOnHideStateForPackage(getContext(),
+                                mPackageInfo.applicationInfo.uid, mPackageName, (Boolean) newValue);
+                        return true;
+                    }
+                });
+                category.addPreference(pref);
+            }
         }
 
         addAppInstallerInfoPref(screen);
@@ -1019,29 +1054,33 @@
     }
 
     private void updateDynamicPrefs() {
+        final Context context = getContext();
         Preference pref = findPreference("default_home");
+
         if (pref != null) {
-            pref.setSummary(DefaultHomePreference.isHomeDefault(mPackageName, getContext())
+            pref.setSummary(DefaultHomePreferenceController.isHomeDefault(mPackageName, context)
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_browser");
         if (pref != null) {
-            pref.setSummary(DefaultBrowserPreference.isBrowserDefault(mPackageName, getContext())
+            pref.setSummary(
+                    DefaultBrowserPreferenceController.isBrowserDefault(mPackageName, context)
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_phone_app");
         if (pref != null) {
-            pref.setSummary(DefaultPhonePreference.isPhoneDefault(mPackageName, getContext())
+            pref.setSummary(
+                    DefaultPhonePreferenceController.isPhoneDefault(mPackageName, context)
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_emergency_app");
         if (pref != null) {
-            pref.setSummary(DefaultEmergencyPreference.isEmergencyDefault(mPackageName,
+            pref.setSummary(DefaultEmergencyPreferenceController.isEmergencyDefault(mPackageName,
                     getContext()) ? R.string.yes : R.string.no);
         }
         pref = findPreference("default_sms_app");
         if (pref != null) {
-            pref.setSummary(DefaultSmsPreference.isSmsDefault(mPackageName, getContext())
+            pref.setSummary(DefaultSmsPreferenceController.isSmsDefault(mPackageName, context)
                     ? R.string.yes : R.string.no);
         }
         pref = findPreference("system_alert_window");
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 43bb02a..f6b303c 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -31,7 +31,6 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.PreferenceFrameLayout;
-import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -57,7 +56,9 @@
 import com.android.settings.AppHeader;
 import com.android.settings.R;
 import com.android.settings.Settings.AllApplicationsActivity;
+import com.android.settings.Settings.GamesStorageActivity;
 import com.android.settings.Settings.HighPowerApplicationsActivity;
+import com.android.settings.Settings.ManageExternalSourcesActivity;
 import com.android.settings.Settings.NotificationAppListActivity;
 import com.android.settings.Settings.OverlaySettingsActivity;
 import com.android.settings.Settings.StorageUseActivity;
@@ -66,6 +67,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
+import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsState;
 import com.android.settings.applications.AppStateUsageBridge.UsageState;
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.dashboard.SummaryLoader;
@@ -136,6 +138,7 @@
     public static final int FILTER_APPS_USAGE_ACCESS = 8;
     public static final int FILTER_APPS_WITH_OVERLAY = 9;
     public static final int FILTER_APPS_WRITE_SETTINGS = 10;
+    public static final int FILTER_APPS_INSTALL_SOURCES = 12;
 
     // This is the string labels for the filter modes above, the order must be kept in sync.
     public static final int[] FILTER_LABELS = new int[]{
@@ -151,6 +154,7 @@
             R.string.filter_all_apps,      // Usage access screen, never displayed
             R.string.filter_overlay_apps,   // Apps with overlay permission
             R.string.filter_write_settings_apps,   // Apps that can write system settings
+            R.string.filter_install_sources_apps, // Apps that are trusted sources of apks
     };
     // This is the actual mapping to filters from FILTER_ constants above, the order must
     // be kept in sync.
@@ -169,6 +173,7 @@
             AppStateUsageBridge.FILTER_APP_USAGE, // Apps with Domain URLs
             AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW,   // Apps that can draw overlays
             AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS,  // Apps that can write system settings
+            AppStateInstallAppsBridge.FILTER_APP_SOURCES,
     };
 
     // sort order
@@ -210,6 +215,8 @@
     public static final int LIST_TYPE_HIGH_POWER = 5;
     public static final int LIST_TYPE_OVERLAY = 6;
     public static final int LIST_TYPE_WRITE_SETTINGS = 7;
+    public static final int LIST_TYPE_MANAGE_SOURCES = 8;
+    public static final int LIST_TYPE_GAMES = 9;
 
     private View mRootView;
 
@@ -259,6 +266,11 @@
             mListType = LIST_TYPE_OVERLAY;
         } else if (className.equals(WriteSettingsActivity.class.getName())) {
             mListType = LIST_TYPE_WRITE_SETTINGS;
+        } else if (className.equals(ManageExternalSourcesActivity.class.getName())) {
+            mListType = LIST_TYPE_MANAGE_SOURCES;
+        } else if (className.equals(GamesStorageActivity.class.getName())) {
+            mListType = LIST_TYPE_GAMES;
+            mSortOrder = R.id.sort_order_size;
         } else {
             mListType = LIST_TYPE_MAIN;
         }
@@ -351,6 +363,9 @@
         if (mListType == LIST_TYPE_STORAGE) {
             mApplications.setOverrideFilter(new VolumeFilter(mVolumeUuid));
         }
+        if (mListType == LIST_TYPE_GAMES) {
+            mApplications.setOverrideFilter(ApplicationsState.FILTER_GAMES);
+        }
     }
 
     @Override
@@ -379,6 +394,8 @@
                 return FILTER_APPS_WITH_OVERLAY;
             case LIST_TYPE_WRITE_SETTINGS:
                 return FILTER_APPS_WRITE_SETTINGS;
+            case LIST_TYPE_MANAGE_SOURCES:
+                return FILTER_APPS_INSTALL_SOURCES;
             default:
                 return FILTER_APPS_ALL;
         }
@@ -389,6 +406,7 @@
             case LIST_TYPE_MAIN:
             case LIST_TYPE_NOTIFICATION:
             case LIST_TYPE_STORAGE:
+            case LIST_TYPE_GAMES:
                 return mSortOrder == R.id.sort_order_alpha;
             default:
                 return false;
@@ -403,6 +421,7 @@
             case LIST_TYPE_NOTIFICATION:
                 return MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS;
             case LIST_TYPE_STORAGE:
+            case LIST_TYPE_GAMES:
                 return MetricsEvent.APPLICATIONS_STORAGE_APPS;
             case LIST_TYPE_USAGE_ACCESS:
                 return MetricsEvent.USAGE_ACCESS;
@@ -412,6 +431,8 @@
                 return MetricsEvent.SYSTEM_ALERT_WINDOW_APPS;
             case LIST_TYPE_WRITE_SETTINGS:
                 return MetricsEvent.SYSTEM_ALERT_WINDOW_APPS;
+            case LIST_TYPE_MANAGE_SOURCES:
+                return MetricsEvent.MANAGE_EXTERNAL_SOURCES;
             default:
                 return MetricsEvent.VIEW_UNKNOWN;
         }
@@ -503,6 +524,11 @@
             case LIST_TYPE_WRITE_SETTINGS:
                 startAppInfoFragment(WriteSettingsDetails.class, R.string.write_system_settings);
                 break;
+            case LIST_TYPE_MANAGE_SOURCES:
+                startAppInfoFragment(ExternalSourcesDetails.class, R.string.install_other_apps);
+            case LIST_TYPE_GAMES:
+                startAppInfoFragment(AppStorageSettings.class, R.string.game_storage_settings);
+                break;
             // TODO: Figure out if there is a way where we can spin up the profile's settings
             // process ahead of time, to avoid a long load of data when user clicks on a managed app.
             // Maybe when they load the list of apps that contains managed profile apps.
@@ -796,6 +822,8 @@
                 mExtraInfoBridge = new AppStateOverlayBridge(mContext, mState, this);
             } else if (mManageApplications.mListType == LIST_TYPE_WRITE_SETTINGS) {
                 mExtraInfoBridge = new AppStateWriteSettingsBridge(mContext, mState, this);
+            } else if (mManageApplications.mListType == LIST_TYPE_MANAGE_SOURCES) {
+                mExtraInfoBridge = new AppStateInstallAppsBridge(mContext, mState, this);
             } else {
                 mExtraInfoBridge = null;
             }
@@ -1206,6 +1234,11 @@
                             holder.entry));
                     break;
 
+                case LIST_TYPE_MANAGE_SOURCES:
+                    holder.summary
+                            .setText(((InstallAppsState) holder.entry.extraInfo).getSummary());
+                    break;
+
                 default:
                     holder.updateSizeText(mManageApplications.mInvalidSizeStr, mWhichSize);
                     break;
diff --git a/src/com/android/settings/applications/PackageManagerWrapper.java b/src/com/android/settings/applications/PackageManagerWrapper.java
index 4166ccf..2be92ed 100644
--- a/src/com/android/settings/applications/PackageManagerWrapper.java
+++ b/src/com/android/settings/applications/PackageManagerWrapper.java
@@ -16,7 +16,9 @@
 
 package com.android.settings.applications;
 
+import android.content.ComponentName;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -58,11 +60,42 @@
      */
     List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId);
 
-
     /**
      * Calls {@code PackageManager.getInstallReason()}.
      *
      * @see android.content.pm.PackageManager#getInstallReason
      */
     int getInstallReason(String packageName, UserHandle user);
+
+    /**
+     * Calls {@code PackageManager.getApplicationInfoAsUser}
+     */
+    ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId)
+            throws PackageManager.NameNotFoundException;
+
+    /**
+     * Calls {@code PackageManager.setDefaultBrowserPackageNameAsUser}
+     */
+    boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId);
+
+    /**
+     * Calls {@code PackageManager.getDefaultBrowserPackageNameAsUser}
+     */
+    String getDefaultBrowserPackageNameAsUser(int userId);
+
+    /**
+     * Calls {@code PackageManager.getHomeActivities}
+     */
+    ComponentName getHomeActivities(List<ResolveInfo> homeActivities);
+
+    /**
+     * Calls {@code PackageManager.queryIntentServicesAsUser}
+     */
+    List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user);
+
+    /**
+     * Calls {@code PackageManager.replacePreferredActivity}
+     */
+    void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty,
+            ComponentName[] componentNames, ComponentName component);
 }
diff --git a/src/com/android/settings/applications/PackageManagerWrapperImpl.java b/src/com/android/settings/applications/PackageManagerWrapperImpl.java
index 2427cce..698c14c 100644
--- a/src/com/android/settings/applications/PackageManagerWrapperImpl.java
+++ b/src/com/android/settings/applications/PackageManagerWrapperImpl.java
@@ -16,7 +16,9 @@
 
 package com.android.settings.applications;
 
+import android.content.ComponentName;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -56,4 +58,36 @@
     public int getInstallReason(String packageName, UserHandle user) {
         return mPm.getInstallReason(packageName, user);
     }
+
+    @Override
+    public ApplicationInfo getApplicationInfoAsUser(String packageName, int i, int userId)
+            throws PackageManager.NameNotFoundException {
+        return mPm.getApplicationInfoAsUser(packageName, i, userId);
+    }
+
+    @Override
+    public boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId) {
+        return mPm.setDefaultBrowserPackageNameAsUser(packageName, userId);
+    }
+
+    @Override
+    public String getDefaultBrowserPackageNameAsUser(int userId) {
+        return mPm.getDefaultBrowserPackageNameAsUser(userId);
+    }
+
+    @Override
+    public ComponentName getHomeActivities(List<ResolveInfo> homeActivities) {
+        return mPm.getHomeActivities(homeActivities);
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user) {
+        return mPm.queryIntentServicesAsUser(intent, i, user);
+    }
+
+    @Override
+    public void replacePreferredActivity(IntentFilter homeFilter, int matchCategoryEmpty,
+            ComponentName[] componentNames, ComponentName component) {
+        mPm.replacePreferredActivity(homeFilter, matchCategoryEmpty, componentNames, component);
+    }
 }
diff --git a/src/com/android/settings/applications/PictureInPictureSettings.java b/src/com/android/settings/applications/PictureInPictureSettings.java
new file mode 100644
index 0000000..df73572
--- /dev/null
+++ b/src/com/android/settings/applications/PictureInPictureSettings.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.applications;
+
+import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.MODE_ERRORED;
+import static android.app.AppOpsManager.OP_ENTER_PICTURE_IN_PICTURE_ON_HIDE;
+import static android.content.pm.PackageManager.GET_ACTIVITIES;
+
+import android.annotation.Nullable;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.ArrayMap;
+import android.view.View;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.notification.EmptyTextSettings;
+import com.android.settings.overlay.FeatureFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class PictureInPictureSettings extends EmptyTextSettings {
+
+    private static final String TAG = PictureInPictureSettings.class.getSimpleName();
+    @VisibleForTesting
+    static final List<String> IGNORE_PACKAGE_LIST = new ArrayList<>();
+    static {
+        IGNORE_PACKAGE_LIST.add("com.android.systemui");
+    }
+
+    private Context mContext;
+    private PackageManager mPackageManager;
+
+    /**
+     * @return true if the package has any activities that declare that they support
+     *         picture-in-picture.
+     */
+    static boolean checkPackageHasPictureInPictureActivities(String packageName,
+            ActivityInfo[] activities) {
+        ActivityInfoWrapper[] wrappedActivities = null;
+        if (activities != null) {
+            wrappedActivities = new ActivityInfoWrapper[activities.length];
+            for (int i = 0; i < activities.length; i++) {
+                wrappedActivities[i] = new ActivityInfoWrapperImpl(activities[i]);
+            }
+        }
+        return checkPackageHasPictureInPictureActivities(packageName, wrappedActivities);
+    }
+
+    /**
+     * @return true if the package has any activities that declare that they support
+     *         picture-in-picture.
+     */
+    @VisibleForTesting
+    static boolean checkPackageHasPictureInPictureActivities(String packageName,
+            ActivityInfoWrapper[] activities) {
+        // Skip if it's in the ignored list
+        if (IGNORE_PACKAGE_LIST.contains(packageName)) {
+            return false;
+        }
+
+        // Iterate through all the activities and check if it is resizeable and supports
+        // picture-in-picture
+        if (activities != null) {
+            for (int i = activities.length - 1; i >= 0; i--) {
+                if (activities[i].supportsPictureInPicture()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Sets whether the app associated with the given {@param packageName} is allowed to enter
+     * picture-in-picture when it is hidden.
+     */
+    static void setEnterPipOnHideStateForPackage(Context context, int uid, String packageName,
+            boolean value) {
+        final AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
+        final int newMode = value ? MODE_ALLOWED : MODE_ERRORED;
+        appOps.setMode(OP_ENTER_PICTURE_IN_PICTURE_ON_HIDE,
+                uid, packageName, newMode);
+    }
+
+    /**
+     * @return whether the app associated with the given {@param packageName} is allowed to enter
+     *         picture-in-picture when it is hidden.
+     */
+    static boolean getEnterPipOnHideStateForPackage(Context context, int uid, String packageName) {
+        final AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
+        return appOps.checkOpNoThrow(OP_ENTER_PICTURE_IN_PICTURE_ON_HIDE,
+                uid, packageName) == MODE_ALLOWED;
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        mContext = getActivity();
+        mPackageManager = mContext.getPackageManager();
+        setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext));
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        // Clear the prefs
+        final PreferenceScreen screen = getPreferenceScreen();
+        screen.removeAll();
+
+        // Fetch the set of applications which have at least one activity that declare that they
+        // support picture-in-picture
+        final ArrayMap<String, Boolean> packageToState = new ArrayMap<>();
+        final ArrayList<ApplicationInfo> pipApps = new ArrayList<>();
+        final List<PackageInfo> installedPackages = mPackageManager.getInstalledPackagesAsUser(
+                GET_ACTIVITIES, UserHandle.myUserId());
+        for (PackageInfo packageInfo : installedPackages) {
+            if (checkPackageHasPictureInPictureActivities(packageInfo.packageName,
+                    packageInfo.activities)) {
+                final String packageName = packageInfo.applicationInfo.packageName;
+                final boolean state = getEnterPipOnHideStateForPackage(mContext,
+                        packageInfo.applicationInfo.uid, packageName);
+                pipApps.add(packageInfo.applicationInfo);
+                packageToState.put(packageName, state);
+            }
+        }
+        Collections.sort(pipApps, new PackageItemInfo.DisplayNameComparator(mPackageManager));
+
+        // Rebuild the list of prefs
+        final Context prefContext = getPrefContext();
+        for (final ApplicationInfo appInfo : pipApps) {
+            final String packageName = appInfo.packageName;
+            final CharSequence label = appInfo.loadLabel(mPackageManager);
+            final SwitchPreference pref = new SwitchPreference(prefContext);
+            pref.setPersistent(false);
+            pref.setIcon(appInfo.loadIcon(mPackageManager));
+            pref.setTitle(label);
+            pref.setChecked(packageToState.get(packageName));
+            pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    logSpecialPermissionChange((Boolean) newValue, packageName);
+                    setEnterPipOnHideStateForPackage(mContext, appInfo.uid, packageName,
+                            (Boolean) newValue);
+                    return true;
+                }
+            });
+            screen.addPreference(pref);
+        }
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        setEmptyText(R.string.picture_in_picture_empty_text);
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.SETTINGS_MANAGE_PICTURE_IN_PICTURE;
+    }
+
+    @VisibleForTesting
+    void logSpecialPermissionChange(boolean newState, String packageName) {
+        int logCategory = newState
+                ? MetricsEvent.APP_PICTURE_IN_PICTURE_ON_HIDE_ALLOW
+                : MetricsEvent.APP_PICTURE_IN_PICTURE_ON_HIDE_DENY;
+        FeatureFactory.getFactory(getContext())
+                .getMetricsFeatureProvider().action(getContext(), logCategory, packageName);
+    }
+}
diff --git a/src/com/android/settings/applications/PremiumSmsAccess.java b/src/com/android/settings/applications/PremiumSmsAccess.java
index fa97537..2b0942f 100644
--- a/src/com/android/settings/applications/PremiumSmsAccess.java
+++ b/src/com/android/settings/applications/PremiumSmsAccess.java
@@ -24,13 +24,17 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.view.View;
+
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.telephony.SmsUsageMonitor;
 import com.android.settings.DividerPreference;
 import com.android.settings.R;
 import com.android.settings.applications.AppStateBaseBridge.Callback;
 import com.android.settings.applications.AppStateSmsPremBridge.SmsState;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.notification.EmptyTextSettings;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.applications.ApplicationsState.Callbacks;
@@ -81,11 +85,33 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         PremiumSmsPreference pref = (PremiumSmsPreference) preference;
-        mSmsBackend.setSmsState(pref.mAppEntry.info.packageName,
-                Integer.parseInt((String) newValue));
+        int smsState = Integer.parseInt((String) newValue);
+        logSpecialPermissionChange(smsState, pref.mAppEntry.info.packageName);
+        mSmsBackend.setSmsState(pref.mAppEntry.info.packageName, smsState);
         return true;
     }
 
+    @VisibleForTesting
+    void logSpecialPermissionChange(int smsState, String packageName) {
+        int category = SmsUsageMonitor.PREMIUM_SMS_PERMISSION_UNKNOWN;
+        switch (smsState) {
+            case SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ASK_USER:
+                category = MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_PREMIUM_SMS_ASK;
+                break;
+            case SmsUsageMonitor.PREMIUM_SMS_PERMISSION_NEVER_ALLOW:
+                category = MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_PREMIUM_SMS_DENY;
+                break;
+            case SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ALWAYS_ALLOW:
+                category = MetricsProto.MetricsEvent.
+                        APP_SPECIAL_PERMISSION_PREMIUM_SMS_ALWAYS_ALLOW;
+                break;
+        }
+        if (category != SmsUsageMonitor.PREMIUM_SMS_PERMISSION_UNKNOWN) {
+            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(
+                    getContext(), category, packageName);
+        }
+    }
+
     private void updatePrefs(ArrayList<AppEntry> apps) {
         if (apps == null) return;
         setEmptyText(R.string.premium_sms_none);
diff --git a/src/com/android/settings/applications/UsageAccessDetails.java b/src/com/android/settings/applications/UsageAccessDetails.java
index 2fa0253..e40ae37 100644
--- a/src/com/android/settings/applications/UsageAccessDetails.java
+++ b/src/com/android/settings/applications/UsageAccessDetails.java
@@ -33,9 +33,12 @@
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.applications.AppStateUsageBridge.UsageState;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 
 public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenceChangeListener,
         OnPreferenceClickListener {
@@ -119,10 +122,19 @@
     }
 
     private void setHasAccess(boolean newState) {
+        logSpecialPermissionChange(newState, mPackageName);
         mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS, mPackageInfo.applicationInfo.uid,
                 mPackageName, newState ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
     }
 
+    @VisibleForTesting
+    void logSpecialPermissionChange(boolean newState, String packageName) {
+        int logCategory = newState ? MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_DENY;
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                logCategory, packageName);
+    }
+
     @Override
     protected boolean refreshUi() {
         mUsageState = mUsageBridge.getUsageInfo(mPackageName,
diff --git a/src/com/android/settings/applications/VrListenerSettings.java b/src/com/android/settings/applications/VrListenerSettings.java
index 08d1367..99340b1 100644
--- a/src/com/android/settings/applications/VrListenerSettings.java
+++ b/src/com/android/settings/applications/VrListenerSettings.java
@@ -15,11 +15,14 @@
  */
 package com.android.settings.applications;
 
+import android.content.ComponentName;
 import android.provider.Settings;
 import android.service.vr.VrListenerService;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.utils.ManagedServiceSettings;
 
 public class VrListenerSettings extends ManagedServiceSettings {
@@ -48,4 +51,18 @@
     public int getMetricsCategory() {
         return MetricsEvent.VR_MANAGE_LISTENERS;
     }
+
+    @Override
+    protected boolean setEnabled(ComponentName service, String title, boolean enable) {
+        logSpecialPermissionChange(enable, service.getPackageName());
+        return super.setEnabled(service, title, enable);
+    }
+
+    @VisibleForTesting
+    void logSpecialPermissionChange(boolean enable, String packageName) {
+        int logCategory = enable ? MetricsEvent.APP_SPECIAL_PERMISSION_VRHELPER_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_VRHELPER_DENY;
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                logCategory, packageName);
+    }
 }
diff --git a/src/com/android/settings/applications/WriteSettingsDetails.java b/src/com/android/settings/applications/WriteSettingsDetails.java
index 9f9016d..aea05b3 100644
--- a/src/com/android/settings/applications/WriteSettingsDetails.java
+++ b/src/com/android/settings/applications/WriteSettingsDetails.java
@@ -35,6 +35,7 @@
 import com.android.settings.R;
 import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
 import com.android.settings.applications.AppStateWriteSettingsBridge.WriteSettingsState;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
 import java.util.List;
@@ -117,11 +118,19 @@
     }
 
     private void setCanWriteSettings(boolean newState) {
+        logSpecialPermissionChange(newState, mPackageName);
         mAppOpsManager.setMode(AppOpsManager.OP_WRITE_SETTINGS,
                 mPackageInfo.applicationInfo.uid, mPackageName, newState
                 ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED);
     }
 
+    void logSpecialPermissionChange(boolean newState, String packageName) {
+        int logCategory = newState ? MetricsEvent.APP_SPECIAL_PERMISSION_SETTINGS_CHANGE_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_SETTINGS_CHANGE_DENY;
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                logCategory, packageName);
+    }
+
     private boolean canWriteSettings(String pkgName) {
         int result = mAppOpsManager.noteOpNoThrow(AppOpsManager.OP_WRITE_SETTINGS,
                 mPackageInfo.applicationInfo.uid, pkgName);
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
new file mode 100644
index 0000000..7801591
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.app.AppGlobals;
+import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.RemoteException;
+import android.os.UserHandle;
+
+/**
+ * Data model representing an app in DefaultAppPicker UI.
+ */
+class DefaultAppInfo {
+
+    public final int userId;
+    public final ComponentName componentName;
+    public final PackageItemInfo packageItemInfo;
+    public final String summary;
+
+    public DefaultAppInfo(int uid, ComponentName cn, String summary) {
+        packageItemInfo = null;
+        userId = uid;
+        componentName = cn;
+        this.summary = summary;
+    }
+
+    public DefaultAppInfo(PackageItemInfo info) {
+        userId = UserHandle.myUserId();
+        packageItemInfo = info;
+        componentName = null;
+        summary = null;
+    }
+
+    public CharSequence loadLabel(PackageManager pm) {
+        if (componentName != null) {
+            try {
+                final ActivityInfo actInfo = AppGlobals.getPackageManager().getActivityInfo(
+                        componentName, 0, userId);
+                if (actInfo != null) {
+                    return actInfo.loadLabel(pm);
+                } else {
+                    final ApplicationInfo appInfo = pm.getApplicationInfoAsUser(
+                            componentName.getPackageName(), 0, userId);
+                    return appInfo.loadLabel(pm);
+                }
+            } catch (RemoteException | PackageManager.NameNotFoundException e) {
+                return null;
+            }
+        } else if (packageItemInfo != null) {
+            return packageItemInfo.loadLabel(pm);
+        } else {
+            return null;
+        }
+
+    }
+
+    public Drawable loadIcon(PackageManager pm) {
+        if (componentName != null) {
+            try {
+                final ActivityInfo actInfo = AppGlobals.getPackageManager().getActivityInfo(
+                        componentName, 0, userId);
+                if (actInfo != null) {
+                    return actInfo.loadIcon(pm);
+                } else {
+                    final ApplicationInfo appInfo = pm.getApplicationInfoAsUser(
+                            componentName.getPackageName(), 0, userId);
+                    return appInfo.loadIcon(pm);
+                }
+            } catch (RemoteException | PackageManager.NameNotFoundException e) {
+                return null;
+            }
+        }
+        if (packageItemInfo != null) {
+            return packageItemInfo.loadIcon(pm);
+        } else {
+            return null;
+        }
+    }
+
+    public String getKey() {
+        if (componentName != null) {
+            return componentName.flattenToString();
+        } else if (packageItemInfo != null) {
+            return packageItemInfo.packageName;
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
new file mode 100644
index 0000000..b322dab
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.applications.PackageManagerWrapper;
+import com.android.settings.applications.PackageManagerWrapperImpl;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.widget.RadioButtonPreference;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A generic app picker fragment that shows a list of app as radio button group.
+ */
+public abstract class DefaultAppPickerFragment extends InstrumentedPreferenceFragment implements
+        RadioButtonPreference.OnClickListener {
+
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    static final String EXTRA_FOR_WORK = "for_work";
+
+    private final Map<String, DefaultAppInfo> mCandidates = new ArrayMap<>();
+
+    protected PackageManagerWrapper mPm;
+    protected UserManager mUserManager;
+    protected int mUserId;
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mPm = new PackageManagerWrapperImpl(context.getPackageManager());
+        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        final Bundle arguments = getArguments();
+
+        boolean mForWork = false;
+        if (arguments != null) {
+            mForWork = arguments.getBoolean(EXTRA_FOR_WORK);
+        }
+        final UserHandle managedProfile = Utils.getManagedProfile(mUserManager);
+        mUserId = mForWork && managedProfile != null
+                ? managedProfile.getIdentifier()
+                : UserHandle.myUserId();
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        final View view = super.onCreateView(inflater, container, savedInstanceState);
+        setHasOptionsMenu(true);
+        return view;
+    }
+
+    @Override
+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        super.onCreatePreferences(savedInstanceState, rootKey);
+        addPreferencesFromResource(R.xml.app_picker_prefs);
+        mCandidates.clear();
+        final List<DefaultAppInfo> candidateList = getCandidates();
+        if (candidateList != null) {
+            for (DefaultAppInfo info : candidateList) {
+                mCandidates.put(info.getKey(), info);
+            }
+        }
+        final String defaultAppKey = getDefaultAppKey();
+        final String systemDefaultAppKey = getSystemDefaultAppKey();
+        final PreferenceScreen screen = getPreferenceScreen();
+        screen.removeAll();
+        if (shouldShowItemNone()) {
+            final RadioButtonPreference nonePref = new RadioButtonPreference(getPrefContext());
+            nonePref.setIcon(R.drawable.ic_remove_circle);
+            nonePref.setTitle(R.string.app_list_preference_none);
+            nonePref.setChecked(TextUtils.isEmpty(defaultAppKey));
+            nonePref.setOnClickListener(this);
+            screen.addPreference(nonePref);
+        }
+        for (Map.Entry<String, DefaultAppInfo> app : mCandidates.entrySet()) {
+            final RadioButtonPreference pref = new RadioButtonPreference(getPrefContext());
+            final String appKey = app.getKey();
+
+            pref.setTitle(app.getValue().loadLabel(mPm.getPackageManager()));
+            pref.setIcon(app.getValue().loadIcon(mPm.getPackageManager()));
+            pref.setKey(appKey);
+            if (TextUtils.equals(defaultAppKey, appKey)) {
+                pref.setChecked(true);
+            }
+            if (TextUtils.equals(systemDefaultAppKey, appKey)) {
+                pref.setSummary(R.string.system_app);
+            }
+            pref.setOnClickListener(this);
+            screen.addPreference(pref);
+        }
+    }
+
+    @Override
+    public void onRadioButtonClicked(RadioButtonPreference selected) {
+        final String selectedKey = selected.getKey();
+        final String confirmationMessage = getConfirmationMessage(mCandidates.get(selectedKey));
+        final Activity activity = getActivity();
+        if (TextUtils.isEmpty(confirmationMessage)) {
+            onRadioButtonConfirmed(selectedKey);
+        } else if (activity != null) {
+            final DialogFragment fragment = ConfirmationDialogFragment.newInstance(
+                    this, selectedKey, confirmationMessage);
+            fragment.show(activity.getFragmentManager(), ConfirmationDialogFragment.TAG);
+        }
+    }
+
+    private void onRadioButtonConfirmed(String selectedKey) {
+        final boolean success = setDefaultAppKey(selectedKey);
+        if (success) {
+            final PreferenceScreen screen = getPreferenceScreen();
+            if (screen != null) {
+                final int count = screen.getPreferenceCount();
+                for (int i = 0; i < count; i++) {
+                    final Preference pref = screen.getPreference(i);
+                    if (pref instanceof RadioButtonPreference) {
+                        final RadioButtonPreference radioPref = (RadioButtonPreference) pref;
+                        final boolean newCheckedState =
+                                TextUtils.equals(pref.getKey(), selectedKey);
+                        if (radioPref.isChecked() != newCheckedState) {
+                            radioPref.setChecked(TextUtils.equals(pref.getKey(), selectedKey));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    protected boolean shouldShowItemNone() {
+        return false;
+    }
+
+    protected String getSystemDefaultAppKey() {
+        return null;
+    }
+
+    protected abstract List<DefaultAppInfo> getCandidates();
+
+    protected abstract String getDefaultAppKey();
+
+    protected abstract boolean setDefaultAppKey(String key);
+
+    protected String getConfirmationMessage(DefaultAppInfo appInfo) {
+        return null;
+    }
+
+    public static class ConfirmationDialogFragment extends InstrumentedDialogFragment
+            implements DialogInterface.OnClickListener {
+
+        public static final String TAG = "DefaultAppConfirm";
+        public static final String EXTRA_KEY = "extra_key";
+        public static final String EXTRA_MESSAGE = "extra_message";
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsProto.MetricsEvent.DEFAULT_APP_PICKER_CONFIRMATION_DIALOG;
+        }
+
+        public static ConfirmationDialogFragment newInstance(DefaultAppPickerFragment parent,
+                String key, String message) {
+            final ConfirmationDialogFragment fragment = new ConfirmationDialogFragment();
+            final Bundle argument = new Bundle();
+            argument.putString(EXTRA_KEY, key);
+            argument.putString(EXTRA_MESSAGE, message);
+            fragment.setArguments(argument);
+            fragment.setTargetFragment(parent, 0);
+            return fragment;
+        }
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            final Bundle bundle = getArguments();
+            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+                    .setMessage(bundle.getString(EXTRA_MESSAGE))
+                    .setPositiveButton(android.R.string.ok, this)
+                    .setNegativeButton(android.R.string.cancel, null);
+            return builder.create();
+        }
+
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            final Fragment fragment = getTargetFragment();
+            if (fragment instanceof DefaultAppPickerFragment) {
+                final Bundle bundle = getArguments();
+                ((DefaultAppPickerFragment) fragment).onRadioButtonConfirmed(
+                        bundle.getString(EXTRA_KEY));
+            }
+        }
+    }
+
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
new file mode 100644
index 0000000..a9433ac
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.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.applications.defaultapps;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.settings.applications.PackageManagerWrapper;
+import com.android.settings.applications.PackageManagerWrapperImpl;
+import com.android.settings.core.PreferenceController;
+
+public abstract class DefaultAppPreferenceController extends PreferenceController {
+
+    private static final String TAG = "DefaultAppPrefControl";
+
+    protected final PackageManagerWrapper mPackageManager;
+    protected final UserManager mUserManager;
+
+    protected int mUserId;
+
+    public DefaultAppPreferenceController(Context context) {
+        super(context);
+        mPackageManager = new PackageManagerWrapperImpl(context.getPackageManager());
+        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mUserId = UserHandle.myUserId();
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final DefaultAppInfo app = getDefaultAppInfo();
+        CharSequence defaultAppLabel = null;
+        if (app != null) {
+            defaultAppLabel = app.loadLabel(mPackageManager.getPackageManager());
+        }
+        if (!TextUtils.isEmpty(defaultAppLabel)) {
+            preference.setSummary(defaultAppLabel);
+        } else {
+            Log.d(TAG, "No default app");
+        }
+    }
+
+    protected abstract DefaultAppInfo getDefaultAppInfo();
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
new file mode 100644
index 0000000..70d9415
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Fragment for choosing default browser.
+ */
+public class DefaultBrowserPicker extends DefaultAppPickerFragment {
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DEFAULT_BROWSER_PICKER;
+    }
+
+    @Override
+    protected String getDefaultAppKey() {
+        return mPm.getDefaultBrowserPackageNameAsUser(mUserId);
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String packageName) {
+        return mPm.setDefaultBrowserPackageNameAsUser(packageName, mUserId);
+    }
+
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        final List<DefaultAppInfo> candidates = new ArrayList<>();
+
+        // Resolve that intent and check that the handleAllWebDataURI boolean is set
+        final List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(
+                DefaultBrowserPreferenceController.BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId);
+
+        final int count = list.size();
+        for (int i = 0; i < count; i++) {
+            ResolveInfo info = list.get(i);
+            if (info.activityInfo == null || !info.handleAllWebDataURI) {
+                continue;
+            }
+            try {
+                candidates.add(new DefaultAppInfo(
+                        mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
+            } catch (PackageManager.NameNotFoundException e) {
+                // Skip unknown packages.
+            }
+        }
+
+        return candidates;
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
new file mode 100644
index 0000000..dca300b
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.UserHandle;
+import android.support.v7.preference.Preference;
+import android.text.TextUtils;
+
+import java.util.List;
+
+public class DefaultBrowserPreferenceController extends DefaultAppPreferenceController {
+
+    static final Intent BROWSE_PROBE = new Intent()
+            .setAction(Intent.ACTION_VIEW)
+            .addCategory(Intent.CATEGORY_BROWSABLE)
+            .setData(Uri.parse("http:"));
+
+    public DefaultBrowserPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "default_browser";
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        final DefaultAppInfo defaultApp = getDefaultAppInfo();
+        final CharSequence defaultAppLabel = defaultApp != null
+                ? defaultApp.loadLabel(mPackageManager.getPackageManager()) : null;
+        if (TextUtils.isEmpty(defaultAppLabel)) {
+            final String onlyAppLabel = getOnlyAppLabel();
+            if (!TextUtils.isEmpty(onlyAppLabel)) {
+                preference.setSummary(onlyAppLabel);
+            }
+        }
+    }
+
+    private String getOnlyAppLabel() {
+        // Resolve that intent and check that the handleAllWebDataURI boolean is set
+        final List<ResolveInfo> list = mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE,
+                PackageManager.MATCH_ALL, mUserId);
+        if (list != null && list.size() == 1) {
+            return list.get(0).loadLabel(mPackageManager.getPackageManager()).toString();
+        }
+        return null;
+    }
+
+    @Override
+    protected DefaultAppInfo getDefaultAppInfo() {
+        try {
+            return new DefaultAppInfo(mPackageManager.getPackageManager().getApplicationInfo(
+                    mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId), 0));
+        } catch (PackageManager.NameNotFoundException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Whether or not the pkg contains browser capability
+     */
+    public static boolean hasBrowserPreference(String pkg, Context context) {
+        final Intent intent = new Intent(BROWSE_PROBE);
+        intent.setPackage(pkg);
+        final List<ResolveInfo> resolveInfos =
+                context.getPackageManager().queryIntentActivities(intent, 0);
+        return resolveInfos != null && resolveInfos.size() != 0;
+    }
+
+    /**
+     * Whether or not the pkg is the default browser
+     */
+    public static boolean isBrowserDefault(String pkg, Context context) {
+        String defaultPackage = context.getPackageManager()
+                .getDefaultBrowserPackageNameAsUser(UserHandle.myUserId());
+        return defaultPackage != null && defaultPackage.equals(pkg);
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
new file mode 100644
index 0000000..b3cf882
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.ContentResolver;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultEmergencyPicker extends DefaultAppPickerFragment {
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DEFAULT_EMERGENCY_APP_PICKER;
+    }
+
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        final List<DefaultAppInfo> candidates = new ArrayList<>();
+        final List<ResolveInfo> infos = mPm.getPackageManager().queryIntentActivities(
+                DefaultEmergencyPreferenceController.QUERY_INTENT, 0);
+        PackageInfo bestMatch = null;
+        for (ResolveInfo info : infos) {
+            try {
+                final PackageInfo packageInfo =
+                        mPm.getPackageManager().getPackageInfo(info.activityInfo.packageName, 0);
+                final ApplicationInfo appInfo = packageInfo.applicationInfo;
+                candidates.add(new DefaultAppInfo(appInfo));
+                // Get earliest installed system app.
+                if (isSystemApp(appInfo) && (bestMatch == null ||
+                        bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
+                    bestMatch = packageInfo;
+                }
+            } catch (PackageManager.NameNotFoundException e) {
+                // Skip unknown packages.
+            }
+            if (bestMatch != null) {
+                final String defaultKey = getDefaultAppKey();
+                if (TextUtils.isEmpty(defaultKey)) {
+                    setDefaultAppKey(bestMatch.packageName);
+                }
+            }
+        }
+        return candidates;
+    }
+
+    @Override
+    protected String getConfirmationMessage(DefaultAppInfo info) {
+        return Utils.isPackageDirectBootAware(getContext(), info.getKey()) ? null
+                : getContext().getString(R.string.direct_boot_unaware_dialog_message);
+    }
+
+    @Override
+    protected String getDefaultAppKey() {
+        return Settings.Secure.getString(getContext().getContentResolver(),
+                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String key) {
+        final ContentResolver contentResolver = getContext().getContentResolver();
+        final String previousValue = Settings.Secure.getString(contentResolver,
+                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+
+        if (!TextUtils.isEmpty(key) && !TextUtils.equals(key, previousValue)) {
+            Settings.Secure.putString(contentResolver,
+                    Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
+                    key);
+            return true;
+        }
+        return false;
+    }
+
+    private boolean isSystemApp(ApplicationInfo info) {
+        return info != null && (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
new file mode 100644
index 0000000..7713dbd
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+
+import java.util.List;
+
+public class DefaultEmergencyPreferenceController extends DefaultAppPreferenceController {
+
+    private static final boolean DEFAULT_EMERGENCY_APP_IS_CONFIGURABLE = false;
+
+    public static final Intent QUERY_INTENT = new Intent(
+            TelephonyManager.ACTION_EMERGENCY_ASSISTANCE);
+
+    public DefaultEmergencyPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return DEFAULT_EMERGENCY_APP_IS_CONFIGURABLE
+                && isCapable()
+                && mPackageManager.getPackageManager().resolveActivity(QUERY_INTENT, 0) != null;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "default_emergency_app";
+    }
+
+    @Override
+    protected DefaultAppInfo getDefaultAppInfo() {
+        return null;
+    }
+
+    private boolean isCapable() {
+        return TelephonyManager.EMERGENCY_ASSISTANCE_ENABLED
+                && mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_voice_capable);
+    }
+
+    public static boolean hasEmergencyPreference(String pkg, Context context) {
+        Intent i = new Intent(QUERY_INTENT);
+        i.setPackage(pkg);
+        final List<ResolveInfo> resolveInfos =
+                context.getPackageManager().queryIntentActivities(i, 0);
+        return resolveInfos != null && resolveInfos.size() != 0;
+    }
+
+    public static boolean isEmergencyDefault(String pkg, Context context) {
+        String defaultPackage = Settings.Secure.getString(context.getContentResolver(),
+                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+        return defaultPackage != null && defaultPackage.equals(pkg);
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
new file mode 100644
index 0000000..5e48bf1
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
+import android.os.Build;
+import android.text.TextUtils;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultHomePicker extends DefaultAppPickerFragment {
+
+    private String mPackageName;
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mPackageName = context.getPackageName();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DEFAULT_HOME_PICKER;
+    }
+
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        final boolean mustSupportManagedProfile = hasManagedProfile();
+        final List<DefaultAppInfo> candidates = new ArrayList<>();
+        final List<ResolveInfo> homeActivities = new ArrayList<>();
+        mPm.getHomeActivities(homeActivities);
+
+        for (ResolveInfo resolveInfo : homeActivities) {
+            final ActivityInfo info = resolveInfo.activityInfo;
+            final ComponentName activityName = new ComponentName(info.packageName, info.name);
+            if (info.packageName.equals(mPackageName)) {
+                continue;
+            }
+
+            final String summary;
+            if (mustSupportManagedProfile && !launcherHasManagedProfilesFeature(resolveInfo)) {
+                summary = getContext().getString(R.string.home_work_profile_not_supported);
+            } else {
+                summary = null;
+            }
+            final DefaultAppInfo candidate = new DefaultAppInfo(mUserId, activityName, summary);
+            candidates.add(candidate);
+        }
+        return candidates;
+    }
+
+    @Override
+    protected String getDefaultAppKey() {
+        final ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
+        final ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
+        if (currentDefaultHome != null) {
+            return currentDefaultHome.flattenToString();
+        }
+        return null;
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String key) {
+        if (!TextUtils.isEmpty(key)) {
+            final ComponentName component = ComponentName.unflattenFromString(key);
+            final List<ResolveInfo> homeActivities = new ArrayList<>();
+            mPm.getHomeActivities(homeActivities);
+            final List<ComponentName> allComponents = new ArrayList<>();
+            for (ResolveInfo info : homeActivities) {
+                final ActivityInfo appInfo = info.activityInfo;
+                ComponentName activityName = new ComponentName(appInfo.packageName, appInfo.name);
+                allComponents.add(activityName);
+            }
+            mPm.replacePreferredActivity(
+                    DefaultHomePreferenceController.HOME_FILTER,
+                    IntentFilter.MATCH_CATEGORY_EMPTY,
+                    allComponents.toArray(new ComponentName[0]),
+                    component);
+            return true;
+        }
+        return false;
+    }
+
+    private boolean hasManagedProfile() {
+        final Context context = getContext();
+        List<UserInfo> profiles = mUserManager.getProfiles(context.getUserId());
+        for (UserInfo userInfo : profiles) {
+            if (userInfo.isManagedProfile()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean launcherHasManagedProfilesFeature(ResolveInfo resolveInfo) {
+        try {
+            ApplicationInfo appInfo = mPm.getPackageManager().getApplicationInfo(
+                    resolveInfo.activityInfo.packageName, 0 /* default flags */);
+            return versionNumberAtLeastL(appInfo.targetSdkVersion);
+        } catch (PackageManager.NameNotFoundException e) {
+            return false;
+        }
+    }
+
+    private boolean versionNumberAtLeastL(int versionNumber) {
+        return versionNumber >= Build.VERSION_CODES.LOLLIPOP;
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
new file mode 100644
index 0000000..055c23b
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.support.v7.preference.Preference;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultHomePreferenceController extends DefaultAppPreferenceController {
+
+    static final IntentFilter HOME_FILTER;
+
+    private final String mPackageName;
+
+    static {
+        HOME_FILTER = new IntentFilter(Intent.ACTION_MAIN);
+        HOME_FILTER.addCategory(Intent.CATEGORY_HOME);
+        HOME_FILTER.addCategory(Intent.CATEGORY_DEFAULT);
+    }
+
+    public DefaultHomePreferenceController(Context context) {
+        super(context);
+        mPackageName = mContext.getPackageName();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "default_home";
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        final DefaultAppInfo defaultApp = getDefaultAppInfo();
+        final CharSequence defaultAppLabel = defaultApp != null
+                ? defaultApp.loadLabel(mPackageManager.getPackageManager()) : null;
+        if (TextUtils.isEmpty(defaultAppLabel)) {
+            final String onlyAppLabel = getOnlyAppLabel();
+            if (!TextUtils.isEmpty(onlyAppLabel)) {
+                preference.setSummary(onlyAppLabel);
+            }
+        }
+    }
+
+    @Override
+    protected DefaultAppInfo getDefaultAppInfo() {
+        final ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
+        final ComponentName currentDefaultHome = mPackageManager.getHomeActivities(homeActivities);
+
+        return new DefaultAppInfo(mUserId, currentDefaultHome, null /* summary */);
+    }
+
+    private String getOnlyAppLabel() {
+        final List<ResolveInfo> homeActivities = new ArrayList<>();
+        final List<ActivityInfo> appLabels = new ArrayList<>();
+
+        mPackageManager.getHomeActivities(homeActivities);
+        for (ResolveInfo candidate : homeActivities) {
+            final ActivityInfo info = candidate.activityInfo;
+            if (info.packageName.equals(mPackageName)) {
+                continue;
+            }
+            appLabels.add(info);
+        }
+        return appLabels.size() == 1
+                ? appLabels.get(0).loadLabel(mPackageManager.getPackageManager()).toString()
+                : null;
+    }
+
+    public static boolean hasHomePreference(String pkg, Context context) {
+        ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
+        PackageManager pm = context.getPackageManager();
+        pm.getHomeActivities(homeActivities);
+        for (int i = 0; i < homeActivities.size(); i++) {
+            if (homeActivities.get(i).activityInfo.packageName.equals(pkg)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static boolean isHomeDefault(String pkg, Context context) {
+        ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
+        PackageManager pm = context.getPackageManager();
+        ComponentName def = pm.getHomeActivities(homeActivities);
+
+        return def != null && def.getPackageName().equals(pkg);
+    }
+}
diff --git a/src/com/android/settings/applications/DefaultNotificationAssistantPreference.java b/src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPicker.java
similarity index 62%
rename from src/com/android/settings/applications/DefaultNotificationAssistantPreference.java
rename to src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPicker.java
index 91fc0c8..af67917 100644
--- a/src/com/android/settings/applications/DefaultNotificationAssistantPreference.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPicker.java
@@ -1,5 +1,5 @@
-/**
- * Copyright (C) 2016 The Android Open Source Project
+/*
+ * 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.
@@ -14,65 +14,48 @@
  * limitations under the License.
  */
 
-package com.android.settings.applications;
-
-import com.android.settings.AppListPreference;
+package com.android.settings.applications.defaultapps;
 
 import android.app.ActivityManager;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.provider.Settings;
 import android.service.notification.NotificationAssistantService;
-import android.util.AttributeSet;
 import android.util.Slog;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import com.android.settings.R;
 import com.android.settings.utils.ManagedServiceSettings;
 
-public class DefaultNotificationAssistantPreference extends AppListPreference {
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultNotificationAssistantPicker extends DefaultAppPickerFragment {
     private static final String TAG = "DefaultNotiAssist";
 
-    private PackageManager mPm;
-    private final ManagedServiceSettings.Config mConfig;
-    private final Context mContext;
+    private final ManagedServiceSettings.Config mConfig = getConfig();
 
-    public DefaultNotificationAssistantPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mContext = context;
-        mPm = context.getPackageManager();
-        mConfig = getConfig();
-        setShowItemNone(true);
-        updateList(getServices());
+    @Override
+    public int getMetricsCategory() {
+        return 0;
     }
 
     @Override
-    protected boolean persistString(String value) {
-        Settings.Secure.putString(mContext.getContentResolver(), mConfig.setting, value);
-        setSummary(getEntry());
+    protected String getDefaultAppKey() {
+        return Settings.Secure.getString(getContext().getContentResolver(), mConfig.setting);
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String value) {
+        Settings.Secure.putString(getContext().getContentResolver(), mConfig.setting, value);
         return true;
     }
 
-    private void updateList(List<ServiceInfo> services) {
-        final ComponentName[] assistants = new ComponentName[services.size()];
-        for (int i = 0; i < services.size(); i++) {
-            assistants[i] = new ComponentName(services.get(i).packageName, services.get(i).name);
-        }
-        final String assistant =
-                Settings.Secure.getString(mContext.getContentResolver(), mConfig.setting);
-        setComponentNames(assistants, assistant == null ? null
-                : ComponentName.unflattenFromString(assistant));
-    }
-
-    private List<ServiceInfo> getServices() {
-        List<ServiceInfo> services = new ArrayList<>();
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        List<DefaultAppInfo> candidates = new ArrayList<>();
         final int user = ActivityManager.getCurrentUser();
 
         List<ResolveInfo> installedServices = mPm.queryIntentServicesAsUser(
@@ -91,9 +74,16 @@
                         + mConfig.permission);
                 continue;
             }
-            services.add(info);
+
+            candidates.add(new DefaultAppInfo(
+                    mUserId, new ComponentName(info.packageName, info.name), null /* summary */));
         }
-        return services;
+        return candidates;
+    }
+
+    @Override
+    protected boolean shouldShowItemNone() {
+        return true;
     }
 
     private ManagedServiceSettings.Config getConfig() {
@@ -108,4 +98,4 @@
         c.emptyText = R.string.no_notification_listeners;
         return c;
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
new file mode 100644
index 0000000..0fa9390
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.telecom.DefaultDialerManager;
+import android.telecom.TelecomManager;
+import android.text.TextUtils;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DefaultPhonePicker extends DefaultAppPickerFragment {
+
+    private DefaultKeyUpdater mDefaultKeyUpdater;
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DEFAULT_PHONE_PICKER;
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mDefaultKeyUpdater = new DefaultKeyUpdater(
+                (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE));
+    }
+
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        final List<DefaultAppInfo> candidates = new ArrayList<>();
+        final List<String> dialerPackages =
+                DefaultDialerManager.getInstalledDialerApplications(getContext(), mUserId);
+        for (String packageName : dialerPackages) {
+            try {
+                candidates.add(new DefaultAppInfo(
+                        mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
+            } catch (PackageManager.NameNotFoundException e) {
+                // Skip unknown packages.
+            }
+        }
+        return candidates;
+    }
+
+    @Override
+    protected String getDefaultAppKey() {
+        return mDefaultKeyUpdater.getDefaultDialerApplication(getContext(), mUserId);
+    }
+
+    @Override
+    protected String getSystemDefaultAppKey() {
+        return mDefaultKeyUpdater.getSystemDialerPackage();
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String key) {
+        if (!TextUtils.isEmpty(key) && !TextUtils.equals(key, getDefaultAppKey())) {
+            return mDefaultKeyUpdater.setDefaultDialerApplication(getContext(), key, mUserId);
+        }
+        return false;
+    }
+
+    /**
+     * Wrapper class to handle default phone app update.
+     */
+    static class DefaultKeyUpdater {
+        private final TelecomManager mTelecomManager;
+
+        public DefaultKeyUpdater(TelecomManager telecomManager) {
+            mTelecomManager = telecomManager;
+        }
+
+        public String getSystemDialerPackage() {
+            return mTelecomManager.getSystemDialerPackage();
+        }
+
+        public String getDefaultDialerApplication(Context context, int uid) {
+            return DefaultDialerManager.getDefaultDialerApplication(context, uid);
+        }
+
+        public boolean setDefaultDialerApplication(Context context, String key, int uid) {
+            return DefaultDialerManager.setDefaultDialerApplication(context, key, uid);
+        }
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
new file mode 100644
index 0000000..fa0d28f
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.telecom.DefaultDialerManager;
+import android.telephony.TelephonyManager;
+
+import java.util.List;
+
+public class DefaultPhonePreferenceController extends DefaultAppPreferenceController {
+
+    public DefaultPhonePreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        final TelephonyManager tm =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        if (!tm.isVoiceCapable()) {
+            return false;
+        }
+        final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        final boolean hasUserRestriction =
+                um.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS);
+
+        return !hasUserRestriction;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "default_phone_app";
+    }
+
+    @Override
+    protected DefaultAppInfo getDefaultAppInfo() {
+        try {
+            return new DefaultAppInfo(mPackageManager.getPackageManager().getApplicationInfo(
+                    DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId), 0));
+        } catch (PackageManager.NameNotFoundException e) {
+            return null;
+        }
+    }
+
+    public static boolean hasPhonePreference(String pkg, Context context) {
+        List<String> dialerPackages =
+                DefaultDialerManager.getInstalledDialerApplications(context, UserHandle.myUserId());
+        return dialerPackages.contains(pkg);
+    }
+
+    public static boolean isPhoneDefault(String pkg, Context context) {
+        String def = DefaultDialerManager.getDefaultDialerApplication(context,
+                UserHandle.myUserId());
+        return def != null && def.equals(pkg);
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
new file mode 100644
index 0000000..31bb6f6
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.text.TextUtils;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.telephony.SmsApplication;
+import com.android.settings.R;
+import com.android.settings.Utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class DefaultSmsPicker extends DefaultAppPickerFragment {
+
+    private DefaultKeyUpdater mDefaultKeyUpdater = new DefaultKeyUpdater();
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsProto.MetricsEvent.DEFAULT_SMS_PICKER;
+    }
+
+    @Override
+    protected List<DefaultAppInfo> getCandidates() {
+        final Collection<SmsApplication.SmsApplicationData> smsApplications =
+                SmsApplication.getApplicationCollection(getContext());
+        final List<DefaultAppInfo> candidates = new ArrayList<>(smsApplications.size());
+
+        for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) {
+            try {
+                candidates.add(new DefaultAppInfo(
+                        mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId)));
+            } catch (PackageManager.NameNotFoundException e) {
+                // Skip unknown packages.
+            }
+        }
+
+        return candidates;
+    }
+
+    @Override
+    protected String getDefaultAppKey() {
+        return mDefaultKeyUpdater.getDefaultApplication(getContext());
+    }
+
+    @Override
+    protected boolean setDefaultAppKey(String key) {
+        if (!TextUtils.isEmpty(key) && !TextUtils.equals(key, getDefaultAppKey())) {
+            mDefaultKeyUpdater.setDefaultApplication(getContext(), key);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected String getConfirmationMessage(DefaultAppInfo info) {
+        return Utils.isPackageDirectBootAware(getContext(), info.getKey()) ? null
+                : getContext().getString(R.string.direct_boot_unaware_dialog_message);
+    }
+
+    /**
+     * Wrapper class to handle default phone app update.
+     */
+    static class DefaultKeyUpdater {
+
+        public String getDefaultApplication(Context context) {
+            final ComponentName appName = SmsApplication.getDefaultSmsApplication(context, true);
+            if (appName != null) {
+                return appName.getPackageName();
+            }
+            return null;
+        }
+
+        public void setDefaultApplication(Context context, String key) {
+            SmsApplication.setDefaultApplication(key, context);
+        }
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
new file mode 100644
index 0000000..90b9d83
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+import com.android.internal.telephony.SmsApplication;
+
+import java.util.Collection;
+
+public class DefaultSmsPreferenceController extends DefaultAppPreferenceController {
+
+    public DefaultSmsPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        boolean isRestrictedUser = mUserManager.getUserInfo(mUserId).isRestricted();
+        TelephonyManager tm =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        return !isRestrictedUser && tm.isSmsCapable();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "default_sms_app";
+    }
+
+    @Override
+    protected DefaultAppInfo getDefaultAppInfo() {
+        final ComponentName app = SmsApplication.getDefaultSmsApplication(mContext, true);
+        if (app != null) {
+            return new DefaultAppInfo(mUserId, app, null /* summary */);
+        }
+        return null;
+    }
+
+    public static boolean hasSmsPreference(String pkg, Context context) {
+        Collection<SmsApplication.SmsApplicationData> smsApplications =
+                SmsApplication.getApplicationCollection(context);
+        for (SmsApplication.SmsApplicationData data : smsApplications) {
+            if (data.mPackageName.equals(pkg)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static boolean isSmsDefault(String pkg, Context context) {
+        ComponentName appName = SmsApplication.getDefaultSmsApplication(context, true);
+        return appName != null && appName.getPackageName().equals(pkg);
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
new file mode 100644
index 0000000..0cee3c5
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+import android.os.UserHandle;
+
+import com.android.settings.Utils;
+
+public class DefaultWorkBrowserPreferenceController extends DefaultBrowserPreferenceController {
+
+    public DefaultWorkBrowserPreferenceController(Context context) {
+        super(context);
+        final UserHandle managedProfile = Utils.getManagedProfile(mUserManager);
+        if (managedProfile != null) {
+            mUserId = managedProfile.getIdentifier();
+        }
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return Utils.getManagedProfile(mUserManager) != null;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "work_default_browser";
+    }
+}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java
new file mode 100644
index 0000000..f793fa3
--- /dev/null
+++ b/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.content.Context;
+
+public class DefaultWorkPhonePreferenceController extends DefaultPhonePreferenceController {
+
+    public DefaultWorkPhonePreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return "work_default_phone_app";
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index b956aa5..3fc0abf 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -284,12 +284,12 @@
             }
         }
         if (btClass != null) {
-            if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP)) {
-                return new Pair<Integer, String>(R.drawable.ic_bt_headphones_a2dp, HEADPHONE);
-            }
-            if (btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) {
+          if (btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) {
                 return new Pair<Integer, String>(R.drawable.ic_bt_headset_hfp, HEADSET);
             }
+          if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP)) {
+                return new Pair<Integer, String>(R.drawable.ic_bt_headphones_a2dp, HEADPHONE);
+            }
         }
         return new Pair<Integer, String>(R.drawable.ic_settings_bluetooth, BLUETOOTH);
     }
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index e3791e9..83c0560 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -31,7 +31,7 @@
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.search.Index;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SwitchWidgetController;
 import com.android.settingslib.WirelessUtils;
 import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -41,9 +41,9 @@
  * preference. It turns on/off Bluetooth and ensures the summary of the
  * preference reflects the current state.
  */
-public final class BluetoothEnabler implements SwitchBar.OnSwitchChangeListener {
+public final class BluetoothEnabler implements SwitchWidgetController.OnSwitchChangeListener {
     private final Switch mSwitch;
-    private final SwitchBar mSwitchBar;
+    private final SwitchWidgetController mSwitchWidget;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
     private Context mContext;
     private boolean mValidListener;
@@ -76,36 +76,36 @@
         }
     };
 
-    public BluetoothEnabler(Context context, SwitchBar switchBar,
-            MetricsFeatureProvider metricsFeatureProvider) {
+    public BluetoothEnabler(Context context, SwitchWidgetController switchWidget,
+            MetricsFeatureProvider metricsFeatureProvider, LocalBluetoothManager manager) {
         mContext = context;
         mMetricsFeatureProvider = metricsFeatureProvider;
-        mSwitchBar = switchBar;
-        mSwitch = switchBar.getSwitch();
+        mSwitchWidget = switchWidget;
+        mSwitch = mSwitchWidget.getSwitch();
+        mSwitchWidget.setListener(this);
         mValidListener = false;
 
-        LocalBluetoothManager manager = Utils.getLocalBtManager(context);
         if (manager == null) {
             // Bluetooth is not supported
             mLocalAdapter = null;
-            mSwitch.setEnabled(false);
+            mSwitchWidget.setEnabled(false);
         } else {
             mLocalAdapter = manager.getBluetoothAdapter();
         }
         mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
     }
 
-    public void setupSwitchBar() {
-        mSwitchBar.show();
+    public void setupSwitchController() {
+        mSwitchWidget.setupView();
     }
 
-    public void teardownSwitchBar() {
-        mSwitchBar.hide();
+    public void teardownSwitchController() {
+        mSwitchWidget.teardownView();
     }
 
     public void resume(Context context) {
         if (mLocalAdapter == null) {
-            mSwitch.setEnabled(false);
+            mSwitchWidget.setEnabled(false);
             return;
         }
 
@@ -116,7 +116,7 @@
         // Bluetooth state is not sticky, so set it manually
         handleStateChanged(mLocalAdapter.getBluetoothState());
 
-        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchWidget.startListening();
         mContext.registerReceiver(mReceiver, mIntentFilter);
         mValidListener = true;
     }
@@ -125,47 +125,48 @@
         if (mLocalAdapter == null) {
             return;
         }
-
-        mSwitchBar.removeOnSwitchChangeListener(this);
-        mContext.unregisterReceiver(mReceiver);
-        mValidListener = false;
+        if (mValidListener) {
+            mSwitchWidget.stopListening();
+            mContext.unregisterReceiver(mReceiver);
+            mValidListener = false;
+        }
     }
 
     void handleStateChanged(int state) {
         switch (state) {
             case BluetoothAdapter.STATE_TURNING_ON:
-                mSwitch.setEnabled(false);
+                mSwitchWidget.setEnabled(false);
                 break;
             case BluetoothAdapter.STATE_ON:
                 setChecked(true);
-                mSwitch.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(true);
                 break;
             case BluetoothAdapter.STATE_TURNING_OFF:
-                mSwitch.setEnabled(false);
+                mSwitchWidget.setEnabled(false);
                 break;
             case BluetoothAdapter.STATE_OFF:
                 setChecked(false);
-                mSwitch.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(false);
                 break;
             default:
                 setChecked(false);
-                mSwitch.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(false);
         }
     }
 
     private void setChecked(boolean isChecked) {
-        if (isChecked != mSwitch.isChecked()) {
+        if (isChecked != mSwitchWidget.isChecked()) {
             // set listener to null, so onCheckedChanged won't be called
             // if the checked status on Switch isn't changed by user click
             if (mValidListener) {
-                mSwitchBar.removeOnSwitchChangeListener(this);
+                mSwitchWidget.stopListening();
             }
-            mSwitch.setChecked(isChecked);
+            mSwitchWidget.setChecked(isChecked);
             if (mValidListener) {
-                mSwitchBar.addOnSwitchChangeListener(this);
+                mSwitchWidget.startListening();
             }
         }
     }
@@ -180,13 +181,14 @@
     }
 
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+    public boolean onSwitchToggled(boolean isChecked) {
         // Show toast message if Bluetooth is not allowed in airplane mode
         if (isChecked &&
                 !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_BLUETOOTH)) {
             Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
             // Reset switch to off
-            switchView.setChecked(false);
+            mSwitch.setChecked(false);
+            return false;
         }
 
         mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_BLUETOOTH_TOGGLE, isChecked);
@@ -197,12 +199,13 @@
             // a) The switch should be OFF but it should still be togglable (enabled = True)
             // b) The switch bar should have OFF text.
             if (isChecked && !status) {
-                switchView.setChecked(false);
+                mSwitch.setChecked(false);
                 mSwitch.setEnabled(true);
-                mSwitchBar.setTextViewLabel(false);
-                return;
+                mSwitchWidget.updateTitle(false);
+                return false;
             }
         }
-        mSwitch.setEnabled(false);
+        mSwitchWidget.setEnabled(false);
+        return true;
     }
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java
new file mode 100644
index 0000000..d9b1bea
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java
@@ -0,0 +1,100 @@
+/*
+ * 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.content.Context;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnPause;
+import com.android.settings.core.lifecycle.events.OnResume;
+import com.android.settings.core.lifecycle.events.OnStart;
+import com.android.settings.core.lifecycle.events.OnStop;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
+import com.android.settings.widget.MasterSwitchPreference;
+import com.android.settings.widget.MasterSwitchController;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+public class BluetoothMasterSwitchPreferenceController extends PreferenceController
+        implements OnSummaryChangeListener,
+        LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
+
+    private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth";
+
+    private LocalBluetoothManager mBluetoothManager;
+    private MasterSwitchPreference mBtPreference;
+    private BluetoothEnabler mBluetoothEnabler;
+    private BluetoothSummaryUpdater mSummaryUpdater;
+
+    public BluetoothMasterSwitchPreferenceController(Context context,
+            LocalBluetoothManager bluetoothManager) {
+        super(context);
+        mBluetoothManager = bluetoothManager;
+        mSummaryUpdater = new BluetoothSummaryUpdater(mContext, this, mBluetoothManager);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mBtPreference = (MasterSwitchPreference) screen.findPreference(KEY_TOGGLE_BLUETOOTH);
+        mBluetoothEnabler = new BluetoothEnabler(mContext,
+            new MasterSwitchController(mBtPreference),
+            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider(), mBluetoothManager);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_TOGGLE_BLUETOOTH;
+    }
+
+    public void onResume() {
+        mSummaryUpdater.register(true);
+    }
+
+    @Override
+    public void onPause() {
+        mSummaryUpdater.register(false);
+    }
+
+    @Override
+    public void onStart() {
+        if (mBluetoothEnabler != null) {
+            mBluetoothEnabler.resume(mContext);
+        }
+    }
+
+    @Override
+    public void onStop() {
+        if (mBluetoothEnabler != null) {
+            mBluetoothEnabler.pause();
+        }
+    }
+
+    @Override
+    public void onSummaryChanged(String summary) {
+        if (mBtPreference != null) {
+            mBtPreference.setSummary(summary);
+        }
+    }
+
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index d709726..6e7ae47 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -45,6 +45,7 @@
 import com.android.settings.LinkifyUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.location.ScanningSettings;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -52,13 +53,12 @@
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settings.widget.FooterPreference;
 import com.android.settings.widget.SwitchBar;
-import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settings.widget.SwitchBarController;
 import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
@@ -148,15 +148,16 @@
         final SettingsActivity activity = (SettingsActivity) getActivity();
         mSwitchBar = activity.getSwitchBar();
 
-        mBluetoothEnabler = new BluetoothEnabler(activity, mSwitchBar, mMetricsFeatureProvider);
-        mBluetoothEnabler.setupSwitchBar();
+        mBluetoothEnabler = new BluetoothEnabler(activity, new SwitchBarController(mSwitchBar),
+            mMetricsFeatureProvider, Utils.getLocalBtManager(activity));
+        mBluetoothEnabler.setupSwitchController();
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
 
-        mBluetoothEnabler.teardownSwitchBar();
+        mBluetoothEnabler.teardownSwitchController();
     }
 
     @Override
@@ -508,113 +509,34 @@
     }
 
     @VisibleForTesting
-    static class SummaryProvider
-            implements SummaryLoader.SummaryProvider, BluetoothCallback {
+    static class SummaryProvider implements SummaryLoader.SummaryProvider, OnSummaryChangeListener {
 
         private final LocalBluetoothManager mBluetoothManager;
         private final Context mContext;
         private final SummaryLoader mSummaryLoader;
 
-        private boolean mEnabled;
-        private int mConnectionState;
+        @VisibleForTesting
+        BluetoothSummaryUpdater mSummaryUpdater;
 
         public SummaryProvider(Context context, SummaryLoader summaryLoader,
                 LocalBluetoothManager bluetoothManager) {
             mBluetoothManager = bluetoothManager;
             mContext = context;
             mSummaryLoader = summaryLoader;
+            mSummaryUpdater = new BluetoothSummaryUpdater(mContext, this, mBluetoothManager);
         }
 
         @Override
         public void setListening(boolean listening) {
-            BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
-            if (defaultAdapter == null) return;
-            if (listening) {
-                mEnabled = defaultAdapter.isEnabled();
-                mConnectionState = defaultAdapter.getConnectionState();
-                mSummaryLoader.setSummary(this, getSummary());
-                mBluetoothManager.getEventManager().registerCallback(this);
-            } else {
-                mBluetoothManager.getEventManager().unregisterCallback(this);
+            mSummaryUpdater.register(listening);
+        }
+
+        @Override
+        public void onSummaryChanged(String summary) {
+            if (mSummaryLoader != null) {
+                mSummaryLoader.setSummary(this, summary);
             }
         }
-
-        private CharSequence getSummary() {
-            if (!mEnabled) {
-                return mContext.getString(R.string.bluetooth_disabled);
-            } else if (mConnectionState == BluetoothAdapter.STATE_CONNECTED) {
-                return mContext.getString(R.string.bluetooth_connected);
-            } else {
-                return mContext.getString(R.string.bluetooth_disconnected);
-            }
-        }
-
-        @Override
-        public void onBluetoothStateChanged(int bluetoothState) {
-            mEnabled = bluetoothState == BluetoothAdapter.STATE_ON
-                    || bluetoothState == BluetoothAdapter.STATE_TURNING_ON;
-            mSummaryLoader.setSummary(this, getSummary());
-        }
-
-        @Override
-        public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
-            mConnectionState = state;
-            updateConnected();
-            mSummaryLoader.setSummary(this, getSummary());
-        }
-
-        @Override
-        public void onScanningStateChanged(boolean started) {
-
-        }
-
-        @Override
-        public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
-
-        }
-
-        @Override
-        public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
-
-        }
-
-        @Override
-        public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
-
-        }
-
-        private void updateConnected() {
-            // Make sure our connection state is up to date.
-            int state = mBluetoothManager.getBluetoothAdapter().getConnectionState();
-            if (state != mConnectionState) {
-                mConnectionState = state;
-                return;
-            }
-            final Collection<CachedBluetoothDevice> devices = getDevices();
-            if (devices == null) {
-                mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
-                return;
-            }
-            if (mConnectionState == BluetoothAdapter.STATE_CONNECTED) {
-                CachedBluetoothDevice connectedDevice = null;
-                for (CachedBluetoothDevice device : devices) {
-                    if (device.isConnected()) {
-                        connectedDevice = device;
-                    }
-                }
-                if (connectedDevice == null) {
-                    // If somehow we think we are connected, but have no connected devices, we
-                    // aren't connected.
-                    mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
-                }
-            }
-        }
-
-        private Collection<CachedBluetoothDevice> getDevices() {
-            return mBluetoothManager != null
-                    ? mBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy()
-                    : null;
-        }
     }
 
     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
diff --git a/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
new file mode 100644
index 0000000..dc37efc
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothSummaryUpdater.java
@@ -0,0 +1,148 @@
+/*
+ * 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.bluetooth.BluetoothAdapter;
+import android.content.Context;
+import com.android.settings.R;
+import com.android.settings.widget.SummaryUpdater;
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import java.util.Collection;
+
+/**
+ * Helper class that listeners to bluetooth callback and notify client when there is update in
+ * bluetooth summary info.
+ */
+public final class BluetoothSummaryUpdater extends SummaryUpdater implements BluetoothCallback {
+
+    private final LocalBluetoothManager mBluetoothManager;
+    private final LocalBluetoothAdapter mBluetoothAdapter;
+
+    private boolean mEnabled;
+    private int mConnectionState;
+
+    public BluetoothSummaryUpdater(Context context, OnSummaryChangeListener listener,
+            LocalBluetoothManager bluetoothManager) {
+        super(context, listener);
+        mBluetoothManager = bluetoothManager;
+        mBluetoothAdapter = mBluetoothManager != null
+            ? mBluetoothManager.getBluetoothAdapter() : null;
+    }
+
+    @Override
+    public void onBluetoothStateChanged(int bluetoothState) {
+        mEnabled = bluetoothState == BluetoothAdapter.STATE_ON
+            || bluetoothState == BluetoothAdapter.STATE_TURNING_ON;
+        notifyChangeIfNeeded();
+    }
+
+    @Override
+    public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
+        mConnectionState = state;
+        updateConnected();
+        notifyChangeIfNeeded();
+    }
+
+    @Override
+    public void onScanningStateChanged(boolean started) {
+    }
+
+    @Override
+    public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
+    }
+
+    @Override
+    public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
+    }
+
+    @Override
+    public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
+    }
+
+    @Override
+    public void register(boolean listening) {
+        if (mBluetoothAdapter == null) {
+            return;
+        }
+        if (listening) {
+            mEnabled = mBluetoothAdapter.isEnabled();
+            mConnectionState = mBluetoothAdapter.getConnectionState();
+            notifyChangeIfNeeded();
+            mBluetoothManager.getEventManager().registerCallback(this);
+        } else {
+            mBluetoothManager.getEventManager().unregisterCallback(this);
+        }
+    }
+
+    @Override
+    public String getSummary() {
+        if (!mEnabled) {
+            return mContext.getString(R.string.bluetooth_disabled);
+        }
+        switch (mConnectionState) {
+            case BluetoothAdapter.STATE_CONNECTED:
+                return mContext.getString(R.string.bluetooth_connected);
+            case BluetoothAdapter.STATE_CONNECTING:
+                return mContext.getString(R.string.bluetooth_connecting);
+            case BluetoothAdapter.STATE_DISCONNECTING:
+                return mContext.getString(R.string.bluetooth_disconnecting);
+            default:
+                return mContext.getString(R.string.bluetooth_disconnected);
+        }
+    }
+
+    private void updateConnected() {
+        if (mBluetoothAdapter == null) {
+            return;
+        }
+        // Make sure our connection state is up to date.
+        int state = mBluetoothAdapter.getConnectionState();
+        if (state != mConnectionState) {
+            mConnectionState = state;
+            return;
+        }
+        final Collection<CachedBluetoothDevice> devices = getDevices();
+        if (devices == null) {
+            mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
+            return;
+        }
+        if (mConnectionState == BluetoothAdapter.STATE_CONNECTED) {
+            CachedBluetoothDevice connectedDevice = null;
+            for (CachedBluetoothDevice device : devices) {
+                if (device.isConnected()) {
+                    connectedDevice = device;
+                    break;
+                }
+            }
+            if (connectedDevice == null) {
+                // If somehow we think we are connected, but have no connected devices, we
+                // aren't connected.
+                mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
+            }
+        }
+    }
+
+    private Collection<CachedBluetoothDevice> getDevices() {
+        return mBluetoothManager != null
+            ? mBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy()
+            : null;
+    }
+
+}
diff --git a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
index bc33cce..9ea8372 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
@@ -17,12 +17,14 @@
 package com.android.settings.bluetooth;
 
 import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
 import android.bluetooth.BluetoothAdapter;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
@@ -125,8 +127,19 @@
         switch (mRequest) {
             case RequestPermissionActivity.REQUEST_ENABLE:
             case RequestPermissionActivity.REQUEST_ENABLE_DISCOVERABLE: {
-                mLocalAdapter.enable();
-                setResult(Activity.RESULT_OK);
+                UserManager userManager = getSystemService(UserManager.class);
+                if (userManager.hasUserRestriction(UserManager.DISALLOW_BLUETOOTH)) {
+                    // If Bluetooth is disallowed, don't try to enable it, show policy transparency
+                    // message instead.
+                    DevicePolicyManager dpm = getSystemService(DevicePolicyManager.class);
+                    Intent intent = dpm.createAdminSupportIntent(UserManager.DISALLOW_BLUETOOTH);
+                    if (intent != null) {
+                        startActivity(intent);
+                    }
+                } else {
+                    mLocalAdapter.enable();
+                    setResult(Activity.RESULT_OK);
+                }
             } break;
 
             case RequestPermissionActivity.REQUEST_DISABLE: {
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index b8ee1ff..786b9d3 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -20,14 +20,16 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController;
+import com.android.settings.bluetooth.Utils;
 import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.deviceinfo.UsbBackend;
 import com.android.settings.nfc.NfcPreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -44,11 +46,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_DEVICE;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -61,13 +58,19 @@
     @Override
     protected List<PreferenceController> getPreferenceControllers(Context context) {
         final List<PreferenceController> controllers = new ArrayList<>();
+        final Lifecycle lifecycle = getLifecycle();
         final NfcPreferenceController nfcPreferenceController =
                 new NfcPreferenceController(context);
-        getLifecycle().addObserver(nfcPreferenceController);
+        lifecycle.addObserver(nfcPreferenceController);
         controllers.add(nfcPreferenceController);
         mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context));
-        getLifecycle().addObserver(mUsbPrefController);
+        lifecycle.addObserver(mUsbPrefController);
         controllers.add(mUsbPrefController);
+        final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController =
+            new BluetoothMasterSwitchPreferenceController(
+                context, Utils.getLocalBtManager(context));
+        lifecycle.addObserver(bluetoothPreferenceController);
+        controllers.add(bluetoothPreferenceController);
         return controllers;
     }
 
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index 29ba287..ce0daa9 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -76,4 +76,8 @@
         mDividerDecoration.setDivider(divider);
         super.setDivider(new ColorDrawable(Color.TRANSPARENT));
     }
+
+    protected final Context getPrefContext() {
+        return getPreferenceManager().getContext();
+    }
 }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 682fa36..1dd83cb 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -57,6 +57,7 @@
 import com.android.settings.applications.ManageAssist;
 import com.android.settings.applications.ManageDomainUrls;
 import com.android.settings.applications.NotificationApps;
+import com.android.settings.applications.PictureInPictureSettings;
 import com.android.settings.applications.ProcessStatsSummary;
 import com.android.settings.applications.ProcessStatsUi;
 import com.android.settings.applications.UsageAccessDetails;
@@ -100,6 +101,7 @@
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
 import com.android.settings.notification.AppNotificationSettings;
+import com.android.settings.notification.ChannelNotificationSettings;
 import com.android.settings.notification.ConfigureNotificationSettings;
 import com.android.settings.notification.NotificationAccessSettings;
 import com.android.settings.notification.NotificationStation;
@@ -208,6 +210,7 @@
             InstalledAppDetails.class.getName(),
             BatterySaverSettings.class.getName(),
             AppNotificationSettings.class.getName(),
+            ChannelNotificationSettings.class.getName(),
             OtherSoundSettings.class.getName(),
             ApnSettings.class.getName(),
             ApnEditor.class.getName(),
@@ -225,6 +228,7 @@
             AdvancedAppSettings.class.getName(),
             WallpaperTypeSettings.class.getName(),
             VrListenerSettings.class.getName(),
+            PictureInPictureSettings.class.getName(),
             ManagedProfileSettings.class.getName(),
             ChooseAccountActivity.class.getName(),
             IccLockSettings.class.getName(),
@@ -292,7 +296,6 @@
             "com.android.settings.ManageApplicationsDashboardAlias",
             "com.android.settings.PaymentSettingsDashboardAlias",
             // Home page > Network & Internet
-            "com.android.settings.WifiDashboardAlias",
             "com.android.settings.DataUsageDashboardAlias",
             // Home page > Security
             "com.android.settings.LocationDashboardAlias",
@@ -302,5 +305,6 @@
             "com.android.settings.DateTimeDashboardAlias",
             "com.android.settings.AccessibilityDashboardAlias",
             "com.android.settings.AboutDeviceDashboardAlias",
+            "com.android.settings.EnterprisePrivacyDashboardAlias",
     };
 }
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 8b97f04..b2ed592 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -17,6 +17,7 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.os.Bundle;
@@ -42,6 +43,7 @@
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.conditional.Condition;
 import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.SuggestionParser;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.Tile;
@@ -130,9 +132,11 @@
     public void setCategoriesAndSuggestions(List<DashboardCategory> categories,
             List<Tile> suggestions) {
         // TODO: Better place for tinting?
-        TypedValue tintColor = new TypedValue();
-        mContext.getTheme().resolveAttribute(com.android.internal.R.attr.colorAccent,
-                tintColor, true);
+        final TypedArray a = mContext.obtainStyledAttributes(new int[] {
+            FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext).isEnabled()
+                ? android.R.attr.colorControlNormal : android.R.attr.colorAccent });
+        int tintColor = a.getColor(0, mContext.getColor(android.R.color.white));
+        a.recycle();
         for (int i = 0; i < categories.size(); i++) {
             for (int j = 0; j < categories.get(i).tiles.size(); j++) {
                 final Tile tile = categories.get(i).tiles.get(j);
@@ -141,7 +145,7 @@
                         tile.intent.getComponent().getPackageName())) {
                     // If this drawable is coming from outside Settings, tint it to match the
                     // color.
-                    tile.icon.setTint(tintColor.data);
+                    tile.icon.setTint(tintColor);
                 }
             }
         }
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 14d1bdd..f8a27e0 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -17,6 +17,7 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.os.Bundle;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
@@ -193,7 +194,10 @@
     /**
      * Returns the CategoryKey for loading {@link DashboardCategory} for this fragment.
      */
-    protected abstract String getCategoryKey();
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    public String getCategoryKey() {
+        return DashboardFragmentRegistry.PARENT_TO_CATEGORY_KEY_MAP.get(getClass().getName());
+    }
 
     /**
      * Get the tag string for logging.
@@ -298,8 +302,15 @@
         if (mSummaryLoader != null) {
             mSummaryLoader.release();
         }
+        final Context context = getContext();
         mSummaryLoader = new SummaryLoader(getActivity(), getCategoryKey());
         mSummaryLoader.setSummaryConsumer(this);
+        final TypedArray a = context.obtainStyledAttributes(new int[]{
+                mDashboardFeatureProvider.isEnabled() ? android.R.attr.colorControlNormal
+                        : android.R.attr.colorAccent});
+        final int tintColor = a.getColor(0, context.getColor(android.R.color.white));
+        a.recycle();
+        final String pkgName = context.getPackageName();
         // Install dashboard tiles.
         for (Tile tile : tiles) {
             final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile);
@@ -310,6 +321,11 @@
             if (!displayTile(tile)) {
                 continue;
             }
+            if (pkgName != null && tile.intent != null
+                    && !pkgName.equals(tile.intent.getComponent().getPackageName())) {
+                // If this drawable is coming from outside Settings, tint it to match the color.
+                tile.icon.setTint(tintColor);
+            }
             if (mDashboardTilePrefKeys.contains(key)) {
                 // Have the key already, will rebind.
                 final Preference preference = mProgressiveDisclosureMixin.findPreference(
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
new file mode 100644
index 0000000..a315836
--- /dev/null
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -0,0 +1,99 @@
+/*
+ * 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.dashboard;
+
+import android.util.ArrayMap;
+
+import com.android.settings.DevelopmentSettings;
+import com.android.settings.DisplaySettings;
+import com.android.settings.SecuritySettings;
+import com.android.settings.accounts.AccountDetailDashboardFragment;
+import com.android.settings.accounts.UserAndAccountDashboardFragment;
+import com.android.settings.applications.AdvancedAppSettings;
+import com.android.settings.applications.AppAndNotificationDashboardFragment;
+import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
+import com.android.settings.deviceinfo.StorageDashboardFragment;
+import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.inputmethod.InputAndGestureSettings;
+import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
+import com.android.settings.language.LanguageAndRegionSettings;
+import com.android.settings.network.NetworkDashboardFragment;
+import com.android.settings.notification.SoundSettings;
+import com.android.settings.system.SystemDashboardFragment;
+import com.android.settingslib.drawer.CategoryKey;
+
+import java.util.Map;
+
+/**
+ * A registry to keep track of which page hosts which category.
+ */
+public class DashboardFragmentRegistry {
+
+    /**
+     * Map from parent fragment to category key. The parent fragment hosts child with
+     * category_key.
+     */
+    public static final Map<String, String> PARENT_TO_CATEGORY_KEY_MAP;
+
+    /**
+     * Map from category_key to parent. This is a helper to look up which fragment hosts the
+     * category_key.
+     */
+    public static final Map<String, String> CATEGORY_KEY_TO_PARENT_MAP;
+
+    static {
+        PARENT_TO_CATEGORY_KEY_MAP = new ArrayMap<>();
+        PARENT_TO_CATEGORY_KEY_MAP.put(
+                NetworkDashboardFragment.class.getName(), CategoryKey.CATEGORY_NETWORK);
+        PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(),
+                CategoryKey.CATEGORY_DEVICE);
+        PARENT_TO_CATEGORY_KEY_MAP.put(AppAndNotificationDashboardFragment.class.getName(),
+                CategoryKey.CATEGORY_APPS);
+        PARENT_TO_CATEGORY_KEY_MAP.put(PowerUsageSummary.class.getName(),
+                CategoryKey.CATEGORY_BATTERY);
+        PARENT_TO_CATEGORY_KEY_MAP.put(AdvancedAppSettings.class.getName(),
+                CategoryKey.CATEGORY_APPS_DEFAULT);
+        PARENT_TO_CATEGORY_KEY_MAP.put(DisplaySettings.class.getName(),
+                CategoryKey.CATEGORY_DISPLAY);
+        PARENT_TO_CATEGORY_KEY_MAP.put(SoundSettings.class.getName(),
+                CategoryKey.CATEGORY_SOUND);
+        PARENT_TO_CATEGORY_KEY_MAP.put(StorageDashboardFragment.class.getName(),
+                CategoryKey.CATEGORY_STORAGE);
+        PARENT_TO_CATEGORY_KEY_MAP.put(SecuritySettings.class.getName(),
+                CategoryKey.CATEGORY_SECURITY);
+        PARENT_TO_CATEGORY_KEY_MAP.put(AccountDetailDashboardFragment.class.getName(),
+                CategoryKey.CATEGORY_ACCOUNT);
+        PARENT_TO_CATEGORY_KEY_MAP.put(UserAndAccountDashboardFragment.class.getName(),
+                CategoryKey.CATEGORY_ACCOUNT);
+        PARENT_TO_CATEGORY_KEY_MAP.put(
+                SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
+        PARENT_TO_CATEGORY_KEY_MAP.put(
+                InputAndGestureSettings.class.getName(), CategoryKey.CATEGORY_SYSTEM_INPUT);
+        PARENT_TO_CATEGORY_KEY_MAP.put(InputMethodAndLanguageSettings.class.getName(),
+                CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
+        PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndRegionSettings.class.getName(),
+                CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
+        PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
+                CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
+
+        CATEGORY_KEY_TO_PARENT_MAP = new ArrayMap<>(PARENT_TO_CATEGORY_KEY_MAP.size());
+
+        for (Map.Entry<String, String> parentToKey : PARENT_TO_CATEGORY_KEY_MAP.entrySet()) {
+            CATEGORY_KEY_TO_PARENT_MAP.put(parentToKey.getValue(), parentToKey.getKey());
+        }
+    }
+}
diff --git a/src/com/android/settings/dashboard/SiteMapManager.java b/src/com/android/settings/dashboard/SiteMapManager.java
new file mode 100644
index 0000000..3144398
--- /dev/null
+++ b/src/com/android/settings/dashboard/SiteMapManager.java
@@ -0,0 +1,212 @@
+/*
+ * 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.dashboard;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.VisibleForTesting;
+import android.support.annotation.WorkerThread;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.search.IndexDatabaseHelper;
+import com.android.settings.search.IndexDatabaseHelper.IndexColumns;
+import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.android.settings.dashboard.DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP;
+
+/**
+ * A manager class that maintains a "site map" and look up breadcrumb for a certain page on demand.
+ * <p/>
+ * The methods on this class can only be called on a background thread.
+ */
+public class SiteMapManager {
+
+    private static final String TAG = "SiteMapManager";
+    private static final boolean DEBUG_TIMING = false;
+
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    public static final String[] SITE_MAP_COLUMNS = {
+            SiteMapColumns.PARENT_CLASS,
+            SiteMapColumns.PARENT_TITLE,
+            SiteMapColumns.CHILD_CLASS,
+            SiteMapColumns.CHILD_TITLE
+    };
+
+    private static final String[] CLASS_TO_SCREEN_TITLE_COLUMNS = {
+            IndexColumns.CLASS_NAME,
+            IndexColumns.SCREEN_TITLE,
+    };
+
+    private final List<SiteMapPair> mPairs = new ArrayList<>();
+
+    private boolean mInitialized;
+
+    /**
+     * Given a fragment class name and its screen title, build a breadcrumb from Settings root to
+     * this screen.
+     * <p/>
+     * Not all screens have a full breadcrumb path leading up to root, it's because either some
+     * page in the breadcrumb path is not indexed, or it's only reachable via search.
+     */
+    @WorkerThread
+    public synchronized List<String> buildBreadCrumb(Context context, String clazz,
+            String screenTitle) {
+        init(context);
+        final long startTime = System.currentTimeMillis();
+        final List<String> breadcrumbs = new ArrayList<>();
+        if (!mInitialized) {
+            Log.w(TAG, "SiteMap is not initialized yet, skipping");
+            return breadcrumbs;
+        }
+        breadcrumbs.add(screenTitle);
+        String currentClass = clazz;
+        String currentTitle = screenTitle;
+        // Look up current page's parent, if found add it to breadcrumb string list, and repeat.
+        while (true) {
+            final SiteMapPair pair = lookUpParent(currentClass, currentTitle);
+            if (pair == null) {
+                if (DEBUG_TIMING) {
+                    Log.d(TAG, "BreadCrumb timing: " + (System.currentTimeMillis() - startTime));
+                }
+                return breadcrumbs;
+            }
+            breadcrumbs.add(0, pair.parentTitle);
+            currentClass = pair.parentClass;
+            currentTitle = pair.parentTitle;
+        }
+    }
+
+    /**
+     * Initialize a list of {@link SiteMapPair}s. Each pair knows about a single parent-child
+     * page relationship.
+     *
+     * We get the knowledge of such mPairs from 2 sources:
+     * 1. Static indexing time: we know which page(s) a parent can open by parsing its pref xml.
+     * 2. IA: We know from {@link DashboardFeatureProvider} which page can be dynamically
+     * injected to where.
+     */
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    @WorkerThread
+    synchronized void init(Context context) {
+        if (mInitialized) {
+            // Make sure only init once.
+            return;
+        }
+        final long startTime = System.currentTimeMillis();
+        // First load site map from static index table.
+        final Context appContext = context.getApplicationContext();
+        final SQLiteDatabase db = IndexDatabaseHelper.getInstance(appContext).getReadableDatabase();
+        Cursor sitemap = db.query(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, SITE_MAP_COLUMNS, null,
+                null, null, null, null);
+        while (sitemap.moveToNext()) {
+            final SiteMapPair pair = new SiteMapPair(
+                    sitemap.getString(sitemap.getColumnIndex(SiteMapColumns.PARENT_CLASS)),
+                    sitemap.getString(sitemap.getColumnIndex(SiteMapColumns.PARENT_TITLE)),
+                    sitemap.getString(sitemap.getColumnIndex(SiteMapColumns.CHILD_CLASS)),
+                    sitemap.getString(sitemap.getColumnIndex(SiteMapColumns.CHILD_TITLE)));
+            mPairs.add(pair);
+        }
+        sitemap.close();
+
+        // Then prepare a local map that contains class name -> screen title mapping. This is needed
+        // to figure out the display name for any fragment if it's injected dynamically through IA.
+        final Map<String, String> classToTitleMap = new HashMap<>();
+        final Cursor titleQuery = db.query(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX,
+                CLASS_TO_SCREEN_TITLE_COLUMNS, null, null, null, null, null);
+        while (titleQuery.moveToNext()) {
+            classToTitleMap.put(
+                    titleQuery.getString(titleQuery.getColumnIndex(IndexColumns.CLASS_NAME)),
+                    titleQuery.getString(titleQuery.getColumnIndex(IndexColumns.SCREEN_TITLE)));
+        }
+        titleQuery.close();
+
+        // Loop through all IA categories and pages and build additional SiteMapPairs
+        List<DashboardCategory> categories = FeatureFactory.getFactory(context)
+                .getDashboardFeatureProvider(context).getAllCategories();
+
+        for (DashboardCategory category : categories) {
+            // Find the category key first.
+            final String parentClass = CATEGORY_KEY_TO_PARENT_MAP.get(category.key);
+            if (parentClass == null) {
+                continue;
+            }
+            // Use the key to look up parent (which page hosts this key)
+            final String parentName = classToTitleMap.get(parentClass);
+            if (parentName == null) {
+                continue;
+            }
+            // Build parent-child mPairs for all children listed under this key.
+            for (Tile tile : category.tiles) {
+                final String childTitle = tile.title.toString();
+                String childClass = null;
+                if (tile.metaData != null) {
+                    childClass = tile.metaData.getString(
+                            SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
+                }
+                if (childClass == null) {
+                    continue;
+                }
+                mPairs.add(new SiteMapPair(parentClass, parentName, childClass, childTitle));
+            }
+        }
+        // Done.
+        mInitialized = true;
+        if (DEBUG_TIMING) {
+            Log.d(TAG, "Init timing: " + (System.currentTimeMillis() - startTime));
+        }
+    }
+
+    @WorkerThread
+    private SiteMapPair lookUpParent(String clazz, String title) {
+        for (SiteMapPair pair : mPairs) {
+            if (TextUtils.equals(pair.childClass, clazz)
+                    && TextUtils.equals(title, pair.childTitle)) {
+                return pair;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Data model for a parent-child page pair.
+     */
+    private static class SiteMapPair {
+        public final String parentClass;
+        public final String parentTitle;
+        public final String childClass;
+        public final String childTitle;
+
+        public SiteMapPair(String parentClass, String parentTitle, String childClass,
+                String childTitle) {
+            this.parentClass = parentClass;
+            this.parentTitle = parentTitle;
+            this.childClass = childClass;
+            this.childTitle = childTitle;
+        }
+    }
+}
diff --git a/src/com/android/settings/dashboard/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/SuggestionFeatureProvider.java
new file mode 100644
index 0000000..b20edee
--- /dev/null
+++ b/src/com/android/settings/dashboard/SuggestionFeatureProvider.java
@@ -0,0 +1,35 @@
+/*
+ * 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.dashboard;
+
+import android.content.Context;
+
+/** Interface should be implemented if you have added new suggestions */
+public interface SuggestionFeatureProvider {
+
+    /**
+     * Returns true if smart suggestion should be used instead of xml based SuggestionParser.
+     */
+    boolean isSmartSuggestionEnabled(Context context);
+
+    /** Return true if className is the name of a class of one of your newly added suggestion. */
+    boolean isPresent(String className);
+
+    /** Return true if the suggestion has already been completed and does not need to be shown */
+    boolean isSuggestionCompleted(Context context);
+
+}
diff --git a/src/com/android/settings/dashboard/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/SuggestionFeatureProviderImpl.java
new file mode 100644
index 0000000..afaf36e
--- /dev/null
+++ b/src/com/android/settings/dashboard/SuggestionFeatureProviderImpl.java
@@ -0,0 +1,38 @@
+/*
+ * 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.dashboard;
+
+import android.content.Context;
+
+public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider {
+
+    @Override
+    public boolean isSmartSuggestionEnabled(Context context) {
+        return false;
+    }
+
+    @Override
+    public boolean isPresent(String className) {
+        return false;
+    }
+
+    @Override
+    public boolean isSuggestionCompleted(Context context) {
+        return false;
+    }
+
+}
diff --git a/src/com/android/settings/dashboard/SuggestionsChecks.java b/src/com/android/settings/dashboard/SuggestionsChecks.java
index 78f21ea..f355f83 100644
--- a/src/com/android/settings/dashboard/SuggestionsChecks.java
+++ b/src/com/android/settings/dashboard/SuggestionsChecks.java
@@ -37,6 +37,7 @@
 import com.android.settings.Settings.ZenModeAutomationSuggestionActivity;
 import com.android.settings.Utils;
 import com.android.settings.WallpaperSuggestionActivity;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.drawer.Tile;
 
 import java.util.Collection;
@@ -67,6 +68,13 @@
         } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
             return isDeviceSecured() || !isFingerprintEnabled();
         }
+
+        SuggestionFeatureProvider provider =
+            FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider();
+        if (provider != null && provider.isPresent(className)) {
+            return provider.isSuggestionCompleted(mContext);
+        }
+
         return false;
     }
 
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 9b39840..dda984b 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -44,14 +44,16 @@
 
 import static android.net.NetworkPolicy.LIMIT_DISABLED;
 import static android.net.NetworkPolicy.WARNING_DISABLED;
-import static android.net.TrafficStats.GB_IN_BYTES;
-import static android.net.TrafficStats.MB_IN_BYTES;
 
 public class BillingCycleSettings extends DataUsageBase implements
         Preference.OnPreferenceChangeListener, DataUsageEditController {
 
     private static final String TAG = "BillingCycleSettings";
     private static final boolean LOGD = false;
+    public static final long KB_IN_BYTES = 1000;
+    public static final long MB_IN_BYTES = KB_IN_BYTES * 1000;
+    public static final long GB_IN_BYTES = MB_IN_BYTES * 1000;
+
     private static final long MAX_DATA_LIMIT_BYTES = 50000 * GB_IN_BYTES;
 
     private static final String TAG_CONFIRM_LIMIT = "confirmLimit";
diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
index 0839114..58a34b9 100644
--- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java
+++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
@@ -18,7 +18,6 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.support.annotation.VisibleForTesting;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
@@ -27,12 +26,14 @@
 import android.view.MenuItem;
 import android.view.View;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.applications.AppStateBaseBridge;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -215,6 +216,7 @@
         if (preference instanceof AccessPreference) {
             AccessPreference accessPreference = (AccessPreference) preference;
             boolean whitelisted = newValue == Boolean.TRUE;
+            logSpecialPermissionChange(whitelisted, accessPreference.mEntry.info.packageName);
             mDataSaverBackend.setIsWhitelisted(accessPreference.mEntry.info.uid,
                     accessPreference.mEntry.info.packageName, whitelisted);
             accessPreference.mState.isDataSaverWhitelisted = whitelisted;
@@ -224,6 +226,14 @@
     }
 
     @VisibleForTesting
+    void logSpecialPermissionChange(boolean whitelisted, String packageName) {
+        int logCategory = whitelisted ? MetricsEvent.APP_SPECIAL_PERMISSION_UNL_DATA_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_UNL_DATA_DENY;
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                logCategory, packageName);
+    }
+
+    @VisibleForTesting
     boolean shouldAddPreference(AppEntry app) {
         return app != null && UserHandle.isApp(app.info.uid);
     }
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index d05d088..61f3e95 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -21,9 +21,7 @@
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
 import android.provider.SearchIndexableResource;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
+import android.support.annotation.VisibleForTesting;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
@@ -58,13 +56,11 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        final Context context = getActivity();
 
         // Initialize the storage sizes that we can quickly calc.
+        final Context context = getActivity();
         StorageManager sm = context.getSystemService(StorageManager.class);
-        String volumeId = getArguments().getString(VolumeInfo.EXTRA_VOLUME_ID);
-        mVolume = sm.findVolumeById(volumeId);
-        if (!isVolumeValid()) {
+        if (!initializeVolume(sm, getArguments())) {
             getActivity().finish();
             return;
         }
@@ -103,11 +99,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_STORAGE;
-    }
-
-    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.storage_dashboard_fragment;
     }
@@ -127,6 +118,17 @@
     }
 
     /**
+     * Initializes the volume with a given bundle and returns if the volume is valid.
+     */
+    @VisibleForTesting
+    boolean initializeVolume(StorageManager sm, Bundle bundle) {
+        String volumeId = bundle.getString(VolumeInfo.EXTRA_VOLUME_ID,
+                VolumeInfo.ID_PRIVATE_INTERNAL);
+        mVolume = sm.findVolumeById(volumeId);
+        return isVolumeValid();
+    }
+
+    /**
      * For Search.
      */
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 7e98918..22f9c4c 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -122,7 +122,8 @@
                 intent = getAudioIntent();
                 break;
             case GAME_KEY:
-                // TODO: Once app categorization is added, make this section.
+                intent = getGamesIntent();
+                break;
             case OTHER_APPS_KEY:
                 // Because we are likely constructed with a null volume, this is theoretically
                 // possible.
@@ -259,6 +260,15 @@
                 false);
     }
 
+    private Intent getGamesIntent() {
+            Bundle args = new Bundle(1);
+            args.putString(ManageApplications.EXTRA_CLASSNAME,
+                    Settings.GamesStorageActivity.class.getName());
+            return Utils.onBuildStartFragmentIntent(mContext,
+                    ManageApplications.class.getName(), args, null, R.string.game_storage_settings,
+                    null, false);
+    }
+
     private Intent getFilesIntent() {
         return mSvp.findEmulatedForPrivate(mVolume).buildBrowseIntent();
     }
diff --git a/src/com/android/settings/display/ThemePreferenceController.java b/src/com/android/settings/display/ThemePreferenceController.java
new file mode 100644
index 0000000..da5b84a
--- /dev/null
+++ b/src/com/android/settings/display/ThemePreferenceController.java
@@ -0,0 +1,112 @@
+/*
+ * 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.display;
+
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_THEME;
+
+import android.app.AlertDialog;
+import android.app.UiModeManager;
+import android.content.Context;
+import android.content.DialogInterface.OnClickListener;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+
+import libcore.util.Objects;
+
+public class ThemePreferenceController extends PreferenceController implements
+        Preference.OnPreferenceChangeListener {
+
+    private static final String KEY_THEME = "theme";
+
+    private final UiModeManager mUiModeManager;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+    public ThemePreferenceController(Context context) {
+        super(context);
+        mUiModeManager = context.getSystemService(UiModeManager.class);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_THEME;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (KEY_THEME.equals(preference.getKey())) {
+            mMetricsFeatureProvider.action(mContext, ACTION_THEME);
+        }
+        return false;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        ListPreference pref = (ListPreference) preference;
+        String[] options = mUiModeManager.getAvailableThemes();
+        for (int i = 0; i < options.length; i++) {
+            options[i] = nullToDefault(options[i]);
+        }
+        pref.setEntries(options);
+        pref.setEntryValues(options);
+        String theme = mUiModeManager.getTheme();
+        if (theme == null) {
+            theme = mContext.getString(R.string.default_theme);
+        }
+        pref.setValue(nullToDefault(theme));
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (Objects.equal(newValue, mUiModeManager.getTheme())) {
+            return true;
+        }
+        // TODO: STOPSHIP Don't require reboot and remove this prompt.
+        OnClickListener onConfirm = (d, i) -> {
+            mUiModeManager.setTheme(defaultToNull((String) newValue));
+            ((ListPreference) preference).setValue((String) newValue);
+        };
+        new AlertDialog.Builder(mContext)
+                .setTitle(R.string.change_theme_reboot)
+                .setPositiveButton(com.android.internal.R.string.global_action_restart, onConfirm)
+                .setNegativeButton(android.R.string.cancel, null)
+                .show();
+        return false;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        String[] themes = mUiModeManager.getAvailableThemes();
+        return themes != null && themes.length > 1;
+    }
+
+    private String nullToDefault(String input) {
+        if (input == null) {
+            return mContext.getString(R.string.default_theme);
+        }
+        return input;
+    }
+
+    private String defaultToNull(String input) {
+        if (mContext.getString(R.string.default_theme).equals(input)) {
+            return null;
+        }
+        return input;
+    }
+}
diff --git a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
index 99ff62e..ef03cfb 100644
--- a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
+++ b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
@@ -11,6 +11,7 @@
  * KIND, either express or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
+
 package com.android.settings.enterprise;
 
 import android.content.Context;
diff --git a/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java
new file mode 100644
index 0000000..a2137ff
--- /dev/null
+++ b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.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.enterprise;
+
+import android.Manifest;
+import android.content.Context;
+
+import com.android.settings.R;
+
+public class AdminGrantedCameraPermissionPreferenceController extends
+        AdminGrantedPermissionsPreferenceControllerBase {
+
+    private static final String KEY_ENTERPRISE_PRIVACY_NUMBER_CAMERA_ACCESS_PACKAGES
+            = "enterprise_privacy_number_camera_access_packages";
+
+    public AdminGrantedCameraPermissionPreferenceController(Context context) {
+        super(context, new String[] {Manifest.permission.CAMERA},
+                R.plurals.enterprise_privacy_number_camera_access_packages);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_ENTERPRISE_PRIVACY_NUMBER_CAMERA_ACCESS_PACKAGES;
+    }
+}
diff --git a/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java
new file mode 100644
index 0000000..0453b53
--- /dev/null
+++ b/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java
@@ -0,0 +1,38 @@
+/*
+ * 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.enterprise;
+
+import android.Manifest;
+import android.content.Context;
+
+import com.android.settings.R;
+
+public class AdminGrantedLocationPermissionsPreferenceController extends
+        AdminGrantedPermissionsPreferenceControllerBase {
+
+    private static final String KEY_ENTERPRISE_PRIVACY_NUMBER_LOCATION_ACCESS_PACKAGES
+            = "enterprise_privacy_number_location_access_packages";
+
+    public AdminGrantedLocationPermissionsPreferenceController(Context context) {
+        super(context, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                Manifest.permission.ACCESS_FINE_LOCATION},
+                R.plurals.enterprise_privacy_number_location_access_packages);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_ENTERPRISE_PRIVACY_NUMBER_LOCATION_ACCESS_PACKAGES;
+    }
+}
diff --git a/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java
new file mode 100644
index 0000000..3adde92
--- /dev/null
+++ b/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.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.enterprise;
+
+import android.Manifest;
+import android.content.Context;
+
+import com.android.settings.R;
+
+public class AdminGrantedMicrophonePermissionPreferenceController extends
+        AdminGrantedPermissionsPreferenceControllerBase {
+
+    private static final String KEY_ENTERPRISE_PRIVACY_NUMBER_MICROPHONE_ACCESS_PACKAGES
+            = "enterprise_privacy_number_microphone_access_packages";
+
+    public AdminGrantedMicrophonePermissionPreferenceController(Context context) {
+        super(context, new String[] {Manifest.permission.RECORD_AUDIO},
+                R.plurals.enterprise_privacy_number_microphone_access_packages);
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_ENTERPRISE_PRIVACY_NUMBER_MICROPHONE_ACCESS_PACKAGES;
+    }
+}
diff --git a/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java b/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java
new file mode 100644
index 0000000..2ca5451
--- /dev/null
+++ b/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java
@@ -0,0 +1,58 @@
+/*
+ * 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.enterprise;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+
+public abstract class AdminGrantedPermissionsPreferenceControllerBase extends PreferenceController {
+
+    private final String[] mPermissions;
+    private final int mStringResourceId;
+    private final ApplicationFeatureProvider mFeatureProvider;
+
+    public AdminGrantedPermissionsPreferenceControllerBase(Context context, String[] permissions,
+            int stringResourceId) {
+        super(context);
+        mPermissions = permissions;
+        mStringResourceId = stringResourceId;
+        mFeatureProvider = FeatureFactory.getFactory(context)
+                .getApplicationFeatureProvider(context);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mFeatureProvider.calculateNumberOfAppsWithAdminGrantedPermissions(mPermissions,
+                (num) -> {
+                    if (num == 0) {
+                        preference.setVisible(false);
+                    } else {
+                        preference.setVisible(true);
+                        preference.setTitle(mContext.getResources().getQuantityString(
+                                mStringResourceId, num, num));
+                    }
+                });
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+}
diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java
index d65292f..5be7884 100644
--- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java
+++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java
@@ -17,6 +17,7 @@
 package com.android.settings.enterprise;
 
 import android.content.ComponentName;
+import android.support.annotation.Nullable;
 
 /**
  * This interface replicates a subset of the android.app.admin.DevicePolicyManager (DPM). The
@@ -33,6 +34,21 @@
     ComponentName getDeviceOwnerComponentOnAnyUser();
 
     /**
+     * Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}.
+     *
+     * @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser
+     */
+    public CharSequence getDeviceOwnerOrganizationName();
+
+    /**
+     * Calls {@code DevicePolicyManager.getPermissionGrantState()}.
+     *
+     * @see android.app.admin.DevicePolicyManager#getPermissionGrantState
+     */
+    int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
+            String permission);
+
+    /**
      * Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}.
      *
      * @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime
diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java
index 710e5ac..6e162a8 100644
--- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java
+++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java
@@ -18,6 +18,7 @@
 
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
+import android.support.annotation.Nullable;
 
 public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrapper {
     private final DevicePolicyManager mDpm;
@@ -32,6 +33,17 @@
     }
 
     @Override
+    public CharSequence getDeviceOwnerOrganizationName() {
+        return mDpm.getDeviceOwnerOrganizationName();
+    }
+
+    @Override
+    public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
+            String permission) {
+        return mDpm.getPermissionGrantState(admin, packageName, permission);
+    }
+
+    @Override
     public long getLastSecurityLogRetrievalTime() {
         return mDpm.getLastSecurityLogRetrievalTime();
     }
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
index 43f6903..91ad119 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.enterprise;
 
+import android.content.Context;
+
 import java.util.Date;
 
 public interface EnterprisePrivacyFeatureProvider {
@@ -32,6 +34,15 @@
     boolean isInCompMode();
 
     /**
+     * Returns a message informing the user that the device is managed by a Device Owner app. The
+     * message includes a Learn More link that takes the user to the enterprise privacy section of
+     * Settings. If the device is not managed by a Device Owner app, returns {@code null}.
+     *
+     * @param context The context in which to show the enterprise privacy section of Settings
+     */
+    CharSequence getDeviceOwnerDisclosure(Context context);
+
+    /**
      * Returns the time at which the Device Owner last retrieved security logs, or {@code null} if
      * logs were never retrieved by the Device Owner on this device.
      */
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index 9fbb083..bb5412b 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -16,11 +16,19 @@
 
 package com.android.settings.enterprise;
 
+import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.Settings;
+import android.text.SpannableStringBuilder;
+import android.text.style.ClickableSpan;
+import android.view.View;
 
+import com.android.settings.R;
 import com.android.settings.applications.PackageManagerWrapper;
 import com.android.settings.vpn2.ConnectivityManagerWrapper;
 import com.android.settings.vpn2.VpnUtils;
@@ -34,15 +42,18 @@
     private final PackageManagerWrapper mPm;
     private final UserManager mUm;
     private final ConnectivityManagerWrapper mCm;
+    private final Resources mResources;
 
     private static final int MY_USER_ID = UserHandle.myUserId();
 
     public EnterprisePrivacyFeatureProviderImpl(DevicePolicyManagerWrapper dpm,
-            PackageManagerWrapper pm, UserManager um, ConnectivityManagerWrapper cm) {
+            PackageManagerWrapper pm, UserManager um, ConnectivityManagerWrapper cm,
+            Resources resources) {
         mDpm = dpm;
         mPm = pm;
         mUm = um;
         mCm = cm;
+        mResources = resources;
     }
 
     @Override
@@ -68,6 +79,26 @@
     }
 
     @Override
+    public CharSequence getDeviceOwnerDisclosure(Context context) {
+        if (!hasDeviceOwner()) {
+            return null;
+        }
+
+        final SpannableStringBuilder disclosure = new SpannableStringBuilder();
+        final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
+        if (organizationName != null) {
+            disclosure.append(mResources.getString(R.string.do_disclosure_with_name,
+                    organizationName));
+        } else {
+            disclosure.append(mResources.getString(R.string.do_disclosure_generic));
+        }
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more_separator));
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more),
+                new EnterprisePrivacySpan(context), 0);
+        return disclosure;
+    }
+
+    @Override
     public Date getLastSecurityLogRetrievalTime() {
         final long timestamp = mDpm.getLastSecurityLogRetrievalTime();
         return timestamp < 0 ? null : new Date(timestamp);
@@ -101,4 +132,23 @@
     public boolean isGlobalHttpProxySet() {
         return mCm.getGlobalProxy() != null;
     }
+
+    protected static class EnterprisePrivacySpan extends ClickableSpan {
+        private final Context mContext;
+
+        public EnterprisePrivacySpan(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public void onClick(View widget) {
+            mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS));
+        }
+
+        @Override
+        public boolean equals(Object object) {
+            return object instanceof EnterprisePrivacySpan
+                    && ((EnterprisePrivacySpan) object).mContext == mContext;
+        }
+    }
 }
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
index 2cd2862..75d3b10 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
@@ -19,12 +19,11 @@
 import android.content.Context;
 import android.provider.SearchIndexableResource;
 
-import com.android.settings.R;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable.SearchIndexProvider;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -40,11 +39,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -61,10 +55,14 @@
         controllers.add(new NetworkLogsPreferenceController(context));
         controllers.add(new BugReportsPreferenceController(context));
         controllers.add(new SecurityLogsPreferenceController(context));
+        controllers.add(new EnterpriseInstalledPackagesPreferenceController(context));
+        controllers.add(new AdminGrantedLocationPermissionsPreferenceController(context));
+        controllers.add(new AdminGrantedMicrophonePermissionPreferenceController(context));
+        controllers.add(new AdminGrantedCameraPermissionPreferenceController(context));
+        controllers.add(new EnterpriseSetDefaultAppsPreferenceController(context));
         controllers.add(new AlwaysOnVpnPrimaryUserPreferenceController(context));
         controllers.add(new AlwaysOnVpnManagedProfilePreferenceController(context));
         controllers.add(new GlobalHttpProxyPreferenceController(context));
-        controllers.add(new EnterpriseInstalledPackagesPreferenceController(context));
         return controllers;
     }
 
diff --git a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceController.java b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceController.java
new file mode 100644
index 0000000..23627cd
--- /dev/null
+++ b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceController.java
@@ -0,0 +1,101 @@
+/*
+ * 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.enterprise;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.MediaStore;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+
+public class EnterpriseSetDefaultAppsPreferenceController extends PreferenceController {
+
+    private static final String KEY_DEFAULT_APPS = "number_enterprise_set_default_apps";
+    private final ApplicationFeatureProvider mFeatureProvider;
+
+    public EnterpriseSetDefaultAppsPreferenceController(Context context) {
+        super(context);
+        mFeatureProvider = FeatureFactory.getFactory(context)
+                .getApplicationFeatureProvider(context);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        // Browser
+        int num = mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                buildIntent(Intent.ACTION_VIEW, Intent.CATEGORY_BROWSABLE, "http:", null)}).size();
+        // Camera
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                new Intent(MediaStore.ACTION_IMAGE_CAPTURE),
+                new Intent(MediaStore.ACTION_VIDEO_CAPTURE)}).size();
+        // Map
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                buildIntent(Intent.ACTION_VIEW, null, "geo:", null)}).size();
+        // E-mail
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                new Intent(Intent.ACTION_SENDTO), new Intent(Intent.ACTION_SEND),
+                new Intent(Intent.ACTION_SEND_MULTIPLE)}).size();
+        // Calendar
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                buildIntent(Intent.ACTION_INSERT, null, null, "vnd.android.cursor.dir/event")})
+                .size();
+        // Contacts
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                buildIntent(Intent.ACTION_PICK, null, null,
+                        ContactsContract.Contacts.CONTENT_TYPE)}).size();
+        // Dialer
+        num += mFeatureProvider.findPersistentPreferredActivities(new Intent[] {
+                new Intent(Intent.ACTION_DIAL), new Intent(Intent.ACTION_CALL)}).size();
+
+        if (num == 0) {
+            preference.setVisible(false);
+        } else {
+            preference.setVisible(true);
+            preference.setTitle(mContext.getResources().getQuantityString(
+                    R.plurals.enterprise_privacy_number_enterprise_set_default_apps,
+                    num, num));
+        }
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_DEFAULT_APPS;
+    }
+
+    private static Intent buildIntent(String action, String category, String protocol,
+            String type) {
+        final Intent intent = new Intent(action);
+        if (category != null) {
+            intent.addCategory(category);
+        }
+        if (protocol != null) {
+            intent.setData(Uri.parse(protocol));
+        }
+        if (type != null) {
+            intent.setType(type);
+        }
+        return intent;
+    }
+}
diff --git a/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
index 546fc0e..3951aff 100644
--- a/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.fingerprint;
 
+import android.app.KeyguardManager;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.UserHandle;
@@ -83,9 +84,17 @@
 
     @Override
     protected void onCancelButtonClick() {
-        SetupSkipDialog dialog = SetupSkipDialog.newInstance(
-                getIntent().getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
-        dialog.show(getFragmentManager());
+        KeyguardManager keyguardManager = getSystemService(KeyguardManager.class);
+        if (keyguardManager.isKeyguardSecure()) {
+            // If the keyguard is already set up securely (maybe the user added a backup screen
+            // lock and skipped fingerprint), return RESULT_SKIP directly.
+            setResult(RESULT_SKIP);
+            finish();
+        } else {
+            SetupSkipDialog dialog = SetupSkipDialog.newInstance(
+                    getIntent().getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
+            dialog.show(getFragmentManager());
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
new file mode 100644
index 0000000..08d570a
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -0,0 +1,176 @@
+/*
+ * 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.fuelgauge;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.os.BatteryManager;
+import android.os.Handler;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.Log;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnStart;
+import com.android.settings.core.lifecycle.events.OnStop;
+import com.android.settings.dashboard.conditional.BatterySaverCondition;
+import com.android.settings.dashboard.conditional.ConditionManager;
+import com.android.settings.widget.MasterSwitchPreference;
+
+import static android.os.PowerManager.ACTION_POWER_SAVE_MODE_CHANGING;
+
+public class BatterySaverController extends PreferenceController implements
+        Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart, OnStop {
+    private static final String KEY_BATTERY_SAVER = "battery_saver";
+    private static final String TAG = "BatterySaverController";
+    private static final boolean DEBUG = false;
+
+    private final BatteryStateChangeReceiver mBatteryStateChangeReceiver;
+    private final PowerManager mPowerManager;
+    private MasterSwitchPreference mBatterySaverPref;
+
+    public BatterySaverController(Context context, Lifecycle lifecycle) {
+        super(context);
+
+        lifecycle.addObserver(this);
+        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        mBatteryStateChangeReceiver = new BatteryStateChangeReceiver();
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_BATTERY_SAVER;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mBatterySaverPref = (MasterSwitchPreference) screen.findPreference(KEY_BATTERY_SAVER);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mBatterySaverPref.setChecked(mPowerManager.isPowerSaveMode());
+        updateSummary();
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final boolean saverOn = (Boolean) newValue;
+        if (saverOn != mPowerManager.isPowerSaveMode()
+                && !mPowerManager.setPowerSaveMode(saverOn)) {
+            // Do nothing if power save mode doesn't set correctly
+            return false;
+        }
+
+        refreshConditionManager();
+        updateSummary();
+        return true;
+    }
+
+    @Override
+    public void onStart() {
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL)
+                , true, mObserver);
+
+        mBatteryStateChangeReceiver.setListening(true);
+    }
+
+    @Override
+    public void onStop() {
+        mContext.getContentResolver().unregisterContentObserver(mObserver);
+        mBatteryStateChangeReceiver.setListening(false);
+    }
+
+    @VisibleForTesting
+    void refreshConditionManager() {
+        ConditionManager.get(mContext).getCondition(BatterySaverCondition.class).refreshState();
+    }
+
+    private void updateSummary() {
+        final boolean mode = mPowerManager.isPowerSaveMode();
+        final int format = mode ? R.string.battery_saver_on_summary
+                : R.string.battery_saver_off_summary;
+        final int percent = Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+        final int percentFormat = percent > 0 ? R.string.battery_saver_desc_turn_on_auto_pct
+                : R.string.battery_saver_desc_turn_on_auto_never;
+
+        final String summary = mContext.getString(format, mContext.getString(percentFormat,
+                Utils.formatPercentage(percent)));
+
+        mBatterySaverPref.setSummary(summary);
+    }
+
+    private final ContentObserver mObserver = new ContentObserver(new Handler()) {
+        @Override
+        public void onChange(boolean selfChange) {
+            updateSummary();
+        }
+    };
+
+    private final class BatteryStateChangeReceiver extends BroadcastReceiver {
+        private boolean mRegistered;
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DEBUG) {
+                Log.d(TAG, "Received " + intent.getAction());
+            }
+            final String action = intent.getAction();
+            if (action.equals(ACTION_POWER_SAVE_MODE_CHANGING)) {
+                mBatterySaverPref.setChecked(mPowerManager.isPowerSaveMode());
+                updateSummary();
+            } else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+                final int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+                // disable BSM switch if phone is plugged in or at 100% while plugged in
+                final boolean enabled = !(status == BatteryManager.BATTERY_STATUS_CHARGING
+                        || status == BatteryManager.BATTERY_STATUS_FULL);
+
+                mBatterySaverPref.setSwitchEnabled(enabled);
+            }
+        }
+
+        public void setListening(boolean listening) {
+            if (listening && !mRegistered) {
+                final IntentFilter ifilter = new IntentFilter();
+                ifilter.addAction(Intent.ACTION_BATTERY_CHANGED);
+                ifilter.addAction(ACTION_POWER_SAVE_MODE_CHANGING);
+                mContext.registerReceiver(this, ifilter);
+                mRegistered = true;
+            } else if (!listening && mRegistered) {
+                mContext.unregisterReceiver(this);
+                mRegistered = false;
+            }
+        }
+
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/BatterySaverPreference.java b/src/com/android/settings/fuelgauge/BatterySaverPreference.java
deleted file mode 100644
index 9e0f39b..0000000
--- a/src/com/android/settings/fuelgauge/BatterySaverPreference.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Context;
-import android.database.ContentObserver;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.provider.Settings;
-import android.provider.Settings.Global;
-import android.support.v7.preference.Preference;
-import android.util.AttributeSet;
-import android.view.View;
-import com.android.settings.R;
-import com.android.settings.Utils;
-
-public class BatterySaverPreference extends Preference {
-
-    private PowerManager mPowerManager;
-
-    public BatterySaverPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void performClick(View view) {
-        Utils.startWithFragment(getContext(), getFragment(), null, null, 0, 0, getTitle());
-    }
-
-    @Override
-    public void onAttached() {
-        super.onAttached();
-        mPowerManager = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
-        mObserver.onChange(true);
-        getContext().getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Global.LOW_POWER_MODE_TRIGGER_LEVEL), true, mObserver);
-        getContext().getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Global.LOW_POWER_MODE), true, mObserver);
-    }
-
-    @Override
-    public void onDetached() {
-        super.onDetached();
-        getContext().getContentResolver().unregisterContentObserver(mObserver);
-    }
-
-    private void updateSwitch() {
-        final Context context = getContext();
-        final boolean mode = mPowerManager.isPowerSaveMode();
-        int format = mode ? R.string.battery_saver_on_summary
-                : R.string.battery_saver_off_summary;
-        int percent = Settings.Global.getInt(context.getContentResolver(),
-                Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
-        int percentFormat = percent > 0 ? R.string.battery_saver_desc_turn_on_auto_pct
-                : R.string.battery_saver_desc_turn_on_auto_never;
-        setSummary(context.getString(format, context.getString(percentFormat,
-                Utils.formatPercentage(percent))));
-    }
-
-    private final ContentObserver mObserver = new ContentObserver(new Handler()) {
-        @Override
-        public void onChange(boolean selfChange) {
-            updateSwitch();
-        }
-    };
-
-}
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java
index a59dc78..296f973 100644
--- a/src/com/android/settings/fuelgauge/HighPowerDetail.java
+++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java
@@ -30,10 +30,12 @@
 import android.widget.Checkable;
 import android.widget.TextView;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
 public class HighPowerDetail extends InstrumentedDialogFragment implements OnClickListener,
@@ -125,6 +127,7 @@
             boolean newValue = mIsEnabled;
             boolean oldValue = mBackend.isWhitelisted(mPackageName);
             if (newValue != oldValue) {
+                logSpecialPermissionChange(newValue, mPackageName, getContext());
                 if (newValue) {
                     mBackend.addApp(mPackageName);
                 } else {
@@ -134,6 +137,14 @@
         }
     }
 
+    @VisibleForTesting
+    static void logSpecialPermissionChange(boolean whitelist, String packageName, Context context) {
+        int logCategory = whitelist ? MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY
+                : MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW;
+        FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context, logCategory,
+                packageName);
+    }
+
     @Override
     public void onDismiss(DialogInterface dialog) {
         super.onDismiss(dialog);
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java
index 1af9df1..60d1ecd 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java
@@ -32,12 +32,12 @@
 
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFragment;
 
 /**
  * Common base class for things that need to show the battery usage graph.
  */
-public abstract class PowerUsageBase extends SettingsPreferenceFragment {
+public abstract class PowerUsageBase extends DashboardFragment {
 
     // +1 to allow ordering for PowerUsageSummary.
     @VisibleForTesting
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 5f9a305..7acb7ce 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -34,6 +34,7 @@
 import android.os.Bundle;
 import android.os.Process;
 import android.os.UserHandle;
+import android.provider.SearchIndexableResource;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.support.v7.preference.PreferenceCategory;
@@ -42,7 +43,6 @@
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
-
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
@@ -58,13 +58,17 @@
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.core.PreferenceController;
 import com.android.settings.location.LocationSettings;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.wifi.WifiSettings;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.Arrays;
+import java.util.List;
 
 public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickListener {
 
@@ -355,7 +359,6 @@
         mPm = activity.getPackageManager();
         mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
 
-        addPreferencesFromResource(R.xml.power_usage_details);
         mDetailsParent = (PreferenceCategory) findPreference(KEY_DETAILS_PARENT);
         mControlsParent = (PreferenceCategory) findPreference(KEY_CONTROLS_PARENT);
         mMessagesParent = (PreferenceCategory) findPreference(KEY_MESSAGES_PARENT);
@@ -385,6 +388,21 @@
     }
 
     @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.power_usage_details;
+    }
+
+    @Override
+    protected List<PreferenceController> getPreferenceControllers(Context context) {
+        return null;
+    }
+
+    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (mHighPower != null) {
@@ -810,4 +828,19 @@
             }
         }
     }
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
+                            .isEnabled()) {
+                        return null;
+                    }
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.power_usage_details;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index c4b97d4..a989ee6 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -26,6 +26,7 @@
 import android.os.Message;
 import android.os.Process;
 import android.os.UserHandle;
+import android.provider.SearchIndexableResource;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
@@ -36,6 +37,7 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
@@ -44,11 +46,16 @@
 import com.android.settings.Settings.HighPowerApplicationsActivity;
 import com.android.settings.SettingsActivity;
 import com.android.settings.applications.ManageApplications;
+import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.display.AutoBrightnessPreferenceController;
+import com.android.settings.display.TimeoutPreferenceController;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.BatteryInfo;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -89,7 +96,6 @@
         super.onCreate(icicle);
         setAnimationAllowed(true);
 
-        addPreferencesFromResource(R.xml.power_usage_summary);
         mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_HISTORY);
         mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
     }
@@ -133,6 +139,25 @@
     }
 
     @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.power_usage_summary;
+    }
+
+    @Override
+    protected List<PreferenceController> getPreferenceControllers(Context context) {
+        final List<PreferenceController> controllers = new ArrayList<>();
+        controllers.add(new AutoBrightnessPreferenceController(context));
+        controllers.add(new TimeoutPreferenceController(context));
+        controllers.add(new BatterySaverController(context, getLifecycle()));
+        return controllers;
+    }
+
+    @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         if (DEBUG) {
             menu.add(Menu.NONE, MENU_STATS_TYPE, Menu.NONE, R.string.menu_stats_total)
@@ -209,6 +234,7 @@
      * We want to coalesce some UIDs. For example, dex2oat runs under a shared gid that
      * exists for all users of the same app. We detect this case and merge the power use
      * for dex2oat to the device OWNER's use of the app.
+     *
      * @return A sorted list of apps using power.
      */
     private static List<BatterySipper> getCoalescedUsageList(final List<BatterySipper> sippers) {
@@ -314,24 +340,33 @@
             final List<BatterySipper> usageList = getCoalescedUsageList(
                     USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList());
 
+            final double screenPowerMah = removeScreenBatterySipper(usageList);
+
             final int dischargeAmount = USE_FAKE_DATA ? 5000
                     : stats != null ? stats.getDischargeAmount(mStatsType) : 0;
             final int numSippers = usageList.size();
             for (int i = 0; i < numSippers; i++) {
                 final BatterySipper sipper = usageList.get(i);
-                if ((sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP) {
+                if (shouldHideSipper(sipper)) {
                     continue;
                 }
-                double totalPower = USE_FAKE_DATA ? 4000 : mStatsHelper.getTotalPower();
+
+                // Deduct the screen power from total power, used to calculate percentOfTotal
+                double totalPower = USE_FAKE_DATA ?
+                        4000 : mStatsHelper.getTotalPower() - screenPowerMah;
+
+                // With deduction in totalPower, percentOfTotal is higher because it adds the part
+                // used in screen
                 final double percentOfTotal =
                         ((sipper.totalPowerMah / totalPower) * dischargeAmount);
+
                 if (((int) (percentOfTotal + .5)) < 1) {
                     continue;
                 }
                 if (sipper.drainType == BatterySipper.DrainType.OVERCOUNTED) {
                     // Don't show over-counted unless it is at least 2/3 the size of
                     // the largest real entry, and its percent of total is more significant
-                    if (sipper.totalPowerMah < ((mStatsHelper.getMaxRealPower()*2)/3)) {
+                    if (sipper.totalPowerMah < ((mStatsHelper.getMaxRealPower() * 2) / 3)) {
                         continue;
                     }
                     if (percentOfTotal < 10) {
@@ -344,7 +379,7 @@
                 if (sipper.drainType == BatterySipper.DrainType.UNACCOUNTED) {
                     // Don't show over-counted unless it is at least 1/2 the size of
                     // the largest real entry, and its percent of total is more significant
-                    if (sipper.totalPowerMah < (mStatsHelper.getMaxRealPower()/2)) {
+                    if (sipper.totalPowerMah < (mStatsHelper.getMaxRealPower() / 2)) {
                         continue;
                     }
                     if (percentOfTotal < 5) {
@@ -375,8 +410,9 @@
                 pref.setTitle(entry.getLabel());
                 pref.setOrder(i + 1);
                 pref.setPercent(percentOfMax, percentOfTotal);
-                if ((sipper.drainType != DrainType.APP || sipper.uidObj.getUid() == 0)
-                         && sipper.drainType != DrainType.USER) {
+                if ((sipper.drainType != DrainType.APP
+                        || sipper.uidObj.getUid() == Process.ROOT_UID)
+                        && sipper.drainType != DrainType.USER) {
                     pref.setTint(colorControl);
                 }
                 addedSome = true;
@@ -396,6 +432,16 @@
     }
 
     @VisibleForTesting
+    boolean shouldHideSipper(BatterySipper sipper) {
+        final DrainType drainType = sipper.drainType;
+        final int uid = sipper.getUid();
+
+        return drainType == DrainType.IDLE || drainType == DrainType.CELL
+                || uid == Process.ROOT_UID || uid == Process.SYSTEM_UID
+                || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP;
+    }
+
+    @VisibleForTesting
     String extractKeyFromSipper(BatterySipper sipper) {
         if (sipper.uidObj != null) {
             return Integer.toString(sipper.getUid());
@@ -409,6 +455,19 @@
         }
     }
 
+    @VisibleForTesting
+    double removeScreenBatterySipper(List<BatterySipper> sippers) {
+        for (int i = 0, size = sippers.size(); i < size; i++) {
+            final BatterySipper sipper = sippers.get(i);
+            if (sipper.drainType == DrainType.SCREEN) {
+                sippers.remove(i);
+                return sipper.totalPowerMah;
+            }
+        }
+
+        return 0;
+    }
+
     private static List<BatterySipper> getFakeStats() {
         ArrayList<BatterySipper> stats = new ArrayList<>();
         float use = 5;
@@ -498,11 +557,26 @@
         }
     }
 
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
+                            .isEnabled()) {
+                        return null;
+                    }
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.power_usage_summary;
+                    return Arrays.asList(sir);
+                }
+            };
+
     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
             = new SummaryLoader.SummaryProviderFactory() {
         @Override
         public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
-                                                                   SummaryLoader summaryLoader) {
+                SummaryLoader summaryLoader) {
             return new SummaryProvider(activity, summaryLoader);
         }
     };
diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
index c31e999..9251f0b 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
@@ -40,11 +40,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
index d203fbc..f374f9e 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
@@ -42,11 +42,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
index 1303ca1..5f5b873 100644
--- a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
+++ b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
@@ -40,11 +40,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index 9b71b96..db6925e 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -122,11 +122,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -170,7 +165,7 @@
 
                     List<PreferenceController> preferenceControllers =
                             getPreferenceControllers(context);
-                    for(PreferenceController controller : preferenceControllers) {
+                    for (PreferenceController controller : preferenceControllers) {
                         controller.updateNonIndexableKeys(result);
                     }
                     return result;
diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java
index 8c0f74c..08e61fa 100644
--- a/src/com/android/settings/gestures/PickupGestureSettings.java
+++ b/src/com/android/settings/gestures/PickupGestureSettings.java
@@ -42,11 +42,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/gestures/SwipeToNotificationSettings.java b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
index fba074e..155412c 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
@@ -40,11 +40,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/inputmethod/InputAndGestureSettings.java b/src/com/android/settings/inputmethod/InputAndGestureSettings.java
index 43d8b230b..5b2c51a 100644
--- a/src/com/android/settings/inputmethod/InputAndGestureSettings.java
+++ b/src/com/android/settings/inputmethod/InputAndGestureSettings.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.os.UserHandle;
+import android.provider.SearchIndexableResource;
 import android.support.annotation.VisibleForTesting;
 
 import com.android.internal.hardware.AmbientDisplayConfiguration;
@@ -31,9 +32,11 @@
 import com.android.settings.gestures.DoubleTwistPreferenceController;
 import com.android.settings.gestures.PickupGesturePreferenceController;
 import com.android.settings.gestures.SwipeToNotificationPreferenceController;
-import com.android.settingslib.drawer.CategoryKey;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.search.BaseSearchIndexProvider;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class InputAndGestureSettings extends DashboardFragment {
@@ -48,11 +51,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_SYSTEM_INPUT;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -90,4 +88,19 @@
     void setAmbientDisplayConfig(AmbientDisplayConfiguration ambientConfig) {
         mAmbientDisplayConfig = ambientConfig;
     }
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
+                            .isEnabled()) {
+                        return null;
+                    }
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.input_and_gesture;
+                    return Arrays.asList(sir);
+                }
+            };
 }
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 587d039..121af98 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -38,7 +38,6 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
-import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -61,11 +60,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_SYSTEM_LANGUAGE;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/language/LanguageAndRegionSettings.java b/src/com/android/settings/language/LanguageAndRegionSettings.java
index 7e92e05..649b2ff 100644
--- a/src/com/android/settings/language/LanguageAndRegionSettings.java
+++ b/src/com/android/settings/language/LanguageAndRegionSettings.java
@@ -24,7 +24,6 @@
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.inputmethod.SpellCheckerPreferenceController;
-import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -39,11 +38,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_SYSTEM_LANGUAGE;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index 86498af..0b40bbd 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -34,6 +34,7 @@
 import com.android.internal.app.LocalePicker;
 import com.android.internal.app.LocaleStore;
 
+import com.android.settings.CreateShortcut;
 import com.android.settings.R;
 
 import java.text.NumberFormat;
@@ -299,6 +300,8 @@
 
                 LocalePicker.updateLocales(mLocalesToSetNext);
                 mLocalesSetLast = mLocalesToSetNext;
+                new CreateShortcut.ShortcutsUpdateTask(mContext).execute();
+
                 mLocalesToSetNext = null;
 
                 mNumberFormatter = NumberFormat.getNumberInstance(Locale.getDefault());
diff --git a/src/com/android/settings/location/AppLocationPermissionPreferenceController.java b/src/com/android/settings/location/AppLocationPermissionPreferenceController.java
new file mode 100644
index 0000000..d91b47b
--- /dev/null
+++ b/src/com/android/settings/location/AppLocationPermissionPreferenceController.java
@@ -0,0 +1,39 @@
+package com.android.settings.location;
+
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+
+public class AppLocationPermissionPreferenceController extends PreferenceController {
+
+    private static final String KEY_APP_LEVEL_PERMISSIONS = "app_level_permissions";
+    private Preference mPreference;
+
+    public AppLocationPermissionPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (isAvailable()) {
+            mPreference = screen.findPreference(KEY_APP_LEVEL_PERMISSIONS);
+        }
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_APP_LEVEL_PERMISSIONS;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return Settings.Global.getInt(mContext.getContentResolver(),
+                android.provider.Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED, 1)
+                == 1;
+    }
+}
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 03aa155..d6ff4dc 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -95,11 +96,14 @@
     private static final String KEY_LOCATION_MODE = "location_mode";
     /** Key for preference category "Recent location requests" */
     private static final String KEY_RECENT_LOCATION_REQUESTS = "recent_location_requests";
+    /** Key for preference "App-level permissions" */
+    private static final String KEY_APP_LEVEL_PERMISSIONS = "app_level_permissions";
     /** Key for preference category "Location services" */
     private static final String KEY_LOCATION_SERVICES = "location_services";
 
     private static final int MENU_SCANNING = Menu.FIRST;
 
+    private static final String KEY_LOCATION_PERMISSION = "android.permission-group.LOCATION";
     private SwitchBar mSwitchBar;
     private Switch mSwitch;
     private boolean mValidListener = false;
@@ -201,10 +205,21 @@
                     }
                 });
 
-        mCategoryRecentLocationRequests =
-                (PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS);
         RecentLocationApps recentApps = new RecentLocationApps(activity);
         List<RecentLocationApps.Request> recentLocationRequests = recentApps.getAppList();
+
+        final AppLocationPermissionPreferenceController preferenceController =
+                new AppLocationPermissionPreferenceController(activity);
+        preferenceController.displayPreference(root);
+        if (preferenceController.isAvailable()) {
+            Preference preferenceAppLevelPermissions =
+                    root.findPreference(KEY_APP_LEVEL_PERMISSIONS);
+            setupAppLevelPermissionsPreference(preferenceAppLevelPermissions);
+        }
+
+        mCategoryRecentLocationRequests =
+                (PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS);
+
         List<Preference> recentLocationPrefs = new ArrayList<>(recentLocationRequests.size());
         for (final RecentLocationApps.Request request : recentLocationRequests) {
             DimmableIconPreference pref = new DimmableIconPreference(getPrefContext(),
@@ -261,6 +276,23 @@
         }
     }
 
+    private void setupAppLevelPermissionsPreference(Preference preference) {
+        preference.setOnPreferenceClickListener(
+                new Preference.OnPreferenceClickListener() {
+                    @Override
+                    public boolean onPreferenceClick(Preference preference) {
+                        Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
+                                .putExtra(Intent.EXTRA_PERMISSION_NAME, KEY_LOCATION_PERMISSION);
+                        try {
+                            getActivity().startActivity(intent);
+                        } catch (ActivityNotFoundException e) {
+                            Log.w("Permission", "No app to handle " + intent);
+                        }
+                        return true;
+                    }
+                });
+    }
+
     private void changeManagedProfileLocationAccessStatus(boolean mainSwitchOn) {
         if (mManagedProfileSwitch == null) {
             return;
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 89dfa02..2d91414 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -24,10 +24,11 @@
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.drawer.CategoryKey;
+import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -47,11 +48,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_NETWORK;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -67,8 +63,12 @@
                 new AirplaneModePreferenceController(context, this /* fragment */);
         final MobilePlanPreferenceController mobilePlanPreferenceController =
                 new MobilePlanPreferenceController(context, this);
-        getLifecycle().addObserver(airplaneModePreferenceController);
-        getLifecycle().addObserver(mobilePlanPreferenceController);
+        final WifiMasterSwitchPreferenceController wifiPreferenceController =
+            new WifiMasterSwitchPreferenceController(context, mMetricsFeatureProvider);
+        final Lifecycle lifecycle = getLifecycle();
+        lifecycle.addObserver(airplaneModePreferenceController);
+        lifecycle.addObserver(mobilePlanPreferenceController);
+        lifecycle.addObserver(wifiPreferenceController);
 
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(airplaneModePreferenceController);
@@ -79,6 +79,7 @@
         controllers.add(new NetworkResetPreferenceController(context));
         controllers.add(new ProxyPreferenceController(context));
         controllers.add(mobilePlanPreferenceController);
+        controllers.add(wifiPreferenceController);
         return controllers;
     }
 
diff --git a/src/com/android/settings/nfc/NfcPreferenceController.java b/src/com/android/settings/nfc/NfcPreferenceController.java
index 65c2d4c..a5e5c3e 100644
--- a/src/com/android/settings/nfc/NfcPreferenceController.java
+++ b/src/com/android/settings/nfc/NfcPreferenceController.java
@@ -44,7 +44,6 @@
 
     private NfcEnabler mNfcEnabler;
     private NfcAdapter mNfcAdapter;
-    private final Handler mHandler = new Handler();
     private int mAirplaneMode;
     private AirplaneModeObserver mAirplaneModeObserver;
     private SwitchPreference mNfcPreference;
@@ -146,7 +145,7 @@
                 Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON);
 
         private AirplaneModeObserver() {
-            super(mHandler);
+            super(new Handler());
         }
 
         public void register() {
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index c720bb5..45762c7 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -19,14 +19,16 @@
 import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationChannel;
-import android.app.NotificationManager;
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ResolveInfo;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
 
@@ -36,13 +38,19 @@
 import com.android.settings.Utils;
 import com.android.settings.applications.AppHeaderController;
 import com.android.settings.applications.AppInfoBase;
+import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.notification.NotificationBackend.AppRow;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settingslib.drawer.CategoryKey;
 
+import java.text.Collator;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 
 /** These settings are per app, so should not be returned in global search results. */
 public class AppNotificationSettings extends NotificationSettingsBase {
@@ -78,6 +86,11 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo");
+            toastAndFinish();
+            return;
+        }
         final Activity activity = getActivity();
         mDashboardFeatureProvider =
                 FeatureFactory.getFactory(activity).getDashboardFeatureProvider(activity);
@@ -85,15 +98,18 @@
         addPreferencesFromResource(R.xml.app_notification_settings);
 
         mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
+        mBadge = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BADGE);
         mChannels = (PreferenceCategory) findPreference(KEY_CHANNELS);
 
         if (mPkgInfo != null) {
-            setupBlock(mAppRow.systemApp, mAppRow.banned);
+            setupBlock();
+            setupBadge();
             // load settings intent
             ArrayMap<String, AppRow> rows = new ArrayMap<String, AppRow>();
             rows.put(mAppRow.pkg, mAppRow);
             collectConfigActivities(rows);
             mChannelList = mBackend.getChannels(mPkg, mUid).getList();
+            Collections.sort(mChannelList, mChannelComparator);
 
             if (mChannelList.isEmpty()) {
                 setVisible(mChannels, false);
@@ -105,16 +121,22 @@
                     channelPref.setDisabledByAdmin(mSuspendedAppsAdmin);
                     channelPref.setKey(channel.getId());
                     channelPref.setTitle(channel.getName());
-                    Bundle channelArgs = new Bundle();
-                    channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
-                    channelArgs.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
-                    channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
-                    channelArgs.putString(ARG_CHANNEL, channel.getId());
 
-                    Intent topicIntent = Utils.onBuildStartFragmentIntent(getActivity(),
-                            ChannelNotificationSettings.class.getName(),
-                            channelArgs, null, 0, null, false);
-                    channelPref.setIntent(topicIntent);
+                    if (channel.isDeleted()) {
+                        channelPref.setTitle(
+                                getString(R.string.deleted_channel_name, channel.getName()));
+                        channelPref.setEnabled(false);
+                    } else {
+                        Bundle channelArgs = new Bundle();
+                        channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
+                        channelArgs.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
+                        channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
+                        channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
+                        Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
+                                ChannelNotificationSettings.class.getName(),
+                                channelArgs, null, 0, null, false);
+                        channelPref.setIntent(channelIntent);
+                    }
                     mChannels.addPreference(channelPref);
                 }
             }
@@ -139,21 +161,32 @@
     @Override
     public void onResume() {
         super.onResume();
-        if ((mUid != -1 && getPackageManager().getPackagesForUid(mUid) == null)) {
-            // App isn't around anymore, must have been removed.
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo");
             finish();
             return;
         }
-        if (mBlock != null) {
-            mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
-        }
     }
 
-    private void setupBlock(boolean notBlockable, boolean banned) {
-        if (notBlockable) {
+    private void setupBadge() {
+        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
+        mBadge.setChecked(mAppRow.showBadge);
+        mBadge.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+            @Override
+            public boolean onPreferenceChange(Preference preference, Object newValue) {
+                final boolean value = (Boolean) newValue;
+                mBackend.setShowBadge(mPkg, mUid, value);
+                return true;
+            }
+        });
+    }
+
+    private void setupBlock() {
+        if (mAppRow.systemApp) {
             setVisible(mBlock, false);
         } else {
-            mBlock.setChecked(banned);
+            mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
+            mBlock.setChecked(mAppRow.banned);
             mBlock.setOnPreferenceChangeListener(
                     new Preference.OnPreferenceChangeListener() {
                         @Override
@@ -171,6 +204,7 @@
 
     private void updateDependents(boolean banned) {
         setVisible(mChannels, !(mChannelList.isEmpty() || banned));
+        setVisible(mBadge, !banned);
     }
 
     private List<ResolveInfo> queryNotificationConfigActivities() {
@@ -212,4 +246,20 @@
                     .setClassName(activityInfo.packageName, activityInfo.name);
         }
     }
+
+    private Comparator<NotificationChannel> mChannelComparator =
+            new Comparator<NotificationChannel>() {
+        private final Collator sCollator = Collator.getInstance();
+
+        @Override
+        public int compare(NotificationChannel left, NotificationChannel right) {
+            if (left.isDeleted() != right.isDeleted()) {
+                return Boolean.compare(left.isDeleted(), right.isDeleted());
+            }
+            if (!Objects.equals(left.getName(), right.getName())) {
+                return sCollator.compare(left.getName().toString(), right.getName().toString());
+            }
+            return left.getId().compareTo(right.getId());
+        }
+    };
 }
diff --git a/src/com/android/settings/notification/BootSoundPreferenceController.java b/src/com/android/settings/notification/BootSoundPreferenceController.java
new file mode 100644
index 0000000..b644ee9
--- /dev/null
+++ b/src/com/android/settings/notification/BootSoundPreferenceController.java
@@ -0,0 +1,66 @@
+/*
+ * 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.os.SystemProperties;
+import android.support.annotation.VisibleForTesting;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import com.android.settings.core.PreferenceController;
+
+public class BootSoundPreferenceController extends PreferenceController {
+
+    // Boot Sounds needs to be a system property so it can be accessed during boot.
+    private static final String KEY_BOOT_SOUNDS = "boot_sounds";
+    @VisibleForTesting
+    static final String PROPERTY_BOOT_SOUNDS = "persist.sys.bootanim.play_sound";
+
+    public BootSoundPreferenceController(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (isAvailable()) {
+            SwitchPreference preference = (SwitchPreference) screen.findPreference(KEY_BOOT_SOUNDS);
+            preference.setChecked(SystemProperties.getBoolean(PROPERTY_BOOT_SOUNDS, true));
+        }
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (KEY_BOOT_SOUNDS.equals(preference.getKey())) {
+            SwitchPreference switchPreference = (SwitchPreference) preference;
+            SystemProperties.set(PROPERTY_BOOT_SOUNDS, switchPreference.isChecked() ? "1" : "0");
+        }
+        return false;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_BOOT_SOUNDS;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return mContext.getResources().getBoolean(com.android.settings.R.bool.has_boot_sounds);
+    }
+
+}
\ No newline at end of file
diff --git a/src/com/android/settings/notification/ChannelNotificationSettings.java b/src/com/android/settings/notification/ChannelNotificationSettings.java
index e73feb5..ecce79e 100644
--- a/src/com/android/settings/notification/ChannelNotificationSettings.java
+++ b/src/com/android/settings/notification/ChannelNotificationSettings.java
@@ -34,6 +34,8 @@
 import android.provider.Settings;
 import android.service.notification.NotificationListenerService.Ranking;
 import android.support.v7.preference.Preference;
+import android.text.TextUtils;
+import android.util.Log;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.widget.LockPatternUtils;
@@ -47,15 +49,17 @@
 import com.android.settingslib.RestrictedSwitchPreference;
 
 import java.util.ArrayList;
+import java.util.List;
 
 public class ChannelNotificationSettings extends NotificationSettingsBase {
+    private static final String TAG = "ChannelSettings";
+
     protected static final String KEY_BYPASS_DND = "bypass_dnd";
     protected static final String KEY_VISIBILITY_OVERRIDE = "visibility_override";
     protected static final String KEY_IMPORTANCE = "importance";
     protected static final String KEY_LIGHTS = "lights";
     protected static final String KEY_VIBRATE = "vibrate";
     protected static final String KEY_RINGTONE = "ringtone";
-    protected static final String KEY_BADGE = "badge";
 
     protected RestrictedSwitchPreference mLights;
     protected RestrictedSwitchPreference mVibrate;
@@ -84,6 +88,11 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mChannel == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo or channel");
+            toastAndFinish();
+            return;
+        }
         final Activity activity = getActivity();
         mDashboardFeatureProvider =
                 FeatureFactory.getFactory(activity).getDashboardFeatureProvider(activity);
@@ -100,7 +109,7 @@
         mVibrate = (RestrictedSwitchPreference) findPreference(KEY_VIBRATE);
         mRingtone = (DefaultNotificationTonePreference) findPreference(KEY_RINGTONE);
 
-        if (mPkgInfo != null) {
+        if (mPkgInfo != null && mChannel != null) {
             setupPriorityPref(mChannel.canBypassDnd());
             setupVisOverridePref(mChannel.getLockscreenVisibility());
             setupLights();
@@ -114,8 +123,8 @@
                     .getApplicationFeatureProvider(activity)
                     .newAppHeaderController(this /* fragment */, null /* appHeader */)
                     .setIcon(mAppRow.icon)
-                    .setLabel(mAppRow.label)
-                    .setSummary(mChannel.getName())
+                    .setLabel(mChannel.getName())
+                    .setSummary(mAppRow.label)
                     .setPackageName(mAppRow.pkg)
                     .setUid(mAppRow.uid)
                     .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
@@ -128,8 +137,8 @@
     @Override
     public void onResume() {
         super.onResume();
-        if ((mUid != -1 && getPackageManager().getPackagesForUid(mUid) == null)) {
-            // App isn't around anymore, must have been removed.
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mChannel == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo or channel");
             finish();
             return;
         }
@@ -138,8 +147,6 @@
         mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
         mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
         mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
-        mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
-        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
     }
 
     private void setupLights() {
@@ -204,6 +211,7 @@
             }
         });
         mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
+        mBadge.setEnabled(mAppRow.showBadge);
         mBadge.setChecked(mChannel.canShowBadge());
         mBadge.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
             @Override
@@ -218,15 +226,20 @@
 
         mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
         final int numImportances = IMPORTANCE_HIGH - IMPORTANCE_MIN + 1;
-        String[] summaries = new String[numImportances];
-        String[] values = new String[numImportances];
+        List<String> summaries = new ArrayList<>();
+        List<String> values = new ArrayList<>();;
         for (int i = 0; i < numImportances; i++) {
             int importance = i + 1;
-            summaries[i] = getSummary(importance);
-            values[i] = String.valueOf(importance);
+            summaries.add(getSummary(importance));
+            values.add(String.valueOf(importance));
         }
-        mImportance.setEntryValues(values);
-        mImportance.setEntries(summaries);
+        if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
+            // Add option to reset to letting the app decide
+            summaries.add(getSummary(NotificationManager.IMPORTANCE_UNSPECIFIED));
+            values.add(String.valueOf(NotificationManager.IMPORTANCE_UNSPECIFIED));
+        }
+        mImportance.setEntryValues(values.toArray(new String[0]));
+        mImportance.setEntries(summaries.toArray(new String[0]));
         mImportance.setValue(String.valueOf(mChannel.getImportance()));
         mImportance.setSummary("%s");
 
@@ -245,6 +258,8 @@
 
     private String getSummary(int importance) {
         switch (importance) {
+            case NotificationManager.IMPORTANCE_UNSPECIFIED:
+                return getContext().getString(R.string.notification_importance_unspecified);
             case NotificationManager.IMPORTANCE_NONE:
                 return getContext().getString(R.string.notification_importance_blocked);
             case NotificationManager.IMPORTANCE_MIN:
diff --git a/src/com/android/settings/notification/ChargingSoundPreferenceController.java b/src/com/android/settings/notification/ChargingSoundPreferenceController.java
new file mode 100644
index 0000000..1114b4a
--- /dev/null
+++ b/src/com/android/settings/notification/ChargingSoundPreferenceController.java
@@ -0,0 +1,39 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
+
+import android.content.Context;
+
+import android.provider.Settings.Global;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class ChargingSoundPreferenceController extends SettingPrefController {
+
+    private static final String KEY_CHARGING_SOUNDS = "charging_sounds";
+
+    public ChargingSoundPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_GLOBAL, KEY_CHARGING_SOUNDS, Global.CHARGING_SOUNDS_ENABLED, DEFAULT_ON);
+
+    }
+
+}
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index fd59c97..2a737d4 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -40,11 +40,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return "";
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/notification/DialPadTonePreferenceController.java b/src/com/android/settings/notification/DialPadTonePreferenceController.java
new file mode 100644
index 0000000..08e1a7d
--- /dev/null
+++ b/src/com/android/settings/notification/DialPadTonePreferenceController.java
@@ -0,0 +1,44 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
+
+import android.content.Context;
+
+import android.provider.Settings.System;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class DialPadTonePreferenceController extends SettingPrefController {
+
+    private static final String KEY_DIAL_PAD_TONES = "dial_pad_tones";
+
+    public DialPadTonePreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_SYSTEM, KEY_DIAL_PAD_TONES, System.DTMF_TONE_WHEN_DIALING, DEFAULT_ON) {
+            @Override
+            public boolean isApplicable(Context context) {
+                return Utils.isVoiceCapable(context);
+            }
+        };
+    }
+
+}
diff --git a/src/com/android/settings/notification/DockAudioMediaPreferenceController.java b/src/com/android/settings/notification/DockAudioMediaPreferenceController.java
new file mode 100644
index 0000000..20c20b4
--- /dev/null
+++ b/src/com/android/settings/notification/DockAudioMediaPreferenceController.java
@@ -0,0 +1,64 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
+
+import android.content.Context;
+
+import android.content.res.Resources;
+import android.provider.Settings.Global;
+import android.telephony.TelephonyManager;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class DockAudioMediaPreferenceController extends SettingPrefController {
+
+    private static final String KEY_DOCK_AUDIO_MEDIA = "dock_audio_media";
+
+    private static final int DOCK_AUDIO_MEDIA_DISABLED = 0;
+    private static final int DOCK_AUDIO_MEDIA_ENABLED = 1;
+    private static final int DEFAULT_DOCK_AUDIO_MEDIA = DOCK_AUDIO_MEDIA_DISABLED;
+
+    public DockAudioMediaPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_GLOBAL, KEY_DOCK_AUDIO_MEDIA, Global.DOCK_AUDIO_MEDIA_ENABLED,
+            DEFAULT_DOCK_AUDIO_MEDIA, DOCK_AUDIO_MEDIA_DISABLED, DOCK_AUDIO_MEDIA_ENABLED) {
+            @Override
+            public boolean isApplicable(Context context) {
+                return context.getResources().getBoolean(
+                    com.android.settings.R.bool.has_dock_settings);
+            }
+
+            @Override
+            protected String getCaption(Resources res, int value) {
+                switch(value) {
+                    case DOCK_AUDIO_MEDIA_DISABLED:
+                        return res.getString(
+                            com.android.settings.R.string.dock_audio_media_disabled);
+                    case DOCK_AUDIO_MEDIA_ENABLED:
+                        return res.getString(
+                            com.android.settings.R.string.dock_audio_media_enabled);
+                    default:
+                        throw new IllegalArgumentException();
+                }
+            }
+        };
+    }
+}
diff --git a/src/com/android/settings/notification/DockingSoundPreferenceController.java b/src/com/android/settings/notification/DockingSoundPreferenceController.java
new file mode 100644
index 0000000..ee277f0
--- /dev/null
+++ b/src/com/android/settings/notification/DockingSoundPreferenceController.java
@@ -0,0 +1,43 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
+
+import android.content.Context;
+import android.provider.Settings.Global;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class DockingSoundPreferenceController extends SettingPrefController {
+
+    private static final String KEY_DOCKING_SOUNDS = "docking_sounds";
+
+    public DockingSoundPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_GLOBAL, KEY_DOCKING_SOUNDS, Global.DOCK_SOUNDS_ENABLED, DEFAULT_ON) {
+            @Override
+            public boolean isApplicable(Context context) {
+                return context.getResources().getBoolean(R.bool.has_dock_settings);
+            }
+        };
+    }
+
+}
diff --git a/src/com/android/settings/notification/EmergencyTonePreferenceController.java b/src/com/android/settings/notification/EmergencyTonePreferenceController.java
new file mode 100644
index 0000000..bc21f44
--- /dev/null
+++ b/src/com/android/settings/notification/EmergencyTonePreferenceController.java
@@ -0,0 +1,69 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
+
+import android.content.Context;
+
+import android.content.res.Resources;
+import android.provider.Settings.Global;
+import android.telephony.TelephonyManager;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class EmergencyTonePreferenceController extends SettingPrefController {
+
+    private static final String KEY_EMERGENCY_TONE = "emergency_tone";
+    private static final int EMERGENCY_TONE_SILENT = 0;
+    private static final int EMERGENCY_TONE_ALERT = 1;
+    private static final int EMERGENCY_TONE_VIBRATE = 2;
+    private static final int DEFAULT_EMERGENCY_TONE = EMERGENCY_TONE_SILENT;
+
+    public EmergencyTonePreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_GLOBAL, KEY_EMERGENCY_TONE, Global.EMERGENCY_TONE, DEFAULT_EMERGENCY_TONE,
+            EMERGENCY_TONE_ALERT, EMERGENCY_TONE_VIBRATE, EMERGENCY_TONE_SILENT) {
+
+            @Override
+            public boolean isApplicable(Context context) {
+                final TelephonyManager telephony =
+                    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+                return telephony != null
+                    && telephony.getCurrentPhoneType() == TelephonyManager.PHONE_TYPE_CDMA;
+            }
+
+            @Override
+            protected String getCaption(Resources res, int value) {
+                switch(value) {
+                    case EMERGENCY_TONE_SILENT:
+                        return res.getString(R.string.emergency_tone_silent);
+                    case EMERGENCY_TONE_ALERT:
+                        return res.getString(R.string.emergency_tone_alert);
+                    case EMERGENCY_TONE_VIBRATE:
+                        return res.getString(R.string.emergency_tone_vibrate);
+                    default:
+                        throw new IllegalArgumentException();
+                }
+            }
+        };
+    }
+
+}
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index b032358..2cd728c 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -29,9 +29,12 @@
 import android.service.notification.NotificationListenerService;
 import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.utils.ManagedServiceSettings;
 
 public class NotificationAccessSettings extends ManagedServiceSettings {
@@ -68,6 +71,7 @@
     }
 
     protected boolean setEnabled(ComponentName service, String title, boolean enable) {
+        logSpecialPermissionChange(enable, service.getPackageName());
         if (!enable) {
             if (!mServiceListing.isEnabled(service)) {
                 return true; // already disabled
@@ -82,6 +86,14 @@
         }
     }
 
+    @VisibleForTesting
+    void logSpecialPermissionChange(boolean enable, String packageName) {
+        int logCategory = enable ? MetricsEvent.APP_SPECIAL_PERMISSION_NOTIVIEW_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_NOTIVIEW_DENY;
+        FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider().action(getContext(),
+                logCategory, packageName);
+    }
+
     private static void disable(final Context context, final NotificationAccessSettings parent,
             final ComponentName cn) {
         parent.mServiceListing.setEnabled(cn, false);
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 4013971..124579f 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -26,6 +26,7 @@
 import android.content.pm.ParceledListSlice;
 import android.graphics.drawable.Drawable;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.settingslib.Utils;
@@ -48,6 +49,8 @@
         }
         row.icon = app.loadIcon(pm);
         row.banned = getNotificationsBanned(row.pkg, row.uid);
+        row.showBadge = canShowBadge(row.pkg, row.uid);
+        row.userId = UserHandle.getUserId(row.uid);
         return row;
     }
 
@@ -87,12 +90,31 @@
         }
     }
 
+    public boolean canShowBadge(String pkg, int uid) {
+        try {
+            return sINM.canShowBadge(pkg, uid);
+        } catch (Exception e) {
+            Log.w(TAG, "Error calling NoMan", e);
+            return false;
+        }
+    }
+
+    public boolean setShowBadge(String pkg, int uid, boolean showBadge) {
+        try {
+            sINM.setShowBadge(pkg, uid, showBadge);
+            return true;
+        } catch (Exception e) {
+            Log.w(TAG, "Error calling NoMan", e);
+            return false;
+        }
+    }
+
     public NotificationChannel getChannel(String pkg, int uid, String channelId) {
         if (channelId == null) {
             return null;
         }
         try {
-            return sINM.getNotificationChannelForPackage(pkg, uid, channelId);
+            return sINM.getNotificationChannelForPackage(pkg, uid, channelId, true);
         } catch (Exception e) {
             Log.w(TAG, "Error calling NoMan", e);
             return null;
@@ -101,7 +123,7 @@
 
     public ParceledListSlice<NotificationChannel> getChannels(String pkg, int uid) {
         try {
-            return sINM.getNotificationChannelsForPackage(pkg, uid);
+            return sINM.getNotificationChannelsForPackage(pkg, uid, true);
         } catch (Exception e) {
             Log.w(TAG, "Error calling NoMan", e);
             return ParceledListSlice.emptyList();
@@ -129,6 +151,8 @@
         public boolean banned;
         public boolean first;  // first app in section
         public boolean systemApp;
+        public boolean showBadge;
+        public int userId;
     }
 
     public static class ChannelRow extends AppRow {
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index f3e4390..f6c6591 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -16,45 +16,37 @@
 
 package com.android.settings.notification;
 
-import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
 
-import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
-import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.UserInfo;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
-import android.service.notification.NotificationListenerService.Ranking;
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
-import java.util.ArrayList;
-
-import static com.android.settings.notification.RestrictedDropDownPreference.RestrictedItem;
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 abstract public class NotificationSettingsBase extends SettingsPreferenceFragment {
     private static final String TAG = "NotifiSettingsBase";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    protected static final String ARG_CHANNEL = "channel";
-
     protected static final String KEY_BLOCK = "block";
+    protected static final String KEY_BADGE = "badge";
 
     protected PackageManager mPm;
     protected UserManager mUm;
@@ -106,26 +98,26 @@
         mUid = args != null && args.containsKey(AppInfoBase.ARG_PACKAGE_UID)
                 ? args.getInt(AppInfoBase.ARG_PACKAGE_UID)
                 : intent.getIntExtra(Settings.EXTRA_APP_UID, -1);
-        if (mUid == -1 || TextUtils.isEmpty(mPkg)) {
-            Log.w(TAG, "Missing extras: " + Settings.EXTRA_APP_PACKAGE + " was " + mPkg + ", "
-                    + Settings.EXTRA_APP_UID + " was " + mUid);
-            toastAndFinish();
-            return;
-        }
-        mUserId = UserHandle.getUserId(mUid);
 
-        if (DEBUG) Log.d(TAG, "Load details for pkg=" + mPkg + " uid=" + mUid);
+        if (mUid < 0) {
+            try {
+                mUid = mPm.getPackageUid(mPkg, 0);
+            } catch (NameNotFoundException e) {
+            }
+        }
+
         mPkgInfo = findPackageInfo(mPkg, mUid);
-        if (mPkgInfo == null) {
-            Log.w(TAG, "Failed to find package info: " + Settings.EXTRA_APP_PACKAGE + " was " + mPkg
-                    + ", " + Settings.EXTRA_APP_UID + " was " + mUid);
+
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo");
             toastAndFinish();
             return;
         }
 
+        mUserId = UserHandle.getUserId(mUid);
         mAppRow = mBackend.loadAppRow(mContext, mPm, mPkgInfo);
-        mChannel = (args != null && args.containsKey(ARG_CHANNEL)) ?
-                mBackend.getChannel(mPkg, mUid, args.getString(ARG_CHANNEL)) : null;
+        mChannel = (args != null && args.containsKey(Settings.EXTRA_CHANNEL_ID)) ?
+                mBackend.getChannel(mPkg, mUid, args.getString(Settings.EXTRA_CHANNEL_ID)) : null;
 
         mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
                 mContext, mPkg, mUserId);
@@ -137,14 +129,15 @@
     @Override
     public void onResume() {
         super.onResume();
-        if ((mUid != -1 && getPackageManager().getPackagesForUid(mUid) == null)) {
-            // App isn't around anymore, must have been removed.
+        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+            Log.w(TAG, "Missing package or uid or packageinfo");
             finish();
             return;
         }
         mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
                 mContext, mPkg, mUserId);
         mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
+        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
     }
 
     protected void setVisible(Preference p, boolean visible) {
@@ -163,6 +156,9 @@
     }
 
     private PackageInfo findPackageInfo(String pkg, int uid) {
+        if (pkg == null || uid < 0) {
+            return null;
+        }
         final String[] packages = mPm.getPackagesForUid(uid);
         if (packages != null && pkg != null) {
             final int N = packages.length;
@@ -179,4 +175,16 @@
         }
         return null;
     }
+
+    private PackageInfo findPackageInfo(String pkg) {
+        if (pkg == null) {
+            return null;
+        }
+        try {
+            return mPm.getPackageInfo(pkg, PackageManager.GET_SIGNATURES);
+        } catch (NameNotFoundException e) {
+            Log.w(TAG, "Failed to load package " + pkg, e);
+        }
+        return null;
+    }
 }
diff --git a/src/com/android/settings/notification/NotificationStation.java b/src/com/android/settings/notification/NotificationStation.java
index 04897e4..50bcd95 100644
--- a/src/com/android/settings/notification/NotificationStation.java
+++ b/src/com/android/settings/notification/NotificationStation.java
@@ -56,7 +56,7 @@
 public class NotificationStation extends SettingsPreferenceFragment {
     private static final String TAG = NotificationStation.class.getSimpleName();
 
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;
     private static final boolean DUMP_EXTRAS = true;
     private static final boolean DUMP_PARCEL = true;
     private Handler mHandler;
@@ -362,6 +362,11 @@
                                         .append(delim)
                                         .append(rank.getImportanceExplanation());
                             }
+                            sb.append("\n")
+                                    .append(bold(getString(
+                                            R.string.notification_log_details_badge)))
+                                    .append(delim)
+                                    .append(Boolean.toString(rank.canShowBadge()));
                         } else {
                             if (mRanking == null) {
                                 sb.append("\n")
diff --git a/src/com/android/settings/notification/OtherSoundSettings.java b/src/com/android/settings/notification/OtherSoundSettings.java
index cf47cb5..5c409d3 100644
--- a/src/com/android/settings/notification/OtherSoundSettings.java
+++ b/src/com/android/settings/notification/OtherSoundSettings.java
@@ -16,177 +16,26 @@
 
 package com.android.settings.notification;
 
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.media.AudioManager;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.SystemProperties;
-import android.os.Vibrator;
 import android.provider.SearchIndexableResource;
-import android.provider.Settings.Global;
-import android.provider.Settings.System;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.telephony.TelephonyManager;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
-import static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
-
-public class OtherSoundSettings extends SettingsPreferenceFragment implements Indexable {
+/* This class has been deprecated  Modifications to Other Sounds settings should be made in
+   {@link SoundSettings } instead. */
+@Deprecated
+public class OtherSoundSettings extends DashboardFragment {
     private static final String TAG = "OtherSoundSettings";
 
-    private static final int DEFAULT_ON = 1;
-
-    private static final int EMERGENCY_TONE_SILENT = 0;
-    private static final int EMERGENCY_TONE_ALERT = 1;
-    private static final int EMERGENCY_TONE_VIBRATE = 2;
-    private static final int DEFAULT_EMERGENCY_TONE = EMERGENCY_TONE_SILENT;
-
-    private static final int DOCK_AUDIO_MEDIA_DISABLED = 0;
-    private static final int DOCK_AUDIO_MEDIA_ENABLED = 1;
-    private static final int DEFAULT_DOCK_AUDIO_MEDIA = DOCK_AUDIO_MEDIA_DISABLED;
-
-    private static final String KEY_DIAL_PAD_TONES = "dial_pad_tones";
-    private static final String KEY_SCREEN_LOCKING_SOUNDS = "screen_locking_sounds";
-    private static final String KEY_CHARGING_SOUNDS = "charging_sounds";
-    private static final String KEY_DOCKING_SOUNDS = "docking_sounds";
-    private static final String KEY_TOUCH_SOUNDS = "touch_sounds";
-    private static final String KEY_VIBRATE_ON_TOUCH = "vibrate_on_touch";
-    private static final String KEY_DOCK_AUDIO_MEDIA = "dock_audio_media";
-    private static final String KEY_EMERGENCY_TONE = "emergency_tone";
-
-    // Boot Sounds needs to be a system property so it can be accessed during boot.
-    private static final String KEY_BOOT_SOUNDS = "boot_sounds";
-    private static final String PROPERTY_BOOT_SOUNDS = "persist.sys.bootanim.play_sound";
-
-    private static final SettingPref PREF_DIAL_PAD_TONES = new SettingPref(
-            TYPE_SYSTEM, KEY_DIAL_PAD_TONES, System.DTMF_TONE_WHEN_DIALING, DEFAULT_ON) {
-        @Override
-        public boolean isApplicable(Context context) {
-            return Utils.isVoiceCapable(context);
-        }
-    };
-
-    private static final SettingPref PREF_SCREEN_LOCKING_SOUNDS = new SettingPref(
-            TYPE_SYSTEM, KEY_SCREEN_LOCKING_SOUNDS, System.LOCKSCREEN_SOUNDS_ENABLED, DEFAULT_ON);
-
-    private static final SettingPref PREF_CHARGING_SOUNDS = new SettingPref(
-            TYPE_GLOBAL, KEY_CHARGING_SOUNDS, Global.CHARGING_SOUNDS_ENABLED, DEFAULT_ON);
-
-    private static final SettingPref PREF_DOCKING_SOUNDS = new SettingPref(
-            TYPE_GLOBAL, KEY_DOCKING_SOUNDS, Global.DOCK_SOUNDS_ENABLED, DEFAULT_ON) {
-        @Override
-        public boolean isApplicable(Context context) {
-            return hasDockSettings(context);
-        }
-    };
-
-    private static final SettingPref PREF_TOUCH_SOUNDS = new SettingPref(
-            TYPE_SYSTEM, KEY_TOUCH_SOUNDS, System.SOUND_EFFECTS_ENABLED, DEFAULT_ON) {
-        @Override
-        protected boolean setSetting(final Context context, final int value) {
-            AsyncTask.execute(new Runnable() {
-                @Override
-                public void run() {
-                    final AudioManager am =
-                            (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
-                    if (value != 0) {
-                        am.loadSoundEffects();
-                    } else {
-                        am.unloadSoundEffects();
-                    }
-                }
-            });
-            return super.setSetting(context, value);
-        }
-    };
-
-    private static final SettingPref PREF_VIBRATE_ON_TOUCH = new SettingPref(
-            TYPE_SYSTEM, KEY_VIBRATE_ON_TOUCH, System.HAPTIC_FEEDBACK_ENABLED, DEFAULT_ON) {
-        @Override
-        public boolean isApplicable(Context context) {
-            return hasHaptic(context);
-        }
-    };
-
-    private static final SettingPref PREF_DOCK_AUDIO_MEDIA = new SettingPref(
-            TYPE_GLOBAL, KEY_DOCK_AUDIO_MEDIA, Global.DOCK_AUDIO_MEDIA_ENABLED,
-            DEFAULT_DOCK_AUDIO_MEDIA, DOCK_AUDIO_MEDIA_DISABLED, DOCK_AUDIO_MEDIA_ENABLED) {
-        @Override
-        public boolean isApplicable(Context context) {
-            return hasDockSettings(context);
-        }
-
-        @Override
-        protected String getCaption(Resources res, int value) {
-            switch(value) {
-                case DOCK_AUDIO_MEDIA_DISABLED:
-                    return res.getString(R.string.dock_audio_media_disabled);
-                case DOCK_AUDIO_MEDIA_ENABLED:
-                    return res.getString(R.string.dock_audio_media_enabled);
-                default:
-                    throw new IllegalArgumentException();
-            }
-        }
-    };
-
-    private static final SettingPref PREF_EMERGENCY_TONE = new SettingPref(
-            TYPE_GLOBAL, KEY_EMERGENCY_TONE, Global.EMERGENCY_TONE, DEFAULT_EMERGENCY_TONE,
-            EMERGENCY_TONE_ALERT, EMERGENCY_TONE_VIBRATE, EMERGENCY_TONE_SILENT) {
-        @Override
-        public boolean isApplicable(Context context) {
-            final int activePhoneType = TelephonyManager.getDefault().getCurrentPhoneType();
-            return activePhoneType == TelephonyManager.PHONE_TYPE_CDMA;
-        }
-
-        @Override
-        protected String getCaption(Resources res, int value) {
-            switch(value) {
-                case EMERGENCY_TONE_SILENT:
-                    return res.getString(R.string.emergency_tone_silent);
-                case EMERGENCY_TONE_ALERT:
-                    return res.getString(R.string.emergency_tone_alert);
-                case EMERGENCY_TONE_VIBRATE:
-                    return res.getString(R.string.emergency_tone_vibrate);
-                default:
-                    throw new IllegalArgumentException();
-            }
-        }
-    };
-
-    private static final SettingPref[] PREFS = {
-        PREF_DIAL_PAD_TONES,
-        PREF_SCREEN_LOCKING_SOUNDS,
-        PREF_CHARGING_SOUNDS,
-        PREF_DOCKING_SOUNDS,
-        PREF_TOUCH_SOUNDS,
-        PREF_VIBRATE_ON_TOUCH,
-        PREF_DOCK_AUDIO_MEDIA,
-        PREF_EMERGENCY_TONE,
-    };
-
-    private SwitchPreference mBootSounds;
-
-    private final SettingsObserver mSettingsObserver = new SettingsObserver();
-
-    private Context mContext;
-
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.NOTIFICATION_OTHER_SOUND;
@@ -198,84 +47,29 @@
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        addPreferencesFromResource(R.xml.other_sound_settings);
-
-        mContext = getActivity();
-
-        for (SettingPref pref : PREFS) {
-            pref.init(this);
-        }
-
-        if (mContext.getResources().getBoolean(R.bool.has_boot_sounds)) {
-            mBootSounds = (SwitchPreference) findPreference(KEY_BOOT_SOUNDS);
-            mBootSounds.setChecked(SystemProperties.getBoolean(PROPERTY_BOOT_SOUNDS, true));
-        } else {
-            removePreference(KEY_BOOT_SOUNDS);
-        }
+    protected String getLogTag() {
+        return TAG;
     }
 
     @Override
-    public void onResume() {
-        super.onResume();
-        mSettingsObserver.register(true);
+    protected int getPreferenceScreenResId() {
+        return R.xml.other_sound_settings;
     }
 
     @Override
-    public void onPause() {
-        super.onPause();
-        mSettingsObserver.register(false);
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(Preference preference) {
-        if (mBootSounds != null && preference == mBootSounds) {
-            SystemProperties.set(PROPERTY_BOOT_SOUNDS, mBootSounds.isChecked() ? "1" : "0");
-            return false;
-        } else {
-            return super.onPreferenceTreeClick(preference);
-        }
-    }
-
-    private static boolean hasDockSettings(Context context) {
-        return context.getResources().getBoolean(R.bool.has_dock_settings);
-    }
-
-    private static boolean hasHaptic(Context context) {
-        final Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-        return vibrator != null && vibrator.hasVibrator();
-    }
-
-    // === Callbacks ===
-
-    private final class SettingsObserver extends ContentObserver {
-        public SettingsObserver() {
-            super(new Handler());
-        }
-
-        public void register(boolean register) {
-            final ContentResolver cr = getContentResolver();
-            if (register) {
-                for (SettingPref pref : PREFS) {
-                    cr.registerContentObserver(pref.getUri(), false, this);
-                }
-            } else {
-                cr.unregisterContentObserver(this);
-            }
-        }
-
-        @Override
-        public void onChange(boolean selfChange, Uri uri) {
-            super.onChange(selfChange, uri);
-            for (SettingPref pref : PREFS) {
-                if (pref.getUri().equals(uri)) {
-                    pref.update(mContext);
-                    return;
-                }
-            }
-        }
+    protected List<PreferenceController> getPreferenceControllers(Context context) {
+        final List<PreferenceController> controllers = new ArrayList<>();
+        Lifecycle lifecycle = getLifecycle();
+        controllers.add(new DialPadTonePreferenceController(context, this, lifecycle));
+        controllers.add(new ScreenLockSoundPreferenceController(context, this, lifecycle));
+        controllers.add(new ChargingSoundPreferenceController(context, this, lifecycle));
+        controllers.add(new DockingSoundPreferenceController(context, this, lifecycle));
+        controllers.add(new TouchSoundPreferenceController(context, this, lifecycle));
+        controllers.add(new VibrateOnTouchPreferenceController(context, this, lifecycle));
+        controllers.add(new DockAudioMediaPreferenceController(context, this, lifecycle));
+        controllers.add(new BootSoundPreferenceController(context));
+        controllers.add(new EmergencyTonePreferenceController(context, this, lifecycle));
+        return controllers;
     }
 
     // === Indexing ===
@@ -292,11 +86,23 @@
 
         public List<String> getNonIndexableKeys(Context context) {
             final ArrayList<String> rt = new ArrayList<String>();
-            for (SettingPref pref : PREFS) {
-                if (!pref.isApplicable(context)) {
-                    rt.add(pref.getKey());
-                }
-            }
+            new DialPadTonePreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new ScreenLockSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new ChargingSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new DockingSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new TouchSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new VibrateOnTouchPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new DockAudioMediaPreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
+            new BootSoundPreferenceController(context).updateNonIndexableKeys(rt);
+            new EmergencyTonePreferenceController(context, null /* SettingsPreferenceFragment */,
+                null /* Lifecycle */).updateNonIndexableKeys(rt);
             return rt;
         }
     };
diff --git a/src/com/android/settings/notification/ScreenLockSoundPreferenceController.java b/src/com/android/settings/notification/ScreenLockSoundPreferenceController.java
new file mode 100644
index 0000000..f9905c0
--- /dev/null
+++ b/src/com/android/settings/notification/ScreenLockSoundPreferenceController.java
@@ -0,0 +1,38 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
+
+import android.content.Context;
+
+import android.provider.Settings.System;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class ScreenLockSoundPreferenceController extends SettingPrefController {
+
+    private static final String KEY_SCREEN_LOCKING_SOUNDS = "screen_locking_sounds";
+
+    public ScreenLockSoundPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_SYSTEM, KEY_SCREEN_LOCKING_SOUNDS, System.LOCKSCREEN_SOUNDS_ENABLED, DEFAULT_ON);
+    }
+
+}
diff --git a/src/com/android/settings/notification/SettingPrefController.java b/src/com/android/settings/notification/SettingPrefController.java
new file mode 100644
index 0000000..d126fc4
--- /dev/null
+++ b/src/com/android/settings/notification/SettingPrefController.java
@@ -0,0 +1,123 @@
+/*
+ * 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.ContentResolver;
+import android.content.Context;
+
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.lifecycle.Lifecycle;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnPause;
+import com.android.settings.core.lifecycle.events.OnResume;
+import java.util.List;
+
+public abstract class SettingPrefController extends PreferenceController implements
+    LifecycleObserver, OnResume, OnPause {
+
+    protected static final int DEFAULT_ON = 1;
+
+    private SettingsPreferenceFragment mParent;
+    protected SettingsObserver mSettingsObserver;
+    protected SettingPref mPreference;
+
+    public SettingPrefController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context);
+        mParent = parent;
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        mPreference.init(mParent);
+        if (isAvailable()) {
+            mSettingsObserver = new SettingsObserver();
+        }
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return mPreference.getKey();
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return mPreference.isApplicable(mContext);
+    }
+
+    @Override
+    public void updateNonIndexableKeys(List<String> keys) {
+        if (!mPreference.isApplicable(mContext)) {
+            keys.add(mPreference.getKey());
+        }
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mPreference.update(mContext);
+    }
+
+    @Override
+    public void onResume() {
+        if (mSettingsObserver != null) {
+            mSettingsObserver.register(true /* register */);
+        }
+    }
+
+    @Override
+    public void onPause() {
+        if (mSettingsObserver != null) {
+            mSettingsObserver.register(false /* register */);
+        }
+    }
+
+    @VisibleForTesting
+    final class SettingsObserver extends ContentObserver {
+        public SettingsObserver() {
+            super(new Handler());
+        }
+
+        public void register(boolean register) {
+            final ContentResolver cr = mContext.getContentResolver();
+            if (register) {
+                cr.registerContentObserver(mPreference.getUri(), false, this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            super.onChange(selfChange, uri);
+            if (mPreference.getUri().equals(uri)) {
+                mPreference.update(mContext);
+            }
+        }
+    }
+
+}
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index f156a84..1cf0ae6 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -20,7 +20,6 @@
 import android.app.NotificationManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -41,8 +40,9 @@
 import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.drawer.CategoryKey;
+
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -102,25 +102,23 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_SOUND;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.sound_settings;
+        return mDashboardFeatureProvider.isEnabled()
+            ? R.xml.ia_sound_settings : R.xml.sound_settings;
     }
 
     @Override
     protected List<PreferenceController> getPreferenceControllers(Context context) {
         final List<PreferenceController> controllers = new ArrayList<>();
         Lifecycle lifecycle = getLifecycle();
-        controllers.add(new CastPreferenceController(context));
+        if (!mDashboardFeatureProvider.isEnabled()) {
+            controllers.add(new CastPreferenceController(context));
+        }
         controllers.add(new ZenModePreferenceController(context));
         controllers.add(new EmergencyBroadcastPreferenceController(context));
         controllers.add(new VibrateWhenRingPreferenceController(context));
@@ -141,6 +139,19 @@
         mWorkSoundController = new WorkSoundPreferenceController(context, this, getLifecycle());
         controllers.add(mWorkSoundController);
 
+        // === Other Sound Settings ===
+        if (mDashboardFeatureProvider.isEnabled()) {
+            controllers.add(new DialPadTonePreferenceController(context, this, lifecycle));
+            controllers.add(new ScreenLockSoundPreferenceController(context, this, lifecycle));
+            controllers.add(new ChargingSoundPreferenceController(context, this, lifecycle));
+            controllers.add(new DockingSoundPreferenceController(context, this, lifecycle));
+            controllers.add(new TouchSoundPreferenceController(context, this, lifecycle));
+            controllers.add(new VibrateOnTouchPreferenceController(context, this, lifecycle));
+            controllers.add(new DockAudioMediaPreferenceController(context, this, lifecycle));
+            controllers.add(new BootSoundPreferenceController(context));
+            controllers.add(new EmergencyTonePreferenceController(context, this, lifecycle));
+        }
+
         return controllers;
     }
 
@@ -297,10 +308,38 @@
                 context, null /* Callback */, null /* Lifecycle */).updateNonIndexableKeys(rt);
             new RingVolumePreferenceController(
                 context, null /* Callback */, null /* Lifecycle */).updateNonIndexableKeys(rt);
-            new CastPreferenceController(context).updateNonIndexableKeys(rt);
             new PhoneRingtonePreferenceController(context).updateNonIndexableKeys(rt);
             new VibrateWhenRingPreferenceController(context).updateNonIndexableKeys(rt);
             new EmergencyBroadcastPreferenceController(context).updateNonIndexableKeys(rt);
+            if (FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
+                .isEnabled()) {
+                new DialPadTonePreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new ScreenLockSoundPreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new ChargingSoundPreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new DockingSoundPreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new TouchSoundPreferenceController(context, null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new VibrateOnTouchPreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new DockAudioMediaPreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+                new BootSoundPreferenceController(context).updateNonIndexableKeys(rt);
+                new EmergencyTonePreferenceController(context,
+                    null /* SettingsPreferenceFragment */,
+                    null /* Lifecycle */).updateNonIndexableKeys(rt);
+            } else {
+                new CastPreferenceController(context).updateNonIndexableKeys(rt);
+            }
 
             return rt;
         }
diff --git a/src/com/android/settings/notification/TouchSoundPreferenceController.java b/src/com/android/settings/notification/TouchSoundPreferenceController.java
new file mode 100644
index 0000000..4ca5ea0
--- /dev/null
+++ b/src/com/android/settings/notification/TouchSoundPreferenceController.java
@@ -0,0 +1,56 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
+
+import android.content.Context;
+
+import android.media.AudioManager;
+import android.os.AsyncTask;
+import android.provider.Settings.System;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class TouchSoundPreferenceController extends SettingPrefController {
+
+    private static final String KEY_TOUCH_SOUNDS = "touch_sounds";
+
+    public TouchSoundPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_SYSTEM, KEY_TOUCH_SOUNDS, System.SOUND_EFFECTS_ENABLED, DEFAULT_ON) {
+            @Override
+            protected boolean setSetting(final Context context, final int value) {
+                AsyncTask.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        final AudioManager am =
+                            (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+                        if (value != 0) {
+                            am.loadSoundEffects();
+                        } else {
+                            am.unloadSoundEffects();
+                        }
+                    }
+                });
+                return super.setSetting(context, value);
+            }
+        };
+    }
+}
diff --git a/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java b/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java
new file mode 100644
index 0000000..8fd938e
--- /dev/null
+++ b/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java
@@ -0,0 +1,49 @@
+/*
+ * 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 static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
+
+import android.content.Context;
+import android.os.Vibrator;
+import android.provider.Settings.System;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+public class VibrateOnTouchPreferenceController extends SettingPrefController {
+
+    private static final String KEY_VIBRATE_ON_TOUCH = "vibrate_on_touch";
+
+    public VibrateOnTouchPreferenceController(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+        super(context, parent, lifecycle);
+        mPreference = new SettingPref(
+            TYPE_SYSTEM, KEY_VIBRATE_ON_TOUCH, System.HAPTIC_FEEDBACK_ENABLED, DEFAULT_ON) {
+            @Override
+            public boolean isApplicable(Context context) {
+                return hasHaptic(context);
+            }
+        };
+
+    }
+
+    private static boolean hasHaptic(Context context) {
+        final Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+        return vibrator != null && vibrator.hasVibrator();
+    }
+
+}
diff --git a/src/com/android/settings/notification/WorkSoundPreferenceController.java b/src/com/android/settings/notification/WorkSoundPreferenceController.java
index 3053f2a..c94991c 100644
--- a/src/com/android/settings/notification/WorkSoundPreferenceController.java
+++ b/src/com/android/settings/notification/WorkSoundPreferenceController.java
@@ -20,8 +20,11 @@
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.FragmentManager;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.media.AudioSystem;
 import android.media.Ringtone;
 import android.media.RingtoneManager;
@@ -46,11 +49,11 @@
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnPause;
 import com.android.settings.core.lifecycle.events.OnResume;
 
-
 public class WorkSoundPreferenceController extends PreferenceController implements
-    OnPreferenceChangeListener, LifecycleObserver, OnResume {
+    OnPreferenceChangeListener, LifecycleObserver, OnResume, OnPause {
 
     private static final String TAG = "WorkSoundPrefController";
     private static final String KEY_WORK_CATEGORY = "sound_work_settings_section";
@@ -97,18 +100,18 @@
 
     @Override
     public void onResume() {
-        if (isAvailable()) {
-            if ((mWorkPreferenceCategory == null)) {
-                // Work preferences not yet set
-                mParent.addPreferencesFromResource(R.xml.sound_work_settings);
-                initWorkPreferences();
-            }
-            if (!mWorkUsePersonalSounds.isChecked()) {
-                updateWorkRingtoneSummaries();
-            }
-        } else {
-            maybeRemoveWorkPreferences();
-        }
+        IntentFilter managedProfileFilter = new IntentFilter();
+        managedProfileFilter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
+        managedProfileFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
+        mContext.registerReceiver(mManagedProfileReceiver, managedProfileFilter);
+
+        mManagedProfileId = mHelper.getManagedProfileId(mUserManager);
+        initWorkPreferences();
+    }
+
+    @Override
+    public void onPause() {
+        mContext.unregisterReceiver(mManagedProfileReceiver);
     }
 
     @Override
@@ -118,8 +121,8 @@
 
     @Override
     public boolean isAvailable() {
-        mManagedProfileId = mHelper.getManagedProfileId(mUserManager);
-        return mManagedProfileId != UserHandle.USER_NULL && shouldShowRingtoneSettings();
+        return mHelper.getManagedProfileId(mUserManager) != UserHandle.USER_NULL
+                && shouldShowRingtoneSettings();
     }
 
     @Override
@@ -183,17 +186,37 @@
     }
 
     private void initWorkPreferences() {
-        mWorkPreferenceCategory = (PreferenceGroup) mParent.getPreferenceScreen()
-            .findPreference(KEY_WORK_CATEGORY);
-        mWorkUsePersonalSounds = (TwoStatePreference) mParent.getPreferenceScreen()
-            .findPreference(KEY_WORK_USE_PERSONAL_SOUNDS);
-        mWorkPhoneRingtonePreference = initWorkPreference(KEY_WORK_PHONE_RINGTONE);
-        mWorkNotificationRingtonePreference = initWorkPreference(KEY_WORK_NOTIFICATION_RINGTONE);
-        mWorkAlarmRingtonePreference = initWorkPreference(KEY_WORK_ALARM_RINGTONE);
+        if (mManagedProfileId == UserHandle.USER_NULL || !isAvailable()) {
+            maybeRemoveWorkPreferences();
+            return;
+        }
 
-        if (!mVoiceCapable) {
-            mWorkPreferenceCategory.removePreference(mWorkPhoneRingtonePreference);
-            mWorkPhoneRingtonePreference = null;
+        if (mWorkPreferenceCategory == null) {
+            mParent.addPreferencesFromResource(R.xml.sound_work_settings);
+            final PreferenceScreen screen = mParent.getPreferenceScreen();
+
+            mWorkPreferenceCategory = (PreferenceGroup) screen.findPreference(KEY_WORK_CATEGORY);
+            mWorkUsePersonalSounds = (TwoStatePreference)
+                    screen.findPreference(KEY_WORK_USE_PERSONAL_SOUNDS);
+            mWorkPhoneRingtonePreference = initWorkPreference(KEY_WORK_PHONE_RINGTONE);
+            mWorkNotificationRingtonePreference = initWorkPreference(
+                    KEY_WORK_NOTIFICATION_RINGTONE);
+            mWorkAlarmRingtonePreference = initWorkPreference(KEY_WORK_ALARM_RINGTONE);
+
+            mWorkUsePersonalSounds.setOnPreferenceChangeListener((Preference p, Object value) -> {
+                if ((boolean) value) {
+                    UnifyWorkDialogFragment.show(mParent);
+                    return false;
+                } else {
+                    disableWorkSync();
+                    return true;
+                }
+            });
+
+            if (!mVoiceCapable) {
+                mWorkPreferenceCategory.removePreference(mWorkPhoneRingtonePreference);
+                mWorkPhoneRingtonePreference = null;
+            }
         }
 
         Context managedProfileContext = getManagedProfileContext();
@@ -203,19 +226,6 @@
         } else {
             disableWorkSyncSettings();
         }
-
-        mWorkUsePersonalSounds.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                if ((boolean) newValue) {
-                    UnifyWorkDialogFragment.show(mParent);
-                    return false;
-                } else {
-                    disableWorkSync();
-                    return true;
-                }
-            }
-        });
     }
 
     void enableWorkSync() {
@@ -266,7 +276,6 @@
 
     private void maybeRemoveWorkPreferences() {
         if (mWorkPreferenceCategory == null) {
-            // No work preferences to remove
             return;
         }
         mParent.getPreferenceScreen().removePreference(mWorkPreferenceCategory);
@@ -276,6 +285,37 @@
         mWorkAlarmRingtonePreference = null;
     }
 
+    public void onManagedProfileAdded(@UserIdInt int profileId) {
+        if (mManagedProfileId == UserHandle.USER_NULL) {
+            mManagedProfileId = profileId;
+            initWorkPreferences();
+        }
+    }
+
+    public void onManagedProfileRemoved(@UserIdInt int profileId) {
+        if (mManagedProfileId == profileId) {
+            mManagedProfileId = mHelper.getManagedProfileId(mUserManager);
+            initWorkPreferences();
+        }
+    }
+
+    private final BroadcastReceiver mManagedProfileReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            final int userId = ((UserHandle) intent.getExtra(Intent.EXTRA_USER)).getIdentifier();
+            switch (intent.getAction()) {
+                case Intent.ACTION_MANAGED_PROFILE_ADDED: {
+                    onManagedProfileAdded(userId);
+                    return;
+                }
+                case Intent.ACTION_MANAGED_PROFILE_REMOVED: {
+                    onManagedProfileRemoved(userId);
+                    return;
+                }
+            }
+        }
+    };
+
     public static class UnifyWorkDialogFragment extends InstrumentedDialogFragment
         implements DialogInterface.OnClickListener {
         private static final String TAG = "UnifyWorkDialogFragment";
diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java
index f9b1c12..a41a733 100644
--- a/src/com/android/settings/notification/ZenAccessSettings.java
+++ b/src/com/android/settings/notification/ZenAccessSettings.java
@@ -44,9 +44,11 @@
 import android.view.View;
 import android.widget.Toast;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -171,6 +173,7 @@
     }
 
     private static void setAccess(final Context context, final String pkg, final boolean access) {
+        logSpecialPermissionChange(access, pkg, context);
         AsyncTask.execute(new Runnable() {
             @Override
             public void run() {
@@ -180,6 +183,15 @@
         });
     }
 
+    @VisibleForTesting
+    static void logSpecialPermissionChange(boolean enable, String packageName, Context context) {
+        int logCategory = enable ? MetricsEvent.APP_SPECIAL_PERMISSION_DND_ALLOW
+                : MetricsEvent.APP_SPECIAL_PERMISSION_DND_DENY;
+        FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context,
+                logCategory, packageName);
+    }
+
+
     private static void deleteRules(final Context context, final String pkg) {
         AsyncTask.execute(new Runnable() {
             @Override
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 8b6c3b1..5dd202e 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -24,6 +24,7 @@
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.dashboard.SuggestionFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.localepicker.LocaleFeatureProvider;
@@ -67,6 +68,8 @@
         return sFactory;
     }
 
+    public abstract SuggestionFeatureProvider getSuggestionFeatureProvider();
+
     public abstract SupportFeatureProvider getSupportFeatureProvider(Context context);
 
     public abstract MetricsFeatureProvider getMetricsFeatureProvider();
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 060b58c..c45bf0e 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.overlay;
 
+import android.app.AppGlobals;
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.net.ConnectivityManager;
@@ -24,21 +25,24 @@
 
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProviderImpl;
+import com.android.settings.applications.IPackageManagerWrapperImpl;
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.core.instrumentation.MetricsFeatureProviderImpl;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProviderImpl;
+import com.android.settings.dashboard.SuggestionFeatureProvider;
+import com.android.settings.dashboard.SuggestionFeatureProviderImpl;
 import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProviderImpl;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.localepicker.LocaleFeatureProvider;
 import com.android.settings.localepicker.LocaleFeatureProviderImpl;
-import com.android.settings.security.SecurityFeatureProvider;
-import com.android.settings.security.SecurityFeatureProviderImpl;
 import com.android.settings.search2.SearchFeatureProvider;
 import com.android.settings.search2.SearchFeatureProviderImpl;
+import com.android.settings.security.SecurityFeatureProvider;
+import com.android.settings.security.SecurityFeatureProviderImpl;
 import com.android.settings.vpn2.ConnectivityManagerWrapperImpl;
 
 /**
@@ -54,6 +58,7 @@
     private EnterprisePrivacyFeatureProvider mEnterprisePrivacyFeatureProvider;
     private SearchFeatureProvider mSearchFeatureProvider;
     private SecurityFeatureProvider mSecurityFeatureProvider;
+    private SuggestionFeatureProvider mSuggestionFeatureProvider;
 
     @Override
     public SupportFeatureProvider getSupportFeatureProvider(Context context) {
@@ -85,7 +90,10 @@
     public ApplicationFeatureProvider getApplicationFeatureProvider(Context context) {
         if (mApplicationFeatureProvider == null) {
             mApplicationFeatureProvider = new ApplicationFeatureProviderImpl(context,
-                    new PackageManagerWrapperImpl(context.getPackageManager()));
+                    new PackageManagerWrapperImpl(context.getPackageManager()),
+                    new IPackageManagerWrapperImpl(AppGlobals.getPackageManager()),
+                    new DevicePolicyManagerWrapperImpl((DevicePolicyManager) context
+                            .getSystemService(Context.DEVICE_POLICY_SERVICE)));
         }
         return mApplicationFeatureProvider;
     }
@@ -107,7 +115,8 @@
                     new PackageManagerWrapperImpl(context.getPackageManager()),
                     UserManager.get(context),
                     new ConnectivityManagerWrapperImpl((ConnectivityManager) context
-                            .getSystemService(Context.CONNECTIVITY_SERVICE)));
+                            .getSystemService(Context.CONNECTIVITY_SERVICE)),
+                    context.getResources());
         }
         return mEnterprisePrivacyFeatureProvider;
     }
@@ -132,4 +141,12 @@
         }
         return mSecurityFeatureProvider;
     }
+
+    @Override
+    public SuggestionFeatureProvider getSuggestionFeatureProvider() {
+        if (mSuggestionFeatureProvider == null) {
+            mSuggestionFeatureProvider = new SuggestionFeatureProviderImpl();
+        }
+        return mSuggestionFeatureProvider;
+    }
 }
diff --git a/src/com/android/settings/overlay/SurveyFeatureProvider.java b/src/com/android/settings/overlay/SurveyFeatureProvider.java
index 907bed8..416a602 100644
--- a/src/com/android/settings/overlay/SurveyFeatureProvider.java
+++ b/src/com/android/settings/overlay/SurveyFeatureProvider.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.IntentFilter;
 import android.support.annotation.Nullable;
+import android.support.v4.content.LocalBroadcastManager;
 
 /**
  * An interface for classes wishing to provide the ability to serve surveys to implement.
@@ -81,5 +82,11 @@
      * after a call to {@link #createAndRegisterReceiver(Activity)}.
      * @param activity The activity that was used to register the BroadcastReceiver.
      */
-    void unregisterReceiver(Activity activity, BroadcastReceiver receiver);
+    static void unregisterReceiver(Activity activity, BroadcastReceiver receiver) {
+        if (activity == null) {
+            throw new IllegalStateException("Cannot unregister receiver if activity is null");
+        }
+
+        LocalBroadcastManager.getInstance(activity).unregisterReceiver(receiver);
+    }
 }
diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index cd6e562..b79a7f4 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -266,7 +266,7 @@
         StringBuilder sb = new StringBuilder();
 
         sb.append("SELECT ");
-        sb.append(IndexDatabaseHelper.SavedQueriesColums.QUERY);
+        sb.append(IndexDatabaseHelper.SavedQueriesColumns.QUERY);
         sb.append(" FROM ");
         sb.append(Tables.TABLE_SAVED_QUERIES);
 
@@ -274,7 +274,7 @@
             sb.append(" ORDER BY rowId DESC");
         } else {
             sb.append(" WHERE ");
-            sb.append(IndexDatabaseHelper.SavedQueriesColums.QUERY);
+            sb.append(IndexDatabaseHelper.SavedQueriesColumns.QUERY);
             sb.append(" LIKE ");
             sb.append("'");
             sb.append(query);
@@ -1299,8 +1299,8 @@
             final long now = new Date().getTime();
 
             final ContentValues values = new ContentValues();
-            values.put(IndexDatabaseHelper.SavedQueriesColums.QUERY, params[0]);
-            values.put(IndexDatabaseHelper.SavedQueriesColums.TIME_STAMP, now);
+            values.put(IndexDatabaseHelper.SavedQueriesColumns.QUERY, params[0]);
+            values.put(IndexDatabaseHelper.SavedQueriesColumns.TIME_STAMP, now);
 
             final SQLiteDatabase database = getWritableDatabase();
             if (database == null) {
@@ -1312,7 +1312,7 @@
             try {
                 // First, delete all saved queries that are the same
                 database.delete(Tables.TABLE_SAVED_QUERIES,
-                        IndexDatabaseHelper.SavedQueriesColums.QUERY + " = ?",
+                        IndexDatabaseHelper.SavedQueriesColumns.QUERY + " = ?",
                         new String[] { params[0] });
 
                 // Second, insert the saved query
diff --git a/src/com/android/settings/search/IndexDatabaseHelper.java b/src/com/android/settings/search/IndexDatabaseHelper.java
index fcf5e7c..60378c2 100644
--- a/src/com/android/settings/search/IndexDatabaseHelper.java
+++ b/src/com/android/settings/search/IndexDatabaseHelper.java
@@ -28,12 +28,13 @@
     private static final String TAG = "IndexDatabaseHelper";
 
     private static final String DATABASE_NAME = "search_index.db";
-    private static final int DATABASE_VERSION = 116;
+    private static final int DATABASE_VERSION = 117;
 
     private static final String INDEX = "index";
 
     public interface Tables {
         String TABLE_PREFS_INDEX = "prefs_index";
+        String TABLE_SITE_MAP = "site_map";
         String TABLE_META_INDEX = "meta_index";
         String TABLE_SAVED_QUERIES = "saved_queries";
     }
@@ -67,11 +68,19 @@
         String BUILD = "build";
     }
 
-    public interface SavedQueriesColums {
+    public interface SavedQueriesColumns {
         String QUERY = "query";
         String TIME_STAMP = "timestamp";
     }
 
+    public interface SiteMapColumns {
+        String DOCID = "docid";
+        String PARENT_CLASS = "parent_class";
+        String CHILD_CLASS = "child_class";
+        String PARENT_TITLE = "parent_title";
+        String CHILD_TITLE = "child_title";
+    }
+
     private static final String CREATE_INDEX_TABLE =
             "CREATE VIRTUAL TABLE " + Tables.TABLE_PREFS_INDEX + " USING fts4" +
                     "(" +
@@ -127,11 +136,22 @@
     private static final String CREATE_SAVED_QUERIES_TABLE =
             "CREATE TABLE " + Tables.TABLE_SAVED_QUERIES +
                     "(" +
-                    SavedQueriesColums.QUERY + " VARCHAR(64) NOT NULL" +
+                    SavedQueriesColumns.QUERY + " VARCHAR(64) NOT NULL" +
                     ", " +
-                    SavedQueriesColums.TIME_STAMP + " INTEGER" +
+                    SavedQueriesColumns.TIME_STAMP + " INTEGER" +
                     ")";
 
+    private static final String CREATE_SITE_MAP_TABLE =
+            "CREATE VIRTUAL TABLE " + Tables.TABLE_SITE_MAP + " USING fts4" +
+                    "(" +
+                    SiteMapColumns.PARENT_CLASS +
+                    ", " +
+                    SiteMapColumns.CHILD_CLASS +
+                    ", " +
+                    SiteMapColumns.PARENT_TITLE +
+                    ", " +
+                    SiteMapColumns.CHILD_TITLE +
+                    ")";
     private static final String INSERT_BUILD_VERSION =
             "INSERT INTO " + Tables.TABLE_META_INDEX +
                     " VALUES ('" + Build.VERSION.INCREMENTAL + "');";
@@ -164,6 +184,7 @@
         db.execSQL(CREATE_INDEX_TABLE);
         db.execSQL(CREATE_META_TABLE);
         db.execSQL(CREATE_SAVED_QUERIES_TABLE);
+        db.execSQL(CREATE_SITE_MAP_TABLE);
         db.execSQL(INSERT_BUILD_VERSION);
         Log.i(TAG, "Bootstrapped database");
     }
@@ -201,7 +222,7 @@
         reconstruct(db);
     }
 
-    private void reconstruct(SQLiteDatabase db) {
+    public void reconstruct(SQLiteDatabase db) {
         dropTables(db);
         bootstrapDB(db);
     }
@@ -241,5 +262,6 @@
         db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_META_INDEX);
         db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_PREFS_INDEX);
         db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_SAVED_QUERIES);
+        db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_SITE_MAP);
     }
 }
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 8a158cd..aa3c257 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -20,7 +20,6 @@
 import android.support.annotation.DrawableRes;
 import android.support.annotation.VisibleForTesting;
 import android.support.annotation.XmlRes;
-
 import com.android.settings.DateTimeSettings;
 import com.android.settings.DevelopmentSettings;
 import com.android.settings.DeviceInfoSettings;
@@ -47,6 +46,7 @@
 import com.android.settings.display.ScreenZoomSettings;
 import com.android.settings.enterprise.EnterprisePrivacySettings;
 import com.android.settings.fuelgauge.BatterySaverSettings;
+import com.android.settings.fuelgauge.PowerUsageDetail;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.gestures.DoubleTapPowerSettings;
 import com.android.settings.gestures.DoubleTapScreenSettings;
@@ -55,6 +55,7 @@
 import com.android.settings.gestures.PickupGestureSettings;
 import com.android.settings.gestures.SwipeToNotificationSettings;
 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
+import com.android.settings.inputmethod.InputAndGestureSettings;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.inputmethod.VirtualKeyboardFragment;
@@ -71,6 +72,8 @@
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.sim.SimSettings;
 import com.android.settings.system.SystemDashboardFragment;
+import com.android.settings.tts.TtsEnginePreferenceFragment;
+import com.android.settings.tts.TtsSlidersFragment;
 import com.android.settings.users.UserSettings;
 import com.android.settings.wifi.AdvancedWifiSettings;
 import com.android.settings.wifi.ConfigureWifiSettings;
@@ -85,7 +88,8 @@
     @XmlRes
     public static final int NO_DATA_RES_ID = 0;
 
-    private static final HashMap<String, SearchIndexableResource> sResMap = new HashMap<>();
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    static final HashMap<String, SearchIndexableResource> sResMap = new HashMap<>();
 
     @VisibleForTesting
     static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
@@ -123,6 +127,7 @@
         addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
         addIndex(PowerUsageSummary.class,
                 R.xml.power_usage_summary, R.drawable.ic_settings_battery);
+        addIndex(PowerUsageDetail.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery);
         addIndex(BatterySaverSettings.class,
                 R.xml.battery_saver_settings, R.drawable.ic_settings_battery);
         addIndex(AdvancedAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
@@ -136,6 +141,7 @@
         addIndex(DoubleTwistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
         addIndex(SwipeToNotificationSettings.class, NO_DATA_RES_ID,
                 R.drawable.ic_settings_gestures);
+        addIndex(InputAndGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
         addIndex(LocationSettings.class, R.xml.location_settings, R.drawable.ic_settings_location);
         addIndex(ScanningSettings.class, R.xml.location_scanning, R.drawable.ic_settings_location);
         addIndex(SecuritySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
@@ -164,6 +170,9 @@
         addIndex(ConnectedDeviceDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_bt_laptop);
         addIndex(EnterprisePrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
         addIndex(PaymentSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_nfc_payment);
+        addIndex(
+                TtsEnginePreferenceFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
+        addIndex(TtsSlidersFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
     }
 
     private SearchIndexableResources() {
diff --git a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
index b2be146..b83f9fd 100644
--- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
+++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
@@ -16,13 +16,20 @@
 
 package com.android.settings.search;
 
+import android.content.Context;
 import android.database.Cursor;
 import android.database.MatrixCursor;
 import android.provider.SearchIndexableResource;
 import android.provider.SearchIndexablesProvider;
+import android.util.Log;
+
+import com.android.settings.search2.DatabaseIndexingUtils;
 
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
 
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_CLASS_NAME;
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_ICON_RESID;
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_ACTION;
@@ -35,7 +42,7 @@
 import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS;
 
 public class SettingsSearchIndexablesProvider extends SearchIndexablesProvider {
-    private static final String TAG = "SettingsSearchIndexablesProvider";
+    private static final String TAG = "SettingsSearchProvider";
 
     @Override
     public boolean onCreate() {
@@ -47,7 +54,7 @@
         MatrixCursor cursor = new MatrixCursor(INDEXABLES_XML_RES_COLUMNS);
         Collection<SearchIndexableResource> values = SearchIndexableResources.values();
         for (SearchIndexableResource val : values) {
-            Object[] ref = new Object[7];
+            Object[] ref = new Object[INDEXABLES_XML_RES_COLUMNS.length];
             ref[COLUMN_INDEX_XML_RES_RANK] = val.rank;
             ref[COLUMN_INDEX_XML_RES_RESID] = val.xmlResId;
             ref[COLUMN_INDEX_XML_RES_CLASS_NAME] = val.className;
@@ -66,9 +73,45 @@
         return result;
     }
 
+    /**
+     * Gets a combined list non-indexable keys that come from providers inside of settings.
+     * The non-indexable keys are used in Settings search at both index and update time to verify
+     * the validity of results in the database.
+     */
     @Override
     public Cursor queryNonIndexableKeys(String[] projection) {
         MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
+        final Collection<String> values = new HashSet<>();
+        final Context context = getContext();
+
+        for (SearchIndexableResource sir : SearchIndexableResources.values()) {
+            final Class<?> clazz = DatabaseIndexingUtils.getIndexableClass(sir.className);
+            if (clazz == null) {
+                Log.d(TAG, "SearchIndexableResource '" + sir.className +
+                        "' should implement the " + Indexable.class.getName() + " interface!");
+                continue;
+            }
+
+            final Indexable.SearchIndexProvider provider =
+                    DatabaseIndexingUtils.getSearchIndexProvider(clazz);
+
+            if (provider == null) {
+                Log.d(TAG, "Unable to get SearchIndexableProvider from " +
+                        Indexable.class.getName());
+                continue;
+            }
+
+            List<String> providerNonIndexableKeys = provider.getNonIndexableKeys(context);
+            if (providerNonIndexableKeys != null && providerNonIndexableKeys.size() > 0) {
+                values.addAll(providerNonIndexableKeys);
+            }
+        }
+
+        for (String nik : values) {
+            final Object[] ref = new Object[NON_INDEXABLES_KEYS_COLUMNS.length];
+            ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = nik;
+            cursor.addRow(ref);
+        }
         return cursor;
     }
 }
diff --git a/src/com/android/settings/search2/CursorToSearchResultConverter.java b/src/com/android/settings/search2/CursorToSearchResultConverter.java
index 540932c..6549c18 100644
--- a/src/com/android/settings/search2/CursorToSearchResultConverter.java
+++ b/src/com/android/settings/search2/CursorToSearchResultConverter.java
@@ -28,8 +28,10 @@
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
+
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
+import com.android.settings.dashboard.SiteMapManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -39,18 +41,20 @@
 import java.util.Map;
 import java.util.Set;
 
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_ID;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SCREEN_TITLE;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_TITLE;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SUMMARY_ON;
 import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_CLASS_NAME;
 import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_ICON;
+import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_ID;
 import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_INTENT_ACTION;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE;
+import static com.android.settings.search2.DatabaseResultLoader
+        .COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS;
+import static com.android.settings.search2.DatabaseResultLoader
+        .COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE;
 import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_KEY;
-import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_PAYLOAD_TYPE;
 import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_PAYLOAD;
+import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_PAYLOAD_TYPE;
+import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SCREEN_TITLE;
+import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_SUMMARY_ON;
+import static com.android.settings.search2.DatabaseResultLoader.COLUMN_INDEX_TITLE;
 
 /**
  * Controller to Build search results from {@link Cursor} Objects.
@@ -78,7 +82,8 @@
         mQueryText = queryText;
     }
 
-    public List<SearchResult> convertCursor(Cursor cursorResults, int baseRank) {
+    public List<SearchResult> convertCursor(SiteMapManager sitemapManager,
+            Cursor cursorResults, int baseRank) {
         if (cursorResults == null) {
             return null;
         }
@@ -86,8 +91,8 @@
         final List<SearchResult> results = new ArrayList<>();
 
         while (cursorResults.moveToNext()) {
-            SearchResult result = buildSingleSearchResultFromCursor(contextMap, cursorResults,
-                    baseRank);
+            SearchResult result = buildSingleSearchResultFromCursor(sitemapManager,
+                    contextMap, cursorResults, baseRank);
             if (result != null) {
                 results.add(result);
             }
@@ -96,8 +101,8 @@
         return results;
     }
 
-    private SearchResult buildSingleSearchResultFromCursor(Map<String, Context> contextMap,
-            Cursor cursor, int baseRank) {
+    private SearchResult buildSingleSearchResultFromCursor(SiteMapManager sitemapManager,
+            Map<String, Context> contextMap, Cursor cursor, int baseRank) {
         final String docId = cursor.getString(COLUMN_INDEX_ID);
         /* Make sure that this result has not yet been added as a result. Checking the docID
            covers the case of multiple queries matching the same row, but we need to also to check
@@ -128,7 +133,7 @@
             return null;
         }
 
-        final List<String> breadcrumbs = getBreadcrumbs(cursor);
+        final List<String> breadcrumbs = getBreadcrumbs(sitemapManager, cursor);
         final int rank = getRank(breadcrumbs, baseRank);
 
         final SearchResult.Builder builder = new SearchResult.Builder();
@@ -210,8 +215,12 @@
         return null;
     }
 
-    private List<String> getBreadcrumbs(Cursor cursor) {
-        return new ArrayList<>();
+    private List<String> getBreadcrumbs(SiteMapManager siteMapManager, Cursor cursor) {
+        final String screenTitle = cursor.getString(COLUMN_INDEX_SCREEN_TITLE);
+        final String screenClass = cursor.getString(COLUMN_INDEX_CLASS_NAME);
+        final List<String> breadcrumbs = siteMapManager.buildBreadCrumb(mContext, screenClass,
+                screenTitle);
+        return breadcrumbs;
     }
 
     /** Uses the breadcrumbs to determine the offset to the base rank.
diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index e29ffeb..d7c8746 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -34,7 +34,6 @@
 import android.provider.SearchIndexableResource;
 import android.provider.SearchIndexablesContract;
 import android.text.TextUtils;
-import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
@@ -56,6 +55,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
@@ -152,7 +152,7 @@
         return mIsAvailable.get();
     }
 
-    public void update() {
+    public void indexDatabase() {
         AsyncTask.execute(new Runnable() {
             @Override
             public void run() {
@@ -279,7 +279,7 @@
      * @param className the class name (typically a fragment name).
      * @param rebuild true means that you want to delete the data from the Index first.
      * @param includeInSearchResults true means that you want the bit "enabled" set so that the
-     *                               data will be seen included into the search results
+     * data will be seen included into the search results
      */
     public void updateFromClassNameResource(String className, final boolean rebuild,
             boolean includeInSearchResults) {
@@ -287,7 +287,7 @@
             throw new IllegalArgumentException("class name cannot be null!");
         }
         final SearchIndexableResource res = SearchIndexableResources.getResourceByName(className);
-        if (res == null ) {
+        if (res == null) {
             Log.e(LOG_TAG, "Cannot find SearchIndexableResources for class name: " + className);
             return;
         }
@@ -516,10 +516,7 @@
                 nonIndexableKeys.addAll(resNonIndxableKeys);
             }
 
-            indexFromResource(sir.context, database, localeStr,
-                    sir.xmlResId, sir.className, sir.iconResId, sir.rank,
-                    sir.intentAction, sir.intentTargetPackage, sir.intentTargetClass,
-                    nonIndexableKeys);
+            indexFromResource(database, localeStr, sir, nonIndexableKeys);
         } else {
             if (TextUtils.isEmpty(sir.className)) {
                 Log.w(LOG_TAG, "Cannot index an empty Search Provider name!");
@@ -543,20 +540,17 @@
                     nonIndexableKeys.addAll(providerNonIndexableKeys);
                 }
 
-                indexFromProvider(mContext, database, localeStr, provider, sir.className,
-                        sir.iconResId, sir.rank, sir.enabled, nonIndexableKeys);
+                indexFromProvider(database, localeStr, provider, sir, nonIndexableKeys);
             }
         }
     }
 
-    private void indexFromResource(Context context, SQLiteDatabase database, String localeStr,
-            int xmlResId, String fragmentName, int iconResId, int rank,
-            String intentAction, String intentTargetPackage, String intentTargetClass,
-            List<String> nonIndexableKeys) {
-
+    private void indexFromResource(SQLiteDatabase database, String localeStr,
+            SearchIndexableResource sir, List<String> nonIndexableKeys) {
+        final Context context = sir.context;
         XmlResourceParser parser = null;
         try {
-            parser = context.getResources().getXml(xmlResId);
+            parser = context.getResources().getXml(sir.xmlResId);
 
             int type;
             while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -581,39 +575,47 @@
             String title;
             String summary;
             String keywords;
+            String childFragment;
             ResultPayload payload;
+            boolean enabled;
+            final String fragmentName = sir.className;
+            final int iconResId = sir.iconResId;
+            final int rank = sir.rank;
+            final String intentAction = sir.intentAction;
+            final String intentTargetPackage = sir.intentTargetPackage;
+            final String intentTargetClass = sir.intentTargetClass;
 
-            ArrayMap<String, PreferenceController> controllerUriMap = null;
+            Map<String, PreferenceController> controllerUriMap = null;
 
             if (fragmentName != null) {
-                controllerUriMap = (ArrayMap) DatabaseIndexingUtils
+                controllerUriMap = DatabaseIndexingUtils
                         .getPreferenceControllerUriMap(fragmentName, context);
             }
 
             // Insert rows for the main PreferenceScreen node. Rewrite the data for removing
             // hyphens.
-            if (!nonIndexableKeys.contains(key)) {
-                title = XmlParserUtils.getDataTitle(context, attrs);
-                summary = XmlParserUtils.getDataSummary(context, attrs);
-                keywords = XmlParserUtils.getDataKeywords(context, attrs);
 
-                DatabaseRow.Builder builder = new DatabaseRow.Builder();
-                builder.setLocale(localeStr)
-                        .setEntries(null)
-                        .setClassName(fragmentName)
-                        .setScreenTitle(screenTitle)
-                        .setIconResId(iconResId)
-                        .setRank(rank)
-                        .setIntentAction(intentAction)
-                        .setIntentTargetPackage(intentTargetPackage)
-                        .setIntentTargetClass(intentTargetClass)
-                        .setEnabled(true)
-                        .setKey(key)
-                        .setUserId(-1 /* default user id */);
+            title = XmlParserUtils.getDataTitle(context, attrs);
+            summary = XmlParserUtils.getDataSummary(context, attrs);
+            keywords = XmlParserUtils.getDataKeywords(context, attrs);
+            enabled = !nonIndexableKeys.contains(key);
 
-                updateOneRowWithFilteredData(database, builder, title, summary,
-                        null /* summary off */, keywords);
-            }
+            DatabaseRow.Builder builder = new DatabaseRow.Builder();
+            builder.setLocale(localeStr)
+                    .setEntries(null)
+                    .setClassName(fragmentName)
+                    .setScreenTitle(screenTitle)
+                    .setIconResId(iconResId)
+                    .setRank(rank)
+                    .setIntentAction(intentAction)
+                    .setIntentTargetPackage(intentTargetPackage)
+                    .setIntentTargetClass(intentTargetClass)
+                    .setEnabled(enabled)
+                    .setKey(key)
+                    .setUserId(-1 /* default user id */);
+
+            updateOneRowWithFilteredData(database, builder, title, summary,
+                    null /* summary off */, keywords);
 
             while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
                     && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
@@ -624,14 +626,11 @@
                 nodeName = parser.getName();
 
                 key = XmlParserUtils.getDataKey(context, attrs);
-                if (nonIndexableKeys.contains(key)) {
-                    continue;
-                }
-
+                enabled = ! nonIndexableKeys.contains(key);
                 title = XmlParserUtils.getDataTitle(context, attrs);
                 keywords = XmlParserUtils.getDataKeywords(context, attrs);
 
-                DatabaseRow.Builder builder = new DatabaseRow.Builder();
+                builder = new DatabaseRow.Builder();
                 builder.setLocale(localeStr)
                         .setClassName(fragmentName)
                         .setScreenTitle(screenTitle)
@@ -640,7 +639,7 @@
                         .setIntentAction(intentAction)
                         .setIntentTargetPackage(intentTargetPackage)
                         .setIntentTargetClass(intentTargetClass)
-                        .setEnabled(true)
+                        .setEnabled(enabled)
                         .setKey(key)
                         .setUserId(-1 /* default user id */);
 
@@ -654,8 +653,10 @@
                     }
 
                     payload = DatabaseIndexingUtils.getPayloadFromUriMap(controllerUriMap, key);
+                    childFragment = XmlParserUtils.getDataChildFragment(context, attrs);
 
                     builder.setEntries(entries)
+                            .setChildClassName(childFragment)
                             .setPayload(payload);
 
                     // Insert rows for the child nodes of PreferenceScreen
@@ -682,16 +683,21 @@
         }
     }
 
-    private void indexFromProvider(Context context, SQLiteDatabase database, String localeStr,
-            Indexable.SearchIndexProvider provider, String className, int iconResId, int rank,
-            boolean enabled, List<String> nonIndexableKeys) {
+    private void indexFromProvider(SQLiteDatabase database, String localeStr,
+            Indexable.SearchIndexProvider provider, SearchIndexableResource sir,
+            List<String> nonIndexableKeys) {
+
+        final String className = sir.className;
+        final int iconResId = sir.iconResId;
+        final int rank = sir.rank;
 
         if (provider == null) {
             Log.w(LOG_TAG, "Cannot find provider: " + className);
             return;
         }
 
-        final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(context, enabled);
+        final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(mContext,
+                true /* enabled */);
 
         if (rawList != null) {
 
@@ -703,10 +709,7 @@
                 if (!raw.locale.toString().equalsIgnoreCase(localeStr)) {
                     continue;
                 }
-
-                if (nonIndexableKeys.contains(raw.key)) {
-                    continue;
-                }
+                boolean enabled = !nonIndexableKeys.contains(raw.key);
 
                 DatabaseRow.Builder builder = new DatabaseRow.Builder();
                 builder.setLocale(localeStr)
@@ -718,7 +721,7 @@
                         .setIntentAction(raw.intentAction)
                         .setIntentTargetPackage(raw.intentTargetPackage)
                         .setIntentTargetClass(raw.intentTargetClass)
-                        .setEnabled(raw.enabled)
+                        .setEnabled(enabled)
                         .setKey(raw.key)
                         .setUserId(raw.userId);
 
@@ -728,7 +731,7 @@
         }
 
         final List<SearchIndexableResource> resList =
-                provider.getXmlResourcesToIndex(context, enabled);
+                provider.getXmlResourcesToIndex(mContext, true);
         if (resList != null) {
             final int resSize = resList.size();
             for (int i = 0; i < resSize; i++) {
@@ -739,21 +742,16 @@
                     continue;
                 }
 
-                final int itemIconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
-                final int itemRank = (item.rank == 0) ? rank : item.rank;
-                String itemClassName = (TextUtils.isEmpty(item.className))
-                        ? className : item.className;
+                item.iconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
+                item.className = (TextUtils.isEmpty(item.className)) ? className : item.className;
 
-                indexFromResource(context, database, localeStr,
-                        item.xmlResId, itemClassName, itemIconResId, itemRank,
-                        item.intentAction, item.intentTargetPackage,
-                        item.intentTargetClass, nonIndexableKeys);
+                indexFromResource(database, localeStr, item, nonIndexableKeys);
             }
         }
     }
 
     private void updateOneRowWithFilteredData(SQLiteDatabase database, DatabaseRow.Builder builder,
-            String title, String summaryOn, String summaryOff,String keywords) {
+            String title, String summaryOn, String summaryOff, String keywords) {
 
         final String updatedTitle = DatabaseIndexingUtils.normalizeHyphen(title);
         final String updatedSummaryOn = DatabaseIndexingUtils.normalizeHyphen(summaryOn);
@@ -783,14 +781,8 @@
             return;
         }
 
-        // The DocID should contains more than the title string itself (you may have two settings
-        // with the same title). So we need to use a combination of the title and the screenTitle.
-        StringBuilder sb = new StringBuilder(row.updatedTitle);
-        sb.append(row.screenTitle);
-        int docId = sb.toString().hashCode();
-
         ContentValues values = new ContentValues();
-        values.put(IndexDatabaseHelper.IndexColumns.DOCID, docId);
+        values.put(IndexDatabaseHelper.IndexColumns.DOCID, row.getDocId());
         values.put(IndexDatabaseHelper.IndexColumns.LOCALE, row.locale);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, row.rank);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, row.updatedTitle);
@@ -816,6 +808,18 @@
         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, row.payload);
 
         database.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
+
+        if (!TextUtils.isEmpty(row.className) && !TextUtils.isEmpty(row.childClassName)) {
+            ContentValues siteMapPair = new ContentValues();
+            final int pairDocId = Objects.hash(row.className, row.childClassName);
+            siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.DOCID, pairDocId);
+            siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.PARENT_CLASS, row.className);
+            siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.PARENT_TITLE, row.screenTitle);
+            siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.CHILD_CLASS, row.childClassName);
+            siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.CHILD_TITLE, row.updatedTitle);
+
+            database.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, null, siteMapPair);
+        }
     }
 
     /**
@@ -919,7 +923,7 @@
                 }
                 if (!TextUtils.isEmpty(data.className)) {
                     delete(database, IndexDatabaseHelper.IndexColumns.CLASS_NAME, data.className);
-                } else  {
+                } else {
                     if (data instanceof SearchIndexableRaw) {
                         final SearchIndexableRaw raw = (SearchIndexableRaw) data;
                         if (!TextUtils.isEmpty(raw.title)) {
@@ -938,7 +942,7 @@
 
         private int delete(SQLiteDatabase database, String columName, String value) {
             final String whereClause = columName + "=?";
-            final String[] whereArgs = new String[] { value };
+            final String[] whereArgs = new String[]{value};
 
             return database.delete(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, whereClause,
                     whereArgs);
@@ -955,6 +959,7 @@
         public final String normalizedSummaryOff;
         public final String entries;
         public final String className;
+        public final String childClassName;
         public final String screenTitle;
         public final int iconResId;
         public final int rank;
@@ -978,6 +983,7 @@
             normalizedSummaryOff = builder.mNormalizedSummaryOff;
             entries = builder.mEntries;
             className = builder.mClassName;
+            childClassName = builder.mChildClassName;
             screenTitle = builder.mScreenTitle;
             iconResId = builder.mIconResId;
             rank = builder.mRank;
@@ -993,6 +999,16 @@
                     : null;
         }
 
+        /**
+         * Returns the doc id for this row.
+         */
+        public int getDocId() {
+            // The DocID should contains more than the title string itself (you may have two
+            // settings with the same title). So we need to use a combination of multiple
+            // attributes from this row.
+            return Objects.hash(updatedTitle, screenTitle, key, payloadType);
+        }
+
         public static class Builder {
             private String mLocale;
             private String mUpdatedTitle;
@@ -1003,6 +1019,7 @@
             private String mNormalizedSummaryOff;
             private String mEntries;
             private String mClassName;
+            private String mChildClassName;
             private String mScreenTitle;
             private int mIconResId;
             private int mRank;
@@ -1013,7 +1030,8 @@
             private boolean mEnabled;
             private String mKey;
             private int mUserId;
-            @ResultPayload.PayloadType private int mPayloadType;
+            @ResultPayload.PayloadType
+            private int mPayloadType;
             private ResultPayload mPayload;
 
             public Builder setLocale(String locale) {
@@ -1061,6 +1079,11 @@
                 return this;
             }
 
+            public Builder setChildClassName(String childClassName) {
+                mChildClassName = childClassName;
+                return this;
+            }
+
             public Builder setScreenTitle(String screenTitle) {
                 mScreenTitle = screenTitle;
                 return this;
@@ -1114,7 +1137,7 @@
             public Builder setPayload(ResultPayload payload) {
                 mPayload = payload;
 
-                if(mPayload != null) {
+                if (mPayload != null) {
                     setPayloadType(mPayload.getType());
                 }
                 return this;
@@ -1122,6 +1145,7 @@
 
             /**
              * Payload type is added when a Payload is added to the Builder in {setPayload}
+             *
              * @param payloadType PayloadType
              * @return The Builder
              */
@@ -1135,4 +1159,4 @@
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/search2/DatabaseIndexingUtils.java b/src/com/android/settings/search2/DatabaseIndexingUtils.java
index 9fdf732..bd06ef3 100644
--- a/src/com/android/settings/search2/DatabaseIndexingUtils.java
+++ b/src/com/android/settings/search2/DatabaseIndexingUtils.java
@@ -105,7 +105,7 @@
      * @return The Payload from the {@link PreferenceController} specified by the key, if it exists.
      * Otherwise null.
      */
-    public static ResultPayload getPayloadFromUriMap(ArrayMap<String, PreferenceController> uriMap,
+    public static ResultPayload getPayloadFromUriMap(Map<String, PreferenceController> uriMap,
             String key) {
         if (uriMap == null) {
             return null;
diff --git a/src/com/android/settings/search2/DatabaseResultLoader.java b/src/com/android/settings/search2/DatabaseResultLoader.java
index f7acd25..1f032a0 100644
--- a/src/com/android/settings/search2/DatabaseResultLoader.java
+++ b/src/com/android/settings/search2/DatabaseResultLoader.java
@@ -20,6 +20,9 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 
+import android.text.TextUtils;
+import com.android.settings.dashboard.SiteMapManager;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.IndexDatabaseHelper;
 import com.android.settings.utils.AsyncLoader;
 
@@ -35,11 +38,6 @@
  */
 public class DatabaseResultLoader extends AsyncLoader<List<SearchResult>> {
     private static final String LOG = "DatabaseResultLoader";
-    private final String mQueryText;
-
-    protected final SQLiteDatabase mDatabase;
-
-    private final CursorToSearchResultConverter mConverter;
 
     /* These indices are used to match the columns of the this loader's SELECT statement.
      These are not necessarily the same order nor similar coverage as the schema defined in
@@ -99,8 +97,15 @@
      */
     private static final int[] BASE_RANKS = {1, 4, 7};
 
+    private final String mQueryText;
+    private final SQLiteDatabase mDatabase;
+    private final CursorToSearchResultConverter mConverter;
+    private final SiteMapManager mSiteMapManager;
+
     public DatabaseResultLoader(Context context, String queryText) {
         super(context);
+        mSiteMapManager = FeatureFactory.getFactory(context)
+                .getSearchFeatureProvider().getSiteMapManager();
         mDatabase = IndexDatabaseHelper.getInstance(context).getReadableDatabase();
         mQueryText = cleanQuery(queryText);
         mConverter = new CursorToSearchResultConverter(context, mQueryText);
@@ -125,7 +130,6 @@
         secondaryResults = query(MATCH_COLUMNS_SECONDARY, BASE_RANKS[1]);
         tertiaryResults = query(MATCH_COLUMNS_TERTIARY, BASE_RANKS[2]);
 
-
         final List<SearchResult> results = new ArrayList<>(primaryResults.size()
                 + secondaryResults.size()
                 + tertiaryResults.size());
@@ -138,13 +142,11 @@
 
     private List<SearchResult> query(String[] matchColumns, int baseRank) {
         final String whereClause = buildWhereClause(matchColumns);
-        final String[] selection = new String[matchColumns.length];
-        final String query = "%" + mQueryText + "%";
-        Arrays.fill(selection, query);
+        final String[] selection = buildQuerySelection(matchColumns.length * 2);
 
         final Cursor resultCursor = mDatabase.query(TABLE_PREFS_INDEX, SELECT_COLUMNS, whereClause,
                 selection, null, null, null);
-        return mConverter.convertCursor(resultCursor, baseRank);
+        return mConverter.convertCursor(mSiteMapManager, resultCursor, baseRank);
     }
 
     @Override
@@ -155,22 +157,48 @@
 
     /**
      * A generic method to make the query suitable for searching the database.
+     *
      * @return the cleaned query string
      */
     private static String cleanQuery(String query) {
+        if (TextUtils.isEmpty(query)) {
+            return null;
+        }
         return query.trim();
     }
 
     private static String buildWhereClause(String[] matchColumns) {
-        StringBuilder sb = new StringBuilder(" ");
+        StringBuilder sb = new StringBuilder(" (");
         final int count = matchColumns.length;
         for (int n = 0; n < count; n++) {
             sb.append(matchColumns[n]);
+            sb.append(" like ? OR ");
+            sb.append(matchColumns[n]);
             sb.append(" like ?");
             if (n < count - 1) {
                 sb.append(" OR ");
             }
         }
+        sb.append(") AND enabled = 1");
         return sb.toString();
     }
+
+    /**
+     * Fills out the selection array to match the query as the prefix of a word.
+     *
+     * @param size is twice the number of columns to be matched. The first match is for the prefix
+     *             of the first word in the column. The second match is for any subsequent word
+     *             prefix match.
+     */
+    private String[] buildQuerySelection(int size) {
+        String[] selection = new String[size];
+        final String query = mQueryText + "%";
+        final String subStringQuery = "% " + mQueryText + "%";
+
+        for(int i = 0; i < (size - 1); i += 2) {
+            selection[i] = query;
+            selection[i + 1] = subStringQuery;
+        }
+        return selection;
+    }
 }
diff --git a/src/com/android/settings/search2/InlineSwitchViewHolder.java b/src/com/android/settings/search2/InlineSwitchViewHolder.java
index ad99af8..ac49b1c 100644
--- a/src/com/android/settings/search2/InlineSwitchViewHolder.java
+++ b/src/com/android/settings/search2/InlineSwitchViewHolder.java
@@ -21,41 +21,32 @@
 import android.view.View;
 import android.widget.CompoundButton;
 import android.widget.Switch;
-import android.widget.TextView;
 
-import com.android.internal.widget.PreferenceImageView;
 import com.android.settings.R;
 
 /**
  * ViewHolder for Settings represented as SwitchPreferences.
  */
 public class InlineSwitchViewHolder extends SearchViewHolder {
-    public final TextView titleView;
-    public final TextView summaryView;
-    public final PreferenceImageView iconView;
+
     public final Switch switchView;
 
     private final Context mContext;
 
-    private final String TAG = "SwitchViewHolder";
-
     public InlineSwitchViewHolder(View view, Context context) {
         super(view);
         mContext = context;
-        titleView = (TextView) view.findViewById(android.R.id.title);
-        summaryView = (TextView) view.findViewById(android.R.id.summary);
-        iconView = (PreferenceImageView) view.findViewById(android.R.id.icon);
         switchView = (Switch) view.findViewById(R.id.switchView);
     }
 
     @Override
     public void onBind(SearchFragment fragment, SearchResult result) {
+        super.onBind(fragment, result);
         if (mContext == null) {
             return;
         }
         final InlineSwitchPayload payload = (InlineSwitchPayload) result.payload;
         switchView.setChecked(payload.getSwitchValue(mContext));
-
         switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -63,9 +54,5 @@
                 payload.setSwitchValue(mContext, isChecked);
             }
         });
-
-        titleView.setText(result.title);
-        summaryView.setText(result.summary);
-        iconView.setImageDrawable(result.icon);
     }
 }
diff --git a/src/com/android/settings/search2/InstalledAppResultLoader.java b/src/com/android/settings/search2/InstalledAppResultLoader.java
index 449e52c..0b828a3 100644
--- a/src/com/android/settings/search2/InstalledAppResultLoader.java
+++ b/src/com/android/settings/search2/InstalledAppResultLoader.java
@@ -20,6 +20,7 @@
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.net.Uri;
 import android.os.UserHandle;
@@ -27,7 +28,11 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 
+import com.android.settings.R;
+import com.android.settings.applications.ManageApplications;
 import com.android.settings.applications.PackageManagerWrapper;
+import com.android.settings.dashboard.SiteMapManager;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.utils.AsyncLoader;
 
 import java.util.ArrayList;
@@ -41,14 +46,21 @@
 
     private static final int NAME_NO_MATCH = -1;
     private static final int NAME_EXACT_MATCH = 0;
+    private static final Intent LAUNCHER_PROBE = new Intent(Intent.ACTION_MAIN)
+            .addCategory(Intent.CATEGORY_LAUNCHER);
 
+    private List<String> mBreadcrumb;
+    private SiteMapManager mSiteMapManager;
     private final String mQuery;
     private final UserManager mUserManager;
     private final PackageManagerWrapper mPackageManager;
 
+
     public InstalledAppResultLoader(Context context, PackageManagerWrapper pmWrapper,
             String query) {
         super(context);
+        mSiteMapManager = FeatureFactory.getFactory(context)
+                .getSearchFeatureProvider().getSiteMapManager();
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
         mPackageManager = pmWrapper;
         mQuery = query;
@@ -67,7 +79,7 @@
                                     | (user.isAdmin() ? PackageManager.MATCH_ANY_USER : 0),
                             user.id);
             for (ApplicationInfo info : apps) {
-                if (info.isSystemApp()) {
+                if (!shouldIncludeAsCandidate(info, user)) {
                     continue;
                 }
                 final CharSequence label = info.loadLabel(pm);
@@ -83,6 +95,7 @@
                 builder.addIcon(info.loadIcon(pm))
                         .addTitle(info.loadLabel(pm))
                         .addRank(wordDiff)
+                        .addBreadcrumbs(getBreadCrumb())
                         .addPayload(new IntentPayload(intent));
                 results.add(builder.build());
             }
@@ -91,6 +104,22 @@
         return results;
     }
 
+    private boolean shouldIncludeAsCandidate(ApplicationInfo info, UserInfo user) {
+        if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0
+                || (info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+            return true;
+        }
+        final Intent launchIntent = new Intent(LAUNCHER_PROBE)
+                .setPackage(info.packageName);
+        final List<ResolveInfo> intents = mPackageManager.queryIntentActivitiesAsUser(
+                launchIntent,
+                PackageManager.MATCH_DISABLED_COMPONENTS
+                        | PackageManager.MATCH_DIRECT_BOOT_AWARE
+                        | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
+                user.id);
+        return intents != null && intents.size() != 0;
+    }
+
     @Override
     protected void onDiscardResult(List<SearchResult> result) {
 
@@ -107,7 +136,7 @@
      * perfectly, and larger values means they are less similar.
      * <p/>
      * Example:
-     * appName: Abcde, query: Abcde, Returns NAME_EXACT_MATCH
+     * appName: Abcde, query: Abcde, Returns {@link #NAME_EXACT_MATCH}
      * appName: Abcde, query: ade, Returns 2
      * appName: Abcde, query: ae, Returns 3
      * appName: Abcde, query: ea, Returns NAME_NO_MATCH
@@ -136,4 +165,14 @@
         // to infinity.
         return valueText.length - queryTokens.length;
     }
+
+    private List<String> getBreadCrumb() {
+        if (mBreadcrumb == null || mBreadcrumb.isEmpty()) {
+            final Context context = getContext();
+            mBreadcrumb = mSiteMapManager.buildBreadCrumb(
+                    context, ManageApplications.class.getName(),
+                    context.getString(R.string.applications_settings));
+        }
+        return mBreadcrumb;
+    }
 }
diff --git a/src/com/android/settings/search2/IntentSearchViewHolder.java b/src/com/android/settings/search2/IntentSearchViewHolder.java
index c9952fa..d02ef1c 100644
--- a/src/com/android/settings/search2/IntentSearchViewHolder.java
+++ b/src/com/android/settings/search2/IntentSearchViewHolder.java
@@ -16,10 +16,6 @@
 package com.android.settings.search2;
 
 import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.settings.R;
 
 /**
  * ViewHolder for intent based search results.
@@ -27,25 +23,14 @@
  */
 public class IntentSearchViewHolder extends SearchViewHolder {
 
-    public final TextView titleView;
-    public final TextView summaryView;
-    public final ImageView iconView;
-
     public IntentSearchViewHolder(View view) {
         super(view);
-        titleView = (TextView) view.findViewById(android.R.id.title);
-        summaryView = (TextView) view.findViewById(android.R.id.summary);
-        iconView = (ImageView) view.findViewById(android.R.id.icon);
     }
 
     @Override
     public void onBind(final SearchFragment fragment, final SearchResult result) {
-        titleView.setText(result.title);
-        summaryView.setText(result.summary);
-        iconView.setImageDrawable(result.icon);
-        if (result.icon == null) {
-            iconView.setBackgroundResource(R.drawable.empty_icon);
-        }
+        super.onBind(fragment, result);
+
         itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
diff --git a/src/com/android/settings/search2/ResultPayload.java b/src/com/android/settings/search2/ResultPayload.java
index 3842def..4294234 100644
--- a/src/com/android/settings/search2/ResultPayload.java
+++ b/src/com/android/settings/search2/ResultPayload.java
@@ -29,7 +29,7 @@
 public abstract class ResultPayload implements Parcelable {
 
     @IntDef({PayloadType.INLINE_SLIDER, PayloadType.INLINE_SWITCH,
-            PayloadType.INTENT})
+            PayloadType.INTENT, PayloadType.SAVED_QUERY})
     @Retention(RetentionPolicy.SOURCE)
     public @interface PayloadType {
         /**
@@ -46,6 +46,11 @@
          * Result is a inline widget, using a toggle widget as UI.
          */
         int INLINE_SWITCH = 2;
+
+        /**
+         * Result is a recently saved query.
+         */
+        int SAVED_QUERY = 3;
     }
 
     @IntDef({SettingsSource.UNKNOWN, SettingsSource.SYSTEM, SettingsSource.SECURE,
@@ -59,5 +64,6 @@
     }
 
 
-    @ResultPayload.PayloadType public abstract int getType();
+    @ResultPayload.PayloadType
+    public abstract int getType();
 }
diff --git a/src/com/android/settings/search2/SavedQueryLoader.java b/src/com/android/settings/search2/SavedQueryLoader.java
new file mode 100644
index 0000000..b034b44
--- /dev/null
+++ b/src/com/android/settings/search2/SavedQueryLoader.java
@@ -0,0 +1,77 @@
+/*
+ * 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.search2;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.settings.search.IndexDatabaseHelper;
+import com.android.settings.search.IndexDatabaseHelper.SavedQueriesColumns;
+import com.android.settings.utils.AsyncLoader;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Loader for recently searched queries.
+ */
+public class SavedQueryLoader extends AsyncLoader<List<SearchResult>> {
+
+    // Max number of proposed suggestions
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    static final int MAX_PROPOSED_SUGGESTIONS = 5;
+
+    private final SQLiteDatabase mDatabase;
+
+    public SavedQueryLoader(Context context) {
+        super(context);
+        mDatabase = IndexDatabaseHelper.getInstance(context).getReadableDatabase();
+    }
+
+    @Override
+    protected void onDiscardResult(List<SearchResult> result) {
+
+    }
+
+    @Override
+    public List<SearchResult> loadInBackground() {
+        Cursor cursor = mDatabase.query(IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES /* table */,
+                new String[]{SavedQueriesColumns.QUERY} /* columns */,
+                null /* selection */,
+                null /* selectionArgs */,
+                null /* groupBy */,
+                null /* having */,
+                "rowId DESC" /* orderBy */,
+                String.valueOf(MAX_PROPOSED_SUGGESTIONS) /* limit */);
+        return convertCursorToResult(cursor);
+    }
+
+    private List<SearchResult> convertCursorToResult(Cursor cursor) {
+        final List<SearchResult> results = new ArrayList<>();
+        while (cursor.moveToNext()) {
+            final SavedQueryPayload payload = new SavedQueryPayload(
+                    cursor.getString(cursor.getColumnIndex(SavedQueriesColumns.QUERY)));
+            results.add(new SearchResult.Builder()
+                    .addTitle(payload.query)
+                    .addPayload(payload)
+                    .build());
+        }
+        return results;
+    }
+}
diff --git a/src/com/android/settings/search2/SavedQueryPayload.java b/src/com/android/settings/search2/SavedQueryPayload.java
new file mode 100644
index 0000000..6316894
--- /dev/null
+++ b/src/com/android/settings/search2/SavedQueryPayload.java
@@ -0,0 +1,64 @@
+/*
+ * 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.search2;
+
+import android.os.Parcel;
+import android.support.annotation.VisibleForTesting;
+
+/**
+ * {@link ResultPayload} for saved query.
+ */
+public class SavedQueryPayload extends ResultPayload {
+
+    public final String query;
+
+    public SavedQueryPayload(String query) {
+        this.query = query;
+    }
+
+    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+    SavedQueryPayload(Parcel in) {
+        query = in.readString();
+    }
+
+    @Override
+    public int getType() {
+        return PayloadType.SAVED_QUERY;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(query);
+    }
+
+    public static final Creator<SavedQueryPayload> CREATOR = new Creator<SavedQueryPayload>() {
+        @Override
+        public SavedQueryPayload createFromParcel(Parcel in) {
+            return new SavedQueryPayload(in);
+        }
+
+        @Override
+        public SavedQueryPayload[] newArray(int size) {
+            return new SavedQueryPayload[size];
+        }
+    };
+}
diff --git a/src/com/android/settings/search2/SavedQueryRecorder.java b/src/com/android/settings/search2/SavedQueryRecorder.java
new file mode 100644
index 0000000..e2325e8
--- /dev/null
+++ b/src/com/android/settings/search2/SavedQueryRecorder.java
@@ -0,0 +1,97 @@
+/*
+ * 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.search2;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
+import android.util.Log;
+
+import com.android.settings.search.IndexDatabaseHelper;
+import com.android.settings.utils.AsyncLoader;
+
+import static com.android.settings.search.IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES;
+
+/**
+ * A background task to update saved queries.
+ */
+public class SavedQueryRecorder extends AsyncLoader<Void> {
+
+    private static final String LOG_TAG = "SavedQueryRecorder";
+
+    // Max number of saved search queries (who will be used for proposing suggestions)
+    private static long MAX_SAVED_SEARCH_QUERY = 64;
+
+    private final String mQuery;
+
+    public SavedQueryRecorder(Context context, String query) {
+        super(context);
+        mQuery = query;
+    }
+
+    @Override
+    protected void onDiscardResult(Void result) {
+
+    }
+
+    @Override
+    public Void loadInBackground() {
+        final long now = System.currentTimeMillis();
+
+        final ContentValues values = new ContentValues();
+        values.put(IndexDatabaseHelper.SavedQueriesColumns.QUERY, mQuery);
+        values.put(IndexDatabaseHelper.SavedQueriesColumns.TIME_STAMP, now);
+
+        final SQLiteDatabase database = getWritableDatabase();
+        if (database == null) {
+            return null;
+        }
+
+        long lastInsertedRowId;
+        try {
+            // First, delete all saved queries that are the same
+            database.delete(TABLE_SAVED_QUERIES,
+                    IndexDatabaseHelper.SavedQueriesColumns.QUERY + " = ?",
+                    new String[]{mQuery});
+
+            // Second, insert the saved query
+            lastInsertedRowId = database.insertOrThrow(TABLE_SAVED_QUERIES, null, values);
+
+            // Last, remove "old" saved queries
+            final long delta = lastInsertedRowId - MAX_SAVED_SEARCH_QUERY;
+            if (delta > 0) {
+                int count = database.delete(TABLE_SAVED_QUERIES,
+                        "rowId <= ?",
+                        new String[]{Long.toString(delta)});
+                Log.d(LOG_TAG, "Deleted '" + count + "' saved Search query(ies)");
+            }
+        } catch (Exception e) {
+            Log.d(LOG_TAG, "Cannot update saved Search queries", e);
+        }
+        return null;
+    }
+
+    private SQLiteDatabase getWritableDatabase() {
+        try {
+            return IndexDatabaseHelper.getInstance(getContext()).getWritableDatabase();
+        } catch (SQLiteException e) {
+            Log.e(LOG_TAG, "Cannot open writable database", e);
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/settings/search2/SavedQueryViewHolder.java b/src/com/android/settings/search2/SavedQueryViewHolder.java
new file mode 100644
index 0000000..a32ed05
--- /dev/null
+++ b/src/com/android/settings/search2/SavedQueryViewHolder.java
@@ -0,0 +1,38 @@
+/*
+ * 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.search2;
+
+import android.view.View;
+import android.widget.TextView;
+
+public class SavedQueryViewHolder extends SearchViewHolder {
+
+    public final TextView titleView;
+
+    public SavedQueryViewHolder(View view) {
+        super(view);
+        titleView = (TextView) view.findViewById(android.R.id.title);
+    }
+
+    @Override
+    public void onBind(SearchFragment fragment, SearchResult result) {
+        titleView.setText(result.title);
+        itemView.setOnClickListener(v -> {
+            fragment.onSavedQueryClicked(result.title);
+        });
+    }
+}
diff --git a/src/com/android/settings/search2/SearchFeatureProvider.java b/src/com/android/settings/search2/SearchFeatureProvider.java
index 8a616a7..a9be5a1 100644
--- a/src/com/android/settings/search2/SearchFeatureProvider.java
+++ b/src/com/android/settings/search2/SearchFeatureProvider.java
@@ -19,6 +19,8 @@
 import android.content.Context;
 import android.view.Menu;
 
+import com.android.settings.dashboard.SiteMapManager;
+
 /**
  * FeatureProvider for Settings Search
  */
@@ -48,11 +50,21 @@
     InstalledAppResultLoader getInstalledAppSearchLoader(Context context, String query);
 
     /**
+     * Returns a new loader to get all recently saved queries search terms.
+     */
+    SavedQueryLoader getSavedQueryLoader(Context context);
+
+    /**
      * Returns the manager for indexing Settings data.
      */
     DatabaseIndexingManager getIndexingManager(Context context);
 
     /**
+     * Returns the manager for looking up breadcrumbs.
+     */
+    SiteMapManager getSiteMapManager();
+
+    /**
      * Updates the Settings indexes
      */
     void updateIndex(Context context);
diff --git a/src/com/android/settings/search2/SearchFeatureProviderImpl.java b/src/com/android/settings/search2/SearchFeatureProviderImpl.java
index 97b7bfe..b575b15 100644
--- a/src/com/android/settings/search2/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search2/SearchFeatureProviderImpl.java
@@ -25,6 +25,7 @@
 
 import com.android.settings.R;
 import com.android.settings.applications.PackageManagerWrapperImpl;
+import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.search.Index;
 
 /**
@@ -35,6 +36,7 @@
     private static final String TAG = "SearchFeatureProvider";
 
     private DatabaseIndexingManager mDatabaseIndexingManager;
+    private SiteMapManager mSiteMapManager;
 
     @Override
     public boolean isEnabled(Context context) {
@@ -73,6 +75,11 @@
     }
 
     @Override
+    public SavedQueryLoader getSavedQueryLoader(Context context) {
+        return new SavedQueryLoader(context);
+    }
+
+    @Override
     public DatabaseIndexingManager getIndexingManager(Context context) {
         if (mDatabaseIndexingManager == null) {
             mDatabaseIndexingManager = new DatabaseIndexingManager(context.getApplicationContext(),
@@ -81,14 +88,22 @@
         return mDatabaseIndexingManager;
     }
 
+    public SiteMapManager getSiteMapManager() {
+        if (mSiteMapManager == null) {
+            mSiteMapManager = new SiteMapManager();
+        }
+        return mSiteMapManager;
+    }
+
     @Override
     public void updateIndex(Context context) {
         long indexStartTime = System.currentTimeMillis();
         if (isEnabled(context)) {
-            getIndexingManager(context).update();
+            getIndexingManager(context).indexDatabase();
         } else {
             Index.getInstance(context).update();
         }
-        Log.d(TAG, "Index.update() took " + (System.currentTimeMillis() - indexStartTime) + " ms");
+        Log.d(TAG, "IndexDatabase() took " +
+                (System.currentTimeMillis() - indexStartTime) + " ms");
     }
 }
diff --git a/src/com/android/settings/search2/SearchFragment.java b/src/com/android/settings/search2/SearchFragment.java
index 757a0e2..b688a45 100644
--- a/src/com/android/settings/search2/SearchFragment.java
+++ b/src/com/android/settings/search2/SearchFragment.java
@@ -26,6 +26,7 @@
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -34,6 +35,7 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
@@ -50,8 +52,9 @@
     private static final String STATE_RESULT_CLICK_COUNT = "state_result_click_count";
 
     // Loader IDs
-    private static final int LOADER_ID_DATABASE = 0;
-    private static final int LOADER_ID_INSTALLED_APPS = 1;
+    private static final int LOADER_ID_RECENTS = 0;
+    private static final int LOADER_ID_DATABASE = 1;
+    private static final int LOADER_ID_INSTALLED_APPS = 2;
 
     // Logging
     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
@@ -59,6 +62,10 @@
 
     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
     String mQuery;
+
+    private final SaveQueryRecorderCallback mSaveQueryRecorderCallback =
+            new SaveQueryRecorderCallback();
+
     private boolean mNeverEnteredQuery = true;
     private int mResultClickCount;
     private MetricsFeatureProvider mMetricsFeatureProvider;
@@ -66,6 +73,7 @@
 
     private SearchResultsAdapter mSearchAdapter;
     private RecyclerView mResultsRecyclerView;
+    private SearchView mSearchView;
 
     @Override
     public int getMetricsCategory() {
@@ -84,18 +92,30 @@
         super.onCreate(savedInstanceState);
         setHasOptionsMenu(true);
         mSearchAdapter = new SearchResultsAdapter(this);
+        final LoaderManager loaderManager = getLoaderManager();
         if (savedInstanceState != null) {
             mQuery = savedInstanceState.getString(STATE_QUERY);
             mNeverEnteredQuery = savedInstanceState.getBoolean(STATE_NEVER_ENTERED_QUERY);
             mResultClickCount = savedInstanceState.getInt(STATE_RESULT_CLICK_COUNT);
-            final LoaderManager loaderManager = getLoaderManager();
             loaderManager.initLoader(LOADER_ID_DATABASE, null, this);
             loaderManager.initLoader(LOADER_ID_INSTALLED_APPS, null, this);
+        } else {
+            loaderManager.initLoader(LOADER_ID_RECENTS, null, this);
         }
-        final ActionBar actionBar = getActivity().getActionBar();
-        actionBar.setCustomView(makeSearchView(actionBar, mQuery));
+
+        final Activity activity = getActivity();
+        final ActionBar actionBar = activity.getActionBar();
+        mSearchView = makeSearchView(actionBar, mQuery);
+        actionBar.setCustomView(mSearchView);
         actionBar.setDisplayShowCustomEnabled(true);
         actionBar.setDisplayShowTitleEnabled(false);
+
+        // Run the Index update only if we have some space
+        if (!Utils.isLowStorage(activity)) {
+            mSearchFeatureProvider.updateIndex(activity);
+        } else {
+            Log.w(TAG, "Cannot update the Indexer as we are running low on storage space!");
+        }
     }
 
     @Override
@@ -140,7 +160,10 @@
         mSearchAdapter.clearResults();
 
         if (TextUtils.isEmpty(mQuery)) {
-            getLoaderManager().destroyLoader(LOADER_ID_DATABASE);
+            final LoaderManager loaderManager = getLoaderManager();
+            loaderManager.destroyLoader(LOADER_ID_DATABASE);
+            loaderManager.destroyLoader(LOADER_ID_INSTALLED_APPS);
+            loaderManager.restartLoader(LOADER_ID_RECENTS, null /* args */, this /* callback */);
         } else {
             restartLoaders();
         }
@@ -150,6 +173,10 @@
 
     @Override
     public boolean onQueryTextSubmit(String query) {
+        // Save submitted query.
+        getLoaderManager().restartLoader(SaveQueryRecorderCallback.LOADER_ID_SAVE_QUERY_TASK, null,
+                mSaveQueryRecorderCallback);
+
         return true;
     }
 
@@ -162,6 +189,8 @@
                 return mSearchFeatureProvider.getDatabaseSearchLoader(activity, mQuery);
             case LOADER_ID_INSTALLED_APPS:
                 return mSearchFeatureProvider.getInstalledAppSearchLoader(activity, mQuery);
+            case LOADER_ID_RECENTS:
+                return mSearchFeatureProvider.getSavedQueryLoader(activity);
             default:
                 return null;
         }
@@ -180,6 +209,12 @@
         mResultClickCount++;
     }
 
+    public void onSavedQueryClicked(CharSequence query) {
+        final String queryString = query.toString();
+        mSearchView.setQuery(queryString, false /* submit */);
+        onQueryTextChange(queryString);
+    }
+
     private void restartLoaders() {
         final LoaderManager loaderManager = getLoaderManager();
         loaderManager.restartLoader(LOADER_ID_DATABASE, null /* args */, this /* callback */);
@@ -196,4 +231,25 @@
         searchView.setLayoutParams(lp);
         return searchView;
     }
+
+    private class SaveQueryRecorderCallback implements LoaderManager.LoaderCallbacks<Void> {
+        // TODO: make a generic background task manager to handle one-off tasks like this one.
+
+        private static final int LOADER_ID_SAVE_QUERY_TASK = 0;
+
+        @Override
+        public Loader<Void> onCreateLoader(int id, Bundle args) {
+            return new SavedQueryRecorder(getActivity(), mQuery);
+        }
+
+        @Override
+        public void onLoadFinished(Loader<Void> loader, Void data) {
+
+        }
+
+        @Override
+        public void onLoaderReset(Loader<Void> loader) {
+
+        }
+    }
 }
diff --git a/src/com/android/settings/search2/SearchResultsAdapter.java b/src/com/android/settings/search2/SearchResultsAdapter.java
index c318b41..999a485 100644
--- a/src/com/android/settings/search2/SearchResultsAdapter.java
+++ b/src/com/android/settings/search2/SearchResultsAdapter.java
@@ -49,13 +49,16 @@
         final Context context = parent.getContext();
         final LayoutInflater inflater = LayoutInflater.from(context);
         final View view;
-        switch(viewType) {
+        switch (viewType) {
             case PayloadType.INTENT:
                 view = inflater.inflate(R.layout.search_intent_item, parent, false);
                 return new IntentSearchViewHolder(view);
             case PayloadType.INLINE_SWITCH:
                 view = inflater.inflate(R.layout.search_inline_switch_item, parent, false);
                 return new InlineSwitchViewHolder(view, context);
+            case PayloadType.SAVED_QUERY:
+                view = inflater.inflate(R.layout.search_saved_query_item, parent, false);
+                return new SavedQueryViewHolder(view);
             default:
                 return null;
         }
diff --git a/src/com/android/settings/search2/SearchViewHolder.java b/src/com/android/settings/search2/SearchViewHolder.java
index 315ec65..0b10b06 100644
--- a/src/com/android/settings/search2/SearchViewHolder.java
+++ b/src/com/android/settings/search2/SearchViewHolder.java
@@ -15,8 +15,14 @@
  */
 package com.android.settings.search2;
 
+import android.content.Context;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.settings.R;
 
 /**
  * The ViewHolder for the Search RecyclerView.
@@ -25,9 +31,47 @@
  */
 public abstract class SearchViewHolder extends RecyclerView.ViewHolder {
 
+    public final TextView titleView;
+    public final TextView summaryView;
+    public final TextView breadcrumbView;
+    public final ImageView iconView;
+
     public SearchViewHolder(View view) {
         super(view);
+        titleView = (TextView) view.findViewById(android.R.id.title);
+        summaryView = (TextView) view.findViewById(android.R.id.summary);
+        iconView = (ImageView) view.findViewById(android.R.id.icon);
+        breadcrumbView = (TextView) view.findViewById(R.id.breadcrumb);
     }
 
-    public abstract void onBind(SearchFragment fragment, SearchResult result);
+    public void onBind(SearchFragment fragment, SearchResult result) {
+        titleView.setText(result.title);
+        if (TextUtils.isEmpty(result.summary)) {
+            summaryView.setVisibility(View.GONE);
+        } else {
+            summaryView.setText(result.summary);
+            summaryView.setVisibility(View.VISIBLE);
+        }
+        iconView.setImageDrawable(result.icon);
+        if (result.icon == null) {
+            iconView.setBackgroundResource(R.drawable.empty_icon);
+        }
+        bindBreadcrumbView(result);
+    }
+
+    private void bindBreadcrumbView(SearchResult result) {
+        if (result.breadcrumbs == null || result.breadcrumbs.isEmpty()) {
+            breadcrumbView.setVisibility(View.GONE);
+            return;
+        }
+        final Context context = breadcrumbView.getContext();
+        String breadcrumb = result.breadcrumbs.get(0);
+        final int count = result.breadcrumbs.size();
+        for (int i = 1; i < count; i++) {
+            breadcrumb = context.getString(R.string.search_breadcrumb_connector,
+                    breadcrumb, result.breadcrumbs.get(i));
+        }
+        breadcrumbView.setText(breadcrumb);
+        breadcrumbView.setVisibility(View.VISIBLE);
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/search2/XmlParserUtils.java b/src/com/android/settings/search2/XmlParserUtils.java
index 748d4b0..90b1c1f 100644
--- a/src/com/android/settings/search2/XmlParserUtils.java
+++ b/src/com/android/settings/search2/XmlParserUtils.java
@@ -24,9 +24,6 @@
 
 import com.android.settings.R;
 
-import java.text.Normalizer;
-import java.util.regex.Pattern;
-
 /**
  * Utility class to parse elements of XML preferences
  */
@@ -74,6 +71,14 @@
         return getData(context, attrs, R.styleable.Preference, R.styleable.Preference_keywords);
     }
 
+    /**
+     * Returns the fragment name if this preference launches a child fragment.
+     */
+    public static String getDataChildFragment(Context context, AttributeSet attrs) {
+        return getData(context, attrs, R.styleable.Preference,
+                R.styleable.Preference_android_fragment);
+    }
+
     private static String getData(Context context, AttributeSet set, int[] attrs, int resId) {
         final TypedArray sa = context.obtainStyledAttributes(set, attrs);
         final TypedValue tv = sa.peekValue(resId);
diff --git a/src/com/android/settings/security/SecurityFeatureProvider.java b/src/com/android/settings/security/SecurityFeatureProvider.java
index 5cf6fc9..23b4cf0 100644
--- a/src/com/android/settings/security/SecurityFeatureProvider.java
+++ b/src/com/android/settings/security/SecurityFeatureProvider.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.support.v7.preference.PreferenceScreen;
 
+import com.android.settings.trustagent.TrustAgentManager;
 import com.android.settingslib.drawer.DashboardCategory;
 
 
@@ -28,4 +29,7 @@
     /** Update preferences with data from associated tiles. */
     void updatePreferences(Context context, PreferenceScreen preferenceScreen,
             DashboardCategory dashboardCategory);
+
+    /** Returns the {@link TrustAgentManager} bound to this {@link SecurityFeatureProvider}. */
+    TrustAgentManager getTrustAgentManager();
 }
diff --git a/src/com/android/settings/security/SecurityFeatureProviderImpl.java b/src/com/android/settings/security/SecurityFeatureProviderImpl.java
index 91659fd..72d0f81 100644
--- a/src/com/android/settings/security/SecurityFeatureProviderImpl.java
+++ b/src/com/android/settings/security/SecurityFeatureProviderImpl.java
@@ -22,12 +22,15 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
+import com.android.settings.trustagent.TrustAgentManager;
+import com.android.settings.trustagent.TrustAgentManagerImpl;
 import com.android.settingslib.drawer.DashboardCategory;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.Pair;
 
 import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.drawer.TileUtils;
@@ -37,6 +40,8 @@
 /** Implementation for {@code SecurityFeatureProvider}. */
 public class SecurityFeatureProviderImpl implements SecurityFeatureProvider {
 
+    private TrustAgentManager mTrustAgentManager;
+
     /** Update preferences with data from associated tiles. */
     public void updatePreferences(Context context, PreferenceScreen preferenceScreen,
             DashboardCategory dashboardCategory) {
@@ -64,37 +69,23 @@
             String summaryUri =
                     tile.metaData.getString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, null);
             if (!TextUtils.isEmpty(iconUri)) {
-                int icon = TileUtils.getIconFromUri(context, iconUri, providerMap);
-                boolean updateIcon = true;
                 String packageName = null;
-                // Dynamic icon has to come from the same package that the preference launches.
                 if (tile.intent != null) {
-                        Intent intent = tile.intent;
-                        if (!TextUtils.isEmpty(intent.getPackage())) {
-                            packageName = intent.getPackage();
-                        } else if (intent.getComponent() != null) {
-                            packageName = intent.getComponent().getPackageName();
-                        }
-                }
-                if (TextUtils.isEmpty(packageName)) {
-                    updateIcon = false;
-                } else {
-                    if (tile.icon == null) {
-                        // If the tile does not have an icon already, only update if the suggested
-                        // icon is non-zero.
-                        updateIcon = (icon != 0);
-                    } else {
-                        // If the existing icon has the same resource package and resource id, the
-                        // icon does not need to be updated.
-                        updateIcon = !(packageName.equals(tile.icon.getResPackage())
-                                && (icon == tile.icon.getResId()));
+                    Intent intent = tile.intent;
+                    if (!TextUtils.isEmpty(intent.getPackage())) {
+                        packageName = intent.getPackage();
+                    } else if (intent.getComponent() != null) {
+                        packageName = intent.getComponent().getPackageName();
                     }
                 }
-                if (updateIcon) {
+                Pair<String, Integer> icon =
+                        TileUtils.getIconFromUri(context, packageName, iconUri, providerMap);
+                if (icon != null) {
+                    // Icon is only returned if the icon belongs to Settings or the target app.
                     try {
                         matchingPref.setIcon(context.getPackageManager()
-                                .getResourcesForApplication(packageName)
-                                        .getDrawable(icon, context.getTheme()));
+                                .getResourcesForApplication(icon.first /* package name */)
+                                        .getDrawable(icon.second /* res id */, context.getTheme()));
                     } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
                         // Intentionally ignored. If icon resources cannot be found, do not update.
                     }
@@ -114,4 +105,12 @@
             }
         }
     }
+
+    @Override
+    public TrustAgentManager getTrustAgentManager() {
+        if (mTrustAgentManager == null) {
+            mTrustAgentManager = new TrustAgentManagerImpl();
+        }
+        return mTrustAgentManager;
+    }
 }
diff --git a/src/com/android/settings/survey/SurveyMixin.java b/src/com/android/settings/survey/SurveyMixin.java
index 74b7f10..72cd634 100644
--- a/src/com/android/settings/survey/SurveyMixin.java
+++ b/src/com/android/settings/survey/SurveyMixin.java
@@ -74,9 +74,8 @@
     public void onPause() {
         Activity activity = mFragment.getActivity();
         if (mReceiver != null && activity != null) {
-            SurveyFeatureProvider provider =
-                    FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
-            provider.unregisterReceiver(activity, mReceiver);
+            SurveyFeatureProvider.unregisterReceiver(activity, mReceiver);
+            mReceiver = null;
         }
     }
 }
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index b06d403..c46bc6f 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -30,7 +30,6 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
-import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -57,11 +56,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        return CategoryKey.CATEGORY_SYSTEM;
-    }
-
-    @Override
     protected List<PreferenceController> getPreferenceControllers(Context context) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new SystemUpdatePreferenceController(context, UserManager.get(context)));
diff --git a/src/com/android/settings/trustagent/TrustAgentManager.java b/src/com/android/settings/trustagent/TrustAgentManager.java
new file mode 100644
index 0000000..3335e17
--- /dev/null
+++ b/src/com/android/settings/trustagent/TrustAgentManager.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.trustagent;
+
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+
+/** A manager for trust agent state. */
+public interface TrustAgentManager {
+
+   String PERMISSION_PROVIDE_AGENT = android.Manifest.permission.PROVIDE_TRUST_AGENT;
+
+  /**
+   * Determines if the service associated with a resolved trust agent intent is allowed to provide
+   * trust on this device.
+   *
+   * @param resolveInfo The entry corresponding to the matched trust agent intent.
+   * @param pm The package manager to be used to check for permissions.
+   * @return {@code true} if the associated service is allowed to provide a trust agent, and
+   * {@code false} if otherwise.
+   */
+   boolean shouldProvideTrust(ResolveInfo resolveInfo, PackageManager pm);
+}
diff --git a/src/com/android/settings/trustagent/TrustAgentManagerImpl.java b/src/com/android/settings/trustagent/TrustAgentManagerImpl.java
new file mode 100644
index 0000000..cabda79
--- /dev/null
+++ b/src/com/android/settings/trustagent/TrustAgentManagerImpl.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.trustagent;
+
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.util.Log;
+
+/** Implementation for {@code SecurityFeatureProvider}. */
+public class TrustAgentManagerImpl implements TrustAgentManager {
+
+    private static final String TAG = "TrustAgentFeature";
+
+    @Override
+    public boolean shouldProvideTrust(ResolveInfo resolveInfo, PackageManager pm) {
+        final String packageName = resolveInfo.serviceInfo.packageName;
+        if (pm.checkPermission(PERMISSION_PROVIDE_AGENT, packageName)
+                != PackageManager.PERMISSION_GRANTED) {
+            Log.w(TAG, "Skipping agent because package " + packageName
+                    + " does not have permission " + PERMISSION_PROVIDE_AGENT + ".");
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 96a7f4e..fe78d20 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -16,29 +16,27 @@
 
 package com.android.settings.tts;
 
+import android.support.v7.preference.ListPreference;
 import android.app.AlertDialog;
 import android.content.ActivityNotFoundException;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.os.Bundle;
-import android.provider.Settings.SettingNotFoundException;
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.TextToSpeech.EngineInfo;
 import android.speech.tts.TtsEngines;
 import android.speech.tts.UtteranceProgressListener;
-import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceCategory;
 import android.text.TextUtils;
 import android.util.Log;
-import android.widget.Checkable;
+import android.util.Pair;
+import java.util.Comparator;
+import java.util.Collections;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
-import com.android.settings.SeekBarPreference;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -48,13 +46,15 @@
 import java.util.Objects;
 import java.util.Set;
 
-import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
-import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
 import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
+import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
 
-public class TextToSpeechSettings extends SettingsPreferenceFragment implements
-        Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener,
-        RadioButtonGroupState {
+public class TextToSpeechSettings extends SettingsPreferenceFragment
+        implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
+
+    private static final String STATE_KEY_LOCALE_ENTRIES = "locale_entries";
+    private static final String STATE_KEY_LOCALE_ENTRY_VALUES = "locale_entry_values";
+    private static final String STATE_KEY_LOCALE_VALUE = "locale_value";
 
     private static final String TAG = "TextToSpeechSettings";
     private static final boolean DBG = false;
@@ -62,84 +62,37 @@
     /** Preference key for the "play TTS example" preference. */
     private static final String KEY_PLAY_EXAMPLE = "tts_play_example";;
 
-    /** Preference key for the TTS pitch selection slider. */
-    private static final String KEY_DEFAULT_PITCH = "tts_default_pitch";
-
-    /** Preference key for the TTS rate selection slider. */
-    private static final String KEY_DEFAULT_RATE = "tts_default_rate";
-
-    /** Preference key for the TTS reset speech rate preference. */
-    private static final String KEY_RESET_SPEECH_RATE = "reset_speech_rate";
-
-    /** Preference key for the TTS reset speech pitch preference. */
-    private static final String KEY_RESET_SPEECH_PITCH = "reset_speech_pitch";
-
     /** Preference key for the TTS status field. */
     private static final String KEY_STATUS = "tts_status";
 
     /**
-     * Preference key for the engine selection preference.
-     */
-    private static final String KEY_ENGINE_PREFERENCE_SECTION =
-            "tts_engine_preference_section";
-
-    /**
      * These look like birth years, but they aren't mine. I'm much younger than this.
      */
     private static final int GET_SAMPLE_TEXT = 1983;
     private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
 
-    /**
-     * Speech rate value.
-     * This value should be kept in sync with the max value set in tts_settings xml.
-     */
-    private static final int MAX_SPEECH_RATE = 600;
-    private static final int MIN_SPEECH_RATE = 10;
-
-    /**
-     * Speech pitch value.
-     * TTS pitch value varies from 25 to 400, where 100 is the value
-     * for normal pitch. The max pitch value is set to 400, based on feedback from users
-     * and the GoogleTTS pitch variation range. The range for pitch is not set in stone
-     * and should be readjusted based on user need.
-     * This value should be kept in sync with the max value set in tts_settings xml.
-     */
-    private static final int MAX_SPEECH_PITCH = 400;
-    private static final int MIN_SPEECH_PITCH = 25;
-
-    private PreferenceCategory mEnginePreferenceCategory;
-    private SeekBarPreference mDefaultPitchPref;
-    private SeekBarPreference mDefaultRatePref;
-    private Preference mResetSpeechRate;
-    private Preference mResetSpeechPitch;
     private Preference mPlayExample;
     private Preference mEngineStatus;
 
-    private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
-    private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
 
-    /**
-     * The currently selected engine.
-     */
+    private static final String KEY_ENGINE_LOCALE = "tts_default_lang";
+    private static final String KEY_ENGINE_SETTINGS = "tts_engine_settings";
+    private static final String KEY_INSTALL_DATA = "tts_install_data";
+
+    private int mSelectedLocaleIndex = -1;
+
+    /** The currently selected engine. */
     private String mCurrentEngine;
 
-    /**
-     * The engine checkbox that is currently checked. Saves us a bit of effort
-     * in deducing the right one from the currently selected engine.
-     */
-    private Checkable mCurrentChecked;
-
-    /**
-     * The previously selected TTS engine. Useful for rollbacks if the users
-     * choice is not loaded or fails a voice integrity check.
-     */
-    private String mPreviousEngine;
-
     private TextToSpeech mTts = null;
     private TtsEngines mEnginesHelper = null;
 
     private String mSampleText = null;
 
+    private ListPreference mLocalePreference;
+    private Preference mEngineSettingsPreference;
+    private Preference mInstallVoicesPreference;
+
     /**
      * Default locale used by selected TTS engine, null if not connected to any engine.
      */
@@ -164,18 +117,6 @@
         }
     };
 
-    /**
-     * The initialization listener used when the user changes his choice of
-     * engine (as opposed to when then screen is being initialized for the first
-     * time).
-     */
-    private final TextToSpeech.OnInitListener mUpdateListener = new TextToSpeech.OnInitListener() {
-        @Override
-        public void onInit(int status) {
-            onUpdateEngine(status);
-        }
-    };
-
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.TTS_TEXT_TO_SPEECH;
@@ -192,21 +133,40 @@
         mPlayExample.setOnPreferenceClickListener(this);
         mPlayExample.setEnabled(false);
 
-        mResetSpeechRate = findPreference(KEY_RESET_SPEECH_RATE);
-        mResetSpeechRate.setOnPreferenceClickListener(this);
-        mResetSpeechPitch = findPreference(KEY_RESET_SPEECH_PITCH);
-        mResetSpeechPitch.setOnPreferenceClickListener(this);
+        mEnginesHelper = new TtsEngines(getActivity().getApplicationContext());
 
-        mEnginePreferenceCategory = (PreferenceCategory) findPreference(
-                KEY_ENGINE_PREFERENCE_SECTION);
-        mDefaultPitchPref = (SeekBarPreference) findPreference(KEY_DEFAULT_PITCH);
-        mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
+        mLocalePreference = (ListPreference) findPreference(KEY_ENGINE_LOCALE);
+        mLocalePreference.setOnPreferenceChangeListener(this);
+
+        if (savedInstanceState == null) {
+            mLocalePreference.setEnabled(false);
+            mLocalePreference.setEntries(new CharSequence[0]);
+            mLocalePreference.setEntryValues(new CharSequence[0]);
+        } else {
+            // Repopulate mLocalePreference with saved state. Will be updated later with
+            // up-to-date values when checkTtsData() calls back with results.
+            final CharSequence[] entries =
+                    savedInstanceState.getCharSequenceArray(STATE_KEY_LOCALE_ENTRIES);
+            final CharSequence[] entryValues =
+                    savedInstanceState.getCharSequenceArray(STATE_KEY_LOCALE_ENTRY_VALUES);
+            final CharSequence value = savedInstanceState.getCharSequence(STATE_KEY_LOCALE_VALUE);
+
+            mLocalePreference.setEntries(entries);
+            mLocalePreference.setEntryValues(entryValues);
+            mLocalePreference.setValue(value != null ? value.toString() : null);
+            mLocalePreference.setEnabled(entries.length > 0);
+        }
+
+        mEngineSettingsPreference = findPreference(KEY_ENGINE_SETTINGS);
+        mEngineSettingsPreference.setOnPreferenceClickListener(this);
+        mInstallVoicesPreference = findPreference(KEY_INSTALL_DATA);
+        mInstallVoicesPreference.setOnPreferenceClickListener(this);
+        mInstallVoicesPreference.setEnabled(false);
 
         mEngineStatus = findPreference(KEY_STATUS);
         updateEngineStatus(R.string.tts_status_checking);
 
         mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener);
-        mEnginesHelper = new TtsEngines(getActivity().getApplicationContext());
 
         setTtsUtteranceProgressListener();
         initSettings();
@@ -222,6 +182,23 @@
         if (mTts == null || mCurrentDefaultLocale == null) {
             return;
         }
+        if (!mTts.getDefaultEngine().equals(mTts.getCurrentEngine())) {
+            try {
+                mTts.shutdown();
+                mTts = null;
+            } catch (Exception e) {
+                Log.e(TAG, "Error shutting down TTS engine" + e);
+            }
+            mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener);
+            setTtsUtteranceProgressListener();
+            initSettings();
+        } else {
+            // Do set pitch correctly after it may have changed, and unlike speed, it doesn't change
+            // immediately.
+            final ContentResolver resolver = getContentResolver();
+            mTts.setPitch(android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH)/100.0f);
+        }
+
         Locale ttsDefaultLocale = mTts.getDefaultLanguage();
         if (mCurrentDefaultLocale != null && !mCurrentDefaultLocale.equals(ttsDefaultLocale)) {
             updateWidgetState(false);
@@ -259,26 +236,9 @@
     private void initSettings() {
         final ContentResolver resolver = getContentResolver();
 
-        // Set up the default rate and pitch.
-        mDefaultRate = android.provider.Settings.Secure.getInt(
-            resolver, TTS_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
-        mDefaultPitch = android.provider.Settings.Secure.getInt(
-            resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
-
-        mDefaultRatePref.setProgress(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, mDefaultRate));
-        mDefaultRatePref.setOnPreferenceChangeListener(this);
-        mDefaultRatePref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
-
-        mDefaultPitchPref.setProgress(getSeekBarProgressFromValue(KEY_DEFAULT_PITCH,
-              mDefaultPitch));
-        mDefaultPitchPref.setOnPreferenceChangeListener(this);
-        mDefaultPitchPref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_PITCH,
-              MAX_SPEECH_PITCH));
-
         if (mTts != null) {
             mCurrentEngine = mTts.getCurrentEngine();
-            mTts.setSpeechRate(mDefaultRate/100.0f);
-            mTts.setPitch(mDefaultPitch/100.0f);
+            mTts.setPitch(android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH)/100.0f);
         }
 
         SettingsActivity activity = null;
@@ -289,53 +249,37 @@
                     "Settings");
         }
 
-        mEnginePreferenceCategory.removeAll();
+        if (mCurrentEngine != null) {
+            EngineInfo info = mEnginesHelper.getEngineInfo(mCurrentEngine);
+            mEngineSettingsPreference.setSummary(info.label);
+            final Intent settingsIntent = mEnginesHelper.getSettingsIntent(info.name);
+            mEngineSettingsPreference.setIntent(settingsIntent);
+            if (settingsIntent == null) {
+                mEngineSettingsPreference.setEnabled(false);
+            }
 
-        List<EngineInfo> engines = mEnginesHelper.getEngines();
-        for (EngineInfo engine : engines) {
-            TtsEnginePreference enginePref = new TtsEnginePreference(getPrefContext(), engine,
-                    this, activity);
-            mEnginePreferenceCategory.addPreference(enginePref);
+            Preference mEnginePreference = findPreference("tts_engine_preference");
+            mEnginePreference.setSummary(info.label);
         }
 
         checkVoiceData(mCurrentEngine);
     }
 
     /**
-     * The minimum speech pitch/rate value should be > 0 but the minimum value of a seekbar in
-     * android is fixed at 0. Therefore, we increment the seekbar progress with MIN_SPEECH_VALUE
-     * so that the minimum seekbar progress value is MIN_SPEECH_PITCH/RATE.
-     *     SPEECH_VALUE = MIN_SPEECH_VALUE + SEEKBAR_PROGRESS
-     */
-    private int getValueFromSeekBarProgress(String preferenceKey, int progress) {
-        if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
-            return MIN_SPEECH_RATE + progress;
-        } else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
-            return MIN_SPEECH_PITCH + progress;
-        }
-        return progress;
-    }
-
-    /**
-     * Since we are appending the MIN_SPEECH value to the speech seekbar progress, the
-     * speech seekbar progress should be set to (speechValue - MIN_SPEECH value).
-     */
-    private int getSeekBarProgressFromValue(String preferenceKey, int value) {
-        if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
-            return value - MIN_SPEECH_RATE;
-        } else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
-            return value - MIN_SPEECH_PITCH;
-        }
-        return value;
-    }
-
-    /**
      * Called when the TTS engine is initialized.
      */
     public void onInitEngine(int status) {
         if (status == TextToSpeech.SUCCESS) {
             if (DBG) Log.d(TAG, "TTS engine for settings screen initialized.");
             checkDefaultLocale();
+            getActivity()
+                    .runOnUiThread(
+                            new Runnable() {
+                                @Override
+                                public void run() {
+                                    mLocalePreference.setEnabled(true);
+                                }
+                            });
         } else {
             if (DBG) Log.d(TAG, "TTS engine for settings screen failed to initialize successfully.");
             updateWidgetState(false);
@@ -452,9 +396,88 @@
             onSampleTextReceived(resultCode, data);
         } else if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
             onVoiceDataIntegrityCheckDone(data);
+            if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL) {
+                updateDefaultLocalePref(data);
+            }
         }
     }
 
+    private void updateDefaultLocalePref(Intent data) {
+        final ArrayList<String> availableLangs =
+                data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
+
+        final ArrayList<String> unavailableLangs =
+                data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
+
+        if (availableLangs != null && unavailableLangs.size() > 0) {
+            mInstallVoicesPreference.setEnabled(true);
+        } else {
+            mInstallVoicesPreference.setEnabled(false);
+        }
+
+        if (availableLangs == null || availableLangs.size() == 0) {
+            mLocalePreference.setEnabled(false);
+            return;
+        }
+        Locale currentLocale = null;
+        if (!mEnginesHelper.isLocaleSetToDefaultForEngine(mTts.getCurrentEngine())) {
+            currentLocale = mEnginesHelper.getLocalePrefForEngine(mTts.getCurrentEngine());
+        }
+
+        ArrayList<Pair<String, Locale>> entryPairs =
+                new ArrayList<Pair<String, Locale>>(availableLangs.size());
+        for (int i = 0; i < availableLangs.size(); i++) {
+            Locale locale = mEnginesHelper.parseLocaleString(availableLangs.get(i));
+            if (locale != null) {
+                entryPairs.add(new Pair<String, Locale>(locale.getDisplayName(), locale));
+            }
+        }
+
+        // Sort it
+        Collections.sort(
+                entryPairs,
+                new Comparator<Pair<String, Locale>>() {
+                    @Override
+                    public int compare(Pair<String, Locale> lhs, Pair<String, Locale> rhs) {
+                        return lhs.first.compareToIgnoreCase(rhs.first);
+                    }
+                });
+
+        // Get two arrays out of one of pairs
+        mSelectedLocaleIndex = 0; // Will point to the R.string.tts_lang_use_system value
+        CharSequence[] entries = new CharSequence[availableLangs.size() + 1];
+        CharSequence[] entryValues = new CharSequence[availableLangs.size() + 1];
+
+        entries[0] = getActivity().getString(R.string.tts_lang_use_system);
+        entryValues[0] = "";
+
+        int i = 1;
+        for (Pair<String, Locale> entry : entryPairs) {
+            if (entry.second.equals(currentLocale)) {
+                mSelectedLocaleIndex = i;
+            }
+            entries[i] = entry.first;
+            entryValues[i++] = entry.second.toString();
+        }
+
+        mLocalePreference.setEntries(entries);
+        mLocalePreference.setEntryValues(entryValues);
+        mLocalePreference.setEnabled(true);
+        setLocalePreference(mSelectedLocaleIndex);
+    }
+
+    /** Set entry from entry table in mLocalePreference */
+    private void setLocalePreference(int index) {
+        if (index < 0) {
+            mLocalePreference.setValue("");
+            mLocalePreference.setSummary(R.string.tts_lang_not_selected);
+        } else {
+            mLocalePreference.setValueIndex(index);
+            mLocalePreference.setSummary(mLocalePreference.getEntries()[index]);
+        }
+    }
+
+
     private String getDefaultSampleString() {
         if (mTts != null && mTts.getLanguage() != null) {
             try {
@@ -522,17 +545,59 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
-        if (KEY_DEFAULT_RATE.equals(preference.getKey())) {
-            updateSpeechRate((Integer) objValue);
-        } else if (KEY_DEFAULT_PITCH.equals(preference.getKey())) {
-            updateSpeechPitchValue((Integer) objValue);
+        if (preference == mLocalePreference) {
+            String localeString = (String) objValue;
+            updateLanguageTo(
+                    (!TextUtils.isEmpty(localeString)
+                            ? mEnginesHelper.parseLocaleString(localeString)
+                            : null));
+            checkDefaultLocale();
+            return true;
         }
         return true;
     }
 
+    private void updateLanguageTo(Locale locale) {
+        int selectedLocaleIndex = -1;
+        String localeString = (locale != null) ? locale.toString() : "";
+        for (int i = 0; i < mLocalePreference.getEntryValues().length; i++) {
+            if (localeString.equalsIgnoreCase(mLocalePreference.getEntryValues()[i].toString())) {
+                selectedLocaleIndex = i;
+                break;
+            }
+        }
+
+        if (selectedLocaleIndex == -1) {
+            Log.w(TAG, "updateLanguageTo called with unknown locale argument");
+            return;
+        }
+        mLocalePreference.setSummary(mLocalePreference.getEntries()[selectedLocaleIndex]);
+        mSelectedLocaleIndex = selectedLocaleIndex;
+
+        mEnginesHelper.updateLocalePrefForEngine(mTts.getCurrentEngine(), locale);
+
+        // Null locale means "use system default"
+        mTts.setLanguage((locale != null) ? locale : Locale.getDefault());
+    }
+
     /**
-     * Called when mPlayExample, mResetSpeechRate or mResetSpeechPitch is
-     * clicked.
+     * Ask the current default engine to launch the matching INSTALL_TTS_DATA activity so the
+     * required TTS files are properly installed.
+     */
+    private void installVoiceData() {
+        if (TextUtils.isEmpty(mCurrentEngine)) return;
+        Intent intent = new Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
+        intent.setPackage(mCurrentEngine);
+        try {
+            Log.v(TAG, "Installing voice data: " + intent.toUri(0));
+            startActivity(intent);
+        } catch (ActivityNotFoundException ex) {
+            Log.e(TAG, "Failed to install TTS data, no acitivty found for " + intent + ")");
+        }
+    }
+
+    /**
+     * Called when mPlayExample, mInstallVoicesPreference is clicked.
      */
     @Override
     public boolean onPreferenceClick(Preference preference) {
@@ -541,57 +606,15 @@
             // the actual speaking
             speakSampleText();
             return true;
-        } else if (preference == mResetSpeechRate) {
-          int speechRateSeekbarProgress = getSeekBarProgressFromValue(
-              KEY_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
-          mDefaultRatePref.setProgress(speechRateSeekbarProgress);
-          updateSpeechRate(speechRateSeekbarProgress);
-          return true;
-        } else if (preference == mResetSpeechPitch) {
-          int pitchSeekbarProgress = getSeekBarProgressFromValue(
-              KEY_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
-          mDefaultPitchPref.setProgress(pitchSeekbarProgress);
-          updateSpeechPitchValue(pitchSeekbarProgress);
-          return true;
+        } else if (preference == mInstallVoicesPreference) {
+            installVoiceData();
+            return true;
         }
         return false;
     }
 
-    private void updateSpeechRate(int speechRateSeekBarProgress) {
-        mDefaultRate = getValueFromSeekBarProgress(KEY_DEFAULT_RATE,
-            speechRateSeekBarProgress);
-        try {
-            android.provider.Settings.Secure.putInt(getContentResolver(),
-                    TTS_DEFAULT_RATE, mDefaultRate);
-            if (mTts != null) {
-                mTts.setSpeechRate(mDefaultRate / 100.0f);
-            }
-            if (DBG) Log.d(TAG, "TTS default rate changed, now " + mDefaultRate);
-        } catch (NumberFormatException e) {
-            Log.e(TAG, "could not persist default TTS rate setting", e);
-        }
-        return;
-    }
-
-    private void updateSpeechPitchValue(int speechPitchSeekBarProgress) {
-        mDefaultPitch = getValueFromSeekBarProgress(KEY_DEFAULT_PITCH,
-            speechPitchSeekBarProgress);
-        try {
-            android.provider.Settings.Secure.putInt(getContentResolver(),
-                    TTS_DEFAULT_PITCH, mDefaultPitch);
-            if (mTts != null) {
-                mTts.setPitch(mDefaultPitch / 100.0f);
-            }
-            if (DBG) Log.d(TAG, "TTS default pitch changed, now" + mDefaultPitch);
-        } catch (NumberFormatException e) {
-            Log.e(TAG, "could not persist default TTS pitch setting", e);
-        }
-        return;
-    }
-
     private void updateWidgetState(boolean enable) {
         mPlayExample.setEnabled(enable);
-        mDefaultRatePref.setEnabled(enable);
         mEngineStatus.setEnabled(enable);
     }
 
@@ -614,67 +637,7 @@
         dialog.show();
     }
 
-    private void updateDefaultEngine(String engine) {
-        if (DBG) Log.d(TAG, "Updating default synth to : " + engine);
-
-        // Disable the "play sample text" preference and the speech
-        // rate preference while the engine is being swapped.
-        updateWidgetState(false);
-        updateEngineStatus(R.string.tts_status_checking);
-
-        // Keep track of the previous engine that was being used. So that
-        // we can reuse the previous engine.
-        //
-        // Note that if TextToSpeech#getCurrentEngine is not null, it means at
-        // the very least that we successfully bound to the engine service.
-        mPreviousEngine = mTts.getCurrentEngine();
-
-        // Step 1: Shut down the existing TTS engine.
-        if (mTts != null) {
-            try {
-                mTts.shutdown();
-                mTts = null;
-            } catch (Exception e) {
-                Log.e(TAG, "Error shutting down TTS engine" + e);
-            }
-        }
-
-        // Step 2: Connect to the new TTS engine.
-        // Step 3 is continued on #onUpdateEngine (below) which is called when
-        // the app binds successfully to the engine.
-        if (DBG) Log.d(TAG, "Updating engine : Attempting to connect to engine: " + engine);
-        mTts = new TextToSpeech(getActivity().getApplicationContext(), mUpdateListener, engine);
-        setTtsUtteranceProgressListener();
-    }
-
-    /*
-     * Step 3: We have now bound to the TTS engine the user requested. We will
-     * attempt to check voice data for the engine if we successfully bound to it,
-     * or revert to the previous engine if we didn't.
-     */
-    public void onUpdateEngine(int status) {
-        if (status == TextToSpeech.SUCCESS) {
-            if (DBG) {
-                Log.d(TAG, "Updating engine: Successfully bound to the engine: " +
-                        mTts.getCurrentEngine());
-            }
-            checkVoiceData(mTts.getCurrentEngine());
-        } else {
-            if (DBG) Log.d(TAG, "Updating engine: Failed to bind to engine, reverting.");
-            if (mPreviousEngine != null) {
-                // This is guaranteed to at least bind, since mPreviousEngine would be
-                // null if the previous bind to this engine failed.
-                mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener,
-                        mPreviousEngine);
-                setTtsUtteranceProgressListener();
-            }
-            mPreviousEngine = null;
-        }
-    }
-
-    /*
-     * Step 4: Check whether the voice data for the engine is ok.
-     */
+    /** Check whether the voice data for the engine is ok. */
     private void checkVoiceData(String engine) {
         Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
         intent.setPackage(engine);
@@ -686,9 +649,7 @@
         }
     }
 
-    /*
-     * Step 5: The voice data check is complete.
-     */
+    /** The voice data check is complete. */
     private void onVoiceDataIntegrityCheckDone(Intent data) {
         final String engine = mTts.getCurrentEngine();
 
@@ -715,39 +676,5 @@
         if (evaluateDefaultLocale()) {
             getSampleText();
         }
-
-        final int engineCount = mEnginePreferenceCategory.getPreferenceCount();
-        for (int i = 0; i < engineCount; ++i) {
-            final Preference p = mEnginePreferenceCategory.getPreference(i);
-            if (p instanceof TtsEnginePreference) {
-                TtsEnginePreference enginePref = (TtsEnginePreference) p;
-                if (enginePref.getKey().equals(engine)) {
-                    enginePref.setVoiceDataDetails(data);
-                    break;
-                }
-            }
-        }
     }
-
-    @Override
-    public Checkable getCurrentChecked() {
-        return mCurrentChecked;
-    }
-
-    @Override
-    public String getCurrentKey() {
-        return mCurrentEngine;
-    }
-
-    @Override
-    public void setCurrentChecked(Checkable current) {
-        mCurrentChecked = current;
-    }
-
-    @Override
-    public void setCurrentKey(String key) {
-        mCurrentEngine = key;
-        updateDefaultEngine(mCurrentEngine);
-    }
-
 }
diff --git a/src/com/android/settings/tts/TtsEnginePreference.java b/src/com/android/settings/tts/TtsEnginePreference.java
index 385b861..9a84002 100644
--- a/src/com/android/settings/tts/TtsEnginePreference.java
+++ b/src/com/android/settings/tts/TtsEnginePreference.java
@@ -20,19 +20,16 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.os.Bundle;
 import android.speech.tts.TextToSpeech.EngineInfo;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.Log;
-import android.view.View;
 import android.widget.Checkable;
 import android.widget.CompoundButton;
 import android.widget.RadioButton;
 
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
-import com.android.settings.Utils;
 
 
 public class TtsEnginePreference extends Preference {
@@ -40,31 +37,6 @@
     private static final String TAG = "TtsEnginePreference";
 
     /**
-     * Key for the name of the TTS engine passed in to the engine
-     * settings fragment {@link TtsEngineSettingsFragment}.
-     */
-    static final String FRAGMENT_ARGS_NAME = "name";
-
-    /**
-     * Key for the label of the TTS engine passed in to the engine
-     * settings fragment. This is used as the title of the fragment
-     * {@link TtsEngineSettingsFragment}.
-     */
-    static final String FRAGMENT_ARGS_LABEL = "label";
-
-    /**
-     * Key for the voice data data passed in to the engine settings
-     * fragmetn {@link TtsEngineSettingsFragment}.
-     */
-    static final String FRAGMENT_ARGS_VOICES = "voices";
-
-    /**
-     * The preference activity that owns this preference. Required
-     * for instantiating the engine specific settings screen.
-     */
-    private final SettingsActivity mSettingsActivity;
-
-    /**
      * The engine information for the engine this preference represents.
      * Contains it's name, label etc. which are used for display.
      */
@@ -81,7 +53,6 @@
      */
     private volatile boolean mPreventRadioButtonCallbacks;
 
-    private View mSettingsIcon;
     private RadioButton mRadioButton;
     private Intent mVoiceCheckData;
 
@@ -99,7 +70,6 @@
         setLayoutResource(R.layout.preference_tts_engine);
 
         mSharedState = state;
-        mSettingsActivity = prefActivity;
         mEngineInfo = info;
         mPreventRadioButtonCallbacks = false;
 
@@ -130,52 +100,10 @@
         mPreventRadioButtonCallbacks = false;
 
         mRadioButton = rb;
-
-        mSettingsIcon = view.findViewById(R.id.tts_engine_settings);
-        // Will be enabled only the engine has passed the voice check, and
-        // is currently enabled.
-        mSettingsIcon.setEnabled(isChecked && mVoiceCheckData != null);
-        if (!isChecked) {
-            mSettingsIcon.setAlpha(Utils.DISABLED_ALPHA);
-        }
-        mSettingsIcon.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Bundle args = new Bundle();
-                args.putString(FRAGMENT_ARGS_NAME, mEngineInfo.name);
-                args.putString(FRAGMENT_ARGS_LABEL, mEngineInfo.label);
-                if (mVoiceCheckData != null) {
-                    args.putParcelable(FRAGMENT_ARGS_VOICES, mVoiceCheckData);
-                }
-
-                // Note that we use this instead of the (easier to use)
-                // SettingsActivity.startPreferenceFragment because the
-                // title will not be updated correctly in the fragment
-                // breadcrumb since it isn't inflated from the XML layout.
-                mSettingsActivity.startPreferencePanel(
-                        TtsEngineSettingsFragment.class.getName(),
-                        args, 0, mEngineInfo.label, null, 0);
-            }
-        });
-
-        if (mVoiceCheckData != null) {
-            mSettingsIcon.setEnabled(mRadioButton.isChecked());
-        }
     }
 
     public void setVoiceDataDetails(Intent data) {
         mVoiceCheckData = data;
-        // This might end up running before getView aboive, in which
-        // case mSettingsIcon && mRadioButton will be null. In this case
-        // getView will set the right values.
-        if (mSettingsIcon != null && mRadioButton != null) {
-            if (mRadioButton.isChecked()) {
-                mSettingsIcon.setEnabled(true);
-            } else {
-                mSettingsIcon.setEnabled(false);
-                mSettingsIcon.setAlpha(Utils.DISABLED_ALPHA);
-            }
-        }
     }
 
     private boolean shouldDisplayDataAlert() {
@@ -227,8 +155,6 @@
                 // Privileged engine, set it current
                 makeCurrentEngine(buttonView);
             }
-        } else {
-            mSettingsIcon.setEnabled(false);
         }
     }
 
@@ -239,7 +165,6 @@
         mSharedState.setCurrentChecked(current);
         mSharedState.setCurrentKey(getKey());
         callChangeListener(mSharedState.getCurrentKey());
-        mSettingsIcon.setEnabled(true);
     }
 
 
diff --git a/src/com/android/settings/tts/TtsEnginePreferenceFragment.java b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
new file mode 100644
index 0000000..e0ed8b7
--- /dev/null
+++ b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
@@ -0,0 +1,194 @@
+package com.android.settings.tts;
+
+import android.speech.tts.TextToSpeech;
+import com.android.settings.R;
+import android.os.Bundle;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import android.support.v7.preference.PreferenceCategory;
+import android.speech.tts.TtsEngines;
+import android.speech.tts.TextToSpeech.EngineInfo;
+import com.android.settings.SettingsActivity;
+import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState;
+import android.widget.Checkable;
+import android.util.Log;
+import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.BaseSearchIndexProvider;
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import java.util.List;
+import java.util.Arrays;
+
+public class TtsEnginePreferenceFragment extends SettingsPreferenceFragment //implements
+        implements RadioButtonGroupState, Indexable {
+    private static final String TAG = "TtsEnginePreferenceFragment";
+
+    private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
+
+    /** The currently selected engine. */
+    private String mCurrentEngine;
+
+    /**
+     * The engine checkbox that is currently checked. Saves us a bit of effort in deducing the right
+     * one from the currently selected engine.
+     */
+    private Checkable mCurrentChecked;
+
+    /**
+     * The previously selected TTS engine. Useful for rollbacks if the users choice is not loaded or
+     * fails a voice integrity check.
+     */
+    private String mPreviousEngine;
+
+    private PreferenceCategory mEnginePreferenceCategory;
+
+    private TextToSpeech mTts = null;
+    private TtsEngines mEnginesHelper = null;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.tts_engine_picker);
+
+        mEnginePreferenceCategory =
+                (PreferenceCategory) findPreference("tts_engine_preference_category");
+        mEnginesHelper = new TtsEngines(getActivity().getApplicationContext());
+
+        mTts = new TextToSpeech(getActivity().getApplicationContext(), null);
+
+        initSettings();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.TTS_ENGINE_SETTINGS;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mTts != null) {
+            mTts.shutdown();
+            mTts = null;
+        }
+    }
+
+    private void initSettings() {
+        if (mTts != null) {
+            mCurrentEngine = mTts.getCurrentEngine();
+        }
+
+        mEnginePreferenceCategory.removeAll();
+
+        SettingsActivity activity = (SettingsActivity) getActivity();
+
+        List<EngineInfo> engines = mEnginesHelper.getEngines();
+        for (EngineInfo engine : engines) {
+            TtsEnginePreference enginePref =
+                    new TtsEnginePreference(getPrefContext(), engine, this, activity);
+            mEnginePreferenceCategory.addPreference(enginePref);
+        }
+    }
+
+    @Override
+    public Checkable getCurrentChecked() {
+        return mCurrentChecked;
+    }
+
+    @Override
+    public String getCurrentKey() {
+        return mCurrentEngine;
+    }
+
+    @Override
+    public void setCurrentChecked(Checkable current) {
+        mCurrentChecked = current;
+    }
+
+    /**
+     * The initialization listener used when the user changes his choice of engine (as opposed to
+     * when then screen is being initialized for the first time).
+     */
+    private final TextToSpeech.OnInitListener mUpdateListener =
+            new TextToSpeech.OnInitListener() {
+                @Override
+                public void onInit(int status) {
+                    onUpdateEngine(status);
+                }
+            };
+
+    private void updateDefaultEngine(String engine) {
+        Log.d(TAG, "Updating default synth to : " + engine);
+
+        // Keep track of the previous engine that was being used. So that
+        // we can reuse the previous engine.
+        //
+        // Note that if TextToSpeech#getCurrentEngine is not null, it means at
+        // the very least that we successfully bound to the engine service.
+        mPreviousEngine = mTts.getCurrentEngine();
+
+        // Step 1: Shut down the existing TTS engine.
+        Log.i(TAG, "Shutting down current tts engine");
+        if (mTts != null) {
+            try {
+                mTts.shutdown();
+                mTts = null;
+            } catch (Exception e) {
+                Log.e(TAG, "Error shutting down TTS engine" + e);
+            }
+        }
+
+        // Step 2: Connect to the new TTS engine.
+        // Step 3 is continued on #onUpdateEngine (below) which is called when
+        // the app binds successfully to the engine.
+        Log.i(TAG, "Updating engine : Attempting to connect to engine: " + engine);
+        mTts = new TextToSpeech(getActivity().getApplicationContext(), mUpdateListener, engine);
+        Log.i(TAG, "Success");
+    }
+
+    /**
+     * Step 3: We have now bound to the TTS engine the user requested. We will attempt to check
+     * voice data for the engine if we successfully bound to it, or revert to the previous engine if
+     * we didn't.
+     */
+    public void onUpdateEngine(int status) {
+        if (status == TextToSpeech.SUCCESS) {
+            Log.d(
+                    TAG,
+                    "Updating engine: Successfully bound to the engine: "
+                            + mTts.getCurrentEngine());
+            android.provider.Settings.Secure.putString(
+                    getContentResolver(), TTS_DEFAULT_SYNTH, mTts.getCurrentEngine());
+        } else {
+            Log.d(TAG, "Updating engine: Failed to bind to engine, reverting.");
+            if (mPreviousEngine != null) {
+                // This is guaranteed to at least bind, since mPreviousEngine would be
+                // null if the previous bind to this engine failed.
+                mTts =
+                        new TextToSpeech(
+                                getActivity().getApplicationContext(), null, mPreviousEngine);
+            }
+            mPreviousEngine = null;
+        }
+    }
+
+    @Override
+    public void setCurrentKey(String key) {
+        mCurrentEngine = key;
+        updateDefaultEngine(mCurrentEngine);
+    }
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    Log.i(TAG, "Indexing");
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.tts_engine_picker;
+                    return Arrays.asList(sir);
+                }
+            };
+}
diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java
deleted file mode 100644
index 42222df..0000000
--- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright (C) 2011 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.tts;
-
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-import android.speech.tts.TextToSpeech;
-import android.speech.tts.TtsEngines;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.Preference.OnPreferenceClickListener;
-import android.support.v7.preference.PreferenceScreen;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Pair;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Locale;
-
-
-public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implements
-        OnPreferenceClickListener, OnPreferenceChangeListener {
-    private static final String TAG = "TtsEngineSettings";
-    private static final boolean DBG = false;
-
-    private static final String KEY_ENGINE_LOCALE = "tts_default_lang";
-    private static final String KEY_ENGINE_SETTINGS = "tts_engine_settings";
-    private static final String KEY_INSTALL_DATA = "tts_install_data";
-
-    private static final String STATE_KEY_LOCALE_ENTRIES = "locale_entries";
-    private static final String STATE_KEY_LOCALE_ENTRY_VALUES= "locale_entry_values";
-    private static final String STATE_KEY_LOCALE_VALUE = "locale_value";
-
-    private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
-
-    private TtsEngines mEnginesHelper;
-    private ListPreference mLocalePreference;
-    private Preference mEngineSettingsPreference;
-    private Preference mInstallVoicesPreference;
-    private Intent mEngineSettingsIntent;
-    private Intent mVoiceDataDetails;
-
-    private TextToSpeech mTts;
-
-    private int mSelectedLocaleIndex = -1;
-
-    private final TextToSpeech.OnInitListener mTtsInitListener = new TextToSpeech.OnInitListener() {
-        @Override
-        public void onInit(int status) {
-            if (status != TextToSpeech.SUCCESS) {
-                finishFragment();
-            } else {
-                getActivity().runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        mLocalePreference.setEnabled(true);
-                    }
-                });
-            }
-        }
-    };
-
-    private final BroadcastReceiver mLanguagesChangedReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            // Installed or uninstalled some data packs
-            if (TextToSpeech.Engine.ACTION_TTS_DATA_INSTALLED.equals(intent.getAction())) {
-                checkTtsData();
-            }
-        }
-    };
-
-    public TtsEngineSettingsFragment() {
-        super();
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.TTS_ENGINE_SETTINGS;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        addPreferencesFromResource(R.xml.tts_engine_settings);
-        mEnginesHelper = new TtsEngines(getActivity());
-
-        final PreferenceScreen root = getPreferenceScreen();
-        mLocalePreference = (ListPreference) root.findPreference(KEY_ENGINE_LOCALE);
-        mLocalePreference.setOnPreferenceChangeListener(this);
-        mEngineSettingsPreference = root.findPreference(KEY_ENGINE_SETTINGS);
-        mEngineSettingsPreference.setOnPreferenceClickListener(this);
-        mInstallVoicesPreference = root.findPreference(KEY_INSTALL_DATA);
-        mInstallVoicesPreference.setOnPreferenceClickListener(this);
-
-        root.setTitle(getEngineLabel());
-        root.setKey(getEngineName());
-        mEngineSettingsPreference.setTitle(getResources().getString(
-                R.string.tts_engine_settings_title, getEngineLabel()));
-
-        mEngineSettingsIntent = mEnginesHelper.getSettingsIntent(getEngineName());
-        if (mEngineSettingsIntent == null) {
-            mEngineSettingsPreference.setEnabled(false);
-        }
-        mInstallVoicesPreference.setEnabled(false);
-
-        if (savedInstanceState == null) {
-            mLocalePreference.setEnabled(false);
-            mLocalePreference.setEntries(new CharSequence[0]);
-            mLocalePreference.setEntryValues(new CharSequence[0]);
-        } else {
-            // Repopulate mLocalePreference with saved state. Will be updated later with
-            // up-to-date values when checkTtsData() calls back with results.
-            final CharSequence[] entries =
-                    savedInstanceState.getCharSequenceArray(STATE_KEY_LOCALE_ENTRIES);
-            final CharSequence[] entryValues =
-                    savedInstanceState.getCharSequenceArray(STATE_KEY_LOCALE_ENTRY_VALUES);
-            final CharSequence value =
-                    savedInstanceState.getCharSequence(STATE_KEY_LOCALE_VALUE);
-
-            mLocalePreference.setEntries(entries);
-            mLocalePreference.setEntryValues(entryValues);
-            mLocalePreference.setValue(value != null ? value.toString() : null);
-            mLocalePreference.setEnabled(entries.length > 0);
-        }
-
-        mVoiceDataDetails = getArguments().getParcelable(TtsEnginePreference.FRAGMENT_ARGS_VOICES);
-
-        mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener,
-                getEngineName());
-
-        // Check if data packs changed
-        checkTtsData();
-
-        getActivity().registerReceiver(mLanguagesChangedReceiver,
-                new IntentFilter(TextToSpeech.Engine.ACTION_TTS_DATA_INSTALLED));
-    }
-
-    @Override
-    public void onDestroy() {
-        getActivity().unregisterReceiver(mLanguagesChangedReceiver);
-        mTts.shutdown();
-        super.onDestroy();
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-
-        // Save the mLocalePreference values, so we can repopulate it with entries.
-        outState.putCharSequenceArray(STATE_KEY_LOCALE_ENTRIES,
-                mLocalePreference.getEntries());
-        outState.putCharSequenceArray(STATE_KEY_LOCALE_ENTRY_VALUES,
-                mLocalePreference.getEntryValues());
-        outState.putCharSequence(STATE_KEY_LOCALE_VALUE,
-                mLocalePreference.getValue());
-    }
-
-    private final void checkTtsData() {
-        Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
-        intent.setPackage(getEngineName());
-        try {
-            if (DBG) Log.d(TAG, "Updating engine: Checking voice data: " + intent.toUri(0));
-            startActivityForResult(intent, VOICE_DATA_INTEGRITY_CHECK);
-        } catch (ActivityNotFoundException ex) {
-            Log.e(TAG, "Failed to check TTS data, no activity found for " + intent + ")");
-        }
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == VOICE_DATA_INTEGRITY_CHECK) {
-            if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL) {
-                updateVoiceDetails(data);
-            } else {
-                Log.e(TAG, "CheckVoiceData activity failed");
-            }
-        }
-    }
-
-    private void updateVoiceDetails(Intent data) {
-        if (data == null){
-            Log.e(TAG, "Engine failed voice data integrity check (null return)" +
-                    mTts.getCurrentEngine());
-            return;
-        }
-        mVoiceDataDetails = data;
-
-        if (DBG) Log.d(TAG, "Parsing voice data details, data: " + mVoiceDataDetails.toUri(0));
-
-        final ArrayList<String> available = mVoiceDataDetails.getStringArrayListExtra(
-                TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
-        final ArrayList<String> unavailable = mVoiceDataDetails.getStringArrayListExtra(
-                TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
-
-        if (unavailable != null && unavailable.size() > 0) {
-            mInstallVoicesPreference.setEnabled(true);
-        } else {
-            mInstallVoicesPreference.setEnabled(false);
-        }
-
-        if (available == null){
-            Log.e(TAG, "TTS data check failed (available == null).");
-            mLocalePreference.setEnabled(false);
-            return;
-        } else {
-            updateDefaultLocalePref(available);
-        }
-    }
-
-    private void updateDefaultLocalePref(ArrayList<String> availableLangs) {
-        if (availableLangs == null || availableLangs.size() == 0) {
-            mLocalePreference.setEnabled(false);
-            return;
-        }
-        Locale currentLocale = null;
-        if (!mEnginesHelper.isLocaleSetToDefaultForEngine(getEngineName())) {
-            currentLocale = mEnginesHelper.getLocalePrefForEngine(getEngineName());
-        }
-
-        ArrayList<Pair<String, Locale>> entryPairs =
-                new ArrayList<Pair<String, Locale>>(availableLangs.size());
-        for (int i = 0; i < availableLangs.size(); i++) {
-            Locale locale = mEnginesHelper.parseLocaleString(availableLangs.get(i));
-            if (locale != null){
-                entryPairs.add(new Pair<String, Locale>(
-                        locale.getDisplayName(), locale));
-            }
-        }
-
-        // Sort it
-        Collections.sort(entryPairs, new Comparator<Pair<String, Locale>>() {
-            @Override
-            public int compare(Pair<String, Locale> lhs, Pair<String, Locale> rhs) {
-                return lhs.first.compareToIgnoreCase(rhs.first);
-            }
-        });
-
-        // Get two arrays out of one of pairs
-        mSelectedLocaleIndex = 0; // Will point to the R.string.tts_lang_use_system value
-        CharSequence[] entries = new CharSequence[availableLangs.size()+1];
-        CharSequence[] entryValues = new CharSequence[availableLangs.size()+1];
-
-        entries[0] = getActivity().getString(R.string.tts_lang_use_system);
-        entryValues[0] = "";
-
-        int i = 1;
-        for (Pair<String, Locale> entry : entryPairs) {
-            if (entry.second.equals(currentLocale)) {
-                mSelectedLocaleIndex = i;
-            }
-            entries[i] = entry.first;
-            entryValues[i++] = entry.second.toString();
-        }
-
-        mLocalePreference.setEntries(entries);
-        mLocalePreference.setEntryValues(entryValues);
-        mLocalePreference.setEnabled(true);
-        setLocalePreference(mSelectedLocaleIndex);
-    }
-
-    /** Set entry from entry table in mLocalePreference */
-    private void setLocalePreference(int index) {
-        if (index < 0) {
-            mLocalePreference.setValue("");
-            mLocalePreference.setSummary(R.string.tts_lang_not_selected);
-        } else {
-            mLocalePreference.setValueIndex(index);
-            mLocalePreference.setSummary(mLocalePreference.getEntries()[index]);
-        }
-    }
-
-    /**
-     * Ask the current default engine to launch the matching INSTALL_TTS_DATA activity
-     * so the required TTS files are properly installed.
-     */
-    private void installVoiceData() {
-        if (TextUtils.isEmpty(getEngineName())) return;
-        Intent intent = new Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
-        intent.setPackage(getEngineName());
-        try {
-            Log.v(TAG, "Installing voice data: " + intent.toUri(0));
-            startActivity(intent);
-        } catch (ActivityNotFoundException ex) {
-            Log.e(TAG, "Failed to install TTS data, no acitivty found for " + intent + ")");
-        }
-    }
-
-    @Override
-    public boolean onPreferenceClick(Preference preference) {
-        if (preference == mInstallVoicesPreference) {
-            installVoiceData();
-            return true;
-        } else if (preference == mEngineSettingsPreference) {
-            startActivity(mEngineSettingsIntent);
-            return true;
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        if (preference == mLocalePreference) {
-            String localeString = (String) newValue;
-            updateLanguageTo((!TextUtils.isEmpty(localeString) ?
-                    mEnginesHelper.parseLocaleString(localeString) : null));
-            return true;
-        }
-        return false;
-    }
-
-    private void updateLanguageTo(Locale locale) {
-        int selectedLocaleIndex = -1;
-        String localeString = (locale != null) ? locale.toString() : "";
-        for (int i=0; i < mLocalePreference.getEntryValues().length; i++) {
-            if (localeString.equalsIgnoreCase(mLocalePreference.getEntryValues()[i].toString())) {
-                selectedLocaleIndex = i;
-                break;
-            }
-        }
-
-        if (selectedLocaleIndex == -1) {
-            Log.w(TAG, "updateLanguageTo called with unknown locale argument");
-            return;
-        }
-        mLocalePreference.setSummary(mLocalePreference.getEntries()[selectedLocaleIndex]);
-        mSelectedLocaleIndex = selectedLocaleIndex;
-
-        mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale);
-
-        if (getEngineName().equals(mTts.getCurrentEngine())) {
-            // Null locale means "use system default"
-            mTts.setLanguage((locale != null) ? locale : Locale.getDefault());
-        }
-    }
-
-    private String getEngineName() {
-        return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_NAME);
-    }
-
-    private String getEngineLabel() {
-        return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_LABEL);
-    }
-}
diff --git a/src/com/android/settings/tts/TtsSlidersFragment.java b/src/com/android/settings/tts/TtsSlidersFragment.java
new file mode 100644
index 0000000..7fdbd62
--- /dev/null
+++ b/src/com/android/settings/tts/TtsSlidersFragment.java
@@ -0,0 +1,207 @@
+package com.android.settings.tts;
+
+import android.speech.tts.TextToSpeech;
+import com.android.settings.R;
+import android.os.Bundle;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import android.util.Log;
+import com.android.settings.SeekBarPreference;
+import android.support.v7.preference.Preference;
+import android.content.ContentResolver;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.BaseSearchIndexProvider;
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import java.util.List;
+import java.util.Arrays;
+
+import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
+import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
+
+public class TtsSlidersFragment extends SettingsPreferenceFragment
+        implements Preference.OnPreferenceChangeListener,
+                Preference.OnPreferenceClickListener,
+                Indexable {
+    private static final String TAG = TtsSlidersFragment.class.getSimpleName();
+    private static final boolean DBG = false;
+
+    /** Preference key for the TTS pitch selection slider. */
+    private static final String KEY_DEFAULT_PITCH = "tts_default_pitch";
+
+    /** Preference key for the TTS rate selection slider. */
+    private static final String KEY_DEFAULT_RATE = "tts_default_rate";
+
+    /** Preference key for the TTS reset speech rate preference. */
+    private static final String KEY_RESET_SPEECH_RATE = "reset_speech_rate";
+
+    /** Preference key for the TTS reset speech pitch preference. */
+    private static final String KEY_RESET_SPEECH_PITCH = "reset_speech_pitch";
+
+    /**
+     * Speech rate value. This value should be kept in sync with the max value set in tts_settings
+     * xml.
+     */
+    private static final int MAX_SPEECH_RATE = 600;
+
+    private static final int MIN_SPEECH_RATE = 10;
+
+    /**
+     * Speech pitch value. TTS pitch value varies from 25 to 400, where 100 is the value for normal
+     * pitch. The max pitch value is set to 400, based on feedback from users and the GoogleTTS
+     * pitch variation range. The range for pitch is not set in stone and should be readjusted based
+     * on user need. This value should be kept in sync with the max value set in tts_settings xml.
+     */
+    private static final int MAX_SPEECH_PITCH = 400;
+
+    private static final int MIN_SPEECH_PITCH = 25;
+
+    private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
+    private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
+
+    private SeekBarPreference mDefaultPitchPref;
+    private SeekBarPreference mDefaultRatePref;
+    private Preference mResetSpeechRate;
+    private Preference mResetSpeechPitch;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.tts_sliders);
+
+        mResetSpeechRate = findPreference(KEY_RESET_SPEECH_RATE);
+        mResetSpeechRate.setOnPreferenceClickListener(this);
+        mResetSpeechPitch = findPreference(KEY_RESET_SPEECH_PITCH);
+        mResetSpeechPitch.setOnPreferenceClickListener(this);
+
+        mDefaultPitchPref = (SeekBarPreference) findPreference(KEY_DEFAULT_PITCH);
+        mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
+
+        initSettings();
+    }
+
+    private void initSettings() {
+        final ContentResolver resolver = getContentResolver();
+        // Set up the default rate and pitch.
+        mDefaultRate =
+                android.provider.Settings.Secure.getInt(
+                        resolver, TTS_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
+        mDefaultPitch =
+                android.provider.Settings.Secure.getInt(
+                        resolver, TTS_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
+
+        mDefaultRatePref.setProgress(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, mDefaultRate));
+        mDefaultRatePref.setOnPreferenceChangeListener(this);
+        mDefaultRatePref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_RATE, MAX_SPEECH_RATE));
+
+        mDefaultPitchPref.setProgress(
+                getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, mDefaultPitch));
+        mDefaultPitchPref.setOnPreferenceChangeListener(this);
+        mDefaultPitchPref.setMax(getSeekBarProgressFromValue(KEY_DEFAULT_PITCH, MAX_SPEECH_PITCH));
+    }
+
+    /**
+     * The minimum speech pitch/rate value should be > 0 but the minimum value of a seekbar in
+     * android is fixed at 0. Therefore, we increment the seekbar progress with MIN_SPEECH_VALUE so
+     * that the minimum seekbar progress value is MIN_SPEECH_PITCH/RATE. SPEECH_VALUE =
+     * MIN_SPEECH_VALUE + SEEKBAR_PROGRESS
+     */
+    private int getValueFromSeekBarProgress(String preferenceKey, int progress) {
+        if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
+            return MIN_SPEECH_RATE + progress;
+        } else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
+            return MIN_SPEECH_PITCH + progress;
+        }
+        return progress;
+    }
+
+    /**
+     * Since we are appending the MIN_SPEECH value to the speech seekbar progress, the speech
+     * seekbar progress should be set to (speechValue - MIN_SPEECH value).
+     */
+    private int getSeekBarProgressFromValue(String preferenceKey, int value) {
+        if (preferenceKey.equals(KEY_DEFAULT_RATE)) {
+            return value - MIN_SPEECH_RATE;
+        } else if (preferenceKey.equals(KEY_DEFAULT_PITCH)) {
+            return value - MIN_SPEECH_PITCH;
+        }
+        return value;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        if (KEY_DEFAULT_RATE.equals(preference.getKey())) {
+            updateSpeechRate((Integer) objValue);
+        } else if (KEY_DEFAULT_PITCH.equals(preference.getKey())) {
+            updateSpeechPitchValue((Integer) objValue);
+        }
+        return true;
+    }
+
+    /** Called when mPlayExample, mResetSpeechRate or mResetSpeechPitch is clicked. */
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        if (preference == mResetSpeechRate) {
+            int speechRateSeekbarProgress =
+                    getSeekBarProgressFromValue(KEY_DEFAULT_RATE, TextToSpeech.Engine.DEFAULT_RATE);
+            mDefaultRatePref.setProgress(speechRateSeekbarProgress);
+            updateSpeechRate(speechRateSeekbarProgress);
+            return true;
+        } else if (preference == mResetSpeechPitch) {
+            int pitchSeekbarProgress =
+                    getSeekBarProgressFromValue(
+                            KEY_DEFAULT_PITCH, TextToSpeech.Engine.DEFAULT_PITCH);
+            mDefaultPitchPref.setProgress(pitchSeekbarProgress);
+            updateSpeechPitchValue(pitchSeekbarProgress);
+            return true;
+        }
+        return false;
+    }
+
+    private void updateSpeechRate(int speechRateSeekBarProgress) {
+        mDefaultRate = getValueFromSeekBarProgress(KEY_DEFAULT_RATE, speechRateSeekBarProgress);
+        try {
+            android.provider.Settings.Secure.putInt(
+                    getContentResolver(), TTS_DEFAULT_RATE, mDefaultRate);
+            if (DBG) Log.d(TAG, "TTS default rate changed, now " + mDefaultRate);
+        } catch (NumberFormatException e) {
+            Log.e(TAG, "could not persist default TTS rate setting", e);
+        }
+        return;
+    }
+
+    private void updateSpeechPitchValue(int speechPitchSeekBarProgress) {
+        mDefaultPitch = getValueFromSeekBarProgress(KEY_DEFAULT_PITCH, speechPitchSeekBarProgress);
+        try {
+            android.provider.Settings.Secure.putInt(
+                    getContentResolver(), TTS_DEFAULT_PITCH, mDefaultPitch);
+            if (DBG) Log.d(TAG, "TTS default pitch changed, now" + mDefaultPitch);
+        } catch (NumberFormatException e) {
+            Log.e(TAG, "could not persist default TTS pitch setting", e);
+        }
+        return;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.TTS_SLIDERS;
+    }
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(
+                        Context context, boolean enabled) {
+                    Log.i(TAG, "Indexing");
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.tts_sliders;
+                    return Arrays.asList(sir);
+                }
+            };
+}
diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java
index cf748e4..5aa10b9 100644
--- a/src/com/android/settings/vpn2/ConfigDialogFragment.java
+++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java
@@ -249,8 +249,7 @@
             if (!isConnected(profile)) {
                 return true;
             }
-            VpnUtils.clearLockdownVpn(mContext);
-            return mService.prepareVpn(null, VpnConfig.LEGACY_VPN, UserHandle.myUserId());
+            return VpnUtils.disconnectLegacyVpn(getContext());
         } catch (RemoteException e) {
             Log.e(TAG, "Failed to disconnect", e);
             return false;
diff --git a/src/com/android/settings/vpn2/VpnUtils.java b/src/com/android/settings/vpn2/VpnUtils.java
index c9f971d..a36cce8 100644
--- a/src/com/android/settings/vpn2/VpnUtils.java
+++ b/src/com/android/settings/vpn2/VpnUtils.java
@@ -23,7 +23,9 @@
 import android.provider.Settings;
 import android.security.Credentials;
 import android.security.KeyStore;
+import android.util.Log;
 
+import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
 
 /**
@@ -32,6 +34,9 @@
  * Keystore methods should only be called in system user
  */
 public class VpnUtils {
+
+    private static final String TAG = "VpnUtils";
+
     public static String getLockdownVpn() {
         final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN);
         return value == null ? null : new String(value);
@@ -86,4 +91,20 @@
     public static boolean isAlwaysOnVpnSet(ConnectivityManagerWrapper cm, final int userId) {
         return cm.getAlwaysOnVpnPackageForUser(userId) != null;
     }
+
+    public static boolean disconnectLegacyVpn(Context context) {
+        try {
+            int userId = context.getUserId();
+            IConnectivityManager connectivityService = getIConnectivityManager();
+            LegacyVpnInfo currentLegacyVpn = connectivityService.getLegacyVpnInfo(userId);
+            if (currentLegacyVpn != null) {
+                clearLockdownVpn(context);
+                connectivityService.prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
+                return true;
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Legacy VPN could not be disconnected", e);
+        }
+        return false;
+    }
 }
diff --git a/src/com/android/settings/webview/UserPackageWrapper.java b/src/com/android/settings/webview/UserPackageWrapper.java
new file mode 100644
index 0000000..8fbb10c
--- /dev/null
+++ b/src/com/android/settings/webview/UserPackageWrapper.java
@@ -0,0 +1,33 @@
+/*
+ * 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.webview;
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.UserInfo;
+import android.webkit.UserPackage;
+
+import java.util.List;
+
+/**
+ * Wrapper class around android.webkit.UserPackage - to be able to use UserPackage in Robolectric
+ * tests (such tests currently don't support mocking hidden classes).
+ */
+interface UserPackageWrapper {
+    UserInfo getUserInfo();
+    PackageInfo getPackageInfo();
+    boolean isEnabledPackage();
+    boolean isInstalledPackage();
+}
diff --git a/src/com/android/settings/webview/UserPackageWrapperImpl.java b/src/com/android/settings/webview/UserPackageWrapperImpl.java
new file mode 100644
index 0000000..1ea7c2e
--- /dev/null
+++ b/src/com/android/settings/webview/UserPackageWrapperImpl.java
@@ -0,0 +1,50 @@
+/*
+ * 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.webview;
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.UserInfo;
+import android.webkit.UserPackage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Default implementation of UserPackageWrapper.
+ */
+class UserPackageWrapperImpl implements UserPackageWrapper {
+    private final UserPackage mUserPackage;
+
+    UserPackageWrapperImpl(UserPackage userPackage) {
+        mUserPackage = userPackage;
+    }
+
+    public UserInfo getUserInfo() {
+        return mUserPackage.getUserInfo();
+    }
+
+    public PackageInfo getPackageInfo() {
+        return mUserPackage.getPackageInfo();
+    }
+
+    public boolean isEnabledPackage() {
+        return mUserPackage.isEnabledPackage();
+    }
+
+    public boolean isInstalledPackage() {
+        return mUserPackage.isInstalledPackage();
+    }
+}
diff --git a/src/com/android/settings/webview/WebViewAppListAdapter.java b/src/com/android/settings/webview/WebViewAppListAdapter.java
new file mode 100644
index 0000000..4c36a47
--- /dev/null
+++ b/src/com/android/settings/webview/WebViewAppListAdapter.java
@@ -0,0 +1,138 @@
+/*
+ * 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.webview;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.RemoteException;
+import android.graphics.Color;
+import android.support.annotation.VisibleForTesting;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+
+import com.android.settings.applications.AppViewHolder;
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Custom list adapter for Settings to choose WebView package.
+ * Note: parts of this class are copied from AppPicker.java.
+ */
+class WebViewAppListAdapter extends ArrayAdapter<WebViewApplicationInfo> {
+    private final LayoutInflater mInflater;
+    private final String mCurrentWebViewPackageName;
+
+    public WebViewAppListAdapter(Context context,
+            WebViewUpdateServiceWrapper webviewUpdateServiceWrapper) {
+        super(context, 0);
+        mInflater = LayoutInflater.from(context);
+
+        final List<WebViewApplicationInfo> packageInfoList =
+                new ArrayList<WebViewApplicationInfo>();
+        List<ApplicationInfo> pkgs =
+                webviewUpdateServiceWrapper.getValidWebViewApplicationInfos(getContext());
+        for (ApplicationInfo ai : pkgs) {
+            WebViewApplicationInfo info = new WebViewApplicationInfo(ai,
+                    ai.loadLabel(context.getPackageManager()).toString(),
+                    getDisabledReason(webviewUpdateServiceWrapper, context, ai.packageName));
+            packageInfoList.add(info);
+        }
+        addAll(packageInfoList);
+
+        PackageInfo currentWebViewPackage = webviewUpdateServiceWrapper.getCurrentWebViewPackage();
+        mCurrentWebViewPackageName =
+                currentWebViewPackage == null ? null : currentWebViewPackage.packageName;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        // A ViewHolder keeps references to children views to avoid unnecessary calls
+        // to findViewById() on each row.
+        AppViewHolder holder = AppViewHolder.createOrRecycle(mInflater, convertView);
+        convertView = holder.rootView;
+        WebViewApplicationInfo info = getItem(position);
+        holder.appName.setText(info.label);
+        if (info.info != null) {
+            holder.appIcon.setImageDrawable(info.info.loadIcon(getContext().getPackageManager()));
+            // Allow disable-description to wrap - to be able to show several lines of text in case
+            // a package is disabled/uninstalled for several users.
+            holder.summary.setSingleLine(false);
+            if (!isEnabled(position)) {
+                holder.summary.setText(info.disabledReason);
+            } else {
+                holder.summary.setText("");
+            }
+        } else {
+            holder.appIcon.setImageDrawable(null);
+            holder.summary.setText("");
+        }
+        holder.disabled.setVisibility(View.GONE);
+        // Only allow a package to be chosen if it is enabled and installed for all users.
+        convertView.setEnabled(isEnabled(position));
+        if (info.info.packageName.equals(mCurrentWebViewPackageName)) {
+            convertView.setBackgroundColor(Color.GRAY);
+        } else {
+            convertView.setBackgroundColor(Color.WHITE);
+        }
+        return convertView;
+    }
+
+    @Override
+    public boolean isEnabled (int position) {
+        WebViewApplicationInfo info = getItem(position);
+        return info.disabledReason == null;
+    }
+
+    @Override
+    public boolean areAllItemsEnabled() {
+        int numItems = getCount();
+        for (int n = 0; n < numItems; n++) {
+            if (!isEnabled(n)) return false;
+        }
+        return true;
+    }
+
+    /**
+     * Returns the reason why a package cannot be used as WebView implementation.
+     * This is either because of it being disabled, uninstalled, or hidden for any user.
+     */
+    @VisibleForTesting
+    static String getDisabledReason(WebViewUpdateServiceWrapper webviewUpdateServiceWrapper,
+            Context context, String packageName) {
+        StringBuilder disabledReason = new StringBuilder();
+        List<UserPackageWrapper> userPackages =
+                webviewUpdateServiceWrapper.getPackageInfosAllUsers(context, packageName);
+        for (UserPackageWrapper userPackage : userPackages) {
+            if (!userPackage.isInstalledPackage()) {
+                // Package uninstalled/hidden
+                disabledReason.append(context.getString(
+                        R.string.webview_uninstalled_for_user, userPackage.getUserInfo().name));
+            } else if (!userPackage.isEnabledPackage()) {
+                // Package disabled
+                disabledReason.append(context.getString(
+                    R.string.webview_disabled_for_user, userPackage.getUserInfo().name));
+            }
+        }
+        if (disabledReason.length() == 0) return null;
+        return disabledReason.toString();
+    }
+}
+
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
new file mode 100644
index 0000000..2417b00
--- /dev/null
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -0,0 +1,95 @@
+/*
+ * 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.webview;
+
+import android.app.ListActivity;
+import android.content.pm.PackageInfo;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+import android.view.View;
+import android.webkit.WebViewFactory;
+import android.widget.ListView;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.core.instrumentation.Instrumentable;
+import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
+
+public class WebViewAppPicker extends ListActivity implements Instrumentable {
+    private static final String TAG = WebViewAppPicker.class.getSimpleName();
+    private WebViewAppListAdapter mAdapter;
+    private WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
+
+    private final VisibilityLoggerMixin mVisibilityLoggerMixin =
+            new VisibilityLoggerMixin(getMetricsCategory());
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        if (mWebViewUpdateServiceWrapper == null) {
+            setWebViewUpdateServiceWrapper(createDefaultWebViewUpdateServiceWrapper());
+        }
+        mAdapter = new WebViewAppListAdapter(this, mWebViewUpdateServiceWrapper);
+        setListAdapter(mAdapter);
+
+        mVisibilityLoggerMixin.onAttach(this);
+    }
+
+    @Override
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        WebViewApplicationInfo app = mAdapter.getItem(position);
+
+        if (mWebViewUpdateServiceWrapper.setWebViewProvider(app.info.packageName)) {
+            Intent intent = new Intent();
+            intent.setAction(app.info.packageName);
+            setResult(RESULT_OK, intent);
+        } else {
+            mWebViewUpdateServiceWrapper.showInvalidChoiceToast(this);
+        }
+        finish();
+    }
+
+    private WebViewUpdateServiceWrapper createDefaultWebViewUpdateServiceWrapper() {
+        return new WebViewUpdateServiceWrapper();
+    }
+
+    @VisibleForTesting
+    void setWebViewUpdateServiceWrapper(WebViewUpdateServiceWrapper wvusWrapper) {
+        mWebViewUpdateServiceWrapper = wvusWrapper;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mVisibilityLoggerMixin.onResume();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mVisibilityLoggerMixin.onPause();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.WEBVIEW_IMPLEMENTATION;
+    }
+}
diff --git a/src/com/android/settings/webview/WebViewAppPreferenceController.java b/src/com/android/settings/webview/WebViewAppPreferenceController.java
new file mode 100644
index 0000000..cfb358e
--- /dev/null
+++ b/src/com/android/settings/webview/WebViewAppPreferenceController.java
@@ -0,0 +1,104 @@
+/*
+ * 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.webview;
+
+import android.app.Activity;
+import android.content.pm.PackageInfo;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.DevelopmentSettings;
+import com.android.settings.core.PreferenceController;
+
+public class WebViewAppPreferenceController extends PreferenceController {
+
+    private static final String WEBVIEW_APP_KEY = "select_webview_provider";
+
+    private Context mContext;
+    private Preference mPreference;
+    private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
+
+    public WebViewAppPreferenceController(Context context) {
+        this(context, new WebViewUpdateServiceWrapper());
+    }
+
+    public WebViewAppPreferenceController(Context context,
+            WebViewUpdateServiceWrapper webviewUpdateServiceWrapper) {
+        super(context);
+        mContext = context;
+        mWebViewUpdateServiceWrapper = webviewUpdateServiceWrapper;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (getPreferenceKey().equals(preference.getKey())) {
+            return true;
+        }
+        return false;
+    }
+
+    public Intent getActivityIntent() {
+        return new Intent(mContext, WebViewAppPicker.class);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mPreference.setSummary(getCurrentWebViewPackageLabel(mContext));
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (isAvailable()) {
+            mPreference = screen.findPreference(WEBVIEW_APP_KEY);
+        }
+    }
+
+    /**
+     * Handle the return-value from the WebViewAppPicker Activity.
+     */
+    public void onActivityResult(int resultCode, Intent data) {
+        // Update the preference summary no matter whether we succeeded to change the webview
+        // implementation correctly - we might have changed implementation to one the user did not
+        // choose.
+        updateState(null);
+    }
+
+    private String getCurrentWebViewPackageLabel(Context context) {
+        PackageInfo webViewPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage();
+        if (webViewPackage == null) return "";
+        return webViewPackage.applicationInfo.loadLabel(context.getPackageManager()).toString();
+    }
+
+
+    @Override
+    public String getPreferenceKey() {
+        return WEBVIEW_APP_KEY;
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    public void enablePreference(boolean enabled) {
+        if (isAvailable()) {
+            mPreference.setEnabled(enabled);
+        }
+    }
+}
diff --git a/src/com/android/settings/webview/WebViewApplicationInfo.java b/src/com/android/settings/webview/WebViewApplicationInfo.java
new file mode 100644
index 0000000..6879c59
--- /dev/null
+++ b/src/com/android/settings/webview/WebViewApplicationInfo.java
@@ -0,0 +1,29 @@
+/*
+ * 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.webview;
+
+import android.content.pm.ApplicationInfo;
+
+final class WebViewApplicationInfo {
+    final ApplicationInfo info;
+    final String label;
+    final String disabledReason;
+
+    public WebViewApplicationInfo(ApplicationInfo info, String label, String disabledReason) {
+        this.info = info;
+        this.label = label;
+        this.disabledReason = disabledReason;
+    }
+}
diff --git a/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
new file mode 100644
index 0000000..b40be19
--- /dev/null
+++ b/src/com/android/settings/webview/WebViewUpdateServiceWrapper.java
@@ -0,0 +1,113 @@
+/*
+ * 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.webview;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.RemoteException;
+import android.util.Log;
+import android.webkit.UserPackage;
+import android.webkit.WebViewFactory;
+import android.webkit.WebViewProviderInfo;
+import android.widget.Toast;
+
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class WebViewUpdateServiceWrapper {
+    private static final String TAG = "WVUSWrapper";
+
+    public WebViewUpdateServiceWrapper() {}
+
+    /**
+     * Fetch the package currently used as WebView implementation.
+     */
+    public PackageInfo getCurrentWebViewPackage() {
+        try {
+            return WebViewFactory.getUpdateService().getCurrentWebViewPackage();
+        } catch (RemoteException e) {
+            Log.e(TAG, e.toString());
+        }
+        return null;
+    }
+
+    /**
+     * Fetches ApplicationInfo objects for all currently valid WebView packages.
+     * A WebView package is considered valid if it can be used as a WebView implementation. The
+     * validity of a package is not dependent on whether the package is installed/enabled.
+     */
+    public List<ApplicationInfo> getValidWebViewApplicationInfos(Context context) {
+        WebViewProviderInfo[] providers = null;
+        try {
+            providers = WebViewFactory.getUpdateService().getValidWebViewPackages();
+        } catch (RemoteException e) {
+        }
+        List<ApplicationInfo> pkgs = new ArrayList<>();
+        for (WebViewProviderInfo provider : providers) {
+            try {
+                pkgs.add(context.getPackageManager().getApplicationInfo(
+                        provider.packageName, PACKAGE_FLAGS));
+            } catch (PackageManager.NameNotFoundException e) {
+            }
+        }
+        return pkgs;
+    }
+
+    /**
+     * Change WebView provider to {@param packageName}.
+     * @return whether the change succeeded.
+     */
+    public boolean setWebViewProvider(String packageName) {
+        try {
+            return packageName.equals(
+                    WebViewFactory.getUpdateService().changeProviderAndSetting(packageName));
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException when trying to change provider to " + packageName, e);
+        }
+        return false;
+    }
+
+    /**
+     * Fetch PackageInfos for the package named {@param packageName} for all users on the device.
+     */
+    public List<UserPackageWrapper> getPackageInfosAllUsers(Context context, String packageName) {
+        List<UserPackageWrapper> userPackageWrappers = new ArrayList<>();
+        List<UserPackage> userPackages =
+                UserPackage.getPackageInfosAllUsers(context, packageName, PACKAGE_FLAGS);
+        for (UserPackage userPackage : userPackages) {
+            userPackageWrappers.add(new UserPackageWrapperImpl(userPackage));
+        }
+        return userPackageWrappers;
+    }
+
+    /**
+     * Show a toast to explain the chosen package can no longer be chosen.
+     */
+    public void showInvalidChoiceToast(Context context) {
+        // The user chose a package that became invalid since the list was last updated,
+        // show a Toast to explain the situation.
+        Toast toast = Toast.makeText(context,
+                R.string.select_webview_provider_toast_text, Toast.LENGTH_SHORT);
+        toast.show();
+    }
+
+    static final int PACKAGE_FLAGS = PackageManager.MATCH_ANY_USER;
+}
diff --git a/src/com/android/settings/widget/MasterSwitchController.java b/src/com/android/settings/widget/MasterSwitchController.java
new file mode 100644
index 0000000..f7253fd
--- /dev/null
+++ b/src/com/android/settings/widget/MasterSwitchController.java
@@ -0,0 +1,82 @@
+/*
+ * 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.widget;
+
+import android.support.v7.preference.Preference;
+import android.widget.Switch;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+/*
+ * The switch controller that is used to update the switch widget in the MasterSwitchPreference
+ * layout.
+ */
+public class MasterSwitchController extends SwitchWidgetController implements
+    Preference.OnPreferenceChangeListener {
+
+    private final MasterSwitchPreference mPreference;
+
+    public MasterSwitchController(MasterSwitchPreference preference) {
+        mPreference = preference;
+    }
+
+    @Override
+    public void updateTitle(boolean isChecked) {
+    }
+
+    @Override
+    public void startListening() {
+        mPreference.setOnPreferenceChangeListener(this);
+    }
+
+    @Override
+    public void stopListening() {
+        mPreference.setOnPreferenceChangeListener(null);
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        mPreference.setChecked(checked);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return mPreference.isChecked();
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mPreference.setSwitchEnabled(enabled);
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (mListener != null) {
+            return mListener.onSwitchToggled((Boolean) newValue);
+        }
+        return false;
+    }
+
+    @Override
+    public void setDisabledByAdmin(EnforcedAdmin admin) {
+        mPreference.setDisabledByAdmin(admin);
+    }
+
+    @Override
+    public Switch getSwitch() {
+        return mPreference.getSwitch();
+    }
+}
diff --git a/src/com/android/settings/widget/MasterSwitchPreference.java b/src/com/android/settings/widget/MasterSwitchPreference.java
new file mode 100644
index 0000000..4650730
--- /dev/null
+++ b/src/com/android/settings/widget/MasterSwitchPreference.java
@@ -0,0 +1,115 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.util.AttributeSet;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+
+import com.android.settings.R;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+/**
+ * A custom preference that provides inline switch toggle. It has a mandatory field for title, and
+ * optional fields for icon and sub-text.
+ */
+public class MasterSwitchPreference extends Preference {
+
+    private Switch mSwitch;
+    private boolean mChecked;
+
+    public MasterSwitchPreference(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init();
+    }
+
+    public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    public MasterSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public MasterSwitchPreference(Context context) {
+        super(context);
+        init();
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        if (mSwitch != null) {
+            mSwitch.setChecked(mChecked);
+            mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+                @Override
+                public void onCheckedChanged(CompoundButton button, boolean isChecked) {
+                    if (!callChangeListener(isChecked)) {
+                        button.setChecked(!isChecked);
+                    } else {
+                        persistBoolean(isChecked);
+                        mChecked = isChecked;
+                    }
+                }
+            });
+        }
+    }
+
+    public boolean isChecked() {
+        return mSwitch != null && mSwitch.isEnabled() && mChecked;
+    }
+
+    public void setChecked(boolean checked) {
+        mChecked = checked;
+        if (mSwitch != null) {
+            mSwitch.setChecked(checked);
+        }
+    }
+
+    public boolean isSwitchEnabled() {
+        return mSwitch != null && mSwitch.isEnabled();
+    }
+
+    public void setSwitchEnabled(boolean enabled) {
+        if (mSwitch != null) {
+            mSwitch.setEnabled(enabled);
+        }
+    }
+
+    /**
+     * If admin is not null, disables the switch.
+     * Otherwise, keep it enabled.
+     */
+    public void setDisabledByAdmin(EnforcedAdmin admin) {
+        setSwitchEnabled(admin == null);
+    }
+
+    public Switch getSwitch() {
+        return mSwitch;
+    }
+
+    private void init() {
+        setWidgetLayoutResource(R.layout.preference_widget_master_switch);
+    }
+}
diff --git a/src/com/android/settings/widget/SummaryUpdater.java b/src/com/android/settings/widget/SummaryUpdater.java
new file mode 100644
index 0000000..89752b9
--- /dev/null
+++ b/src/com/android/settings/widget/SummaryUpdater.java
@@ -0,0 +1,86 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+/**
+ * Helper class that listens to settings changes and notifies client when there is update in
+ * corresponding summary info.
+ */
+public abstract class SummaryUpdater {
+
+    protected final Context mContext;
+
+    private final OnSummaryChangeListener mListener;
+    private String mSummary;
+
+    /**
+     * Interface definition for a callback to be invoked when the summary has been changed.
+     */
+    public interface OnSummaryChangeListener {
+        /**
+         * Called when summary has changed.
+         *
+         * @param summary The new summary .
+         */
+        void onSummaryChanged(String summary);
+    }
+
+    /**
+     * Constructor
+     *
+     * @param context The Context the updater is running in, through which it can register broadcast
+     * receiver etc.
+     * @param listener The listener that would like to receive summary change notification.
+     *
+     */
+    public SummaryUpdater(Context context, OnSummaryChangeListener listener) {
+        mContext = context;
+        mListener = listener;
+    }
+
+    /**
+     * Notifies the listener when there is update in summary
+     */
+    protected void notifyChangeIfNeeded() {
+        String summary = getSummary();
+        if (!TextUtils.equals(mSummary, summary)) {
+            mSummary = summary;
+            if (mListener != null) {
+                mListener.onSummaryChanged(summary);
+            }
+        }
+    }
+
+    /**
+     * Starts/stops receiving updates on the summary.
+     *
+     * @param register true if we want to receive updates, false otherwise
+     */
+    public abstract void register(boolean register);
+
+    /**
+     * Gets the summary. Subclass should checks latest conditions and update the summary
+     * accordingly.
+     *
+     * @return  the latest summary text
+     */
+    protected abstract String getSummary();
+
+}
diff --git a/src/com/android/settings/widget/SwitchBarController.java b/src/com/android/settings/widget/SwitchBarController.java
new file mode 100644
index 0000000..624db2a
--- /dev/null
+++ b/src/com/android/settings/widget/SwitchBarController.java
@@ -0,0 +1,91 @@
+/*
+ * 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.widget;
+
+import android.widget.Switch;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+/*
+ * The switch controller that is used to update the switch widget in the SwitchBar layout.
+ */
+public class SwitchBarController extends SwitchWidgetController implements
+    SwitchBar.OnSwitchChangeListener {
+
+    private final SwitchBar mSwitchBar;
+
+    public SwitchBarController(SwitchBar switchBar) {
+        mSwitchBar = switchBar;
+    }
+
+    @Override
+    public void setupView() {
+        mSwitchBar.show();
+    }
+
+    @Override
+    public void teardownView() {
+        mSwitchBar.hide();
+    }
+
+    @Override
+    public void updateTitle(boolean isChecked) {
+        mSwitchBar.setTextViewLabel(isChecked);
+    }
+
+    @Override
+    public void startListening() {
+        mSwitchBar.addOnSwitchChangeListener(this);
+    }
+
+    @Override
+    public void stopListening() {
+        mSwitchBar.removeOnSwitchChangeListener(this);
+    }
+
+    @Override
+    public void setChecked(boolean checked) {
+        mSwitchBar.setChecked(checked);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return mSwitchBar.isChecked();
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mSwitchBar.setEnabled(enabled);
+    }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        if (mListener != null) {
+            mListener.onSwitchToggled(isChecked);
+        }
+    }
+
+    @Override
+    public void setDisabledByAdmin(EnforcedAdmin admin) {
+        mSwitchBar.setDisabledByAdmin(admin);
+    }
+
+    @Override
+    public Switch getSwitch() {
+        return mSwitchBar.getSwitch();
+    }
+
+}
diff --git a/src/com/android/settings/widget/SwitchWidgetController.java b/src/com/android/settings/widget/SwitchWidgetController.java
new file mode 100644
index 0000000..325a093
--- /dev/null
+++ b/src/com/android/settings/widget/SwitchWidgetController.java
@@ -0,0 +1,119 @@
+/*
+ * 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.widget;
+
+import android.widget.Switch;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+/*
+ * A controller class for general switch widget handling. We have different containers that provide
+ * different forms of switch layout. Provide a centralized control for updating the switch widget.
+ */
+public abstract class SwitchWidgetController {
+
+    protected OnSwitchChangeListener mListener;
+
+    /**
+     * Interface definition for a callback to be invoked when the switch has been toggled.
+     */
+    public interface OnSwitchChangeListener {
+        /**
+         * Called when the checked state of the Switch has changed.
+         *
+         * @param isChecked The new checked state of switchView.
+         *
+         * @return true to update the state of the switch with the new value.
+         */
+        boolean onSwitchToggled(boolean isChecked);
+    }
+
+    /**
+     * Perform any view setup.
+     */
+    public void setupView() {
+    }
+
+    /**
+     * Perform any view teardown.
+     */
+    public void teardownView() {
+    }
+
+    /**
+     * Set the callback to be invoked when the switch is toggled by the user (but before the
+     * internal state has been updated).
+     *
+     * @param listener the callback to be invoked
+     */
+    public void setListener(OnSwitchChangeListener listener) {
+        mListener = listener;
+    }
+
+    /**
+     * Update the preference title associated with the switch.
+     *
+     * @param isChecked whether the switch is currently checked
+     */
+    public abstract void updateTitle(boolean isChecked);
+
+    /**
+     * Start listening to switch toggling.
+     */
+    public abstract void startListening();
+
+    /**
+     * Stop listening to switch toggling.
+     */
+    public abstract void stopListening();
+
+    /**
+     * Set the checked state for the switch.
+     *
+     * @param checked whether the switch should be checked or not.
+     */
+    public abstract void setChecked(boolean checked);
+
+    /**
+     * Get the checked state for the switch.
+     *
+     * @return true if the switch is currently checked, false otherwise.
+     */
+    public abstract boolean isChecked();
+
+    /**
+     * Set the enabled state for the switch.
+     *
+     * @param enabled whether the switch should be enabled or not.
+     */
+    public abstract void setEnabled(boolean enabled);
+
+    /**
+     * Disable the switch based on the enforce admin.
+     *
+     * @param admin Details of the admin who enforced the restriction. If it
+     * is {@code null}, then this preference will be enabled. Otherwise, it will be disabled.
+     */
+    public abstract void setDisabledByAdmin(EnforcedAdmin admin);
+
+    /**
+     * Get the underlying switch widget.
+     *
+     * @return the switch widget.
+     */
+    public abstract Switch getSwitch();
+
+}
\ No newline at end of file
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 6cbdb29..682662a 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -15,8 +15,6 @@
  */
 package com.android.settings.wifi;
 
-import static android.content.Context.WIFI_SERVICE;
-
 import android.content.Context;
 import android.net.wifi.WifiManager;
 import android.provider.SearchIndexableResource;
@@ -32,6 +30,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static android.content.Context.WIFI_SERVICE;
+
 public class ConfigureWifiSettings extends DashboardFragment {
 
     private static final String TAG = "ConfigureWifiSettings";
@@ -44,12 +44,6 @@
     }
 
     @Override
-    protected String getCategoryKey() {
-        // We don't want to inject any external settings into this screen.
-        return null;
-    }
-
-    @Override
     protected String getLogTag() {
         return TAG;
     }
@@ -64,7 +58,6 @@
         mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new WifiInfoPreferenceController(context, getLifecycle(), mWifiManager));
-        controllers.add(new SavedNetworkPreferenceController(context, mWifiManager));
         controllers.add(new CellularFallbackPreferenceController(context));
         controllers.add(new AllowRecommendationPreferenceController(context));
         controllers.add(new NotifyOpenNetworksPreferenceController(context, getLifecycle()));
diff --git a/src/com/android/settings/wifi/LinkablePreference.java b/src/com/android/settings/wifi/LinkablePreference.java
new file mode 100644
index 0000000..6b1b87d
--- /dev/null
+++ b/src/com/android/settings/wifi/LinkablePreference.java
@@ -0,0 +1,119 @@
+/*
+ * 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.wifi;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.text.Spannable;
+import android.text.style.TextAppearanceSpan;
+import android.util.AttributeSet;
+import android.widget.TextView;
+import com.android.settings.LinkifyUtils;
+
+/**
+ * A preference with a title that can have linkable content on click.
+ */
+public class LinkablePreference extends Preference {
+
+    private LinkifyUtils.OnClickListener mClickListener;
+    private CharSequence mContentTitle;
+    private CharSequence mContentDescription;
+
+    public LinkablePreference(Context ctx, AttributeSet attrs, int defStyle) {
+        super(ctx, attrs, defStyle);
+        setSelectable(false);
+    }
+
+    public LinkablePreference(Context ctx, AttributeSet attrs) {
+        super(ctx, attrs);
+        setSelectable(false);
+    }
+
+    public LinkablePreference(Context ctx) {
+        super(ctx);
+        setSelectable(false);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder view) {
+        super.onBindViewHolder(view);
+
+        TextView textView = (TextView) view.findViewById(android.R.id.title);
+        if (textView == null || mContentTitle == null || mClickListener == null) {
+            return;
+        }
+
+        textView.setSingleLine(false);
+        StringBuilder contentBuilder = new StringBuilder().append(mContentTitle);
+        if (mContentDescription != null) {
+            contentBuilder.append("\n\n");
+            contentBuilder.append(mContentDescription);
+        }
+
+        boolean linked = LinkifyUtils.linkify(textView, contentBuilder, mClickListener);
+        if (linked && mContentTitle != null) {
+            // Embolden and enlarge the title.
+            Spannable boldSpan = (Spannable) textView.getText();
+            boldSpan.setSpan(
+                    new TextAppearanceSpan(
+                            getContext(), android.R.style.TextAppearance_Medium),
+                    0,
+                    mContentTitle.length(),
+                    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+            textView.setText(boldSpan);
+        }
+    }
+
+    /**
+     * Sets the linkable text for the Preference title.
+     * @param contentTitle text to set the Preference title.
+     * @param contentDescription description text to append underneath title, can be null.
+     * @param clickListener OnClickListener for the link portion of the text.
+     */
+    public void setText(
+            CharSequence contentTitle,
+            @Nullable CharSequence contentDescription,
+            LinkifyUtils.OnClickListener clickListener) {
+        mContentTitle = contentTitle;
+        mContentDescription = contentDescription;
+        mClickListener = clickListener;
+        // sets the title so that the title TextView is not hidden in super.onBindViewHolder()
+        super.setTitle(contentTitle);
+    }
+
+    /**
+     * Sets the title of the LinkablePreference. resets linkable text for reusability.
+     */
+    @Override
+    public void setTitle(int titleResId) {
+        mContentTitle = null;
+        mContentDescription = null;
+        super.setTitle(titleResId);
+    }
+
+    /**
+     * Sets the title of the LinkablePreference. resets linkable text for reusability.
+     */
+    @Override
+    public void setTitle(CharSequence title) {
+        mContentTitle = null;
+        mContentDescription = null;
+        super.setTitle(title);
+    }
+}
diff --git a/src/com/android/settings/wifi/SavedNetworkPreferenceController.java b/src/com/android/settings/wifi/SavedNetworkPreferenceController.java
deleted file mode 100644
index c3ad355..0000000
--- a/src/com/android/settings/wifi/SavedNetworkPreferenceController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.wifi;
-
-import android.content.Context;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-
-import com.android.settings.core.PreferenceController;
-
-import java.util.List;
-
-/**
- * {@link PreferenceController} that opens saved network subsetting.
- */
-public class SavedNetworkPreferenceController extends PreferenceController {
-
-    private static final String KEY_SAVED_NETWORKS = "saved_networks";
-
-    private final WifiManager mWifiManager;
-
-    public SavedNetworkPreferenceController(Context context, WifiManager wifiManager) {
-        super(context);
-        mWifiManager = wifiManager;
-    }
-
-    @Override
-    public boolean isAvailable() {
-        final List<WifiConfiguration> config = mWifiManager.getConfiguredNetworks();
-        return config != null && !config.isEmpty();
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return KEY_SAVED_NETWORKS;
-    }
-}
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
index a05e498..1ac94ea 100644
--- a/src/com/android/settings/wifi/WifiEnabler.java
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -29,23 +29,22 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
-import android.widget.Switch;
 import android.widget.Toast;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.search.Index;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.SwitchWidgetController;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.WirelessUtils;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
-public class WifiEnabler implements SwitchBar.OnSwitchChangeListener  {
+public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListener  {
 
-    private final SwitchBar mSwitchBar;
+    private final SwitchWidgetController mSwitchWidget;
     private final WifiManager mWifiManager;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
 
@@ -93,10 +92,11 @@
         }
     };
 
-    public WifiEnabler(Context context, SwitchBar switchBar,
+    public WifiEnabler(Context context, SwitchWidgetController switchWidget,
             MetricsFeatureProvider metricsFeatureProvider) {
         mContext = context;
-        mSwitchBar = switchBar;
+        mSwitchWidget = switchWidget;
+        mSwitchWidget.setListener(this);
         mMetricsFeatureProvider = metricsFeatureProvider;
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
 
@@ -105,25 +105,25 @@
         mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
         mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
 
-        setupSwitchBar();
+        setupSwitchController();
     }
 
-    public void setupSwitchBar() {
+    public void setupSwitchController() {
         final int state = mWifiManager.getWifiState();
         handleWifiStateChanged(state);
         if (!mListeningToOnSwitchChange) {
-            mSwitchBar.addOnSwitchChangeListener(this);
+            mSwitchWidget.startListening();
             mListeningToOnSwitchChange = true;
         }
-        mSwitchBar.show();
+        mSwitchWidget.setupView();
     }
 
-    public void teardownSwitchBar() {
+    public void teardownSwitchController() {
         if (mListeningToOnSwitchChange) {
-            mSwitchBar.removeOnSwitchChangeListener(this);
+            mSwitchWidget.stopListening();
             mListeningToOnSwitchChange = false;
         }
-        mSwitchBar.hide();
+        mSwitchWidget.teardownView();
     }
 
     public void resume(Context context) {
@@ -131,7 +131,7 @@
         // Wi-Fi state is sticky, so just let the receiver update UI
         mContext.registerReceiver(mReceiver, mIntentFilter);
         if (!mListeningToOnSwitchChange) {
-            mSwitchBar.addOnSwitchChangeListener(this);
+            mSwitchWidget.startListening();
             mListeningToOnSwitchChange = true;
         }
     }
@@ -139,45 +139,45 @@
     public void pause() {
         mContext.unregisterReceiver(mReceiver);
         if (mListeningToOnSwitchChange) {
-            mSwitchBar.removeOnSwitchChangeListener(this);
+            mSwitchWidget.stopListening();
             mListeningToOnSwitchChange = false;
         }
     }
 
     private void handleWifiStateChanged(int state) {
         // Clear any previous state
-        mSwitchBar.setDisabledByAdmin(null);
+        mSwitchWidget.setDisabledByAdmin(null);
 
         switch (state) {
             case WifiManager.WIFI_STATE_ENABLING:
-                mSwitchBar.setEnabled(false);
+                mSwitchWidget.setEnabled(false);
                 break;
             case WifiManager.WIFI_STATE_ENABLED:
                 setSwitchBarChecked(true);
-                mSwitchBar.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(true);
                 break;
             case WifiManager.WIFI_STATE_DISABLING:
-                mSwitchBar.setEnabled(false);
+                mSwitchWidget.setEnabled(false);
                 break;
             case WifiManager.WIFI_STATE_DISABLED:
                 setSwitchBarChecked(false);
-                mSwitchBar.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(false);
                 break;
             default:
                 setSwitchBarChecked(false);
-                mSwitchBar.setEnabled(true);
+                mSwitchWidget.setEnabled(true);
                 updateSearchIndex(false);
         }
-        if (mayDisableTethering(!mSwitchBar.isChecked())) {
+        if (mayDisableTethering(!mSwitchWidget.isChecked())) {
             if (RestrictedLockUtils.hasBaseUserRestriction(mContext,
                     UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) {
-                mSwitchBar.setEnabled(false);
+                mSwitchWidget.setEnabled(false);
             } else {
                 final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(mContext,
                     UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId());
-                mSwitchBar.setDisabledByAdmin(admin);
+                mSwitchWidget.setDisabledByAdmin(admin);
             }
         }
     }
@@ -193,7 +193,7 @@
 
     private void setSwitchBarChecked(boolean checked) {
         mStateMachineEvent = true;
-        mSwitchBar.setChecked(checked);
+        mSwitchWidget.setChecked(checked);
         mStateMachineEvent = false;
     }
 
@@ -214,17 +214,17 @@
     }
 
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+    public boolean onSwitchToggled(boolean isChecked) {
         //Do nothing if called as a result of a state machine event
         if (mStateMachineEvent) {
-            return;
+            return true;
         }
         // Show toast message if Wi-Fi is not allowed in airplane mode
         if (isChecked && !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_WIFI)) {
             Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
             // Reset switch to off. No infinite check/listenenr loop.
-            mSwitchBar.setChecked(false);
-            return;
+            mSwitchWidget.setChecked(false);
+            return false;
         }
 
         // Disable tethering if enabling Wifi
@@ -240,9 +240,10 @@
         }
         if (!mWifiManager.setWifiEnabled(isChecked)) {
             // Error
-            mSwitchBar.setEnabled(true);
+            mSwitchWidget.setEnabled(true);
             Toast.makeText(mContext, R.string.wifi_error, Toast.LENGTH_SHORT).show();
         }
+        return true;
     }
 
     private boolean mayDisableTethering(boolean isChecked) {
diff --git a/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java b/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
new file mode 100644
index 0000000..d72bb3e
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
@@ -0,0 +1,102 @@
+/*
+ * 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.wifi;
+
+import android.content.Context;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.lifecycle.events.OnPause;
+import com.android.settings.core.lifecycle.events.OnResume;
+import com.android.settings.core.lifecycle.events.OnStart;
+import com.android.settings.core.lifecycle.events.OnStop;
+import com.android.settings.widget.SummaryUpdater;
+import com.android.settings.widget.MasterSwitchPreference;
+import com.android.settings.widget.MasterSwitchController;
+
+public class WifiMasterSwitchPreferenceController extends PreferenceController
+        implements SummaryUpdater.OnSummaryChangeListener,
+        LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
+
+    private static final String KEY_TOGGLE_WIFI = "toggle_wifi";
+
+    private MasterSwitchPreference mWifiPreference;
+    private WifiEnabler mWifiEnabler;
+    private final WifiSummaryUpdater mSummaryHelper;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
+    public WifiMasterSwitchPreferenceController(Context context,
+            MetricsFeatureProvider metricsFeatureProvider) {
+        super(context);
+        mMetricsFeatureProvider = metricsFeatureProvider;
+        mSummaryHelper = new WifiSummaryUpdater(mContext, this);
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mWifiPreference = (MasterSwitchPreference) screen.findPreference(KEY_TOGGLE_WIFI);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return true;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY_TOGGLE_WIFI;
+    }
+
+    @Override
+    public void onResume() {
+        mSummaryHelper.register(true);
+        if (mWifiEnabler != null) {
+            mWifiEnabler.resume(mContext);
+        }
+    }
+
+    @Override
+    public void onPause() {
+        if (mWifiEnabler != null) {
+            mWifiEnabler.pause();
+        }
+        mSummaryHelper.register(false);
+    }
+
+    @Override
+    public void onStart() {
+        mWifiEnabler = new WifiEnabler(mContext, new MasterSwitchController(mWifiPreference),
+            mMetricsFeatureProvider);
+    }
+
+    @Override
+    public void onStop() {
+        if (mWifiEnabler != null) {
+            mWifiEnabler.teardownSwitchController();
+        }
+    }
+
+    @Override
+    public void onSummaryChanged(String summary) {
+        if (mWifiPreference != null) {
+            mWifiPreference.setSummary(summary);
+        }
+    }
+
+}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 1dd18bd..fd31761 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -19,12 +19,10 @@
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
@@ -39,12 +37,12 @@
 import android.os.HandlerThread;
 import android.os.Process;
 import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceViewHolder;
-import android.text.Spannable;
 import android.text.TextUtils;
-import android.text.style.TextAppearanceSpan;
 import android.util.Log;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
@@ -53,8 +51,6 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.TextView.BufferType;
 import android.widget.Toast;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -67,11 +63,12 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
+import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
+import com.android.settings.widget.SwitchBarController;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
 import com.android.settingslib.wifi.AccessPointPreference;
-import com.android.settingslib.wifi.WifiStatusTracker;
 import com.android.settingslib.wifi.WifiTracker;
 
 import java.util.ArrayList;
@@ -102,7 +99,6 @@
     private static final int MENU_ID_FORGET = Menu.FIRST + 7;
     private static final int MENU_ID_MODIFY = Menu.FIRST + 8;
     private static final int MENU_ID_WRITE_NFC = Menu.FIRST + 9;
-    private static final int MENU_ID_CONFIGURE = Menu.FIRST + 10;
 
     public static final int WIFI_DIALOG_ID = 1;
     /* package */ static final int WPS_PBC_DIALOG_ID = 2;
@@ -115,6 +111,9 @@
     private static final String SAVED_WIFI_NFC_DIALOG_STATE = "wifi_nfc_dlg_state";
 
     private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
+    private static final String PREF_KEY_ACCESS_POINTS = "access_points";
+    private static final String PREF_KEY_ADDITIONAL_SETTINGS = "additional_settings";
+    private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
 
     protected WifiManager mWifiManager;
     private WifiManager.ActionListener mConnectListener;
@@ -152,7 +151,12 @@
     private HandlerThread mBgThread;
 
     private AccessPointPreference.UserBadgeCache mUserBadgeCache;
+
+    private PreferenceCategory mAccessPointsPreferenceCategory;
+    private PreferenceCategory mAdditionalSettingsPreferenceCategory;
     private Preference mAddPreference;
+    private Preference mSavedNetworksPreference;
+    private LinkablePreference mStatusMessagePreference;
 
     private MenuItem mScanMenuItem;
 
@@ -177,9 +181,18 @@
         getPreferenceManager().setPreferenceComparisonCallback(
                 new PreferenceManager.SimplePreferenceComparisonCallback());
         addPreferencesFromResource(R.xml.wifi_settings);
-        mAddPreference = new Preference(getContext());
+
+        mAccessPointsPreferenceCategory =
+                (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS);
+        mAdditionalSettingsPreferenceCategory =
+                (PreferenceCategory) findPreference(PREF_KEY_ADDITIONAL_SETTINGS);
+        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
+
+        Context prefContext = getPrefContext();
+        mAddPreference = new Preference(prefContext);
         mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
         mAddPreference.setTitle(R.string.wifi_add_network);
+        mStatusMessagePreference = new LinkablePreference(prefContext);
 
         mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
 
@@ -290,7 +303,7 @@
         super.onDestroyView();
 
         if (mWifiEnabler != null) {
-            mWifiEnabler.teardownSwitchBar();
+            mWifiEnabler.teardownSwitchController();
         }
     }
 
@@ -305,16 +318,16 @@
     /**
      * @return new WifiEnabler or null (as overridden by WifiSettingsForSetupWizard)
      */
-    /* package */ WifiEnabler createWifiEnabler() {
+    private WifiEnabler createWifiEnabler() {
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        return new WifiEnabler(activity, activity.getSwitchBar(), mMetricsFeatureProvider);
+        return new WifiEnabler(activity, new SwitchBarController(activity.getSwitchBar()),
+            mMetricsFeatureProvider);
     }
 
     @Override
     public void onResume() {
         final Activity activity = getActivity();
         super.onResume();
-        removePreference("dummy");
         if (mWifiEnabler != null) {
             mWifiEnabler.resume(activity);
         }
@@ -346,14 +359,13 @@
      * @param menu
      */
     void addOptionsMenuItems(Menu menu) {
-        final boolean wifiIsEnabled = mWifiTracker.isWifiEnabled();
-        mScanMenuItem = menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.menu_stats_refresh);
-        mScanMenuItem.setEnabled(wifiIsEnabled)
-               .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.wifi_menu_advanced)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-        menu.add(Menu.NONE, MENU_ID_CONFIGURE, 0, R.string.wifi_menu_configure)
-                .setIcon(R.drawable.ic_settings_24dp)
+
+        final boolean wifiIsEnabled = mWifiTracker.isWifiEnabled();
+        mScanMenuItem = menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.menu_stats_refresh)
+                .setIcon(com.android.internal.R.drawable.ic_menu_refresh);
+        mScanMenuItem.setEnabled(wifiIsEnabled)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
     }
 
@@ -424,18 +436,6 @@
                             null);
                 }
                 return true;
-            case MENU_ID_CONFIGURE:
-                if (getActivity() instanceof SettingsActivity) {
-                    ((SettingsActivity) getActivity()).startPreferencePanel(
-                            ConfigureWifiSettings.class.getCanonicalName(), null,
-                            R.string.wifi_configure_titlebar, null, this, 0);
-                } else {
-                    startFragment(this, ConfigureWifiSettings.class.getCanonicalName(),
-                            R.string.wifi_configure_titlebar, -1 /* Do not request a results */,
-                            null);
-                }
-                return true;
-
         }
         return super.onOptionsItemSelected(item);
     }
@@ -622,10 +622,10 @@
         // Safeguard from some delayed event handling
         if (getActivity() == null) return;
         if (isUiRestricted()) {
+            mAccessPointsPreferenceCategory.removeAll();
             if (!isUiRestrictedByOnlyAdmin()) {
                 addMessagePreference(R.string.wifi_empty_list_user_restricted);
             }
-            getPreferenceScreen().removeAll();
             return;
         }
         final int wifiState = mWifiManager.getWifiState();
@@ -638,7 +638,8 @@
 
                 boolean hasAvailableAccessPoints = false;
                 int index = 0;
-                cacheRemoveAllPrefs(getPreferenceScreen());
+                mAccessPointsPreferenceCategory.removePreference(mStatusMessagePreference);
+                cacheRemoveAllPrefs(mAccessPointsPreferenceCategory);
                 for (AccessPoint accessPoint : accessPoints) {
                     // Ignore access points that are out of range.
                     if (accessPoint.getLevel() != -1) {
@@ -665,12 +666,12 @@
                             onPreferenceTreeClick(preference);
                             mOpenSsid = null;
                         }
-                        getPreferenceScreen().addPreference(preference);
+                        mAccessPointsPreferenceCategory.addPreference(preference);
                         accessPoint.setListener(this);
                         preference.refresh();
                     }
                 }
-                removeCachedPrefs(getPreferenceScreen());
+                removeCachedPrefs(mAccessPointsPreferenceCategory);
                 if (!hasAvailableAccessPoints) {
                     setProgressBarVisible(true);
                     Preference pref = new Preference(getContext()) {
@@ -683,14 +684,16 @@
                     };
                     pref.setSelectable(false);
                     pref.setSummary(R.string.wifi_empty_list_wifi_on);
-                    pref.setOrder(0);
+                    pref.setOrder(index++);
                     pref.setKey(PREF_KEY_EMPTY_WIFI_LIST);
-                    getPreferenceScreen().addPreference(pref);
-                    mAddPreference.setOrder(1);
-                    getPreferenceScreen().addPreference(mAddPreference);
+                    mAccessPointsPreferenceCategory.addPreference(pref);
+                    mAddPreference.setOrder(index++);
+                    mAccessPointsPreferenceCategory.addPreference(mAddPreference);
+                    setSavedNetworkPreferenceVisibility();
                 } else {
                     mAddPreference.setOrder(index++);
-                    getPreferenceScreen().addPreference(mAddPreference);
+                    mAccessPointsPreferenceCategory.addPreference(mAddPreference);
+                    setSavedNetworkPreferenceVisibility();
                     setProgressBarVisible(false);
                 }
                 if (mScanMenuItem != null) {
@@ -699,7 +702,7 @@
                 break;
 
             case WifiManager.WIFI_STATE_ENABLING:
-                getPreferenceScreen().removeAll();
+                mAccessPointsPreferenceCategory.removeAll();
                 setProgressBarVisible(true);
                 break;
 
@@ -710,6 +713,7 @@
 
             case WifiManager.WIFI_STATE_DISABLED:
                 setOffMessage();
+                setSavedNetworkPreferenceVisibility();
                 setProgressBarVisible(false);
                 if (mScanMenuItem != null) {
                     mScanMenuItem.setEnabled(false);
@@ -718,17 +722,20 @@
         }
     }
 
+    private void setSavedNetworkPreferenceVisibility() {
+        if (mWifiTracker.doSavedNetworksExist()) {
+            mAdditionalSettingsPreferenceCategory.addPreference(mSavedNetworksPreference);
+        } else {
+            mAdditionalSettingsPreferenceCategory.removePreference(mSavedNetworksPreference);
+        }
+    }
+
     private void setOffMessage() {
         if (isUiRestricted()) {
             if (!isUiRestrictedByOnlyAdmin()) {
                 addMessagePreference(R.string.wifi_empty_list_user_restricted);
             }
-            getPreferenceScreen().removeAll();
-            return;
-        }
-
-        TextView emptyTextView = getEmptyTextView();
-        if (emptyTextView == null) {
+            mAccessPointsPreferenceCategory.removeAll();
             return;
         }
 
@@ -744,35 +751,27 @@
         if (!wifiScanningMode) {
             // Show only the brief text if the user is not allowed to configure scanning settings,
             // or the scanning mode has been turned off.
-            emptyTextView.setText(briefText, BufferType.SPANNABLE);
+            mStatusMessagePreference.setTitle(briefText);
         } else {
-            // Append the description of scanning settings with link.
-            final StringBuilder contentBuilder = new StringBuilder();
-            contentBuilder.append(briefText);
-            contentBuilder.append("\n\n");
-            contentBuilder.append(getText(R.string.wifi_scan_notify_text));
-            LinkifyUtils.linkify(emptyTextView, contentBuilder, new LinkifyUtils.OnClickListener() {
+            LinkifyUtils.OnClickListener clickListener = new LinkifyUtils.OnClickListener() {
                 @Override
                 public void onClick() {
-                    final SettingsActivity activity =
-                            (SettingsActivity) WifiSettings.this.getActivity();
+                    final SettingsActivity activity = (SettingsActivity) getActivity();
                     activity.startPreferencePanel(ScanningSettings.class.getName(), null,
                             R.string.location_scanning_screen_title, null, null, 0);
                 }
-            });
+            };
+            mStatusMessagePreference.setText(
+                    briefText, getText(R.string.wifi_scan_notify_text), clickListener);
         }
-        // Embolden and enlarge the brief description anyway.
-        Spannable boldSpan = (Spannable) emptyTextView.getText();
-        boldSpan.setSpan(
-                new TextAppearanceSpan(getActivity(), android.R.style.TextAppearance_Medium), 0,
-                briefText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-        getPreferenceScreen().removeAll();
+        mAccessPointsPreferenceCategory.removeAll();
+        mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference);
     }
 
     private void addMessagePreference(int messageId) {
-        TextView emptyTextView = getEmptyTextView();
-        if (emptyTextView != null) emptyTextView.setText(messageId);
-        getPreferenceScreen().removeAll();
+        mStatusMessagePreference.setTitle(messageId);
+        mAccessPointsPreferenceCategory.removeAll();
+        mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference);
     }
 
     protected void setProgressBarVisible(boolean visible) {
@@ -1004,46 +1003,30 @@
         return !isLockdownFeatureEnabled;
     }
 
-    private static class SummaryProvider extends BroadcastReceiver
-            implements SummaryLoader.SummaryProvider {
+    private static class SummaryProvider
+            implements SummaryLoader.SummaryProvider, OnSummaryChangeListener {
 
         private final Context mContext;
-        private final WifiManager mWifiManager;
-        private final WifiStatusTracker mWifiTracker;
         private final SummaryLoader mSummaryLoader;
 
+        @VisibleForTesting
+        WifiSummaryUpdater mSummaryHelper;
+
         public SummaryProvider(Context context, SummaryLoader summaryLoader) {
             mContext = context;
             mSummaryLoader = summaryLoader;
-            mWifiManager = context.getSystemService(WifiManager.class);
-            mWifiTracker = new WifiStatusTracker(mWifiManager);
+            mSummaryHelper = new WifiSummaryUpdater(mContext, this);
         }
 
-        private CharSequence getSummary() {
-            if (!mWifiTracker.enabled) {
-                return mContext.getString(R.string.wifi_disabled_generic);
-            }
-            if (!mWifiTracker.connected) {
-                return mContext.getString(R.string.disconnected);
-            }
-            return mWifiTracker.ssid;
-        }
 
         @Override
         public void setListening(boolean listening) {
-            if (listening) {
-                IntentFilter filter = new IntentFilter();
-                filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-                filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-                filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
-                mSummaryLoader.registerReceiver(this, filter);
-            }
+            mSummaryHelper.register(listening);
         }
 
         @Override
-        public void onReceive(Context context, Intent intent) {
-            mWifiTracker.handleBroadcast(intent);
-            mSummaryLoader.setSummary(this, getSummary());
+        public void onSummaryChanged(String summary) {
+            mSummaryLoader.setSummary(this, summary);
         }
     }
 
diff --git a/src/com/android/settings/wifi/WifiSummaryUpdater.java b/src/com/android/settings/wifi/WifiSummaryUpdater.java
new file mode 100644
index 0000000..533ee07
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiSummaryUpdater.java
@@ -0,0 +1,84 @@
+/*
+ * 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.wifi;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.wifi.WifiManager;
+import android.support.annotation.VisibleForTesting;
+import com.android.settings.R;
+import com.android.settings.widget.SummaryUpdater;
+import com.android.settingslib.wifi.WifiStatusTracker;
+
+/**
+ * Helper class that listeners to wifi callback and notify client when there is update in
+ * wifi summary info.
+ */
+public final class WifiSummaryUpdater extends SummaryUpdater {
+
+    private final WifiStatusTracker mWifiTracker;
+    private final BroadcastReceiver mReceiver;
+
+    private static final IntentFilter INTENT_FILTER;
+    static {
+        INTENT_FILTER = new IntentFilter();
+        INTENT_FILTER.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+        INTENT_FILTER.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+        INTENT_FILTER.addAction(WifiManager.RSSI_CHANGED_ACTION);
+    }
+
+    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener) {
+        this(context, listener, new WifiStatusTracker(context.getSystemService(WifiManager.class)));
+    }
+
+    @VisibleForTesting
+    public WifiSummaryUpdater(Context context, OnSummaryChangeListener listener,
+        WifiStatusTracker wifiTracker) {
+        super(context, listener);
+        mWifiTracker = wifiTracker;
+        mReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mWifiTracker.handleBroadcast(intent);
+                notifyChangeIfNeeded();
+            }
+        };
+    }
+
+    @Override
+    public void register(boolean register) {
+        if (register) {
+            mContext.registerReceiver(mReceiver, INTENT_FILTER);
+        } else {
+            mContext.unregisterReceiver(mReceiver);
+        }
+    }
+
+    @Override
+    public String getSummary() {
+        if (!mWifiTracker.enabled) {
+            return mContext.getString(R.string.wifi_disabled_generic);
+        }
+        if (!mWifiTracker.connected) {
+            return mContext.getString(R.string.disconnected);
+        }
+        return mWifiTracker.ssid;
+    }
+
+}
diff --git a/tests/app/Android.mk b/tests/app/Android.mk
index 979c27d..381006a 100644
--- a/tests/app/Android.mk
+++ b/tests/app/Android.mk
@@ -13,7 +13,8 @@
     espresso-core \
     espresso-contrib-nodep \
     espresso-intents-nodep \
-    ub-uiautomator
+    ub-uiautomator \
+    legacy-android-test
 
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/app/src/com/android/settings/CreateShortcutTest.java b/tests/app/src/com/android/settings/CreateShortcutTest.java
index 9481a64..4ae9bd7 100644
--- a/tests/app/src/com/android/settings/CreateShortcutTest.java
+++ b/tests/app/src/com/android/settings/CreateShortcutTest.java
@@ -16,29 +16,130 @@
 
 package com.android.settings;
 
-import android.app.Instrumentation;
-import android.content.Intent;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static android.support.test.espresso.matcher.ViewMatchers.withText;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Instrumentation;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Tests for {@link CreateShortcutTest}
+ *
+ m SettingsTests &&
+ adb install \
+ -r -g  ${ANDROID_PRODUCT_OUT}/data/app/SettingsTests/SettingsTests.apk &&
+ adb shell am instrument -e class com.android.settings.CreateShortcutTest \
+ -w com.android.settings.tests/android.support.test.runner.AndroidJUnitRunner
+ */
 @RunWith(AndroidJUnit4.class)
 @SmallTest
 public class CreateShortcutTest {
 
+    private static final String SHORTCUT_ID_PREFIX = CreateShortcut.SHORTCUT_ID_PREFIX;
+
+    private Instrumentation mInstrumentation;
+    private Context mContext;
+
+    @Mock ShortcutManager mShortcutManager;
+    @Captor ArgumentCaptor<List<ShortcutInfo>> mListCaptor;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mContext = mInstrumentation.getTargetContext();
+    }
+
     @Test
     public void test_layoutDoesNotHaveCancelButton() {
-        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
-        instrumentation.startActivitySync(new Intent(Intent.ACTION_CREATE_SHORTCUT)
-                .setClassName(instrumentation.getTargetContext(),
-                        CreateShortcut.class.getName()));
+        mInstrumentation.startActivitySync(new Intent(Intent.ACTION_CREATE_SHORTCUT)
+                .setClassName(mContext, CreateShortcut.class.getName()));
         onView(withText(R.string.cancel)).check(doesNotExist());
     }
+
+    @Test
+    public void createResultIntent() {
+        CreateShortcut orgActivity = (CreateShortcut) mInstrumentation.startActivitySync(
+                new Intent(Intent.ACTION_CREATE_SHORTCUT)
+                        .setClassName(mContext, CreateShortcut.class.getName()));
+        CreateShortcut activity = spy(orgActivity);
+        doReturn(mShortcutManager).when(activity).getSystemService(eq(Context.SHORTCUT_SERVICE));
+
+        when(mShortcutManager.createShortcutResultIntent(any(ShortcutInfo.class)))
+                .thenReturn(new Intent().putExtra("d1", "d2"));
+
+        Intent intent = CreateShortcut.getBaseIntent()
+                .setClass(activity, Settings.ManageApplicationsActivity.class);
+        ResolveInfo ri = activity.getPackageManager().resolveActivity(intent, 0);
+        Intent result = activity.createResultIntent(intent, ri, "dummy");
+        assertEquals("d2", result.getStringExtra("d1"));
+        assertNotNull(result.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT));
+
+        ArgumentCaptor<ShortcutInfo> infoCaptor = ArgumentCaptor.forClass(ShortcutInfo.class);
+        verify(mShortcutManager, times(1))
+                .createShortcutResultIntent(infoCaptor.capture());
+        String expectedId = SHORTCUT_ID_PREFIX + intent.getComponent().flattenToShortString();
+        assertEquals(expectedId, infoCaptor.getValue().getId());
+    }
+
+    @Test
+    public void shortcutsUpdateTask() {
+        mContext = spy(new ContextWrapper(mInstrumentation.getTargetContext()));
+        doReturn(mShortcutManager).when(mContext).getSystemService(eq(Context.SHORTCUT_SERVICE));
+
+        List<ShortcutInfo> pinnedShortcuts = Arrays.asList(
+                makeShortcut("d1"), makeShortcut("d2"),
+                makeShortcut(Settings.ManageApplicationsActivity.class),
+                makeShortcut("d3"),
+                makeShortcut(Settings.SoundSettingsActivity.class));
+        when(mShortcutManager.getPinnedShortcuts()).thenReturn(pinnedShortcuts);
+        new CreateShortcut.ShortcutsUpdateTask(mContext).doInBackground();
+
+        verify(mShortcutManager, times(1)).updateShortcuts(mListCaptor.capture());
+
+        List<ShortcutInfo> updates = mListCaptor.getValue();
+        assertEquals(2, updates.size());
+        assertEquals(pinnedShortcuts.get(2).getId(), updates.get(0).getId());
+        assertEquals(pinnedShortcuts.get(4).getId(), updates.get(1).getId());
+    }
+
+    private ShortcutInfo makeShortcut(Class<?> className) {
+        ComponentName cn = new ComponentName(mContext, className);
+        return makeShortcut(SHORTCUT_ID_PREFIX + cn.flattenToShortString());
+    }
+
+    private ShortcutInfo makeShortcut(String id) {
+        return new ShortcutInfo.Builder(mContext, id).build();
+    }
 }
diff --git a/tests/robotests/Android.mk b/tests/robotests/Android.mk
index 0a49be2..3fc034d 100644
--- a/tests/robotests/Android.mk
+++ b/tests/robotests/Android.mk
@@ -14,7 +14,8 @@
 LOCAL_JAVA_LIBRARIES := \
     junit \
     platform-robolectric-prebuilt \
-    sdk_vcurrent
+    sdk_vcurrent \
+    telephony-common
 
 LOCAL_INSTRUMENTATION_FOR := Settings
 LOCAL_MODULE := SettingsRoboTests
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index 81adf8b..33484d1 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -50,6 +50,7 @@
 com.android.settings.print.PrintJobSettingsFragment
 com.android.settings.applications.SpecialAccessSettings
 com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard
+com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard
 com.android.settings.accounts.AccountSyncSettings
 com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment
 com.android.settings.inputmethod.InputMethodAndSubtypeEnabler
@@ -89,4 +90,6 @@
 com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
 com.android.settings.applications.ConvertToFbe
 com.android.settings.localepicker.LocaleListEditor
-com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment
\ No newline at end of file
+com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment
+com.android.settings.applications.ExternalSourcesDetails
+com.android.settings.applications.PictureInPictureSettings
diff --git a/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java b/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java
new file mode 100644
index 0000000..42aed2b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.internal.logging.nano.MetricsProto;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DeviceAdminAddTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    private FakeFeatureFactory mFeatureFactory;
+    private DeviceAdminAdd mDeviceAdminAdd;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mDeviceAdminAdd = Robolectric.buildActivity(DeviceAdminAdd.class).get();
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mDeviceAdminAdd.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_ALLOW), eq("app"));
+
+        mDeviceAdminAdd.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_DENY), eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/SecuritySettingsTest.java b/tests/robotests/src/com/android/settings/SecuritySettingsTest.java
new file mode 100644
index 0000000..92214e3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/SecuritySettingsTest.java
@@ -0,0 +1,156 @@
+/*
+ * 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 android.content.ContentResolver;
+import android.content.IContentProvider;
+import android.provider.Settings;
+import android.os.Bundle;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.drawer.TileUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.isNull;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SecuritySettingsTest {
+
+    private static final String MOCK_SUMMARY = "summary";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private DashboardCategory mDashboardCategory;
+    @Mock
+    private SummaryLoader mSummaryLoader;
+
+    private SecuritySettings.SummaryProvider mSummaryProvider;
+
+    @Implements(Settings.Secure.class)
+    public static class ShadowSecureSettings {
+
+        private static final Map<String, Object> mValueMap = new HashMap<>();
+
+        @Implementation
+        public static boolean putInt(ContentResolver resolver, String name, int value) {
+            mValueMap.put(name, value);
+            return true;
+        }
+
+        @Implementation
+        public static int getInt(ContentResolver resolver, String name, int defaultValue) {
+            Integer value = (Integer) mValueMap.get(name);
+            return value == null ? defaultValue : value;
+        }
+    }
+
+    @Implements(com.android.settingslib.drawer.TileUtils.class)
+    public static class ShadowTileUtils {
+        @Implementation
+        public static String getTextFromUri(Context context, String uriString,
+                Map<String, IContentProvider> providerMap, String key) {
+            return MOCK_SUMMARY;
+        }
+    }
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mSummaryProvider = new SecuritySettings.SummaryProvider(mContext, mSummaryLoader);
+    }
+
+    @Test
+    public void testSummaryProvider_notListening() {
+        mSummaryProvider.setListening(false);
+
+        verifyNoMoreInteractions(mSummaryLoader);
+    }
+
+    @Test
+    @Config(shadows = {
+            ShadowSecureSettings.class,
+    })
+    public void testSummaryProvider_packageVerifierDisabled() {
+        // Package verifier state is set to disabled.
+        ShadowSecureSettings.putInt(null, Settings.Secure.PACKAGE_VERIFIER_STATE, -1);
+        mSummaryProvider.setListening(true);
+
+        verify(mSummaryLoader, times(1)).setSummary(any(), isNull(String.class));
+    }
+
+    @Test
+    public void testGetPackageVerifierSummary_nullInput() {
+        assertThat(mSummaryProvider.getPackageVerifierSummary(null)).isNull();
+
+        when(mDashboardCategory.getTilesCount()).thenReturn(0);
+
+        assertThat(mSummaryProvider.getPackageVerifierSummary(mDashboardCategory)).isNull();
+    }
+
+    @Test
+    public void testGetPackageVerifierSummary_noMatchingTile() {
+        when(mDashboardCategory.getTilesCount()).thenReturn(1);
+        when(mDashboardCategory.getTile(0)).thenReturn(new Tile());
+
+        assertThat(mSummaryProvider.getPackageVerifierSummary(mDashboardCategory)).isNull();
+    }
+
+    @Test
+    @Config(shadows = {
+            ShadowTileUtils.class,
+    })
+    public void testGetPackageVerifierSummary_matchingTile() {
+        when(mDashboardCategory.getTilesCount()).thenReturn(1);
+        Tile tile = new Tile();
+        tile.key = SecuritySettings.KEY_PACKAGE_VERIFIER_STATUS;
+        Bundle bundle = new Bundle();
+        bundle.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, "content://host/path");
+        tile.metaData = bundle;
+        when(mDashboardCategory.getTile(0)).thenReturn(tile);
+
+        assertThat(mSummaryProvider.getPackageVerifierSummary(mDashboardCategory))
+                .isEqualTo(MOCK_SUMMARY);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index 3ba4d02..31090be 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -82,7 +82,8 @@
 
     @Test
     public void testCategory_isAccount() {
-        assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_ACCOUNT);
+        assertThat(new AccountDetailDashboardFragment().getCategoryKey())
+                .isEqualTo(CategoryKey.CATEGORY_ACCOUNT);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
index 7da30ed..b8f3fc4 100644
--- a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
@@ -21,7 +21,6 @@
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
-import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -33,7 +32,6 @@
 import org.robolectric.shadows.ShadowApplication;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -42,27 +40,20 @@
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
 
-    private FakeFeatureFactory mFeatureFactory;
     private AdvancedAppSettings mFragment;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        FakeFeatureFactory.setupForTest(mContext);
-        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+
         mFragment = new AdvancedAppSettings();
         mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
     }
 
     @Test
-    public void getPreferenceScreenResId_differentIAEnabledState_shouldUseDifferentPrefLayout() {
-        when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(true);
+    public void getPreferenceScreenResId_shouldUseAppDefaultSettingPrefLayout() {
         assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
                 R.xml.app_default_settings);
-
-        when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(false);
-        assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
-                R.xml.advanced_apps);
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
new file mode 100644
index 0000000..3dd3a65
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.Build;
+import android.os.UserHandle;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.enterprise.DevicePolicyManagerWrapper;
+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.shadows.ShadowApplication;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.android.settings.testutils.ApplicationTestUtils.buildInfo;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests for {@link InstalledAppCounter}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class AppWithAdminGrantedPermissionsCounterTest {
+
+    private final String APP_1 = "app1";
+    private final String APP_2 = "app2";
+    private final String APP_3 = "app3";
+    private final String APP_4 = "app4";
+    private final String APP_5 = "app5";
+    private final String APP_6 = "app6";
+
+    private final int MAIN_USER_ID = 0;
+    private final int MANAGED_PROFILE_ID = 10;
+
+    private final int PER_USER_UID_RANGE = 100000;
+    private final int APP_1_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 1;
+    private final int APP_2_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 2;
+    private final int APP_3_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 3;
+    private final int APP_4_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 4;
+    private final int APP_5_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 5;
+    private final int APP_6_UID = MANAGED_PROFILE_ID * PER_USER_UID_RANGE + 1;
+
+    private final String PERMISSION_1 = "some.permission.1";
+    private final String PERMISSION_2 = "some.permission.2";
+    private final String[] PERMISSIONS = {PERMISSION_1, PERMISSION_2};
+
+    @Mock private Context mContext;
+    @Mock private PackageManagerWrapper mPackageManager;
+    @Mock private IPackageManagerWrapper mPackageManagerService;
+    @Mock private DevicePolicyManagerWrapper mDevicePolicyManager;
+    private List<UserInfo> mUsersToCount;
+
+    private int mAppCount = -1;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testCountInstalledAppsAcrossAllUsers() throws Exception {
+        // There are two users.
+        mUsersToCount = Arrays.asList(
+                new UserInfo(MAIN_USER_ID, "main", UserInfo.FLAG_ADMIN),
+                new UserInfo(MANAGED_PROFILE_ID, "managed profile", 0));
+
+        // The first user has five apps installed:
+        // * app1 uses run-time permissions. It has been granted one of the permissions by the
+        //        admin. It should be counted.
+        // * app2 uses run-time permissions. It has not been granted any of the permissions by the
+        //        admin. It should not be counted.
+        // * app3 uses install-time permissions. It was installed by the admin and requested one of
+        //        the permissions. It should be counted.
+        // * app4 uses install-time permissions. It was not installed by the admin but did request
+        //        one of the permissions. It should not be counted.
+        // * app5 uses install-time permissions. It was installed by the admin but did not request
+        //        any of the permissions. It should not be counted.
+        when(mPackageManager.getInstalledApplicationsAsUser(PackageManager.GET_DISABLED_COMPONENTS
+                | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS
+                | PackageManager.MATCH_ANY_USER,
+                MAIN_USER_ID)).thenReturn(Arrays.asList(
+                        buildInfo(APP_1_UID, APP_1, 0 /* flags */, Build.VERSION_CODES.M),
+                        buildInfo(APP_2_UID, APP_2, 0 /* flags */, Build.VERSION_CODES.M),
+                        buildInfo(APP_3_UID, APP_3, 0 /* flags */, Build.VERSION_CODES.LOLLIPOP),
+                        buildInfo(APP_4_UID, APP_4, 0 /* flags */, Build.VERSION_CODES.LOLLIPOP),
+                        buildInfo(APP_5_UID, APP_5, 0 /* flags */, Build.VERSION_CODES.LOLLIPOP)));
+
+        // Grant run-time permissions as appropriate.
+        when(mDevicePolicyManager.getPermissionGrantState(null, APP_1, PERMISSION_1))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
+        when(mDevicePolicyManager.getPermissionGrantState(null, APP_1, PERMISSION_2))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+        when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_2), anyObject()))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+        when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_3), anyObject()))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+        when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_4), anyObject()))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+        when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_5), anyObject()))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+
+        // Grant install-time permissions as appropriate.
+        when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_1_UID)))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_2_UID)))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION_1, APP_3_UID))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION_2, APP_3_UID))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION_1, APP_4_UID))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION_2, APP_4_UID))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_5_UID)))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+
+        // app3 and app5 were installed by enterprise policy.
+        final UserHandle mainUser = new UserHandle(MAIN_USER_ID);
+        when(mPackageManager.getInstallReason(APP_1, mainUser))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+        when(mPackageManager.getInstallReason(APP_2, mainUser))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+        when(mPackageManager.getInstallReason(APP_3, mainUser))
+                .thenReturn(PackageManager.INSTALL_REASON_POLICY);
+        when(mPackageManager.getInstallReason(APP_4, mainUser))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+        when(mPackageManager.getInstallReason(APP_5, mainUser))
+                .thenReturn(PackageManager.INSTALL_REASON_POLICY);
+
+        // The second user has one app installed. This app uses run-time permissions. It has been
+        // granted both permissions by the admin. It should be counted.
+        when(mPackageManager.getInstalledApplicationsAsUser(PackageManager.GET_DISABLED_COMPONENTS
+                | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
+                MANAGED_PROFILE_ID)).thenReturn(Arrays.asList(
+                        buildInfo(APP_6_UID, APP_6, 0 /* flags */, Build.VERSION_CODES.M)));
+
+        // Grant run-time permissions as appropriate.
+        when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_6), anyObject()))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
+
+        // Grant install-time permissions as appropriate.
+        when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_6_UID)))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+
+        // app6 was not installed by enterprise policy.
+        final UserHandle managedProfileUser = new UserHandle(MANAGED_PROFILE_ID);
+        when(mPackageManager.getInstallReason(APP_6, managedProfileUser))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+
+        // Count the number of all apps installed that were granted on or more permissions by the
+        // admin.  Wait for the background task to finish.
+        (new AppWithAdminGrantedPermissionsCounterTestable(PERMISSIONS)).execute();
+        ShadowApplication.runBackgroundTasks();
+
+        assertThat(mAppCount).isEqualTo(3);
+
+        // Verify that installed packages were retrieved for the users returned by
+        // InstalledAppCounterTestable.getUsersToCount() only.
+        verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(), eq(MAIN_USER_ID));
+        verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(),
+                eq(MANAGED_PROFILE_ID));
+        verify(mPackageManager, atLeast(0)).getInstallReason(anyObject(), anyObject());
+        verifyNoMoreInteractions(mPackageManager);
+
+    }
+
+    private class AppWithAdminGrantedPermissionsCounterTestable extends
+            AppWithAdminGrantedPermissionsCounter {
+        public AppWithAdminGrantedPermissionsCounterTestable(String[] permissions) {
+            super(mContext, permissions, mPackageManager, mPackageManagerService,
+                    mDevicePolicyManager);
+        }
+
+        @Override
+        protected void onCountComplete(int num) {
+            mAppCount = num;
+        }
+
+        @Override
+        protected List<UserInfo> getUsersToCount() {
+            return mUsersToCount;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index 615d9ad..2f344dc 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -16,14 +16,21 @@
 
 package com.android.settings.applications;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
+import android.os.Build;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.ArraySet;
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.enterprise.DevicePolicyManagerWrapper;
 import com.android.settings.testutils.ApplicationTestUtils;
 import com.android.settings.testutils.shadow.ShadowUserManager;
 import org.junit.Before;
@@ -35,10 +42,11 @@
 import org.robolectric.shadows.ShadowApplication;
 
 import java.util.Arrays;
+import java.util.Set;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.when;
-import org.robolectric.shadows.ShadowApplication;
+
 /**
  * Tests for {@link ApplicationFeatureProviderImpl}.
  */
@@ -50,15 +58,25 @@
     private final int MAIN_USER_ID = 0;
     private final int MANAGED_PROFILE_ID = 10;
 
+    private final int PER_USER_UID_RANGE = 100000;
+    private final int APP_1_UID = MAIN_USER_ID * PER_USER_UID_RANGE + 1;
+    private final int APP_2_UID = MANAGED_PROFILE_ID * PER_USER_UID_RANGE + 1;
+
     private final String APP_1 = "app1";
     private final String APP_2 = "app2";
 
+    private final String PERMISSION = "some.permission";
+
     private @Mock UserManager mUserManager;
     private @Mock Context mContext;
     private @Mock PackageManagerWrapper mPackageManager;
+    @Mock private IPackageManagerWrapper mPackageManagerService;
+    @Mock private DevicePolicyManagerWrapper mDevicePolicyManager;
 
     private ApplicationFeatureProvider mProvider;
 
+    private int mAppCount = -1;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -66,14 +84,103 @@
         when(mContext.getApplicationContext()).thenReturn(mContext);
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
 
-        mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager);
+        mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
+                mPackageManagerService, mDevicePolicyManager);
     }
 
     @Test
     public void testCalculateNumberOfInstalledApps() {
-        final Integer[] numberOfInstalledApps = new Integer[1];
-        numberOfInstalledApps[0] = null;
+        setUpUsersAndInstalledApps();
 
+        when(mPackageManager.getInstallReason(APP_1, new UserHandle(MAIN_USER_ID)))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+        when(mPackageManager.getInstallReason(APP_2, new UserHandle(MANAGED_PROFILE_ID)))
+                .thenReturn(PackageManager.INSTALL_REASON_POLICY);
+
+        // Count all installed apps.
+        mAppCount = -1;
+        mProvider.calculateNumberOfInstalledApps(ApplicationFeatureProvider.IGNORE_INSTALL_REASON,
+                (num) -> {
+                    mAppCount = num;
+                });
+        ShadowApplication.runBackgroundTasks();
+        assertThat(mAppCount).isEqualTo(2);
+
+        // Count apps with specific install reason only.
+        mAppCount = -1;
+        mProvider.calculateNumberOfInstalledApps(PackageManager.INSTALL_REASON_POLICY,
+                (num) -> {
+                    mAppCount = num;
+                });
+        ShadowApplication.runBackgroundTasks();
+        assertThat(mAppCount).isEqualTo(1);
+    }
+
+    @Test
+    public void testCalculateNumberOfAppsWithAdminGrantedPermissions() throws Exception {
+        setUpUsersAndInstalledApps();
+
+        when(mDevicePolicyManager.getPermissionGrantState(null, APP_1, PERMISSION))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
+        when(mDevicePolicyManager.getPermissionGrantState(null, APP_2, PERMISSION))
+                .thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION, APP_1_UID))
+                .thenReturn(PackageManager.PERMISSION_DENIED);
+        when(mPackageManagerService.checkUidPermission(PERMISSION, APP_2_UID))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        when(mPackageManager.getInstallReason(APP_1, new UserHandle(MAIN_USER_ID)))
+                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
+        when(mPackageManager.getInstallReason(APP_2, new UserHandle(MANAGED_PROFILE_ID)))
+                .thenReturn(PackageManager.INSTALL_REASON_POLICY);
+
+        mAppCount = -1;
+        mProvider.calculateNumberOfAppsWithAdminGrantedPermissions(new String[] {PERMISSION},
+                (num) -> {
+                    mAppCount = num;
+                });
+        ShadowApplication.runBackgroundTasks();
+        assertThat(mAppCount).isEqualTo(2);
+
+    }
+
+    @Test
+    public void testFindPersistentPreferredActivities() throws Exception {
+        when(mUserManager.getUserProfiles()).thenReturn(Arrays.asList(new UserHandle(MAIN_USER_ID),
+                new UserHandle(MANAGED_PROFILE_ID)));
+
+        final Intent viewIntent = new Intent(Intent.ACTION_VIEW);
+        final Intent editIntent = new Intent(Intent.ACTION_EDIT);
+        final Intent sendIntent = new Intent(Intent.ACTION_SEND);
+
+        final ResolveInfo app1 = createResolveInfo(APP_1);
+        final ResolveInfo app2 = createResolveInfo(APP_2);
+        when(mPackageManagerService.findPersistentPreferredActivity(viewIntent, MAIN_USER_ID))
+                .thenReturn(app1);
+        when(mPackageManagerService.findPersistentPreferredActivity(viewIntent, MANAGED_PROFILE_ID))
+                .thenReturn(app1);
+        when(mPackageManagerService.findPersistentPreferredActivity(editIntent, MAIN_USER_ID))
+                .thenReturn(null);
+        when(mPackageManagerService.findPersistentPreferredActivity(editIntent, MANAGED_PROFILE_ID))
+                .thenReturn(app2);
+        when(mPackageManagerService.findPersistentPreferredActivity(sendIntent, MAIN_USER_ID))
+                .thenReturn(app1);
+        when(mPackageManagerService.findPersistentPreferredActivity(sendIntent, MANAGED_PROFILE_ID))
+                .thenReturn(null);
+
+        final Set<ApplicationFeatureProvider.PersistentPreferredActivityInfo> expectedActivities
+                = new ArraySet<>();
+        expectedActivities.add(new ApplicationFeatureProvider.PersistentPreferredActivityInfo(APP_1,
+                MAIN_USER_ID));
+        expectedActivities.add(new ApplicationFeatureProvider.PersistentPreferredActivityInfo(APP_1,
+                MANAGED_PROFILE_ID));
+        expectedActivities.add(new ApplicationFeatureProvider.PersistentPreferredActivityInfo(APP_2,
+                MANAGED_PROFILE_ID));
+
+        assertThat(mProvider.findPersistentPreferredActivities(
+                new Intent[] {viewIntent, editIntent, sendIntent})).isEqualTo(expectedActivities);
+    }
+
+    private void setUpUsersAndInstalledApps() {
         when(mUserManager.getUsers(true)).thenReturn(Arrays.asList(
                 new UserInfo(MAIN_USER_ID, "main", UserInfo.FLAG_ADMIN),
                 new UserInfo(MANAGED_PROFILE_ID, "managed profile", 0)));
@@ -82,32 +189,20 @@
                 | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS
                 | PackageManager.MATCH_ANY_USER,
                 MAIN_USER_ID)).thenReturn(Arrays.asList(
-                        ApplicationTestUtils.buildInfo(MAIN_USER_ID, APP_1, 0 /* flags */)));
-        when(mPackageManager.getInstallReason(APP_1, new UserHandle(MAIN_USER_ID)))
-                .thenReturn(PackageManager.INSTALL_REASON_UNKNOWN);
-
+                        ApplicationTestUtils.buildInfo(APP_1_UID, APP_1, 0 /* flags */,
+                                Build.VERSION_CODES.M)));
         when(mPackageManager.getInstalledApplicationsAsUser(PackageManager.GET_DISABLED_COMPONENTS
                 | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
                 MANAGED_PROFILE_ID)).thenReturn(Arrays.asList(
-                        ApplicationTestUtils.buildInfo(MANAGED_PROFILE_ID, APP_2, 0 /* flags */)));
-        when(mPackageManager.getInstallReason(APP_2, new UserHandle(MANAGED_PROFILE_ID)))
-                .thenReturn(PackageManager.INSTALL_REASON_POLICY);
+                        ApplicationTestUtils.buildInfo(APP_2_UID, APP_2, 0 /* flags */,
+                                Build.VERSION_CODES.LOLLIPOP)));
+    }
 
-        // Count all installed apps.
-        mProvider.calculateNumberOfInstalledApps(ApplicationFeatureProvider.IGNORE_INSTALL_REASON,
-                (num) -> {
-                    numberOfInstalledApps[0] = num;
-                });
-        ShadowApplication.runBackgroundTasks();
-        assertThat(numberOfInstalledApps[0]).isEqualTo(2);
-
-        // Count apps with specific install reason only.
-        numberOfInstalledApps[0] = null;
-        mProvider.calculateNumberOfInstalledApps(PackageManager.INSTALL_REASON_POLICY,
-                (num) -> {
-                    numberOfInstalledApps[0] = num;
-                });
-        ShadowApplication.runBackgroundTasks();
-        assertThat(numberOfInstalledApps[0]).isEqualTo(1);
+    private ResolveInfo createResolveInfo(String packageName) {
+        final ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = packageName;
+        final ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.activityInfo = activityInfo;
+        return resolveInfo;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java b/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java
new file mode 100644
index 0000000..a5306a2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.telephony.SmsUsageMonitor;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DrawOverlayDetailsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private DrawOverlayDetails mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new DrawOverlayDetails();
+        mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_APPDRAW_ALLOW), eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_APPDRAW_DENY), eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
index 3dc2e9b..458959c 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
@@ -71,6 +71,10 @@
     private final int MAIN_USER_ID = 0;
     private final int MANAGED_PROFILE_ID = 10;
 
+    private final int PER_USER_UID_RANGE = 100000;
+    private final int MAIN_USER_APP_UID = MAIN_USER_ID * PER_USER_UID_RANGE;
+    private final int MANAGED_PROFILE_APP_UID = MANAGED_PROFILE_ID * PER_USER_UID_RANGE;
+
     @Mock private UserManager mUserManager;
     @Mock private Context mContext;
     @Mock private PackageManagerWrapper mPackageManager;
@@ -109,10 +113,14 @@
                 | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS
                 | PackageManager.MATCH_ANY_USER,
                 MAIN_USER_ID)).thenReturn(Arrays.asList(
-                        buildInfo(MAIN_USER_ID, APP_1, ApplicationInfo.FLAG_UPDATED_SYSTEM_APP),
-                        buildInfo(MAIN_USER_ID, APP_2, 0 /* flags */),
-                        buildInfo(MAIN_USER_ID, APP_3, ApplicationInfo.FLAG_SYSTEM),
-                        buildInfo(MAIN_USER_ID, APP_4, ApplicationInfo.FLAG_SYSTEM)));
+                        buildInfo(MAIN_USER_APP_UID, APP_1,
+                                ApplicationInfo.FLAG_UPDATED_SYSTEM_APP, 0 /* targetSdkVersion */),
+                        buildInfo(MAIN_USER_APP_UID, APP_2, 0 /* flags */,
+                                0 /* targetSdkVersion */),
+                        buildInfo(MAIN_USER_APP_UID, APP_3, ApplicationInfo.FLAG_SYSTEM,
+                                0 /* targetSdkVersion */),
+                        buildInfo(MAIN_USER_APP_UID, APP_4, ApplicationInfo.FLAG_SYSTEM,
+                                0 /* targetSdkVersion */)));
         // For system apps, InstalledAppCounter checks whether they handle the default launcher
         // intent to decide whether to include them in the count of installed apps or not.
         expectQueryIntentActivities(MAIN_USER_ID, APP_3, true /* launchable */);
@@ -129,14 +137,16 @@
         when(mPackageManager.getInstallReason(APP_4, mainUser))
                 .thenReturn(PackageManager.INSTALL_REASON_POLICY);
 
-        // The second user has four apps installed:
+        // The second user has two apps installed:
         // * app5 is a user-installed app. It should be counted.
         // * app6 is a system app that provides a launcher icon. It should be counted.
         when(mPackageManager.getInstalledApplicationsAsUser(PackageManager.GET_DISABLED_COMPONENTS
                 | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS,
                 MANAGED_PROFILE_ID)).thenReturn(Arrays.asList(
-                        buildInfo(MANAGED_PROFILE_ID, APP_5, 0 /* flags */),
-                        buildInfo(MANAGED_PROFILE_ID, APP_6, ApplicationInfo.FLAG_SYSTEM)));
+                        buildInfo(MANAGED_PROFILE_APP_UID, APP_5, 0 /* flags */,
+                                0 /* targetSdkVersion */),
+                        buildInfo(MANAGED_PROFILE_APP_UID, APP_6, ApplicationInfo.FLAG_SYSTEM,
+                                0 /* targetSdkVersion */)));
         expectQueryIntentActivities(MANAGED_PROFILE_ID, APP_6, true /* launchable */);
 
         // app5 is installed by enterprise policy.
@@ -165,7 +175,7 @@
 
         // Count once more, considering apps installed by enterprise policy only. Wait for the
         // background task to finish.
-        mInstalledAppCount = 0;
+        mInstalledAppCount = -1;
         (new InstalledAppCounterTestable(PackageManager.INSTALL_REASON_POLICY)).execute();
         ShadowApplication.runBackgroundTasks();
 
@@ -188,7 +198,7 @@
         }
     }
 
-    private class IsLaunchIntentFor extends ArgumentMatcher<Intent> {
+    private static class IsLaunchIntentFor extends ArgumentMatcher<Intent> {
         private final String mPackageName;
 
         IsLaunchIntentFor(String packageName) {
@@ -201,7 +211,7 @@
             if (intent == null) {
                 return false;
             }
-            if (intent.getAction() != Intent.ACTION_MAIN) {
+            if (!Intent.ACTION_MAIN.equals(intent.getAction())) {
                 return false;
             }
             final Set<String> categories = intent.getCategories();
diff --git a/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java b/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java
new file mode 100644
index 0000000..262c9e0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageInfo;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.lang.reflect.Field;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PictureInPictureSettingsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private PictureInPictureSettings mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new PictureInPictureSettings();
+    }
+
+    @Test
+    public void testIgnoredApp() {
+        for (String ignoredPackage : mFragment.IGNORE_PACKAGE_LIST) {
+            assertThat(checkPackageHasPictureInPictureActivities(ignoredPackage, true))
+                            .isFalse();
+        }
+    }
+
+    @Test
+    public void testNonPippableApp() {
+        assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage")).isFalse();
+        assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
+                false, false, false)).isFalse();
+    }
+
+    @Test
+    public void testPippableApp() {
+        assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
+                true)).isTrue();
+        assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
+                false, true)).isTrue();
+        assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
+                true, false)).isTrue();
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_PICTURE_IN_PICTURE_ON_HIDE_ALLOW), eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_PICTURE_IN_PICTURE_ON_HIDE_DENY), eq("app"));
+    }
+
+    private boolean checkPackageHasPictureInPictureActivities(String packageName,
+            boolean... resizeableActivityState) {
+        ActivityInfoWrapper[] activities = null;
+        if (resizeableActivityState.length > 0) {
+            activities = new ActivityInfoWrapper[resizeableActivityState.length];
+            for (int i = 0; i < activities.length; i++) {
+                activities[i] = new MockActivityInfo(resizeableActivityState[i]);
+            }
+        }
+        return PictureInPictureSettings.checkPackageHasPictureInPictureActivities(packageName,
+                activities);
+    }
+
+    private class MockActivityInfo implements ActivityInfoWrapper {
+
+        private boolean mSupportsPictureInPicture;
+
+        public MockActivityInfo(boolean supportsPictureInPicture) {
+            mSupportsPictureInPicture = supportsPictureInPicture;
+        }
+
+        @Override
+        public boolean supportsPictureInPicture() {
+            return mSupportsPictureInPicture;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java b/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java
new file mode 100644
index 0000000..d9c88ff
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.telephony.SmsUsageMonitor;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PremiumSmsAccessTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private PremiumSmsAccess mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new PremiumSmsAccess();
+        mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ASK_USER,
+                "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_PREMIUM_SMS_ASK), eq("app"));
+
+        mFragment.logSpecialPermissionChange(SmsUsageMonitor.PREMIUM_SMS_PERMISSION_NEVER_ALLOW,
+                "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_PREMIUM_SMS_DENY), eq("app"));
+
+        mFragment.logSpecialPermissionChange(SmsUsageMonitor.PREMIUM_SMS_PERMISSION_ALWAYS_ALLOW,
+                "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_PREMIUM_SMS_ALWAYS_ALLOW),
+                eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java
new file mode 100644
index 0000000..532a923
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class UsageAccessDetailsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private UsageAccessDetails mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new UsageAccessDetails();
+        mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_ALLOW), eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_DENY), eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java b/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java
new file mode 100644
index 0000000..3abe3f4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class VrListenerSettingsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private VrListenerSettings mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new VrListenerSettings();
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_VRHELPER_ALLOW), eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_VRHELPER_DENY), eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java b/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java
new file mode 100644
index 0000000..a632118
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WriteSettingsDetailsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private WriteSettingsDetails mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new WriteSettingsDetails();
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_SETTINGS_CHANGE_ALLOW),
+                eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_SETTINGS_CHANGE_DENY),
+                eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
new file mode 100644
index 0000000..6c31927
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.content.ComponentName;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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 static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultAppInfoTest {
+
+    @Mock
+    private ActivityInfo mActivityInfo;
+    @Mock
+    private ApplicationInfo mApplicationInfo;
+    @Mock
+    private ComponentName mComponentName;
+    @Mock
+    private PackageManager mPackageManager;
+
+    private DefaultAppInfo mInfo;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void initInfoWithActivityInfo_shouldLoadInfo() {
+        mActivityInfo.packageName = "test";
+        mInfo = new DefaultAppInfo(mActivityInfo);
+        mInfo.loadLabel(mPackageManager);
+        mInfo.loadIcon(mPackageManager);
+
+        assertThat(mInfo.getKey()).isEqualTo(mActivityInfo.packageName);
+        verify(mActivityInfo).loadLabel(mPackageManager);
+        verify(mActivityInfo).loadIcon(mPackageManager);
+    }
+
+    @Test
+    public void initInfoWithApplicationInfo_shouldLoadInfo() {
+        mApplicationInfo.packageName = "test";
+
+        mInfo = new DefaultAppInfo(mApplicationInfo);
+        mInfo.loadLabel(mPackageManager);
+        mInfo.loadIcon(mPackageManager);
+
+        assertThat(mInfo.getKey()).isEqualTo(mApplicationInfo.packageName);
+        verify(mApplicationInfo).loadLabel(mPackageManager);
+        verify(mApplicationInfo).loadIcon(mPackageManager);
+    }
+
+    @Test
+    public void initInfoWithComponent_shouldLoadInfo() {
+        when(mComponentName.getPackageName()).thenReturn("com.android.settings");
+
+        mInfo = new DefaultAppInfo(0 /* uid */, mComponentName, null /*summary */);
+        mInfo.getKey();
+
+        verify(mComponentName).flattenToString();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
new file mode 100644
index 0000000..4f560c9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.widget.RadioButtonPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultAppPickerFragmentTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private FragmentManager mFragmentManager;
+
+    private TestFragment mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mFragment = spy(new TestFragment());
+        final Bundle bundle = new Bundle();
+        bundle.putBoolean(DefaultAppPickerFragment.EXTRA_FOR_WORK, false);
+        mFragment.setArguments(bundle);
+
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        doReturn(mActivity).when(mFragment).getContext();
+        doReturn(mScreen).when(mFragment).getPreferenceScreen();
+    }
+
+    @Test
+    public void onAttach_userIsInitialized() {
+        mFragment.onAttach((Context) mActivity);
+
+        verify(mActivity).getPackageManager();
+        verify(mActivity).getSystemService(Context.USER_SERVICE);
+    }
+
+    @Test
+    public void clickPreference_noCofirmation_shouldDirectlyConfirm() {
+        final RadioButtonPreference pref =
+                new RadioButtonPreference(RuntimeEnvironment.application);
+        pref.setKey("TEST");
+
+        mFragment.onRadioButtonClicked(pref);
+
+        assertThat(mFragment.setDefaultAppKeyCalled).isTrue();
+    }
+
+    @Test
+    public void clickPreference_hasCofirmation_shouldShowConfirmation() {
+        final RadioButtonPreference pref =
+                new RadioButtonPreference(RuntimeEnvironment.application);
+        pref.setKey("TEST");
+        doReturn("confirmation_text").when(mFragment)
+                .getConfirmationMessage(any(DefaultAppInfo.class));
+        doReturn(mActivity).when(mFragment).getActivity();
+
+        mFragment.onRadioButtonClicked(pref);
+    }
+
+    public static class TestFragment extends DefaultAppPickerFragment {
+
+        boolean setDefaultAppKeyCalled;
+
+        @Override
+        public int getMetricsCategory() {
+            return 0;
+        }
+
+        @Override
+        protected List<DefaultAppInfo> getCandidates() {
+            return new ArrayList<>();
+        }
+
+        @Override
+        protected String getDefaultAppKey() {
+            return null;
+        }
+
+        @Override
+        protected boolean setDefaultAppKey(String key) {
+            setDefaultAppKeyCalled = true;
+            return true;
+        }
+
+        @Override
+        public Context getContext() {
+            return RuntimeEnvironment.application;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
new file mode 100644
index 0000000..f8d4d12
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.content.Context;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultAppPreferenceControllerTest {
+
+    private static final String TEST_APP_NAME = "test";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private Preference mPreference;
+
+    private TestPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+    }
+
+    @Test
+    public void updateState_hasDefaultApp_shouldUpdateAppName() {
+        mController = new TestPreferenceController(mContext);
+
+        when(mController.mAppInfo.loadLabel(mContext.getPackageManager()))
+                .thenReturn(TEST_APP_NAME);
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setSummary(TEST_APP_NAME);
+    }
+
+    @Test
+    public void updateState_hasNoApp_shouldNotUpdateAppName() {
+        mController = new TestPreferenceController(mContext);
+
+        mController.updateState(mPreference);
+
+        verify(mPreference, never()).setSummary(any(CharSequence.class));
+    }
+
+    private static class TestPreferenceController extends DefaultAppPreferenceController {
+
+        private DefaultAppInfo mAppInfo;
+
+        public TestPreferenceController(Context context) {
+            super(context);
+            mAppInfo = mock(DefaultAppInfo.class);
+        }
+
+        @Override
+        public boolean isAvailable() {
+            return true;
+        }
+
+        @Override
+        public String getPreferenceKey() {
+            return "test";
+        }
+
+        @Override
+        protected DefaultAppInfo getDefaultAppInfo() {
+            return mAppInfo;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
new file mode 100644
index 0000000..e7b11d9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultBrowserPickerTest {
+
+    private static final String TEST_APP_KEY = "";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultBrowserPicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mPicker = new DefaultBrowserPicker();
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefaultBrowser() {
+        mPicker.setDefaultAppKey(TEST_APP_KEY);
+        verify(mPackageManager)
+                .setDefaultBrowserPackageNameAsUser(eq(TEST_APP_KEY), anyInt());
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefaultBrowser() {
+        mPicker.getDefaultAppKey();
+        verify(mPackageManager)
+                .getDefaultBrowserPackageNameAsUser(anyInt());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
new file mode 100644
index 0000000..e06dfee
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultBrowserPreferenceControllerTest {
+
+    @Mock
+    private Context mContext;
+    @Mock
+    private UserManager mUserManager;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultBrowserPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mController = new DefaultBrowserPreferenceController(mContext);
+        ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
+    }
+
+    @Test
+    public void isAlwaysAvailable() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void getSoleAppLabel_hasNoApp_shouldNotReturnLabel() {
+        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
+                .thenReturn(null);
+        final Preference pref = mock(Preference.class);
+
+        mController.updateState(pref);
+        verify(pref, never()).setSummary(any(String.class));
+    }
+
+    @Test
+    public void getDefaultApp_shouldGetDefaultBrowserPackage() {
+        mController.getDefaultAppInfo();
+
+        verify(mPackageManager).getDefaultBrowserPackageNameAsUser(anyInt());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java
new file mode 100644
index 0000000..ceccba1
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+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 DefaultEmergencyPickerTest {
+
+    private static final String TEST_APP_KEY = "test_app";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultEmergencyPicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mPicker = spy(new DefaultEmergencyPicker());
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+
+        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefault() {
+        assertThat(mPicker.setDefaultAppKey(TEST_APP_KEY)).isTrue();
+        assertThat(mPicker.getDefaultAppKey()).isEqualTo(TEST_APP_KEY);
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefault() {
+        Settings.Secure.putString(RuntimeEnvironment.application.getContentResolver(),
+                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
+                TEST_APP_KEY);
+
+        assertThat(mPicker.getDefaultAppKey()).isEqualTo(TEST_APP_KEY);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
new file mode 100644
index 0000000..d63ae6d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.os.UserManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyList;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultHomePickerTest {
+
+    private static final String TEST_APP_KEY = "com.android.settings/DefaultEmergencyPickerTest";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultHomePicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mPicker = new DefaultHomePicker();
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefault() {
+        assertThat(mPicker.setDefaultAppKey(TEST_APP_KEY)).isTrue();
+
+        verify(mPackageManager).replacePreferredActivity(any(IntentFilter.class),
+                anyInt(), any(ComponentName[].class), any(ComponentName.class));
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefault() {
+        final ComponentName cn = mock(ComponentName.class);
+        when(mPackageManager.getHomeActivities(anyList()))
+                .thenReturn(cn);
+        mPicker.getDefaultAppKey();
+        verify(cn).flattenToString();
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java
new file mode 100644
index 0000000..6d6e2f8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.content.Context;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyList;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultHomePreferenceControllerTest {
+
+    @Mock
+    private Context mContext;
+    @Mock
+    private UserManager mUserManager;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultHomePreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mController = spy(new DefaultHomePreferenceController(mContext));
+        ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
+    }
+
+    @Test
+    public void isAlwaysAvailable() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void getDefaultApp_shouldGetDefaultBrowserPackage() {
+        assertThat(mController.getDefaultAppInfo()).isNotNull();
+
+        verify(mPackageManager).getHomeActivities(anyList());
+    }
+
+    @Test
+    public void updateState_noDefaultApp_shouldAskPackageManagerForOnlyApp() {
+        doReturn(null).when(mController).getDefaultAppInfo();
+
+        mController.updateState(mock(Preference.class));
+
+        verify(mPackageManager).getHomeActivities(anyList());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPickerTest.java
new file mode 100644
index 0000000..322830c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultNotificationAssistantPickerTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+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 DefaultNotificationAssistantPickerTest {
+
+    private static final String TEST_APP_KEY = "com.android.settings/PickerTest";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultNotificationAssistantPicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+
+        mPicker = spy(new DefaultNotificationAssistantPicker());
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefault() {
+        mPicker.setDefaultAppKey(TEST_APP_KEY);
+
+        assertThat(mPicker.getDefaultAppKey()).isEqualTo(TEST_APP_KEY);
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefault() {
+        Settings.Secure.putString(RuntimeEnvironment.application.getContentResolver(),
+                Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT,
+                TEST_APP_KEY);
+
+        assertThat(mPicker.getDefaultAppKey()).isEqualTo(TEST_APP_KEY);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java
new file mode 100644
index 0000000..0c5d5f1
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.UserManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultPhonePickerTest {
+
+    private static final String TEST_APP_KEY = "com.android.settings/PickerTest";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private DefaultPhonePicker.DefaultKeyUpdater mDefaultKeyUpdater;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultPhonePicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        when(mActivity.getSystemService(Context.TELECOM_SERVICE)).thenReturn(null);
+        mPicker = spy(new DefaultPhonePicker());
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+        ReflectionHelpers.setField(mPicker, "mDefaultKeyUpdater", mDefaultKeyUpdater);
+        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+    }
+
+    @Test
+    public void getSystemDefaultPackage_shouldAskDefaultKeyUpdater() {
+        mPicker.getSystemDefaultAppKey();
+
+        verify(mDefaultKeyUpdater).getSystemDialerPackage();
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefault() {
+        mPicker.setDefaultAppKey(TEST_APP_KEY);
+
+        verify(mDefaultKeyUpdater).setDefaultDialerApplication(
+                any(Context.class), eq(TEST_APP_KEY), anyInt());
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefault() {
+        mPicker.getDefaultAppKey();
+        verify(mDefaultKeyUpdater).getDefaultDialerApplication(any(Context.class), anyInt());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java
new file mode 100644
index 0000000..3da6fec
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.defaultapps;
+
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.UserManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.PackageManagerWrapper;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultSmsPickerTest {
+
+    private static final String TEST_APP_KEY = "com.android.settings/PickerTest";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private DefaultSmsPicker.DefaultKeyUpdater mDefaultKeyUpdater;
+    @Mock
+    private PackageManagerWrapper mPackageManager;
+
+    private DefaultSmsPicker mPicker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        mPicker = spy(new DefaultSmsPicker());
+        mPicker.onAttach((Context) mActivity);
+
+        ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
+        ReflectionHelpers.setField(mPicker, "mDefaultKeyUpdater", mDefaultKeyUpdater);
+        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+    }
+
+    @Test
+    public void setDefaultAppKey_shouldUpdateDefault() {
+        mPicker.setDefaultAppKey(TEST_APP_KEY);
+
+        verify(mDefaultKeyUpdater).setDefaultApplication(any(Context.class), eq(TEST_APP_KEY));
+    }
+
+    @Test
+    public void getDefaultAppKey_shouldReturnDefault() {
+        mPicker.getDefaultAppKey();
+
+        verify(mDefaultKeyUpdater).getDefaultApplication(any(Context.class));
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java
new file mode 100644
index 0000000..0e39c5d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.widget.MasterSwitchPreference;
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothMasterSwitchPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private LocalBluetoothManager mBluetoothManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private MasterSwitchPreference mPreference;
+
+    private Context mContext;
+    private BluetoothMasterSwitchPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application.getApplicationContext();
+        mController = new BluetoothMasterSwitchPreferenceController(mContext, mBluetoothManager);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+    }
+
+    @Test
+    public void isAvailable_shouldAlwaysReturnTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void onResume_shouldRegisterCallback() {
+        mController.onResume();
+
+        verify(mBluetoothManager.getEventManager()).registerCallback(any(BluetoothCallback.class));
+    }
+
+    @Test
+    public void onPause_shouldUnregisterCallback() {
+        mController.onPause();
+
+        verify(mBluetoothManager.getEventManager()).unregisterCallback(
+            any(BluetoothCallback.class));
+    }
+
+    @Test
+    public void onStart_shouldRegisterPreferenceChangeListener() {
+        mController.displayPreference(mScreen);
+        mController.onStart();
+
+        verify(mPreference).setOnPreferenceChangeListener(any(OnPreferenceChangeListener.class));
+    }
+
+    @Test
+    public void onStop_shouldRegisterPreferenceChangeListener() {
+        mController.displayPreference(mScreen);
+        mController.onStart();
+
+        mController.onStop();
+
+        verify(mPreference).setOnPreferenceChangeListener(null);
+    }
+
+    @Test
+    public void onSummaryUpdated_shouldUpdatePreferenceSummary() {
+        mController.displayPreference(mScreen);
+
+        mController.onSummaryChanged("test summary");
+
+        verify(mPreference).setSummary("test summary");
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
index 7ac7cb1..8272dbf 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
@@ -16,14 +16,11 @@
 
 package com.android.settings.bluetooth;
 
-import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
 
-import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.SummaryLoader;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
 import org.junit.Before;
@@ -34,15 +31,10 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowBluetoothAdapter;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -67,102 +59,27 @@
     }
 
     @Test
-    public void setListening_shouldUpdateSummary() {
+    public void setListening_shouldRegister() {
         mSummaryProvider.setListening(true);
 
-        verify(mBluetoothManager.getEventManager()).registerCallback(mSummaryProvider);
-        verify(mSummaryLoader).setSummary(eq(mSummaryProvider), anyString());
+        verify(mBluetoothManager.getEventManager()).registerCallback(
+            mSummaryProvider.mSummaryUpdater);
     }
 
     @Test
     public void setNotListening_shouldUnregister() {
         mSummaryProvider.setListening(false);
 
-        verify(mBluetoothManager.getEventManager()).unregisterCallback(mSummaryProvider);
+        verify(mBluetoothManager.getEventManager()).unregisterCallback(
+            mSummaryProvider.mSummaryUpdater);
     }
 
     @Test
-    public void updateSummary_btDisabled_shouldShowDisabledMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().disable();
-        mSummaryProvider.setListening(true);
+    public void onSummaryChanged_shouldSetSummary() {
+        final String summary = "Bluetooth summary";
+        mSummaryProvider.onSummaryChanged(summary);
 
-        verify(mSummaryLoader).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disabled));
-    }
-
-    @Test
-    public void updateSummary_btEnabled_noDevice_shouldShowDisconnectedMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        mSummaryProvider.setListening(true);
-
-        verify(mSummaryLoader).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disconnected));
-    }
-
-    @Test
-    public void updateState_btEnabled_noDevice_shouldShowDisconnectedMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        mSummaryProvider.onBluetoothStateChanged(BluetoothAdapter.STATE_TURNING_ON);
-
-        verify(mSummaryLoader).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disconnected));
-    }
-
-    @Test
-    public void updateState_btDisabled_shouldShowDisabledMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        mSummaryProvider.onBluetoothStateChanged(BluetoothAdapter.STATE_TURNING_OFF);
-
-        verify(mSummaryLoader).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disabled));
-    }
-
-    @Test
-    public void updateConnectionState_disconnected_shouldShowDisconnectedMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        when(mBluetoothManager.getBluetoothAdapter().getConnectionState())
-                .thenReturn(BluetoothAdapter.STATE_DISCONNECTED);
-
-        mSummaryProvider.setListening(true);
-        mSummaryProvider.onConnectionStateChanged(null /* device */,
-                BluetoothAdapter.STATE_DISCONNECTED);
-
-        verify(mSummaryLoader, times(2)).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disconnected));
-    }
-
-
-    @Test
-    public void updateConnectionState_connected_shouldShowConnectedMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        when(mBluetoothManager.getBluetoothAdapter().getConnectionState())
-                .thenReturn(BluetoothAdapter.STATE_CONNECTED);
-        final List<CachedBluetoothDevice> devices = new ArrayList<>();
-        devices.add(mock(CachedBluetoothDevice.class));
-        when(devices.get(0).isConnected()).thenReturn(true);
-        when(mBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy())
-                .thenReturn(devices);
-
-        mSummaryProvider.setListening(true);
-        mSummaryProvider.onConnectionStateChanged(null /* device */,
-                BluetoothAdapter.STATE_CONNECTED);
-
-        verify(mSummaryLoader).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_connected));
-    }
-
-    @Test
-    public void updateConnectionState_inconsistentState_shouldShowDisconnectedMessage() {
-        ShadowBluetoothAdapter.getDefaultAdapter().enable();
-        when(mBluetoothManager.getBluetoothAdapter().getConnectionState())
-                .thenReturn(BluetoothAdapter.STATE_CONNECTED);
-
-        mSummaryProvider.setListening(true);
-        mSummaryProvider.onConnectionStateChanged(null /* device */,
-                BluetoothAdapter.STATE_CONNECTED);
-
-        verify(mSummaryLoader, times(2)).setSummary(mSummaryProvider,
-                mContext.getString(R.string.bluetooth_disconnected));
+        verify(mSummaryLoader).setSummary(mSummaryProvider, summary);
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
new file mode 100644
index 0000000..a2770a0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
@@ -0,0 +1,172 @@
+/*
+ * 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.bluetooth.BluetoothAdapter;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowBluetoothAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothSummaryUpdaterTest {
+
+    private Context mContext;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private LocalBluetoothManager mBluetoothManager;
+    @Mock
+    private LocalBluetoothAdapter mBtAdapter;
+
+    private BluetoothSummaryUpdater mSummaryUpdater;
+    @Mock
+    private SummaryListener mListener;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mBluetoothManager.getBluetoothAdapter()).thenReturn(mBtAdapter);
+        when(mBtAdapter.isEnabled()).thenReturn(true);
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_CONNECTED);
+        mContext = RuntimeEnvironment.application.getApplicationContext();
+        mSummaryUpdater = new BluetoothSummaryUpdater(mContext, mListener, mBluetoothManager);
+    }
+
+    @Test
+    public void register_true_shouldRegisterListener() {
+        mSummaryUpdater.register(true);
+
+        verify(mBluetoothManager.getEventManager()).registerCallback(mSummaryUpdater);
+    }
+
+    @Test
+    public void register_false_shouldUnregisterListener() {
+        mSummaryUpdater.register(false);
+
+        verify(mBluetoothManager.getEventManager()).unregisterCallback(mSummaryUpdater);
+    }
+
+    @Test
+    public void register_true_shouldSendSummaryChange() {
+        mSummaryUpdater.register(true);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+    }
+
+    @Test
+    public void onBluetoothStateChanged_btDisabled_shouldSendDisabledSummary() {
+        mSummaryUpdater.register(true);
+        mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_OFF);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disabled));
+    }
+
+    @Test
+    public void onBluetoothStateChanged_btEnabled_connected_shouldSendConnectedSummary() {
+        mSummaryUpdater.register(true);
+        mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_ON);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+    }
+
+    @Test
+    public void onBluetoothStateChanged_btEnabled_notConnected_shouldSendDisconnectedMessage() {
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_DISCONNECTED);
+        mSummaryUpdater.register(true);
+        mSummaryUpdater.onBluetoothStateChanged(BluetoothAdapter.STATE_TURNING_ON);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disconnected));
+    }
+
+    @Test
+    public void onConnectionStateChanged_connected_shouldSendConnectedMessage() {
+        final List<CachedBluetoothDevice> devices = new ArrayList<>();
+        devices.add(mock(CachedBluetoothDevice.class));
+        when(devices.get(0).isConnected()).thenReturn(true);
+        when(mBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy())
+            .thenReturn(devices);
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_DISCONNECTED);
+        mSummaryUpdater.register(true);
+
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_CONNECTED);
+        mSummaryUpdater.onConnectionStateChanged(null /* device */,
+            BluetoothAdapter.STATE_CONNECTED);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connected));
+    }
+
+    @Test
+    public void onConnectionStateChanged_inconsistentState_shouldSendDisconnectedMessage() {
+        mSummaryUpdater.register(true);
+        mSummaryUpdater.onConnectionStateChanged(null /* device */,
+            BluetoothAdapter.STATE_CONNECTED);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disconnected));
+    }
+
+    @Test
+    public void onConnectionStateChanged_connecting_shouldSendConnectingMessage() {
+        mSummaryUpdater.register(true);
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_CONNECTING);
+        mSummaryUpdater.onConnectionStateChanged(null /* device */,
+            BluetoothAdapter.STATE_CONNECTING);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_connecting));
+    }
+
+    @Test
+    public void onConnectionStateChanged_disconnecting_shouldSendDisconnectingMessage() {
+        mSummaryUpdater.register(true);
+        when(mBtAdapter.getConnectionState()).thenReturn(BluetoothAdapter.STATE_DISCONNECTING);
+        mSummaryUpdater.onConnectionStateChanged(null /* device */,
+            BluetoothAdapter.STATE_DISCONNECTING);
+
+        verify(mListener).onSummaryChanged(mContext.getString(R.string.bluetooth_disconnecting));
+    }
+
+    private class SummaryListener implements OnSummaryChangeListener {
+        String summary;
+
+        @Override
+        public void onSummaryChanged(String summary) {
+            this.summary = summary;
+        }
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index f477202..327575e 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -26,7 +26,6 @@
 import com.android.settings.core.PreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.drawer.CategoryKey;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.Tile;
 
@@ -79,6 +78,7 @@
         when(mFakeFeatureFactory.dashboardFeatureProvider.getTilesForCategory(anyString()))
                 .thenReturn(mDashboardCategory);
         mTestFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+        when(mContext.getPackageName()).thenReturn("TestPackage");
     }
 
     @Test
@@ -199,11 +199,6 @@
         }
 
         @Override
-        protected String getCategoryKey() {
-            return CategoryKey.CATEGORY_HOMEPAGE;
-        }
-
-        @Override
         public PreferenceScreen getPreferenceScreen() {
             return mScreen;
         }
diff --git a/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
index c7b8dee..d674c77 100644
--- a/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
@@ -15,31 +15,44 @@
  */
 package com.android.settings.datausage;
 
+import com.android.internal.logging.nano.MetricsProto;
+import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.os.Process;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
 
 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.verify;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class UnrestrictedDataAccessTest {
 
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
     @Mock
     private ApplicationsState.AppEntry mAppEntry;
     private UnrestrictedDataAccess mFragment;
+    private FakeFeatureFactory mFeatureFactory;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
         mFragment = new UnrestrictedDataAccess();
     }
 
@@ -59,4 +72,15 @@
         assertThat(mFragment.shouldAddPreference(mAppEntry)).isFalse();
     }
 
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_UNL_DATA_ALLOW), eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_UNL_DATA_DENY), eq("app"));
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java
index 5775aeb..f16304e 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageDashboardFragmentTest.java
@@ -16,6 +16,10 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
+import android.os.Bundle;
+import android.os.storage.DiskInfo;
+import android.os.storage.StorageManager;
+import android.os.storage.VolumeInfo;
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.SettingsRobolectricTestRunner;
@@ -35,15 +39,19 @@
 import java.util.List;
 
 import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class StorageDashboardFragmentTest {
-
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
 
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private StorageManager mStorageManager;
+
     private StorageDashboardFragment mFragment;
 
     @Before
@@ -71,4 +79,11 @@
         assertThat(indexRes).isNotNull();
         assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
     }
+
+    @Test
+    public void testInitializeVolumeDoesntBreakOnNullVolume() {
+        VolumeInfo info = new VolumeInfo("id", 0, new DiskInfo("id", 0), "");
+        when(mStorageManager.findVolumeById(anyString())).thenReturn(info);
+        mFragment.initializeVolume(mStorageManager, new Bundle());
+    }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
index 7776633..a377505 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -140,6 +140,8 @@
         assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName());
         assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
                 ManageApplications.class.getName());
+        assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0))
+                .isEqualTo(R.string.apps_storage);
     }
 
     @Test
@@ -159,6 +161,24 @@
     }
 
     @Test
+    public void testClickGames() {
+        mPreference.setKey("pref_games");
+        mController.handlePreferenceTreeClick(mPreference);
+
+        final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class);
+        verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(),
+                any(UserHandle.class));
+
+        Intent intent = argumentCaptor.getValue();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN);
+        assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName());
+        assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
+                ManageApplications.class.getName());
+        assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0))
+                .isEqualTo(R.string.game_storage_settings);
+    }
+
+    @Test
     public void testMeasurementCompletedUpdatesPreferences() {
         StorageItemPreferenceAlternate audio = new StorageItemPreferenceAlternate(mContext);
         StorageItemPreferenceAlternate image = new StorageItemPreferenceAlternate(mContext);
diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
new file mode 100644
index 0000000..10a8b0b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.display;
+
+import android.content.Context;
+import android.provider.Settings;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AutoBrightnessPreferenceControllerTest {
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    private AutoBrightnessPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mController = new AutoBrightnessPreferenceController(mContext);
+    }
+
+    @Test
+    public void testOnPreferenceChange_TurnOnAuto_ReturnAuto() {
+        mController.onPreferenceChange(null, true);
+
+        final int mode = Settings.System.getInt(mContext.getContentResolver(),
+                SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
+        assertThat(mode).isEqualTo(SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+    }
+
+    @Test
+    public void testOnPreferenceChange_TurnOffAuto_ReturnManual() {
+        mController.onPreferenceChange(null, false);
+
+        final int mode = Settings.System.getInt(mContext.getContentResolver(),
+                SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+        assertThat(mode).isEqualTo(SCREEN_BRIGHTNESS_MODE_MANUAL);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/display/TimeoutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TimeoutPreferenceControllerTest.java
new file mode 100644
index 0000000..ec142c2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/TimeoutPreferenceControllerTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.display;
+
+import android.content.Context;
+import android.provider.Settings;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.TimeoutListPreference;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class TimeoutPreferenceControllerTest {
+    private static final int TIMEOUT = 30;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private TimeoutListPreference mPreference;
+    private TimeoutPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mController = new TimeoutPreferenceController(mContext);
+    }
+
+    @Test
+    public void testOnPreferenceChange_SetTimeout_ReturnCorrectTimeout() {
+        mController.onPreferenceChange(mPreference, Integer.toString(TIMEOUT));
+
+        final int mode = Settings.System.getInt(mContext.getContentResolver(),
+                SCREEN_OFF_TIMEOUT, 0);
+        assertThat(mode).isEqualTo(TIMEOUT);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java
new file mode 100644
index 0000000..de24885
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.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.enterprise;
+
+import android.Manifest;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+/**
+ * Tests for {@link AdminGrantedCameraPermissionPreferenceController}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class AdminGrantedCameraPermissionPreferenceControllerTest extends
+        AdminGrantedPermissionsPreferenceControllerTestBase {
+
+    public AdminGrantedCameraPermissionPreferenceControllerTest() {
+        super("enterprise_privacy_number_camera_access_packages",
+                new String[] {Manifest.permission.CAMERA},
+                R.plurals.enterprise_privacy_number_camera_access_packages);
+    }
+
+    @Override
+    public void setUp() {
+        super.setUp();
+        mController = new AdminGrantedCameraPermissionPreferenceController(mContext);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java
new file mode 100644
index 0000000..1c6f91d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.enterprise;
+
+import android.Manifest;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+/**
+ * Tests for {@link AdminGrantedLocationPermissionsPreferenceController}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class AdminGrantedLocationPermissionsPreferenceControllerTest extends
+        AdminGrantedPermissionsPreferenceControllerTestBase {
+
+    public AdminGrantedLocationPermissionsPreferenceControllerTest() {
+        super("enterprise_privacy_number_location_access_packages",
+                new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION},
+                R.plurals.enterprise_privacy_number_location_access_packages);
+    }
+
+    @Override
+    public void setUp() {
+        super.setUp();
+        mController = new AdminGrantedLocationPermissionsPreferenceController(mContext);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java
new file mode 100644
index 0000000..bcaf63f
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.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.enterprise;
+
+import android.Manifest;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+/**
+ * Tests for {@link AdminGrantedMicrophonePermissionPreferenceController}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class AdminGrantedMicrophonePermissionPreferenceControllerTest extends
+        AdminGrantedPermissionsPreferenceControllerTestBase {
+
+    public AdminGrantedMicrophonePermissionPreferenceControllerTest() {
+        super("enterprise_privacy_number_microphone_access_packages",
+                new String[] {Manifest.permission.RECORD_AUDIO},
+                R.plurals.enterprise_privacy_number_microphone_access_packages);
+    }
+
+    @Override
+    public void setUp() {
+        super.setUp();
+        mController = new AdminGrantedMicrophonePermissionPreferenceController(mContext);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java
new file mode 100644
index 0000000..2bebbf0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.enterprise;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+/**
+ * Tests for {@link AdminGrantedPermissionsPreferenceControllerBase}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class AdminGrantedPermissionsPreferenceControllerBaseTest extends
+        AdminGrantedPermissionsPreferenceControllerTestBase {
+
+    public AdminGrantedPermissionsPreferenceControllerBaseTest() {
+        super(null, new String[] {"some.permission"}, 123 /* resourceStringId */);
+    }
+
+    @Override
+    public void setUp() {
+        super.setUp();
+        mController = new AdminGrantedPermissionsPreferenceControllerBaseTestable();
+    }
+
+    private class AdminGrantedPermissionsPreferenceControllerBaseTestable extends
+            AdminGrantedPermissionsPreferenceControllerBase {
+
+        AdminGrantedPermissionsPreferenceControllerBaseTestable() {
+            super(AdminGrantedPermissionsPreferenceControllerBaseTest.this.mContext, mPermissions,
+                    mStringResourceId);
+        }
+
+        @Override
+        public String getPreferenceKey() {
+            return null;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
new file mode 100644
index 0000000..610692d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
@@ -0,0 +1,112 @@
+/*
+ * 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.enterprise;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.when;
+
+/**
+ * Common base for testing subclasses of {@link AdminGrantedPermissionsPreferenceControllerBase}.
+ */
+public abstract class AdminGrantedPermissionsPreferenceControllerTestBase {
+
+    protected final String mKey;
+    protected final String[] mPermissions;
+    protected final int mStringResourceId;
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    protected Context mContext;
+    private FakeFeatureFactory mFeatureFactory;
+
+    protected AdminGrantedPermissionsPreferenceControllerBase mController;
+
+    public AdminGrantedPermissionsPreferenceControllerTestBase(String key, String[] permissions,
+            int stringResourceId) {
+        mKey = key;
+        mPermissions = permissions;
+        mStringResourceId = stringResourceId;
+    }
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+    }
+
+    private void setNumberOfPackagesWithAdminGrantedPermissions(int number) {
+        doAnswer(new Answer() {
+            public Object answer(InvocationOnMock invocation) {
+                ((ApplicationFeatureProvider.NumberOfAppsCallback)
+                        invocation.getArguments()[1]).onNumberOfAppsResult(number);
+                return null;
+            }}).when(mFeatureFactory.applicationFeatureProvider)
+                    .calculateNumberOfAppsWithAdminGrantedPermissions(eq(mPermissions),
+                            anyObject());
+    }
+
+    @Test
+    public void testUpdateState() {
+        final Preference preference = new Preference(mContext, null, 0, 0);
+        preference.setVisible(true);
+
+        setNumberOfPackagesWithAdminGrantedPermissions(20);
+        when(mContext.getResources().getQuantityString(mStringResourceId, 20, 20))
+                .thenReturn("20 packages");
+        mController.updateState(preference);
+        assertThat(preference.getTitle()).isEqualTo("20 packages");
+        assertThat(preference.isVisible()).isTrue();
+
+        setNumberOfPackagesWithAdminGrantedPermissions(0);
+        mController.updateState(preference);
+        assertThat(preference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void testIsAvailable() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void testHandlePreferenceTreeClick() {
+        assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
+                .isFalse();
+    }
+
+    @Test
+    public void testGetPreferenceKey() {
+        assertThat(mController.getPreferenceKey()).isEqualTo(mKey);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
index 9a46e14..b55b512 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
@@ -68,8 +68,8 @@
     private void setNumberOfEnterpriseInstalledPackages(int number) {
         doAnswer(new Answer() {
             public Object answer(InvocationOnMock invocation) {
-                ((ApplicationFeatureProvider.NumberOfInstalledAppsCallback)
-                        invocation.getArguments()[1]).onNumberOfInstalledAppsResult(number);
+                ((ApplicationFeatureProvider.NumberOfAppsCallback)
+                        invocation.getArguments()[1]).onNumberOfAppsResult(number);
                 return null;
             }}).when(mFeatureFactory.applicationFeatureProvider)
                     .calculateNumberOfInstalledApps(eq(PackageManager.INSTALL_REASON_POLICY),
@@ -81,6 +81,10 @@
         final Preference preference = new Preference(mContext, null, 0, 0);
         preference.setVisible(true);
 
+        setNumberOfEnterpriseInstalledPackages(0);
+        mController.updateState(preference);
+        assertThat(preference.isVisible()).isFalse();
+
         setNumberOfEnterpriseInstalledPackages(20);
         when(mContext.getResources().getQuantityString(
                 R.plurals.enterprise_privacy_number_enterprise_installed_packages, 20, 20))
@@ -88,10 +92,6 @@
         mController.updateState(preference);
         assertThat(preference.getTitle()).isEqualTo("20 packages");
         assertThat(preference.isVisible()).isTrue();
-
-        setNumberOfEnterpriseInstalledPackages(0);
-        mController.updateState(preference);
-        assertThat(preference.isVisible()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
index be1296c..7724db8 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
@@ -17,12 +17,16 @@
 package com.android.settings.enterprise;
 
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
 import android.net.ProxyInfo;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.text.SpannableStringBuilder;
 
+import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.applications.PackageManagerWrapper;
@@ -34,12 +38,14 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 /**
@@ -50,6 +56,7 @@
 public final class EnterprisePrivacyFeatureProviderImplTest {
 
     private final ComponentName DEVICE_OWNER = new ComponentName("dummy", "component");
+    private final String DEVICE_OWNER_ORGANIZATION = new String("ACME");
     private final Date TIMESTAMP = new Date(2011, 11, 11);
     private final int MY_USER_ID = UserHandle.myUserId();
     private final int MANAGED_PROFILE_USER_ID = MY_USER_ID + 1;
@@ -61,6 +68,7 @@
     private @Mock PackageManagerWrapper mPackageManager;
     private @Mock UserManager mUserManager;
     private @Mock ConnectivityManagerWrapper mConnectivityManger;
+    private Resources mResources;
 
     private EnterprisePrivacyFeatureProvider mProvider;
 
@@ -72,9 +80,10 @@
                 .thenReturn(true);
         when(mUserManager.getProfiles(MY_USER_ID)).thenReturn(mProfiles);
         mProfiles.add(new UserInfo(MY_USER_ID, "", "", 0 /* flags */));
+        mResources = ShadowApplication.getInstance().getApplicationContext().getResources();
 
         mProvider = new EnterprisePrivacyFeatureProviderImpl(mDevicePolicyManager, mPackageManager,
-                mUserManager, mConnectivityManger);
+                mUserManager, mConnectivityManger, mResources);
     }
 
     @Test
@@ -96,6 +105,33 @@
     }
 
     @Test
+    public void testGetDeviceOwnerDisclosure() {
+        final Context context = mock(Context.class);
+
+        when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(null);
+        assertThat(mProvider.getDeviceOwnerDisclosure(context)).isNull();
+
+        SpannableStringBuilder disclosure = new SpannableStringBuilder();
+        disclosure.append(mResources.getString(R.string.do_disclosure_generic));
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more_separator));
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more),
+                new EnterprisePrivacyFeatureProviderImpl.EnterprisePrivacySpan(context), 0);
+        when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(DEVICE_OWNER);
+        when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null);
+        assertThat(mProvider.getDeviceOwnerDisclosure(context)).isEqualTo(disclosure);
+
+        disclosure = new SpannableStringBuilder();
+        disclosure.append(mResources.getString(R.string.do_disclosure_with_name,
+                DEVICE_OWNER_ORGANIZATION));
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more_separator));
+        disclosure.append(mResources.getString(R.string.do_disclosure_learn_more),
+                new EnterprisePrivacyFeatureProviderImpl.EnterprisePrivacySpan(context), 0);
+        when(mDevicePolicyManager.getDeviceOwnerOrganizationName())
+                .thenReturn(DEVICE_OWNER_ORGANIZATION);
+        assertThat(mProvider.getDeviceOwnerDisclosure(context)).isEqualTo(disclosure);
+    }
+
+    @Test
     public void testGetLastSecurityLogRetrievalTime() {
         when(mDevicePolicyManager.getLastSecurityLogRetrievalTime()).thenReturn(-1L);
         assertThat(mProvider.getLastSecurityLogRetrievalTime()).isNull();
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
index 5e4e08f..2559769 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java
@@ -73,17 +73,25 @@
         final List<PreferenceController> controllers = mSettings.getPreferenceControllers(
                 ShadowApplication.getInstance().getApplicationContext());
         assertThat(controllers).isNotNull();
-        assertThat(controllers.size()).isEqualTo(8);
+        assertThat(controllers.size()).isEqualTo(12);
         assertThat(controllers.get(0)).isInstanceOf(InstalledPackagesPreferenceController.class);
         assertThat(controllers.get(1)).isInstanceOf(NetworkLogsPreferenceController.class);
         assertThat(controllers.get(2)).isInstanceOf(BugReportsPreferenceController.class);
         assertThat(controllers.get(3)).isInstanceOf(SecurityLogsPreferenceController.class);
         assertThat(controllers.get(4)).isInstanceOf(
-                AlwaysOnVpnPrimaryUserPreferenceController.class);
-        assertThat(controllers.get(5)).isInstanceOf(
-                AlwaysOnVpnManagedProfilePreferenceController.class);
-        assertThat(controllers.get(6)).isInstanceOf(GlobalHttpProxyPreferenceController.class);
-        assertThat(controllers.get(7)).isInstanceOf(
                 EnterpriseInstalledPackagesPreferenceController.class);
+        assertThat(controllers.get(5)).isInstanceOf(
+                AdminGrantedLocationPermissionsPreferenceController.class);
+        assertThat(controllers.get(6)).isInstanceOf(
+                AdminGrantedMicrophonePermissionPreferenceController.class);
+        assertThat(controllers.get(7)).isInstanceOf(
+                AdminGrantedCameraPermissionPreferenceController.class);
+        assertThat(controllers.get(8)).isInstanceOf(
+                EnterpriseSetDefaultAppsPreferenceController.class);
+        assertThat(controllers.get(9)).isInstanceOf(
+                AlwaysOnVpnPrimaryUserPreferenceController.class);
+        assertThat(controllers.get(10)).isInstanceOf(
+                AlwaysOnVpnManagedProfilePreferenceController.class);
+        assertThat(controllers.get(11)).isInstanceOf(GlobalHttpProxyPreferenceController.class);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceControllerTest.java
new file mode 100644
index 0000000..84520a5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsPreferenceControllerTest.java
@@ -0,0 +1,170 @@
+/*
+ * 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.enterprise;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.MediaStore;
+import android.support.v7.preference.Preference;
+import android.util.ArraySet;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.ApplicationFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import java.util.Set;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests for {@link EnterpriseSetDefaultAppsPreferenceController}.
+ */
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public final class EnterpriseSetDefaultAppsPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    private FakeFeatureFactory mFeatureFactory;
+
+    private EnterpriseSetDefaultAppsPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mController = new EnterpriseSetDefaultAppsPreferenceController(mContext);
+    }
+
+    private static Intent buildIntent(String action, String category, String protocol,
+            String type) {
+        final Intent intent = new Intent(action);
+        if (category != null) {
+            intent.addCategory(category);
+        }
+        if (protocol != null) {
+            intent.setData(Uri.parse(protocol));
+        }
+        if (type != null) {
+            intent.setType(type);
+        }
+        return intent;
+    }
+
+    private void setEnterpriseSetDefaultApps(Intent[] intents, int number) {
+        final Set<ApplicationFeatureProvider.PersistentPreferredActivityInfo> apps
+                = new ArraySet<>(number);
+        for (int i = 0; i < number; i++) {
+            apps.add(new ApplicationFeatureProvider.PersistentPreferredActivityInfo("app", i));
+        }
+        when(mFeatureFactory.applicationFeatureProvider.findPersistentPreferredActivities(
+                argThat(new MatchesIntents(intents)))).thenReturn(apps);
+    }
+
+    @Test
+    public void testUpdateState() {
+        final Preference preference = new Preference(mContext, null, 0, 0);
+        preference.setVisible(true);
+
+        when(mFeatureFactory.applicationFeatureProvider.findPersistentPreferredActivities(
+                anyObject())).thenReturn(
+                        new ArraySet<ApplicationFeatureProvider.PersistentPreferredActivityInfo>());
+        mController.updateState(preference);
+        assertThat(preference.isVisible()).isFalse();
+
+        setEnterpriseSetDefaultApps(new Intent[] {buildIntent(Intent.ACTION_VIEW,
+                Intent.CATEGORY_BROWSABLE, "http:", null)}, 1);
+        setEnterpriseSetDefaultApps(new Intent[] {new Intent(MediaStore.ACTION_IMAGE_CAPTURE),
+                new Intent(MediaStore.ACTION_VIDEO_CAPTURE)}, 2);
+        setEnterpriseSetDefaultApps(new Intent[] {buildIntent(Intent.ACTION_VIEW, null, "geo:",
+                null)}, 4);
+        setEnterpriseSetDefaultApps(new Intent[] {new Intent(Intent.ACTION_SENDTO),
+                new Intent(Intent.ACTION_SEND), new Intent(Intent.ACTION_SEND_MULTIPLE)}, 8);
+        setEnterpriseSetDefaultApps(new Intent[] {buildIntent(Intent.ACTION_INSERT, null, null,
+                "vnd.android.cursor.dir/event")}, 16);
+        setEnterpriseSetDefaultApps(new Intent[] {buildIntent(Intent.ACTION_PICK, null, null,
+                ContactsContract.Contacts.CONTENT_TYPE)}, 32);
+        setEnterpriseSetDefaultApps(new Intent[] {new Intent(Intent.ACTION_DIAL),
+                new Intent(Intent.ACTION_CALL)}, 64);
+        when(mContext.getResources().getQuantityString(
+                R.plurals.enterprise_privacy_number_enterprise_set_default_apps, 127, 127))
+                .thenReturn("127 apps");
+        mController.updateState(preference);
+        assertThat(preference.getTitle()).isEqualTo("127 apps");
+        assertThat(preference.isVisible()).isTrue();
+    }
+
+    @Test
+    public void testIsAvailable() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void testHandlePreferenceTreeClick() {
+        assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
+                .isFalse();
+    }
+
+    @Test
+    public void testGetPreferenceKey() {
+        assertThat(mController.getPreferenceKey())
+                .isEqualTo("number_enterprise_set_default_apps");
+    }
+
+    private static class MatchesIntents extends ArgumentMatcher<Intent[]> {
+        private final Intent[] mExpectedIntents;
+
+        MatchesIntents(Intent[] intents) {
+            mExpectedIntents = intents;
+        }
+
+        @Override
+        public boolean matches(Object object) {
+            final Intent[] actualIntents = (Intent[]) object;
+            if (actualIntents == null) {
+                return false;
+            }
+            if (actualIntents.length != mExpectedIntents.length) {
+                return false;
+            }
+            for (int i = 0; i < mExpectedIntents.length; i++) {
+                if (!mExpectedIntents[i].filterEquals(actualIntents[i])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/enterprise/InstalledPackagesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/InstalledPackagesPreferenceControllerTest.java
index 5a0da66..bf2c4ca 100644
--- a/tests/robotests/src/com/android/settings/enterprise/InstalledPackagesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/InstalledPackagesPreferenceControllerTest.java
@@ -69,8 +69,8 @@
         final Preference preference = new Preference(mContext, null, 0, 0);
         doAnswer(new Answer() {
             public Object answer(InvocationOnMock invocation) {
-                ((ApplicationFeatureProvider.NumberOfInstalledAppsCallback)
-                        invocation.getArguments()[1]).onNumberOfInstalledAppsResult(20);
+                ((ApplicationFeatureProvider.NumberOfAppsCallback)
+                        invocation.getArguments()[1]).onNumberOfAppsResult(20);
                 return null;
             }}).when(mFeatureFactory.applicationFeatureProvider)
                     .calculateNumberOfInstalledApps(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
new file mode 100644
index 0000000..9656381
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.fuelgauge;
+
+import android.content.Context;
+import android.os.PowerManager;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.core.lifecycle.Lifecycle;
+import com.android.settings.widget.MasterSwitchPreference;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BatterySaverControllerTest {
+    @Mock
+    private MasterSwitchPreference mBatterySaverPref;
+    @Mock
+    private PowerManager mPowerManager;
+    @Mock
+    private Context mContext;
+    @Mock
+    private Lifecycle mLifecycle;
+    private BatterySaverController mBatterySaverController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mBatterySaverController = spy(new BatterySaverController(mContext, mLifecycle));
+        ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
+        ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
+        doNothing().when(mBatterySaverController).refreshConditionManager();
+    }
+
+    @Test
+    public void testOnPreferenceChange_TurnOnBatterySaver_BatterySaverOn() {
+        testOnPreferenceChangeInner(true);
+    }
+
+    @Test
+    public void testOnPreferenceChange_TurnOffBatterySaver_BatterySaverOff() {
+        testOnPreferenceChangeInner(false);
+    }
+
+    @Test
+    public void testUpdateState_SaverModeOn_PreferenceChecked() {
+        testUpdateStateInner(true);
+    }
+
+    @Test
+    public void testUpdateState_SaverModeOff_PreferenceUnChecked() {
+        testUpdateStateInner(false);
+    }
+
+    private void testOnPreferenceChangeInner(final boolean saverOn) {
+        when(mPowerManager.setPowerSaveMode(saverOn)).thenReturn(true);
+        when(mPowerManager.isPowerSaveMode()).thenReturn(!saverOn);
+
+        mBatterySaverController.onPreferenceChange(mBatterySaverPref, saverOn);
+        verify(mPowerManager).setPowerSaveMode(saverOn);
+    }
+
+    private void testUpdateStateInner(final boolean saverOn) {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(saverOn);
+
+        mBatterySaverController.updateState(mBatterySaverPref);
+        verify(mBatterySaverPref).setChecked(saverOn);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/HighPowerDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/HighPowerDetailTest.java
new file mode 100644
index 0000000..a60bc65
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/HighPowerDetailTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.fuelgauge;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class HighPowerDetailTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        // Deny means app is whitelisted to opt out of power save restrictions
+        HighPowerDetail.logSpecialPermissionChange(true, "app", mContext);
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY), eq("app"));
+
+        // Allow means app is NOT whitelisted to opt out of power save restrictions
+        HighPowerDetail.logSpecialPermissionChange(false, "app", mContext);
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW), eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 1cf83f1..ea678b6 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -17,6 +17,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Process;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -28,7 +29,6 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
@@ -36,6 +36,9 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH;
 import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO;
 import static com.google.common.truth.Truth.assertThat;
@@ -52,7 +55,9 @@
 public class PowerUsageSummaryTest {
     private static final String[] PACKAGE_NAMES = {"com.app1", "com.app2"};
     private static final int UID = 123;
-
+    private static final int POWER_MAH = 100;
+    private static final double BATTERY_SCREEN_USAGE = 300;
+    private static final double PRECISION = 0.001;
     private static final Intent ADDITIONAL_BATTERY_INFO_INTENT =
             new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
 
@@ -67,7 +72,9 @@
     @Mock
     private MenuInflater mMenuInflater;
     @Mock
-    private BatterySipper mBatterySipper;
+    private BatterySipper mNormalBatterySipper;
+    @Mock
+    private BatterySipper mScreenBatterySipper;
 
     private TestFragment mFragment;
     private FakeFeatureFactory mFeatureFactory;
@@ -94,8 +101,12 @@
 
         mPowerUsageSummary = new PowerUsageSummary();
 
-        when(mBatterySipper.getPackages()).thenReturn(PACKAGE_NAMES);
-        when(mBatterySipper.getUid()).thenReturn(UID);
+        when(mNormalBatterySipper.getPackages()).thenReturn(PACKAGE_NAMES);
+        when(mNormalBatterySipper.getUid()).thenReturn(UID);
+        mNormalBatterySipper.totalPowerMah = POWER_MAH;
+
+        mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
+        mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
     }
 
     @Test
@@ -127,29 +138,73 @@
 
     @Test
     public void testExtractKeyFromSipper_TypeAPPUidObjectNull_ReturnPackageNames() {
-        mBatterySipper.uidObj = null;
-        mBatterySipper.drainType = BatterySipper.DrainType.APP;
+        mNormalBatterySipper.uidObj = null;
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
 
-        final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
-        assertThat(key).isEqualTo(TextUtils.concat(mBatterySipper.getPackages()).toString());
+        final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+        assertThat(key).isEqualTo(TextUtils.concat(mNormalBatterySipper.getPackages()).toString());
     }
 
     @Test
     public void testExtractKeyFromSipper_TypeOther_ReturnDrainType() {
-        mBatterySipper.uidObj = null;
-        mBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
+        mNormalBatterySipper.uidObj = null;
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
 
-        final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
-        assertThat(key).isEqualTo(mBatterySipper.drainType.toString());
+        final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+        assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString());
+    }
+
+    @Test
+    public void testRemoveScreenBatterySipper_ContainsScreenSipper_RemoveAndReturnValue() {
+        final List<BatterySipper> sippers = new ArrayList<>();
+        sippers.add(mNormalBatterySipper);
+        sippers.add(mScreenBatterySipper);
+
+        final double screenUsage = mPowerUsageSummary.removeScreenBatterySipper(sippers);
+        assertThat(sippers).containsExactly(mNormalBatterySipper);
+        assertThat(screenUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE);
     }
 
     @Test
     public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() {
-        mBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
-        mBatterySipper.drainType = BatterySipper.DrainType.APP;
+        mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
 
-        final String key = mPowerUsageSummary.extractKeyFromSipper(mBatterySipper);
-        assertThat(key).isEqualTo(Integer.toString(mBatterySipper.getUid()));
+        final String key = mPowerUsageSummary.extractKeyFromSipper(mNormalBatterySipper);
+        assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid()));
+    }
+
+    @Test
+    public void testShouldHideSipper_TypeIdle_ReturnTrue() {
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
+        assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSipper_TypeCell_ReturnTrue() {
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.CELL;
+        assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSipper_UidRoot_ReturnTrue() {
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
+        when(mNormalBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
+        assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSipper_UidSystem_ReturnTrue() {
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
+        when(mNormalBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
+        assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
+    }
+
+    @Test
+    public void testShouldHideSipper_UidNormal_ReturnFalse() {
+        mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
+        when(mNormalBatterySipper.getUid()).thenReturn(UID);
+        assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isFalse();
     }
 
     public static class TestFragment extends PowerUsageSummary {
diff --git a/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java
new file mode 100644
index 0000000..8a035e5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java
@@ -0,0 +1,69 @@
+package com.android.settings.location;
+
+import android.content.Context;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AppLocationPermissionPreferenceControllerTest {
+    @Mock
+    private Preference mPreference;
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private PreferenceScreen mScreen;
+
+    private AppLocationPermissionPreferenceController mController;
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mScreen.findPreference(anyString())).thenReturn(mPreference);
+        mController = new AppLocationPermissionPreferenceController(mContext);
+    }
+
+    @Test
+    public void displayPreference_shouldRemovePreference() {
+        Settings.System.putInt(mContext.getContentResolver(),
+                android.provider.Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
+                0);
+
+        mController.displayPreference(mScreen);
+
+        verify(mScreen).removePreference(any(Preference.class));
+    }
+
+    @Test
+    public void displayPreference_shouldNotRemovePreference() {
+        Settings.System.putInt(mContext.getContentResolver(),
+                android.provider.Settings.Global.LOCATION_SETTINGS_LINK_TO_PERMISSIONS_ENABLED,
+                1);
+        mController.displayPreference(mScreen);
+
+        verify(mScreen, never()).removePreference(any(Preference.class));
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
index b30e3ff..dc96ed6 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardFragmentTest.java
@@ -21,6 +21,7 @@
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.accounts.UserAndAccountDashboardFragment;
+import com.android.settings.dashboard.DashboardFragmentRegistry;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.drawer.CategoryKey;
 import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/notification/BootSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BootSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..c547c63
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/BootSoundPreferenceControllerTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.os.SystemProperties;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BootSoundPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private SwitchPreference mPreference;
+
+    private BootSoundPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        SettingsShadowSystemProperties.clear();
+        when(mContext.getResources().getBoolean(com.android.settings.R.bool.has_boot_sounds))
+            .thenReturn(true);
+        mController = new BootSoundPreferenceController(mContext);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
+    }
+
+    @Test
+    public void isAvailable_hasBootSounds_shouldReturnTrue() {
+        when(mContext.getResources().getBoolean(
+            com.android.settings.R.bool.has_boot_sounds)).thenReturn(true);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_noBootSounds_shouldReturnFale() {
+        when(mContext.getResources().getBoolean(
+            com.android.settings.R.bool.has_boot_sounds)).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void displayPreference_bootSoundEnabled_shouldCheckedPreference() {
+        SettingsShadowSystemProperties.set(BootSoundPreferenceController.PROPERTY_BOOT_SOUNDS, "1");
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(true);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void displayPreference_bootSoundDisabled_shouldUncheckedPreference() {
+        SettingsShadowSystemProperties.set(BootSoundPreferenceController.PROPERTY_BOOT_SOUNDS, "0");
+
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).setChecked(false);
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void handlePreferenceTreeClick_preferenceChecked_shouldEnableBootSound() {
+        when(mPreference.isChecked()).thenReturn(true);
+
+        mController.handlePreferenceTreeClick(mPreference);
+
+        assertThat(SystemProperties.getBoolean(
+            BootSoundPreferenceController.PROPERTY_BOOT_SOUNDS, true)).isTrue();
+    }
+
+    @Config(shadows = {SettingsShadowSystemProperties.class})
+    @Test
+    public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableBootSound() {
+        when(mPreference.isChecked()).thenReturn(false);
+
+        mController.handlePreferenceTreeClick(mPreference);
+
+        assertThat(SystemProperties.getBoolean(
+            BootSoundPreferenceController.PROPERTY_BOOT_SOUNDS, true)).isFalse();
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ChargingSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ChargingSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..4cdf7c7
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ChargingSoundPreferenceControllerTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.Global;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ChargingSoundPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+
+    private ChargingSoundPreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        mController = new ChargingSoundPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_isAlwaysTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_chargingSoundEnabled_shouldCheckedPreference() {
+        Global.putInt(mContentResolver, Global.CHARGING_SOUNDS_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_chargingSoundDisabled_shouldUncheckedPreference() {
+        Global.putInt(mContentResolver, Global.CHARGING_SOUNDS_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledChargingSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(Global.getInt(mContentResolver, Global.CHARGING_SOUNDS_ENABLED, 1))
+            .isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledChargingSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(Global.getInt(mContentResolver, Global.CHARGING_SOUNDS_ENABLED, 1))
+            .isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java
new file mode 100644
index 0000000..e9410e6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.System;
+import android.telephony.TelephonyManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DialPadTonePreferenceControllerTest {
+
+    @Mock
+    private TelephonyManager mTelephonyManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+
+    private DialPadTonePreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+        when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        mController = new DialPadTonePreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_voiceCapable_shouldReturnTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_notVoiceCapable_shouldReturnFalse() {
+        when(mTelephonyManager.isVoiceCapable()).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_dialToneEnabled_shouldCheckedPreference() {
+        System.putInt(mContentResolver, System.DTMF_TONE_WHEN_DIALING, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_dialToneDisabled_shouldUncheckedPreference() {
+        System.putInt(mContentResolver, System.DTMF_TONE_WHEN_DIALING, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledDialTone() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(System.getInt(mContentResolver, System.DTMF_TONE_WHEN_DIALING, 1)).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledDialTone() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(System.getInt(mContentResolver, System.DTMF_TONE_WHEN_DIALING, 1)).isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/DockAudioMediaPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DockAudioMediaPreferenceControllerTest.java
new file mode 100644
index 0000000..bc6eb3a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/DockAudioMediaPreferenceControllerTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v7.preference.DropDownPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.Global;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DockAudioMediaPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private DockAudioMediaPreferenceController mController;
+    private DropDownPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        final Context appContext = ShadowApplication.getInstance().getApplicationContext();
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        when(mActivity.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(true);
+        when(mActivity.getResources().getString(anyInt())).thenReturn("test string");
+        mPreference = new DropDownPreference(appContext);
+        mController = new DockAudioMediaPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_hasDockSettings_shouldReturnTrue() {
+        when(mContext.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(true);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_noDockSettings_shouldReturnFalse() {
+        when(mContext.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_dockAudioDisabled_shouldSelectFirstItem() {
+        Global.putInt(mContentResolver, Global.DOCK_AUDIO_MEDIA_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getValue()).isEqualTo("0");
+    }
+
+    @Test
+    public void displayPreference_dockAudioEnabled_shouldSelectSecondItem() {
+        Global.putInt(mContentResolver, Global.DOCK_AUDIO_MEDIA_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getValue()).isEqualTo("1");
+    }
+
+    @Test
+    public void onPreferenceChanged_firstItemSelected_shouldDisableDockAudio() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, "0");
+
+        assertThat(Global.getInt(mContentResolver, Global.DOCK_AUDIO_MEDIA_ENABLED, 0))
+            .isEqualTo(0);
+    }
+
+    @Test
+    public void onPreferenceChanged_secondItemSelected_shouldEnableDockAudio() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, "1");
+
+        assertThat(Global.getInt(mContentResolver, Global.DOCK_AUDIO_MEDIA_ENABLED, 0))
+            .isEqualTo(1);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/DockingSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DockingSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..3350fb9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/DockingSoundPreferenceControllerTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.Global;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DockingSoundPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock(answer = RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private DockingSoundPreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        when(mActivity.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(true);
+        mController = new DockingSoundPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_hasDockSettings_shouldReturnTrue() {
+        when(mContext.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(true);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_noDockSettings_shouldReturnFalse() {
+        when(mContext.getResources().getBoolean(com.android.settings.R.bool.has_dock_settings))
+            .thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_dockingSoundEnabled_shouldCheckedPreference() {
+        Global.putInt(mContentResolver, Global.DOCK_SOUNDS_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_dockingSoundDisabled_shouldUncheckedPreference() {
+        Global.putInt(mContentResolver, Global.DOCK_SOUNDS_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledDockingSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(Global.getInt(mContentResolver, Global.DOCK_SOUNDS_ENABLED, 1)).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledDockingSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(Global.getInt(mContentResolver, Global.DOCK_SOUNDS_ENABLED, 1)).isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/EmergencyTonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/EmergencyTonePreferenceControllerTest.java
new file mode 100644
index 0000000..0124566
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/EmergencyTonePreferenceControllerTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v7.preference.DropDownPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.Global;
+import android.telephony.TelephonyManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class EmergencyTonePreferenceControllerTest {
+
+    @Mock
+    private TelephonyManager mTelephonyManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+
+    private EmergencyTonePreferenceController mController;
+    private DropDownPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        final Context appContext = ShadowApplication.getInstance().getApplicationContext();
+        when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+        when(mTelephonyManager.getCurrentPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_CDMA);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        when(mActivity.getResources()).thenReturn(appContext.getResources());
+        mPreference = new DropDownPreference(appContext);
+        mController = new EmergencyTonePreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_cdma_shouldReturnTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_notCdma_shouldReturnFalse() {
+        when(mTelephonyManager.getCurrentPhoneType()).thenReturn(TelephonyManager.PHONE_TYPE_GSM);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_emergencyToneOff_shouldSelectFirstItem() {
+        Global.putInt(mContentResolver, Global.EMERGENCY_TONE, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getValue()).isEqualTo("0");
+    }
+
+    @Test
+    public void displayPreference_emergencyToneAlert_shouldSelectSecondItem() {
+        Global.putInt(mContentResolver, Global.EMERGENCY_TONE, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getValue()).isEqualTo("1");
+    }
+
+    @Test
+    public void displayPreference_emergencyToneVibrate_shouldSelectThirdItem() {
+        Global.putInt(mContentResolver, Global.EMERGENCY_TONE, 2);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getValue()).isEqualTo("2");
+    }
+
+    @Test
+    public void onPreferenceChanged_firstItemSelected_shouldSetEmergencyToneToOff() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, "0");
+
+        assertThat(Global.getInt(mContentResolver, Global.EMERGENCY_TONE, 0)).isEqualTo(0);
+    }
+
+    @Test
+    public void onPreferenceChanged_secondItemSelected_shouldSetEmergencyToneToAlert() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, "1");
+
+        assertThat(Global.getInt(mContentResolver, Global.EMERGENCY_TONE, 0)).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_thirdItemSelected_shouldSetEmergencyToneToVibrate() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, "2");
+
+        assertThat(Global.getInt(mContentResolver, Global.EMERGENCY_TONE, 0)).isEqualTo(2);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationAccessSettingsTest.java b/tests/robotests/src/com/android/settings/notification/NotificationAccessSettingsTest.java
new file mode 100644
index 0000000..b0aa856
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/NotificationAccessSettingsTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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 com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class NotificationAccessSettingsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+    private NotificationAccessSettings mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFragment = new NotificationAccessSettings();
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        mFragment.logSpecialPermissionChange(true, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_NOTIVIEW_ALLOW),
+                eq("app"));
+
+        mFragment.logSpecialPermissionChange(false, "app");
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_NOTIVIEW_DENY),
+                eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ScreenLockSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ScreenLockSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..8963a5d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ScreenLockSoundPreferenceControllerTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.System;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ScreenLockSoundPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+
+    private ScreenLockSoundPreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        mController = new ScreenLockSoundPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_isAlwaysTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_lockScreenSoundEnabled_shouldCheckedPreference() {
+        System.putInt(mContentResolver, System.LOCKSCREEN_SOUNDS_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_lockScreenSoundDisabled_shouldUncheckedPreference() {
+        System.putInt(mContentResolver, System.LOCKSCREEN_SOUNDS_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledLockScreenSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(System.getInt(mContentResolver, System.LOCKSCREEN_SOUNDS_ENABLED, 1))
+            .isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledLockScreenSound() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(System.getInt(mContentResolver, System.LOCKSCREEN_SOUNDS_ENABLED, 1))
+            .isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java b/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java
new file mode 100644
index 0000000..b36b19b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SettingPrefControllerTest.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings.Global;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.core.lifecycle.Lifecycle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.shadows.ShadowApplication;
+
+import static com.android.settings.notification.SettingPref.TYPE_GLOBAL;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SettingPrefControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private OtherSoundSettings mSetting;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+
+    private Context mContext;
+    private PreferenceControllerTestable mController;
+    private SettingPref mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(ShadowApplication.getInstance().getApplicationContext());
+        when(mContext.getContentResolver()).thenReturn(mContentResolver);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+        mController = new PreferenceControllerTestable(mContext, mSetting, null);
+        mPreference = mController.getPref();
+    }
+
+    @Test
+    public void displayPreference_shouldInitPreference() {
+        mController.displayPreference(mScreen);
+
+        verify(mPreference).init(mSetting);
+    }
+
+    @Test
+    public void isAvailable_shouldCallisApplicable() {
+        mController.isAvailable();
+
+        verify(mPreference).isApplicable(mContext);
+    }
+
+    @Test
+    public void getPreferenceKey_shouldReturnPrefKey() {
+        assertThat(mController.getPreferenceKey()).isEqualTo(mController.KEY_TEST);
+    }
+
+    @Test
+    public void updateState_shouldUpdatePreference() {
+        mController.updateState(null);
+
+        verify(mPreference).update(mContext);
+    }
+
+    @Test
+    public void onResume_shouldRegisterContentObserver() {
+        mController.displayPreference(mScreen);
+        mController.onResume();
+
+        verify(mContentResolver).registerContentObserver(
+            Global.getUriFor("Setting1"), false, mController.getObserver());
+    }
+
+    @Test
+    public void onPause_shouldUnregisterContentObserver() {
+        mController.displayPreference(mScreen);
+        mController.onPause();
+
+        verify(mContentResolver).unregisterContentObserver(mController.getObserver());
+    }
+
+    @Test
+    public void onContentChange_shouldUpdatePreference() {
+        mController.displayPreference(mScreen);
+        mController.onResume();
+        mController.getObserver().onChange(false, Global.getUriFor("Setting1"));
+
+        verify(mPreference).update(mContext);
+    }
+
+    @Test
+    public void updateNonIndexableKeys_applicable_shouldNotUpdate() {
+        final List<String> keys = new ArrayList<>();
+
+        mController.updateNonIndexableKeys(keys);
+
+        assertThat(keys).isEmpty();
+    }
+
+    @Test
+    public void updateNonIndexableKeys_notApplicable_shouldUpdate() {
+        mController.setApplicable(false);
+        final List<String> keys = new ArrayList<>();
+
+        mController.updateNonIndexableKeys(keys);
+
+        assertThat(keys).isNotEmpty();
+    }
+
+    private class PreferenceControllerTestable extends SettingPrefController {
+
+        private static final String KEY_TEST = "key1";
+        private boolean mApplicable = true;
+
+        public PreferenceControllerTestable(Context context, SettingsPreferenceFragment parent,
+            Lifecycle lifecycle) {
+            super(context, parent, lifecycle);
+            mPreference = spy(new SettingPref(
+                TYPE_GLOBAL, KEY_TEST, "Setting1", 1) {
+                @Override
+                public boolean isApplicable(Context context) {
+                    return mApplicable;
+                }
+            });
+        }
+
+        SettingPref getPref() {
+            return mPreference;
+        }
+
+        PreferenceControllerTestable.SettingsObserver getObserver() {
+            return mSettingsObserver;
+        }
+
+        void setApplicable(boolean applicable) {
+            mApplicable = applicable;
+        }
+
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/notification/TouchSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/TouchSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..f530f66
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/TouchSoundPreferenceControllerTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.media.AudioManager;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.System;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class TouchSoundPreferenceControllerTest {
+
+    @Mock
+    private AudioManager mAudioManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+
+    private TouchSoundPreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        mController = new TouchSoundPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_isAlwaysTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_soundEffectEnabled_shouldCheckedPreference() {
+        System.putInt(mContentResolver, System.SOUND_EFFECTS_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_soundEffectDisabled_shouldUncheckedPreference() {
+        System.putInt(mContentResolver, System.SOUND_EFFECTS_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledSoundEffect() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(System.getInt(mContentResolver, System.SOUND_EFFECTS_ENABLED, 1)).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledSoundEffect() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(System.getInt(mContentResolver, System.SOUND_EFFECTS_ENABLED, 1)).isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java
new file mode 100644
index 0000000..440b69e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.Vibrator;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings.System;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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.shadows.ShadowApplication;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class VibrateOnTouchPreferenceControllerTest {
+
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private SoundSettings mSetting;
+    @Mock
+    private Context mContext;
+    @Mock
+    private Vibrator mVibrator;
+
+    private VibrateOnTouchPreferenceController mController;
+    private SwitchPreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mActivity.getSystemService(Context.VIBRATOR_SERVICE)).thenReturn(mVibrator);
+        when(mContext.getSystemService(Context.VIBRATOR_SERVICE)).thenReturn(mVibrator);
+        when(mVibrator.hasVibrator()).thenReturn(true);
+        when(mSetting.getActivity()).thenReturn(mActivity);
+        when(mActivity.getContentResolver()).thenReturn(mContentResolver);
+        mPreference = new SwitchPreference(ShadowApplication.getInstance().getApplicationContext());
+        mController = new VibrateOnTouchPreferenceController(mContext, mSetting, null);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        doReturn(mScreen).when(mSetting).getPreferenceScreen();
+    }
+
+    @Test
+    public void isAvailable_hasHaptic_shouldReturnTrue() {
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_noHaptic_shouldReturnFalse() {
+        when(mVibrator.hasVibrator()).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void displayPreference_hapticEnabled_shouldCheckedPreference() {
+        System.putInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void displayPreference_hapticDisabled_shouldUncheckedPreference() {
+        System.putInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 0);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceChecked_shouldEnabledHaptic() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
+
+        assertThat(System.getInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1)).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceChanged_preferenceUnchecked_shouldDisabledHaptic() {
+        mController.displayPreference(mScreen);
+
+        mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
+
+        assertThat(System.getInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1)).isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java
index 4d8101f..bb19533 100644
--- a/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/WorkSoundPreferenceControllerTest.java
@@ -114,17 +114,8 @@
                 .thenReturn(UserHandle.myUserId());
         when(mAudioHelper.isSingleVolume()).thenReturn(false);
         when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
-        when(mScreen.findPreference(KEY_WORK_CATEGORY))
-            .thenReturn(mock(PreferenceGroup.class));
-        when(mScreen.findPreference(KEY_WORK_USE_PERSONAL_SOUNDS))
-            .thenReturn(mock(TwoStatePreference.class));
-        when(mScreen.findPreference(KEY_WORK_PHONE_RINGTONE))
-            .thenReturn(mock(DefaultRingtonePreference.class));
-        when(mScreen.findPreference(KEY_WORK_NOTIFICATION_RINGTONE))
-            .thenReturn(mock(DefaultRingtonePreference.class));
-        when(mScreen.findPreference(KEY_WORK_ALARM_RINGTONE))
-            .thenReturn(mock(DefaultRingtonePreference.class));
         when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
+        mockWorkCategory();
 
         mController.onResume();
 
@@ -132,6 +123,50 @@
     }
 
     @Test
+    public void onManagedProfileAdded_shouldAddPreferenceCategory() {
+        // Given a device without any managed profiles:
+        when(mAudioHelper.isSingleVolume()).thenReturn(false);
+        when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
+        when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
+        when(mAudioHelper.getManagedProfileId(any(UserManager.class)))
+                .thenReturn(UserHandle.USER_NULL);
+        mockWorkCategory();
+
+        // When the fragment first resumes, the category should not appear.
+        mController.onResume();
+
+        verify(mFragment, never()).addPreferencesFromResource(R.xml.sound_work_settings);
+
+        // However, when a managed profile is added after resuming, the category should appear.
+        when(mAudioHelper.getManagedProfileId(any(UserManager.class)))
+                .thenReturn(UserHandle.myUserId());
+        mController.onManagedProfileAdded(UserHandle.myUserId());
+
+        verify(mFragment).addPreferencesFromResource(R.xml.sound_work_settings);
+    }
+
+    @Test
+    public void onManagedProfileRemoved_shouldRemovePreferenceCategory() {
+        // Given a device with a managed profile:
+        when(mAudioHelper.isSingleVolume()).thenReturn(false);
+        when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
+        when(mAudioHelper.createPackageContextAsUser(anyInt())).thenReturn(mContext);
+        when(mAudioHelper.getManagedProfileId(any(UserManager.class)))
+                .thenReturn(UserHandle.myUserId());
+        mockWorkCategory();
+
+        // Which is in resumed state:
+        mController.onResume();
+
+        // When a managed profile is removed, the category should be removed.
+        when(mAudioHelper.getManagedProfileId(any(UserManager.class)))
+                .thenReturn(UserHandle.USER_NULL);
+        mController.onManagedProfileRemoved(UserHandle.myUserId());
+
+        verify(mScreen).removePreference(mScreen.findPreference(KEY_WORK_CATEGORY));
+    }
+
+    @Test
     public void onResume_notAvailable_shouldNotAddPreferenceCategory() {
         when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
         when(mAudioHelper.getManagedProfileId(any(UserManager.class)))
@@ -154,4 +189,16 @@
         verify(preference).setSummary(anyString());
     }
 
+    private void mockWorkCategory() {
+        when(mScreen.findPreference(KEY_WORK_CATEGORY))
+            .thenReturn(mock(PreferenceGroup.class));
+        when(mScreen.findPreference(KEY_WORK_USE_PERSONAL_SOUNDS))
+            .thenReturn(mock(TwoStatePreference.class));
+        when(mScreen.findPreference(KEY_WORK_PHONE_RINGTONE))
+            .thenReturn(mock(DefaultRingtonePreference.class));
+        when(mScreen.findPreference(KEY_WORK_NOTIFICATION_RINGTONE))
+            .thenReturn(mock(DefaultRingtonePreference.class));
+        when(mScreen.findPreference(KEY_WORK_ALARM_RINGTONE))
+            .thenReturn(mock(DefaultRingtonePreference.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/ZenAccessSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenAccessSettingsTest.java
new file mode 100644
index 0000000..854edcd
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ZenAccessSettingsTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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 com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ZenAccessSettingsTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    private FakeFeatureFactory mFeatureFactory;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+    }
+
+    @Test
+    public void logSpecialPermissionChange() {
+        ZenAccessSettings.logSpecialPermissionChange(true, "app", mContext);
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_DND_ALLOW),
+                eq("app"));
+
+        ZenAccessSettings.logSpecialPermissionChange(false, "app", mContext);
+        verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
+                eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_DND_DENY),
+                eq("app"));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
index 8b363b0..e89f009 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java
@@ -21,10 +21,13 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.provider.SearchIndexableResource;
+
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
 import com.android.settings.search2.DatabaseIndexingManager;
+import com.android.settings.testutils.DatabaseTestUtils;
 
 import org.junit.After;
 import org.junit.Before;
@@ -33,13 +36,14 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
+import static com.android.settings.dashboard.SiteMapManager.SITE_MAP_COLUMNS;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.spy;
 
@@ -48,7 +52,7 @@
 public class DatabaseIndexingManagerTest {
     private final String localeStr = "en_US";
 
-    private final int rank = 42;
+    private final int rank = 8;
     private final String title = "title\u2011title";
     private final String updatedTitle = "title-title";
     private final String normalizedTitle = "titletitle";
@@ -56,7 +60,7 @@
     private final String updatedSummaryOn = "summary-on";
     private final String normalizedSummaryOn = "summaryon";
     private final String summaryOff = "summary\u2011off";
-    private final String updatedSummaryOff ="summary-off";
+    private final String updatedSummaryOff = "summary-off";
     private final String normalizedSummaryOff = "summaryoff";
     private final String entries = "entries";
     private final String keywords = "keywords, keywordss, keywordsss";
@@ -85,15 +89,7 @@
 
     @After
     public void cleanUp() {
-        Field instance;
-        Class clazz = IndexDatabaseHelper.class;
-        try {
-            instance = clazz.getDeclaredField("sSingleton");
-            instance.setAccessible(true);
-            instance.set(null, null);
-        } catch (Exception e) {
-            throw new RuntimeException();
-        }
+        DatabaseTestUtils.clearDb();
     }
 
     @Test
@@ -101,7 +97,7 @@
         Cursor dbCursor = mDb.query("prefs_index", null, null, null, null, null, null);
         List<String> columnNames = new ArrayList<>(Arrays.asList(dbCursor.getColumnNames()));
         // Note that docid is not included.
-        List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[ ]{
+        List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[]{
                 "locale",
                 "data_rank",
                 "data_title",
@@ -203,7 +199,7 @@
     @Test
     public void testNullResource_NothingInserted() {
         mManager.indexOneSearchIndexableData(mDb, localeStr, null /* searchIndexableResource */,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         assertThat(cursor.getCount()).isEqualTo(0);
     }
@@ -212,16 +208,30 @@
     public void testAddResource_RowsInserted() {
         SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         assertThat(cursor.getCount()).isEqualTo(6);
     }
 
     @Test
+    public void testAddResourceWithNIKs_RowsInsertedDisabled() {
+        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+        // Only add 2 of 6 items to be disabled.
+        String[] keys = {"gesture_double_tap_power", "gesture_swipe_down_fingerprint"};
+        Map<String, List<String>> niks = getNonIndexableKeys(keys);
+        mManager.indexOneSearchIndexableData(mDb, localeStr, resource, niks);
+
+        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
+        assertThat(cursor.getCount()).isEqualTo(2);
+        cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
+        assertThat(cursor.getCount()).isEqualTo(4);
+    }
+
+    @Test
     public void testAddResourceHeader_RowsMatch() {
         SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
 
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
         cursor.moveToPosition(1);
@@ -271,28 +281,53 @@
     }
 
     @Test
+    public void testAddResourceWithChildFragment_shouldUpdateSiteMapDb() {
+        SearchIndexableResource resource = getFakeResource(R.xml.network_and_internet);
+        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
+                new HashMap<>());
+        Cursor query = mDb.query(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, SITE_MAP_COLUMNS,
+                null, null, null, null, null);
+        query.moveToPosition(-1);
+        int count = 0;
+        while (query.moveToNext()) {
+            count++;
+            assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_CLASS)))
+                    .isEqualTo(className);
+            assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_TITLE)))
+                    .isEqualTo(mContext.getString(R.string.network_dashboard_title));
+            assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_CLASS)))
+                    .isNotEmpty();
+            assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_TITLE)))
+                    .isNotEmpty();
+        }
+        assertThat(count).isEqualTo(5);
+    }
+
+    @Test
     public void testAddResourceCustomSetting_RowsMatch() {
         SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
-
-        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
-        cursor.moveToPosition(0);
+                new HashMap<>());
+        final String prefTitle =
+                mContext.getString(R.string.fingerprint_swipe_for_notifications_title);
+        final String prefSummary =
+                mContext.getString(R.string.fingerprint_swipe_for_notifications_summary);
+        Cursor cursor = mDb.rawQuery(
+                "SELECT * FROM prefs_index where data_title='" + prefTitle + "'", null);
+        cursor.moveToFirst();
 
         // Locale
         assertThat(cursor.getString(0)).isEqualTo(localeStr);
         // Data Rank
         assertThat(cursor.getInt(1)).isEqualTo(rank);
         // Data Title
-        assertThat(cursor.getString(2)).isEqualTo("Swipe for notifications");
+        assertThat(cursor.getString(2)).isEqualTo(prefTitle);
         // Normalized Title
-        assertThat(cursor.getString(3)).isEqualTo("swipe for notifications");
+        assertThat(cursor.getString(3)).isEqualTo(prefTitle.toLowerCase());
         // Summary On
-        assertThat(cursor.getString(4)).isEqualTo("To check your notifications, " +
-                "swipe down on the fingerprint sensor on the back of your phone.");
+        assertThat(cursor.getString(4)).isEqualTo(prefSummary);
         // Summary On Normalized
-        assertThat(cursor.getString(5)).isEqualTo("to check your notifications, " +
-                "swipe down on the fingerprint sensor on the back of your phone.");
+        assertThat(cursor.getString(5)).isEqualTo(prefSummary.toLowerCase());
         // Summary Off - only on for checkbox preferences
         assertThat(cursor.getString(6)).isEmpty();
         // Summary off normalized - only on for checkbox preferences
@@ -302,7 +337,8 @@
         // Keywords
         assertThat(cursor.getString(9)).isEmpty();
         // Screen Title
-        assertThat(cursor.getString(10)).isEqualTo("Gestures");
+        assertThat(cursor.getString(10)).isEqualTo(
+                mContext.getString(R.string.gesture_preference_title));
         // Class Name
         assertThat(cursor.getString(11)).isEqualTo(className);
         // Icon
@@ -329,7 +365,7 @@
     public void testAddResourceCheckboxPreference_RowsMatch() {
         SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
 
         /* Should return 6 results, with the following titles:
          * Advanced Settings, Apps, Manage Apps, Preferred install location, Running Services
@@ -384,7 +420,7 @@
     public void testAddResourceListPreference_RowsMatch() {
         SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
 
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
         cursor.moveToPosition(3);
@@ -397,16 +433,18 @@
         // Normalized Title
         assertThat(cursor.getString(3)).isEqualTo("preferred install location");
         // Summary On
-        assertThat(cursor.getString(4)).isEqualTo("Change the preferred installation location for new apps");
+        assertThat(cursor.getString(4)).isEqualTo(
+                "Change the preferred installation location for new apps");
         // Summary On Normalized
-        assertThat(cursor.getString(5)).isEqualTo("change the preferred installation location for new apps");
+        assertThat(cursor.getString(5)).isEqualTo(
+                "change the preferred installation location for new apps");
         // Summary Off - only on for checkbox preferences
         assertThat(cursor.getString(6)).isEmpty();
         // Summary off normalized - only on for checkbox preferences
         assertThat(cursor.getString(7)).isEmpty();
         // Entries - only on for list preferences
         assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" +
-                        "Let the system decide|");
+                "Let the system decide|");
         // Keywords
         assertThat(cursor.getString(9)).isEmpty();
         // Screen Title
@@ -443,7 +481,7 @@
         resource.className = "com.android.settings.display.ScreenZoomSettings";
 
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         assertThat(cursor.getCount()).isEqualTo(1);
     }
@@ -455,7 +493,7 @@
         resource.className = "com.android.settings.display.ScreenZoomSettings";
 
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
         cursor.moveToPosition(0);
 
@@ -506,24 +544,22 @@
 
     @Test
     public void testResourceProvider_ResourceRowInserted() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
-        resource.xmlResId = 0;
+        SearchIndexableResource resource = getFakeResource(0);
         resource.className = "com.android.settings.LegalSettings";
 
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
-        assertThat(cursor.getCount()).isEqualTo(2);
+        assertThat(cursor.getCount()).isEqualTo(6);
     }
 
     @Test
     public void testResourceProvider_ResourceRowMatches() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
-        resource.xmlResId = 0;
-        resource.className = "com.android.settings.LegalSettings";
+        SearchIndexableResource resource = getFakeResource(0);
+        resource.className = "com.android.settings.display.ScreenZoomSettings";
 
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
-                new HashMap<String, List<String>>());
+                new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
         cursor.moveToPosition(0);
 
@@ -532,9 +568,9 @@
         // Data Rank
         assertThat(cursor.getInt(1)).isEqualTo(rank);
         // Data Title
-        assertThat(cursor.getString(2)).isEqualTo("Legal information");
+        assertThat(cursor.getString(2)).isEqualTo("Display size");
         // Normalized Title
-        assertThat(cursor.getString(3)).isEqualTo("legal information");
+        assertThat(cursor.getString(3)).isEqualTo("display size");
         // Summary On
         assertThat(cursor.getString(4)).isEmpty();
         // Summary On Normalized
@@ -546,12 +582,13 @@
         // Entries - only on for list preferences
         assertThat(cursor.getString(8)).isNull();
         // Keywords
-        assertThat(cursor.getString(9)).isEmpty();
+        assertThat(cursor.getString(9)).isEqualTo(
+                "display density screen zoom scale scaling");
         // Screen Title
-        assertThat(cursor.getString(10)).isEqualTo("Legal information");
+        assertThat(cursor.getString(10)).isEqualTo("Display size");
         // Class Name
         assertThat(cursor.getString(11))
-                .isEqualTo("com.android.settings.LegalSettings");
+                .isEqualTo("com.android.settings.display.ScreenZoomSettings");
         // Icon
         assertThat(cursor.getInt(12)).isEqualTo(iconResId);
         // Intent Action
@@ -572,6 +609,20 @@
         assertThat(cursor.getBlob(20)).isNull();
     }
 
+    @Test
+    public void testResourceProvider_DisabledResourceRowsInserted() {
+        SearchIndexableResource resource = getFakeResource(0);
+        resource.className = "com.android.settings.LegalSettings";
+
+        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
+                new HashMap<String, List<String>>());
+
+        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
+        assertThat(cursor.getCount()).isEqualTo(2);
+        cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
+        assertThat(cursor.getCount()).isEqualTo(4);
+    }
+
     // Util functions
 
     private SearchIndexableRaw getFakeRaw() {
@@ -613,4 +664,11 @@
         sir.enabled = enabled;
         return sir;
     }
-}
+
+    private Map<String, List<String>> getNonIndexableKeys(String[] keys) {
+        Map<String, List<String>> niks = new HashMap<>();
+        List<String> keysList = new ArrayList<>(Arrays.asList(keys));
+        niks.put(packageName, keysList);
+        return niks;
+    }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseResultLoaderTest.java b/tests/robotests/src/com/android/settings/search/DatabaseResultLoaderTest.java
index c592aef..6368fcb 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseResultLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseResultLoaderTest.java
@@ -20,72 +20,86 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
+
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.search2.DatabaseIndexingUtils;
 import com.android.settings.search2.DatabaseResultLoader;
+import com.android.settings.testutils.DatabaseTestUtils;
+import com.android.settings.testutils.FakeFeatureFactory;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
-import java.lang.reflect.Field;
-
 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.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class DatabaseResultLoaderTest {
-    private Context mContext;
 
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mMockContext;
+    @Mock
+    private SiteMapManager mSiteMapManager;
+    private Context mContext;
     private DatabaseResultLoader loader;
 
     SQLiteDatabase mDb;
 
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
+        FakeFeatureFactory.setupForTest(mMockContext);
+        FakeFeatureFactory factory =
+                (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
+        when(factory.searchFeatureProvider.getSiteMapManager())
+                .thenReturn(mSiteMapManager);
         mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
         setUpDb();
     }
 
     @After
     public void cleanUp() {
-        Field instance;
-        Class clazz = IndexDatabaseHelper.class;
-        try {
-            instance = clazz.getDeclaredField("sSingleton");
-            instance.setAccessible(true);
-            instance.set(null, null);
-        } catch (Exception e) {
-            throw new RuntimeException();
-        }
+        DatabaseTestUtils.clearDb();
     }
 
     @Test
     public void testMatchTitle() {
         loader = new DatabaseResultLoader(mContext, "title");
-        assertThat(loader.loadInBackground().size()).isEqualTo(3);
+        assertThat(loader.loadInBackground().size()).isEqualTo(2);
+        verify(mSiteMapManager, times(2)).buildBreadCrumb(eq(mContext), anyString(), anyString());
     }
 
     @Test
     public void testMatchSummary() {
         loader = new DatabaseResultLoader(mContext, "summary");
-        assertThat(loader.loadInBackground().size()).isEqualTo(3);
+        assertThat(loader.loadInBackground().size()).isEqualTo(2);
     }
 
     @Test
     public void testMatchKeywords() {
         loader = new DatabaseResultLoader(mContext, "keywords");
-        assertThat(loader.loadInBackground().size()).isEqualTo(3);
+        assertThat(loader.loadInBackground().size()).isEqualTo(2);
     }
 
     @Test
     public void testMatchEntries() {
         loader = new DatabaseResultLoader(mContext, "entries");
-        assertThat(loader.loadInBackground().size()).isEqualTo(3);
+        assertThat(loader.loadInBackground().size()).isEqualTo(2);
     }
 
     @Test
@@ -130,6 +144,62 @@
         assertThat(loader.loadInBackground().size()).isEqualTo(1);
     }
 
+    @Test
+    public void testSpecialCasePrefix_MatchesPrefixOfEntry() {
+        insertSpecialCase("Photos");
+        loader = new DatabaseResultLoader(mContext, "pho");
+        assertThat(loader.loadInBackground().size()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSpecialCasePrefix_DoesNotMatchNonPrefixSubstring() {
+        insertSpecialCase("Photos");
+        loader = new DatabaseResultLoader(mContext, "hot");
+        assertThat(loader.loadInBackground().size()).isEqualTo(0);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefix_MatchesPrefixOfEntry() {
+        insertSpecialCase("Apps Notifications");
+        loader = new DatabaseResultLoader(mContext, "Apps");
+        assertThat(loader.loadInBackground().size()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefix_MatchesSecondWordPrefixOfEntry() {
+        insertSpecialCase("Apps Notifications");
+        loader = new DatabaseResultLoader(mContext, "Not");
+        assertThat(loader.loadInBackground().size()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfFirstEntry() {
+        insertSpecialCase("Apps Notifications");
+        loader = new DatabaseResultLoader(mContext, "pp");
+        assertThat(loader.loadInBackground().size()).isEqualTo(0);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfSecondEntry() {
+        insertSpecialCase("Apps Notifications");
+        loader = new DatabaseResultLoader(mContext, "tion");
+        assertThat(loader.loadInBackground().size()).isEqualTo(0);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefixWithSpecial_MatchesPrefixOfEntry() {
+        insertSpecialCase("Apps & Notifications");
+        loader = new DatabaseResultLoader(mContext, "App");
+        assertThat(loader.loadInBackground().size()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSpecialCaseMultiWordPrefixWithSpecial_MatchesPrefixOfSecondEntry() {
+        insertSpecialCase("Apps & Notifications");
+        loader = new DatabaseResultLoader(mContext, "No");
+        assertThat(loader.loadInBackground().size()).isEqualTo(1);
+    }
+
     private void insertSpecialCase(String specialCase) {
         String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase);
         normalized = DatabaseIndexingUtils.normalizeString(normalized);
@@ -153,7 +223,7 @@
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
-        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
+        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -170,11 +240,11 @@
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "alpha_title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "alpha title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "alpha_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha_summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha summary");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "alpha_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha_entries");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha_keywords");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha entries");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha keywords");
         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
                 "com.android.settings.gestures.GestureSettings");
         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
@@ -182,7 +252,7 @@
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
-        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
+        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -197,11 +267,11 @@
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "bravo_title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "bravo title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "bravo_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo_summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo summary");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "bravo_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo_entries");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo_keywords");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo entries");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo keywords");
         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
                 "com.android.settings.gestures.GestureSettings");
         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
@@ -209,7 +279,7 @@
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
-        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
+        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -223,11 +293,11 @@
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "charlie_title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "charlie title");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "charlie_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie_summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie summary");
         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "charlie_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie_summary");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie_entries");
-        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie_keywords");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie summary");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie entries");
+        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie keywords");
         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
                 "com.android.settings.gestures.GestureSettings");
         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
@@ -235,7 +305,7 @@
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
-        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
+        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, false);
         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
diff --git a/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java b/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java
new file mode 100644
index 0000000..35486ef
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search/FakeIndexProvider.java
@@ -0,0 +1,52 @@
+/*
+ * 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.search;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+import com.android.settings.core.PreferenceController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FakeIndexProvider  implements Indexable {
+
+    public static final String KEY = "TestKey";
+
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                        boolean enabled) {
+                    return null;
+                }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    ArrayList<String> result = new ArrayList<>();
+                    result.add(KEY);
+                    return result;
+                }
+
+                @Override
+                public List<PreferenceController> getPreferenceControllers(Context context) {
+                    return null;
+                }
+            };
+
+}
diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
index 3874479..7a2499b 100644
--- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
@@ -41,6 +41,7 @@
 import org.robolectric.shadows.ShadowApplication;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
@@ -73,6 +74,7 @@
         assertThat(mHolder.titleView).isNotNull();
         assertThat(mHolder.summaryView).isNotNull();
         assertThat(mHolder.iconView).isNotNull();
+        assertThat(mHolder.breadcrumbView).isNotNull();
     }
 
     @Test
@@ -84,11 +86,43 @@
         assertThat(mHolder.titleView.getText()).isEqualTo(TITLE);
         assertThat(mHolder.summaryView.getText()).isEqualTo(SUMMARY);
         assertThat(mHolder.iconView.getDrawable()).isEqualTo(mIcon);
+        assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(mHolder.breadcrumbView.getVisibility()).isEqualTo(View.GONE);
 
         verify(mFragment).onSearchResultClicked();
         verify(mFragment).startActivity(any(Intent.class));
     }
 
+    @Test
+    public void testBindViewElements_emptySummary_hideSummaryView() {
+        final SearchResult result = new Builder().addTitle(TITLE)
+                .addRank(1)
+                .addPayload(new IntentPayload(null))
+                .addIcon(mIcon)
+                .build();
+
+        mHolder.onBind(mFragment, result);
+        assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void testBindViewElements_withBreadcrumb_shouldFormatBreadcrumb() {
+        final List<String> breadcrumbs = new ArrayList<>();
+        breadcrumbs.add("a");
+        breadcrumbs.add("b");
+        breadcrumbs.add("c");
+        final SearchResult result = new Builder().addTitle(TITLE)
+                .addRank(1)
+                .addPayload(new IntentPayload(null))
+                .addBreadcrumbs(breadcrumbs)
+                .addIcon(mIcon)
+                .build();
+
+        mHolder.onBind(mFragment, result);
+        assertThat(mHolder.breadcrumbView.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(mHolder.breadcrumbView.getText()).isEqualTo("a > b > c");
+    }
+
     private SearchResult getSearchResult() {
         Builder builder = new Builder();
         builder.addTitle(TITLE)
diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
index c0b1b3d..c314728 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
@@ -19,17 +19,13 @@
 
 import android.app.Activity;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.view.Menu;
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.search2.DatabaseIndexingManager;
+import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.search2.SearchFeatureProviderImpl;
 
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.drawer.DashboardCategory;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -77,6 +73,14 @@
     }
 
     @Test
+    public void getSiteMapManager_shouldCacheInstanec() {
+        final SiteMapManager manager1 = mProvider.getSiteMapManager();
+        final SiteMapManager manager2 = mProvider.getSiteMapManager();
+
+        assertThat(manager1).isSameAs(manager2);
+    }
+
+    @Test
     public void testUpdateIndexNewSearch_UsesDatabaseIndexingManager() {
         mProvider = spy(new SearchFeatureProviderImpl());
         when(mProvider.isEnabled(mActivity)).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index efb5cbc..62bb7fb 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -16,14 +16,20 @@
 
 package com.android.settings.search;
 
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
 import static com.android.settings.search.SearchIndexableResources.NO_DATA_RES_ID;
 
+import static com.android.settings.search.SearchIndexableResources.sResMap;
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
 
 import android.annotation.DrawableRes;
 import android.annotation.XmlRes;
+import android.database.Cursor;
 import android.provider.SearchIndexableResource;
 
+import android.text.TextUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
@@ -31,8 +37,11 @@
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+import java.util.HashMap;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SearchIndexableResourcesTest {
@@ -72,4 +81,24 @@
         assertThat(index.xmlResId).isEqualTo(NO_DATA_RES_ID);
         assertThat(index.iconResId).isEqualTo(R.drawable.ic_settings_wireless);
     }
+
+    @Test
+    public void testNonIndexableKeys_GetsKeyFromProvider() {
+        SearchIndexableResources.sResMap.clear();
+        SearchIndexableResources.addIndex(FakeIndexProvider.class, 0, 0);
+
+        SettingsSearchIndexablesProvider provider = spy(new SettingsSearchIndexablesProvider());
+
+        Cursor cursor = provider.queryNonIndexableKeys(null);
+        boolean hasTestKey = false;
+        while(cursor.moveToNext()) {
+            String key = cursor.getString(COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE);
+            if (TextUtils.equals(key, FakeIndexProvider.KEY)) {
+                hasTestKey = true;
+                break;
+            }
+        }
+
+        assertThat(hasTestKey).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
index 6ad7501..d69ba3e 100644
--- a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
+++ b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
@@ -28,12 +28,16 @@
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.SubSettings;
 import com.android.settings.TestConfig;
+import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.gestures.GestureSettings;
 import com.android.settings.search2.ResultPayload.PayloadType;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.annotation.Config;
 
@@ -57,11 +61,14 @@
     private static final int BASE_RANK = 1;
     private static final int EXAMPLES = 3;
 
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private SiteMapManager mSiteMapManager;
     private Drawable mDrawable;
     private CursorToSearchResultConverter mConverter;
 
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
         Context context = Robolectric.buildActivity(Activity.class).get();
         mDrawable = context.getDrawable(ICON);
         mConverter = new CursorToSearchResultConverter(context, QUERY);
@@ -69,19 +76,21 @@
 
     @Test
     public void testParseNullResults_ReturnsNull() {
-        List<SearchResult> results = mConverter.convertCursor(null, BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(mSiteMapManager, null, BASE_RANK);
         assertThat(results).isNull();
     }
 
     @Test
     public void testParseCursor_NotNull() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         assertThat(results).isNotNull();
     }
 
     @Test
     public void testParseCursor_MatchesRank() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         for (int i = 0; i < EXAMPLES; i++) {
             assertThat(results.get(i).rank).isEqualTo(BASE_RANK);
         }
@@ -89,7 +98,8 @@
 
     @Test
     public void testParseCursor_MatchesTitle() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         for (int i = 0; i < EXAMPLES; i++) {
             assertThat(results.get(i).title).isEqualTo(TITLES[i]);
         }
@@ -97,7 +107,8 @@
 
     @Test
     public void testParseCursor_MatchesSummary() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         for (int i = 0; i < EXAMPLES; i++) {
             assertThat(results.get(i).summary).isEqualTo(SUMMARY);
         }
@@ -105,7 +116,8 @@
 
     @Test
     public void testParseCursor_MatchesIcon() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         for (int i = 0; i < EXAMPLES; i++) {
             Drawable resultDrawable = results.get(i).icon;
             assertThat(resultDrawable).isNotNull();
@@ -116,7 +128,7 @@
     @Test
     public void testParseCursor_NoIcon() {
         List<SearchResult> results = mConverter.convertCursor(
-                getDummyCursor(false /* hasIcon */), BASE_RANK);
+                mSiteMapManager, getDummyCursor(false /* hasIcon */), BASE_RANK);
         for (int i = 0; i < EXAMPLES; i++) {
             Drawable resultDrawable = results.get(i).icon;
             assertThat(resultDrawable).isNull();
@@ -125,7 +137,8 @@
 
     @Test
     public void testParseCursor_MatchesPayloadType() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         ResultPayload payload;
         for (int i = 0; i < EXAMPLES; i++) {
             payload = results.get(i).payload;
@@ -152,7 +165,7 @@
                 0,       // Payload Type
                 null     // Payload
         });
-        List<SearchResult> results = mConverter.convertCursor(cursor, BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor, BASE_RANK);
         IntentPayload payload = (IntentPayload) results.get(0).payload;
         Intent intent = payload.intent;
         assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName());
@@ -160,7 +173,8 @@
 
     @Test
     public void testParseCursor_MatchesIntentPayload() {
-        List<SearchResult> results = mConverter.convertCursor(getDummyCursor(), BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(
+                mSiteMapManager, getDummyCursor(), BASE_RANK);
         IntentPayload payload;
         for (int i = 0; i < EXAMPLES; i++) {
             payload = (IntentPayload) results.get(i).payload;
@@ -187,7 +201,7 @@
                 PayloadType.INTENT,    // Payload Type
                 null // Payload
         });
-        List<SearchResult> results = mConverter.convertCursor(cursor, BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor, BASE_RANK);
         IntentPayload payload = (IntentPayload) results.get(0).payload;
         Intent intent = payload.intent;
 
@@ -222,7 +236,7 @@
                 type,    // Payload Type
                 ResultPayloadUtils.marshall(payload) // Payload
         });
-        List<SearchResult> results = mConverter.convertCursor(cursor, BASE_RANK);
+        List<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor, BASE_RANK);
         InlineSwitchPayload newPayload = (InlineSwitchPayload) results.get(0).payload;
 
         assertThat(newPayload.settingsUri).isEqualTo(uri);
diff --git a/tests/robotests/src/com/android/settings/search2/InstalledAppResultLoaderTest.java b/tests/robotests/src/com/android/settings/search2/InstalledAppResultLoaderTest.java
index 24aa94b..e6397e1 100644
--- a/tests/robotests/src/com/android/settings/search2/InstalledAppResultLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/search2/InstalledAppResultLoaderTest.java
@@ -17,13 +17,18 @@
 package com.android.settings.search2;
 
 import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.os.UserManager;
 
+import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.applications.PackageManagerWrapper;
+import com.android.settings.dashboard.SiteMapManager;
 import com.android.settings.testutils.ApplicationTestUtils;
+import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -38,8 +43,16 @@
 import java.util.List;
 
 import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
+import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.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;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -52,23 +65,36 @@
     private PackageManagerWrapper mPackageManagerWrapper;
     @Mock
     private UserManager mUserManager;
+    @Mock
+    private SiteMapManager mSiteMapManager;
 
     private InstalledAppResultLoader mLoader;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mContext);
+        FakeFeatureFactory factory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        when(factory.searchFeatureProvider.getSiteMapManager())
+                .thenReturn(mSiteMapManager);
         final List<UserInfo> infos = new ArrayList<>();
         infos.add(new UserInfo(1, "user 1", 0));
         when(mUserManager.getProfiles(anyInt())).thenReturn(infos);
         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        when(mContext.getString(R.string.applications_settings))
+                .thenReturn("app");
         when(mPackageManagerWrapper.getInstalledApplicationsAsUser(anyInt(), anyInt()))
                 .thenReturn(Arrays.asList(
-                        ApplicationTestUtils.buildInfo(0 /* uid */, "app1", FLAG_SYSTEM),
-                        ApplicationTestUtils.buildInfo(0 /* uid */, "app2", FLAG_SYSTEM),
-                        ApplicationTestUtils.buildInfo(0 /* uid */, "app3", FLAG_SYSTEM),
-                        ApplicationTestUtils.buildInfo(0 /* uid */, "app4", 0 /* flags */),
-                        ApplicationTestUtils.buildInfo(0 /* uid */, "app", 0 /* flags */)));
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app1", FLAG_SYSTEM,
+                                0 /* targetSdkVersion */),
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app2", FLAG_SYSTEM,
+                                0 /* targetSdkVersion */),
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app3", FLAG_SYSTEM,
+                                0 /* targetSdkVersion */),
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app4", 0 /* flags */,
+                                0 /* targetSdkVersion */),
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app", 0 /* flags */,
+                                0 /* targetSdkVersion */)));
     }
 
     @Test
@@ -84,9 +110,68 @@
     public void query_matchingQuery_shouldReturnNonSystemApps() {
         final String query = "app";
 
-        mLoader = new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query);
+        mLoader = spy(new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query));
+        when(mLoader.getContext()).thenReturn(mContext);
+        when(mSiteMapManager.buildBreadCrumb(eq(mContext), anyString(), anyString()))
+                .thenReturn(Arrays.asList(new String[]{"123"}));
 
         assertThat(mLoader.loadInBackground().size()).isEqualTo(2);
+        verify(mSiteMapManager)
+                .buildBreadCrumb(eq(mContext), anyString(), anyString());
+    }
+
+    @Test
+    public void query_matchingQuery_shouldReturnSystemAppUpdates() {
+        when(mPackageManagerWrapper.getInstalledApplicationsAsUser(anyInt(), anyInt()))
+                .thenReturn(Arrays.asList(
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app1", FLAG_UPDATED_SYSTEM_APP,
+                                0 /* targetSdkVersion */)));
+        final String query = "app";
+
+        mLoader = spy(new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query));
+        when(mLoader.getContext()).thenReturn(mContext);
+
+        assertThat(mLoader.loadInBackground().size()).isEqualTo(1);
+        verify(mSiteMapManager)
+                .buildBreadCrumb(eq(mContext), anyString(), anyString());
+    }
+
+    @Test
+    public void query_matchingQuery_shouldReturnSystemAppIfLaunchable() {
+        when(mPackageManagerWrapper.getInstalledApplicationsAsUser(anyInt(), anyInt()))
+                .thenReturn(Arrays.asList(
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app1", FLAG_SYSTEM,
+                                0 /* targetSdkVersion */)));
+        final List<ResolveInfo> list = mock(List.class);
+        when(list.size()).thenReturn(1);
+        when(mPackageManagerWrapper.queryIntentActivitiesAsUser(
+                any(Intent.class), anyInt(), anyInt()))
+                .thenReturn(list);
+
+        final String query = "app";
+
+        mLoader = new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query);
+
+        assertThat(mLoader.loadInBackground().size()).isEqualTo(1);
+    }
+
+    @Test
+    public void query_matchingQuery_shouldNotReturnSystemAppIfNotLaunchable() {
+        when(mPackageManagerWrapper.getInstalledApplicationsAsUser(anyInt(), anyInt()))
+                .thenReturn(Arrays.asList(
+                        ApplicationTestUtils.buildInfo(0 /* uid */, "app1", FLAG_SYSTEM,
+                                0 /* targetSdkVersion */)));
+        when(mPackageManagerWrapper.queryIntentActivitiesAsUser(
+                any(Intent.class), anyInt(), anyInt()))
+                .thenReturn(null);
+
+        final String query = "app";
+
+        mLoader = new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query);
+
+        assertThat(mLoader.loadInBackground()).isEmpty();
+        verify(mSiteMapManager, never())
+                .buildBreadCrumb(eq(mContext), anyString(), anyString());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/search2/SavedQueryLoaderTest.java b/tests/robotests/src/com/android/settings/search2/SavedQueryLoaderTest.java
new file mode 100644
index 0000000..d975f0c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search2/SavedQueryLoaderTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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.search2;
+
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.search.IndexDatabaseHelper;
+import com.android.settings.testutils.DatabaseTestUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SavedQueryLoaderTest {
+
+    private Context mContext;
+    private SQLiteDatabase mDb;
+    private SavedQueryLoader mLoader;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
+        mLoader = new SavedQueryLoader(mContext);
+        setUpDb();
+    }
+
+    @After
+    public void cleanUp() {
+        DatabaseTestUtils.clearDb();
+    }
+
+    @Test
+    public void loadInBackground_shouldReturnSavedQueries() {
+        final List<SearchResult> results = mLoader.loadInBackground();
+        assertThat(results.size()).isEqualTo(SavedQueryLoader.MAX_PROPOSED_SUGGESTIONS);
+        for (SearchResult result : results) {
+            assertThat(result.viewType).isEqualTo(ResultPayload.PayloadType.SAVED_QUERY);
+        }
+    }
+
+    private void setUpDb() {
+        final long now = System.currentTimeMillis();
+        for (int i = 0; i < SavedQueryLoader.MAX_PROPOSED_SUGGESTIONS + 2; i++) {
+            ContentValues values = new ContentValues();
+            values.put(IndexDatabaseHelper.SavedQueriesColumns.QUERY, String.valueOf(i));
+            values.put(IndexDatabaseHelper.SavedQueriesColumns.TIME_STAMP, now);
+            mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_SAVED_QUERIES, null, values);
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/search2/SavedQueryPayloadTest.java b/tests/robotests/src/com/android/settings/search2/SavedQueryPayloadTest.java
new file mode 100644
index 0000000..daa6d5e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search2/SavedQueryPayloadTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.search2;
+
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SavedQueryPayloadTest {
+
+    private SavedQueryPayload mPayload;
+
+    @Test
+    public void getType_shouldBeSavedQueryType() {
+        mPayload = new SavedQueryPayload("Test");
+        assertThat(mPayload.getType()).isEqualTo(ResultPayload.PayloadType.SAVED_QUERY);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/search2/SavedQueryRecorderTest.java b/tests/robotests/src/com/android/settings/search2/SavedQueryRecorderTest.java
new file mode 100644
index 0000000..c56ecce
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search2/SavedQueryRecorderTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.search2;
+
+
+import android.content.Context;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.DatabaseTestUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SavedQueryRecorderTest {
+
+    private Context mContext;
+    private SavedQueryRecorder mRecorder;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+    }
+
+    @After
+    public void cleanUp() {
+        DatabaseTestUtils.clearDb();
+    }
+
+    @Test
+    public void canSaveQueryToDb() {
+        final String query = "test";
+        mRecorder = new SavedQueryRecorder(mContext, query);
+
+        mRecorder.loadInBackground();
+
+        final SavedQueryLoader loader = new SavedQueryLoader(mContext);
+        List<SearchResult> results = loader.loadInBackground();
+
+        assertThat(results.size()).isEqualTo(1);
+        assertThat(results.get(0).title).isEqualTo(query);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java
index 64d602e..2d4ac54 100644
--- a/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/search2/SearchFragmentTest.java
@@ -17,6 +17,7 @@
 package com.android.settings.search2;
 
 import android.content.Context;
+import android.content.Loader;
 import android.os.Bundle;
 
 import com.android.internal.logging.nano.MetricsProto;
@@ -35,10 +36,14 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ActivityController;
 
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -52,6 +57,9 @@
     private DatabaseResultLoader mDatabaseResultLoader;
     @Mock
     private InstalledAppResultLoader mInstalledAppResultLoader;
+    @Mock
+    private SavedQueryLoader mSavedQueryLoader;
+
     private FakeFeatureFactory mFeatureFactory;
 
     @Before
@@ -65,6 +73,8 @@
         when(mFeatureFactory.searchFeatureProvider
                 .getInstalledAppSearchLoader(any(Context.class), anyString()))
                 .thenReturn(mInstalledAppResultLoader);
+        when(mFeatureFactory.searchFeatureProvider.getSavedQueryLoader(any(Context.class)))
+                .thenReturn(mSavedQueryLoader);
     }
 
     @Test
@@ -91,6 +101,28 @@
     }
 
     @Test
+    public void screenRotateEmptyString_ShouldNotCrash() {
+        final Bundle bundle = new Bundle();
+        ActivityController<SearchActivity> activityController =
+                Robolectric.buildActivity(SearchActivity.class);
+        activityController.setup();
+        SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager()
+                .findFragmentById(R.id.main_content);
+
+        fragment.mQuery = "";
+
+        activityController.saveInstanceState(bundle).pause().stop().destroy();
+
+        activityController = Robolectric.buildActivity(SearchActivity.class);
+        activityController.setup(bundle);
+
+        verify(mFeatureFactory.searchFeatureProvider)
+                .getDatabaseSearchLoader(any(Context.class), anyString());
+        verify(mFeatureFactory.searchFeatureProvider)
+                .getInstalledAppSearchLoader(any(Context.class), anyString());
+    }
+
+    @Test
     public void queryTextChange_shouldTriggerLoader() {
         final String testQuery = "test";
         ActivityController<SearchActivity> activityController =
@@ -113,4 +145,37 @@
         verify(mFeatureFactory.searchFeatureProvider)
                 .getInstalledAppSearchLoader(any(Context.class), anyString());
     }
+
+    @Test
+    public void queryTextChangeToEmpty_shouldTriggerSavedQueryLoader() {
+        ActivityController<SearchActivity> activityController =
+                Robolectric.buildActivity(SearchActivity.class);
+        activityController.setup();
+        SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager()
+                .findFragmentById(R.id.main_content);
+
+        fragment.onQueryTextChange("");
+        activityController.get().onBackPressed();
+        activityController.pause().stop().destroy();
+
+        verify(mFeatureFactory.searchFeatureProvider, never())
+                .getDatabaseSearchLoader(any(Context.class), anyString());
+        verify(mFeatureFactory.searchFeatureProvider, never())
+                .getInstalledAppSearchLoader(any(Context.class), anyString());
+        // Saved query loaded 2 times: fragment start, and query change to empty.
+        verify(mFeatureFactory.searchFeatureProvider, times(2))
+                .getSavedQueryLoader(any(Context.class));
+    }
+
+    @Test
+    public void updateIndex_TriggerOnCreate() {
+        ActivityController<SearchActivity> activityController =
+                Robolectric.buildActivity(SearchActivity.class);
+        activityController.setup();
+        SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager()
+                .findFragmentById(R.id.main_content);
+
+        fragment.onAttach(null);
+        verify(mFeatureFactory.searchFeatureProvider).updateIndex(any(Context.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/search2/SiteMapManagerTest.java b/tests/robotests/src/com/android/settings/search2/SiteMapManagerTest.java
new file mode 100644
index 0000000..b8ac8fe
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search2/SiteMapManagerTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.search2;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Bundle;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.dashboard.SiteMapManager;
+import com.android.settings.search.IndexDatabaseHelper;
+import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
+import com.android.settings.system.SystemDashboardFragment;
+import com.android.settings.testutils.DatabaseTestUtils;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.drawer.CategoryKey;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SiteMapManagerTest {
+
+    private static final int STATIC_DB_DEPTH = 4;
+    private static final String CLASS_PREFIX = "class_";
+    private static final String TITLE_PREFIX = "title_";
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mMockContext;
+    private Context mContext;
+    private SQLiteDatabase mDb;
+    private SiteMapManager mSiteMapManager;
+    private FakeFeatureFactory mFeatureFactory;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mMockContext);
+        mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
+
+        mContext = RuntimeEnvironment.application;
+        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
+        buildDb();
+        mSiteMapManager = new SiteMapManager();
+    }
+
+    @After
+    public void cleanUp() {
+        DatabaseTestUtils.clearDb();
+    }
+
+    @Test
+    public void buildBreadCrumb_onlyFromSiteMapDb_breadcrumbShouldLinkUp() {
+        List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
+                CLASS_PREFIX + 0, TITLE_PREFIX + 0);
+        assertThat(breadcrumb.size()).isEqualTo(STATIC_DB_DEPTH + 1);
+        for (int i = 0; i < STATIC_DB_DEPTH; i++) {
+            assertThat(breadcrumb.get(i)).isEqualTo(TITLE_PREFIX + (STATIC_DB_DEPTH - i));
+        }
+    }
+
+    @Test
+    public void buildBreadCrumb_fromSiteMapDbAndDashboardProvider_breadcrumbShouldLinkUp() {
+        final String iaClass = SystemDashboardFragment.class.getName();
+        final String iaTitle = "ia_title";
+
+        ContentValues index = new ContentValues();
+        index.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, iaClass);
+        index.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, iaTitle);
+        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, index);
+
+        final DashboardCategory category = new DashboardCategory();
+        category.key = CategoryKey.CATEGORY_SYSTEM;
+        category.tiles.add(new Tile());
+        category.tiles.get(0).title = TITLE_PREFIX + STATIC_DB_DEPTH;
+        category.tiles.get(0).metaData = new Bundle();
+        category.tiles.get(0).metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS,
+                CLASS_PREFIX + STATIC_DB_DEPTH);
+        when(mFeatureFactory.dashboardFeatureProvider.getAllCategories())
+                .thenReturn(Arrays.asList(category));
+
+        final List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
+                CLASS_PREFIX + 0, TITLE_PREFIX + 0);
+
+        assertThat(breadcrumb.size()).isEqualTo(STATIC_DB_DEPTH + 2);
+        assertThat(breadcrumb.get(0))
+                .isEqualTo(iaTitle);
+    }
+
+    @Test
+    public void buildBreadCrumb_classNotIndexed_shouldNotHaveBreadCrumb() {
+        final String title = "wrong_title";
+
+        final List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
+                "wrong_class", title);
+
+        assertThat(breadcrumb.size()).isEqualTo(1);
+        assertThat(breadcrumb.get(0)).isEqualTo(title);
+    }
+
+    private void buildDb() {
+        for (int i = 0; i < STATIC_DB_DEPTH; i++) {
+            final ContentValues siteMapPair = new ContentValues();
+            siteMapPair.put(SiteMapColumns.DOCID, i);
+            siteMapPair.put(SiteMapColumns.PARENT_CLASS, CLASS_PREFIX + (i + 1));
+            siteMapPair.put(SiteMapColumns.PARENT_TITLE, TITLE_PREFIX + (i + 1));
+            siteMapPair.put(SiteMapColumns.CHILD_CLASS, CLASS_PREFIX + i);
+            siteMapPair.put(SiteMapColumns.CHILD_TITLE, TITLE_PREFIX + i);
+            mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, null, siteMapPair);
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
index f64054c..293c0ae 100644
--- a/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/security/SecurityFeatureProviderImplTest.java
@@ -25,6 +25,7 @@
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
+import android.util.Pair;
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
@@ -77,9 +78,9 @@
     @Implements(com.android.settingslib.drawer.TileUtils.class)
     public static class TileUtilsMock {
         @Implementation
-        public static int getIconFromUri(Context context, String uriString,
+        public static Pair getIconFromUri(Context context, String packageName, String uriString,
                 Map<String, IContentProvider> providerMap) {
-            return 161803;
+            return Pair.create("package", 161803);
         }
 
         @Implementation
diff --git a/tests/robotests/src/com/android/settings/survey/SurveyMixinTest.java b/tests/robotests/src/com/android/settings/survey/SurveyMixinTest.java
index 20c50ce..73fe09e 100644
--- a/tests/robotests/src/com/android/settings/survey/SurveyMixinTest.java
+++ b/tests/robotests/src/com/android/settings/survey/SurveyMixinTest.java
@@ -1,5 +1,6 @@
 package com.android.settings.survey;
 
+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.never;
@@ -11,11 +12,15 @@
 import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.IntentFilter;
+import android.support.v4.content.LocalBroadcastManager;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.overlay.SurveyFeatureProvider;
 import com.android.settings.testutils.FakeFeatureFactory;
+import java.util.ArrayList;
+import java.util.HashMap;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -24,6 +29,7 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -102,7 +108,7 @@
     }
 
     @Test
-    public void onPause_removesReceiverWhenInstantiated() {
+    public void onPause_removesReceiverIfPreviouslySet() {
         // Pretend there is a survey in memory
         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
 
@@ -110,12 +116,16 @@
         Activity temp = Robolectric.setupActivity(Activity.class);
         when(mFragment.getActivity()).thenReturn(temp);
         when(mProvider.createAndRegisterReceiver(any())).thenReturn(mReceiver);
+        LocalBroadcastManager manager = LocalBroadcastManager.getInstance(temp);
         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
         mixin.onResume();
+        manager.registerReceiver(mReceiver, new IntentFilter());
         mixin.onPause();
 
         // Verify we remove the receiver
-        verify(mProvider, times(1)).unregisterReceiver(any(), any());
+        HashMap<BroadcastReceiver, ArrayList<IntentFilter>> map =
+                ReflectionHelpers.getField(manager, "mReceivers");
+        assertThat(map.containsKey(mReceiver)).isFalse();
     }
 
     @Test
@@ -129,15 +139,15 @@
         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
         mixin.onPause();
 
-        // Verify we do nothing
-        verify(mProvider, never()).unregisterReceiver(any(), any());
+        // Verify we do nothing;
+        verify(mProvider, never()).showSurveyIfAvailable(any(), any());
 
         // pretend the activity died before onPause
         when(mFragment.getActivity()).thenReturn(null);
         mixin.onPause();
 
         // Verify we do nothing
-        verify(mProvider, never()).unregisterReceiver(any(), any());
+        verify(mProvider, never()).showSurveyIfAvailable(any(), any());
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/ApplicationTestUtils.java b/tests/robotests/src/com/android/settings/testutils/ApplicationTestUtils.java
index 8789928..352d128 100644
--- a/tests/robotests/src/com/android/settings/testutils/ApplicationTestUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/ApplicationTestUtils.java
@@ -15,7 +15,6 @@
 package com.android.settings.testutils;
 
 import android.content.pm.ApplicationInfo;
-import android.os.UserHandle;
 
 /**
  * Helper for mocking installed applications.
@@ -25,19 +24,21 @@
      * Create and populate an {@link android.content.pm.ApplicationInfo} object that describes an
      * installed app.
      *
-     * @param userId The user id that this app is installed for. Typical values are 0 for the
-     *         system user and 10, 11, 12... for secondary users.
+     * @param uid The app's uid
      * @param packageName The app's package name.
      * @param flags Flags describing the app. See {@link android.content.pm.ApplicationInfo#flags}
      *         for possible values.
+     * @param targetSdkVersion The app's target SDK version
      *
      * @see android.content.pm.ApplicationInfo
      */
-    public static ApplicationInfo buildInfo(int userId, String packageName, int flags) {
+    public static ApplicationInfo buildInfo(int uid, String packageName, int flags,
+            int targetSdkVersion) {
         final ApplicationInfo info = new ApplicationInfo();
-        info.uid = UserHandle.getUid(userId, 1);
+        info.uid = uid;
         info.packageName = packageName;
         info.flags = flags;
+        info.targetSdkVersion = targetSdkVersion;
         return info;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/DatabaseTestUtils.java b/tests/robotests/src/com/android/settings/testutils/DatabaseTestUtils.java
new file mode 100644
index 0000000..8fbe1c9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/DatabaseTestUtils.java
@@ -0,0 +1,36 @@
+/*
+ * 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;
+
+import com.android.settings.search.IndexDatabaseHelper;
+
+import java.lang.reflect.Field;
+
+public class DatabaseTestUtils {
+
+    public static void clearDb() {
+        Field instance;
+        Class clazz = IndexDatabaseHelper.class;
+        try {
+            instance = clazz.getDeclaredField("sSingleton");
+            instance.setAccessible(true);
+            instance.set(null, null);
+        } catch (Exception e) {
+            throw new RuntimeException();
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index bc0894c..0352e0f 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -20,6 +20,7 @@
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.dashboard.SuggestionFeatureProvider;
 import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
 import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
 import com.android.settings.localepicker.LocaleFeatureProvider;
@@ -49,6 +50,7 @@
     public final SearchFeatureProvider searchFeatureProvider;
     public final SurveyFeatureProvider surveyFeatureProvider;
     public final SecurityFeatureProvider securityFeatureProvider;
+    public final SuggestionFeatureProvider suggestionsFeatureProvider;
 
     /**
      * Call this in {@code @Before} method of the test class to use fake factory.
@@ -81,6 +83,12 @@
         searchFeatureProvider = mock(SearchFeatureProvider.class);
         surveyFeatureProvider = mock(SurveyFeatureProvider.class);
         securityFeatureProvider = mock(SecurityFeatureProvider.class);
+        suggestionsFeatureProvider = mock(SuggestionFeatureProvider.class);
+    }
+
+    @Override
+    public SuggestionFeatureProvider getSuggestionFeatureProvider() {
+        return suggestionsFeatureProvider;
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowSystemProperties.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowSystemProperties.java
new file mode 100644
index 0000000..e2a863a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowSystemProperties.java
@@ -0,0 +1,54 @@
+/*
+ * 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.SystemProperties;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowSystemProperties;
+
+/**
+ * This class provides write capability to ShadowSystemProperties.
+ */
+@Implements(SystemProperties.class)
+public class SettingsShadowSystemProperties extends ShadowSystemProperties {
+
+    private static final Map<String, String> sValues = new HashMap<>();
+
+    @Implementation
+    public static synchronized boolean getBoolean(String key, boolean def) {
+        if (sValues.containsKey(key)) {
+            String val = sValues.get(key);
+            return "y".equals(val) || "yes".equals(val) || "1".equals(val) || "true".equals(val)
+                || "on".equals(val);
+        }
+        return ShadowSystemProperties.getBoolean(key, def);
+    }
+
+    public static synchronized void set(String key, String val) {
+        sValues.put(key, val);
+    }
+
+    public static synchronized void clear() {
+        sValues.clear();
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/trustagent/TrustAgentFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/trustagent/TrustAgentFeatureProviderImplTest.java
new file mode 100644
index 0000000..87f5ecd
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/trustagent/TrustAgentFeatureProviderImplTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.trustagent;
+
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.PackageManager;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+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 static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class TrustAgentFeatureProviderImplTest {
+
+    private static final String CANNED_PACKAGE_NAME = "com.test.package";
+
+    @Mock
+    private PackageManager mPackageManager;
+
+    private TrustAgentManagerImpl mImpl;
+
+    @Before
+    public void setUp() throws PackageManager.NameNotFoundException {
+        MockitoAnnotations.initMocks(this);
+        mImpl = new TrustAgentManagerImpl();
+    }
+
+    @Test
+    public void shouldProvideTrust_doesProvideTrustWithPermission() {
+        when(mPackageManager.checkPermission(TrustAgentManager.PERMISSION_PROVIDE_AGENT,
+            CANNED_PACKAGE_NAME)).thenReturn(PackageManager.PERMISSION_GRANTED);
+
+        ServiceInfo serviceInfo = new ServiceInfo();
+        serviceInfo.packageName = CANNED_PACKAGE_NAME;
+        ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.serviceInfo = serviceInfo;
+
+        assertTrue(mImpl.shouldProvideTrust(resolveInfo, mPackageManager));
+    }
+
+    @Test
+    public void shouldProvideTrust_doesNotProvideTrustWithoutPermission() {
+        when(mPackageManager.checkPermission(TrustAgentManager.PERMISSION_PROVIDE_AGENT,
+            CANNED_PACKAGE_NAME)).thenReturn(PackageManager.PERMISSION_DENIED);
+
+        ServiceInfo serviceInfo = new ServiceInfo();
+        serviceInfo.packageName = CANNED_PACKAGE_NAME;
+        ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.serviceInfo = serviceInfo;
+
+        assertFalse(mImpl.shouldProvideTrust(resolveInfo, mPackageManager));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppListAdapterTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppListAdapterTest.java
new file mode 100644
index 0000000..a8ab5d4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppListAdapterTest.java
@@ -0,0 +1,149 @@
+/*
+ * 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.webview;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.UserInfo;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import java.util.Arrays;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WebViewAppListAdapterTest {
+    private Context mContext = RuntimeEnvironment.application;
+
+    private final static UserInfo FIRST_USER = new UserInfo(0, "FIRST_USER", 0);
+    private final static UserInfo SECOND_USER = new UserInfo(0, "SECOND_USER", 0);
+
+    private final static String DEFAULT_PACKAGE_NAME = "DEFAULT_PACKAGE_NAME";
+
+    @Test
+    public void testDisabledReasonNullIfPackagesOk() {
+        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
+        when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
+
+        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
+        when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
+
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        when(wvusWrapper.getPackageInfosAllUsers(
+                any(), eq(DEFAULT_PACKAGE_NAME))).thenReturn(
+                        Arrays.asList(packageForFirstUser, packageForSecondUser));
+
+        assertThat(WebViewAppListAdapter.getDisabledReason(
+                wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isNull();
+    }
+
+    @Test
+    public void testDisabledReasonForSingleUserDisabledPackage() {
+        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
+        when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
+        when(packageForFirstUser.getUserInfo()).thenReturn(FIRST_USER);
+
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)
+                )).thenReturn(Arrays.asList(packageForFirstUser));
+
+        assertThat(WebViewAppListAdapter.getDisabledReason(wvusWrapper, mContext,
+                DEFAULT_PACKAGE_NAME)).isEqualTo("Disabled for user " + FIRST_USER.name + "\n");
+    }
+
+    @Test
+    public void testDisabledReasonForSingleUserUninstalledPackage() {
+        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
+        when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
+        when(packageForFirstUser.getUserInfo()).thenReturn(FIRST_USER);
+
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)
+                )).thenReturn(Arrays.asList(packageForFirstUser));
+
+        assertThat(WebViewAppListAdapter.getDisabledReason(wvusWrapper, mContext,
+                DEFAULT_PACKAGE_NAME)).isEqualTo("Uninstalled for user " + FIRST_USER.name + "\n");
+    }
+
+    @Test
+    public void testDisabledReasonSeveralUsers() {
+        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
+        when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
+        when(packageForFirstUser.getUserInfo()).thenReturn(FIRST_USER);
+
+        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
+        when(packageForSecondUser.isInstalledPackage()).thenReturn(false);
+        when(packageForSecondUser.getUserInfo()).thenReturn(SECOND_USER);
+
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)
+                )).thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
+
+        final String EXPECTED_DISABLED_REASON = String.format(
+                "Disabled for user %s\nUninstalled for user %s\n",
+                FIRST_USER.name, SECOND_USER.name);
+        assertThat(WebViewAppListAdapter.getDisabledReason(
+                wvusWrapper, mContext,DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
+    }
+
+    /**
+     * Ensure we only proclaim a package as uninstalled for a certain user if it's both uninstalled
+     * and disabled.
+     */
+    @Test
+    public void testDisabledReasonUninstalledAndDisabled() {
+        UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
+        when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
+        when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
+        when(packageForFirstUser.getUserInfo()).thenReturn(FIRST_USER);
+
+        UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
+        when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
+        when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
+        when(packageForSecondUser.getUserInfo()).thenReturn(SECOND_USER);
+
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)
+                )).thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
+
+        final String EXPECTED_DISABLED_REASON = String.format(
+                "Uninstalled for user %s\n", FIRST_USER.name);
+        assertThat(WebViewAppListAdapter.getDisabledReason(wvusWrapper, mContext,
+                DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
new file mode 100644
index 0000000..8ace8aa
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -0,0 +1,109 @@
+/*
+ * 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.webview;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+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.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.robolectric.shadows.ShadowView.clickOn;
+import static org.robolectric.Shadows.shadowOf;
+
+import android.app.Activity;
+import android.content.pm.ApplicationInfo;
+import android.view.View;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import java.util.Arrays;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ActivityController;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WebViewAppPickerTest {
+
+  private static final String DEFAULT_PACKAGE_NAME = "DEFAULT_PACKAGE_NAME";
+
+  private static ApplicationInfo createApplicationInfo(String packageName) {
+      ApplicationInfo ai = new ApplicationInfo();
+      ai.packageName = packageName;
+      return ai;
+  }
+
+  @Test
+  public void testClickingItemChangesProvider() {
+      ActivityController<WebViewAppPicker> controller =
+              Robolectric.buildActivity(WebViewAppPicker.class);
+      WebViewAppPicker webviewAppPicker = controller.get();
+
+      WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+      when(wvusWrapper.getValidWebViewApplicationInfos(any())).thenReturn(
+              Arrays.asList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
+      when(wvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(true);
+
+      webviewAppPicker.setWebViewUpdateServiceWrapper(wvusWrapper);
+
+      controller.create().start().postCreate(null).resume().visible();
+      WebViewApplicationInfo firstItem =
+              (WebViewApplicationInfo) webviewAppPicker.getListView().getItemAtPosition(0);
+      assertThat(firstItem.info.packageName).isEqualTo(DEFAULT_PACKAGE_NAME);
+
+      webviewAppPicker.onListItemClick(webviewAppPicker.getListView(), null, 0, 0);
+
+      verify(wvusWrapper, times(1)).setWebViewProvider(eq(DEFAULT_PACKAGE_NAME));
+      assertThat(shadowOf(webviewAppPicker).getResultCode()).isEqualTo(Activity.RESULT_OK);
+      verify(wvusWrapper, never()).showInvalidChoiceToast(any());
+  }
+
+  @Test
+  public void testFailingPackageChangeReturnsCancelled() {
+      ActivityController<WebViewAppPicker> controller =
+              Robolectric.buildActivity(WebViewAppPicker.class);
+      WebViewAppPicker webviewAppPicker = controller.get();
+
+      WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+      when(wvusWrapper.getValidWebViewApplicationInfos(any())).thenReturn(
+              Arrays.asList(createApplicationInfo(DEFAULT_PACKAGE_NAME)));
+      when(wvusWrapper.setWebViewProvider(eq(DEFAULT_PACKAGE_NAME))).thenReturn(false);
+
+      webviewAppPicker.setWebViewUpdateServiceWrapper(wvusWrapper);
+
+      controller.create().start().postCreate(null).resume().visible();
+      WebViewApplicationInfo firstItem =
+              (WebViewApplicationInfo) webviewAppPicker.getListView().getItemAtPosition(0);
+      assertThat(firstItem.info.packageName).isEqualTo(DEFAULT_PACKAGE_NAME);
+
+      webviewAppPicker.onListItemClick(webviewAppPicker.getListView(), null, 0, 0);
+
+      verify(wvusWrapper, times(1)).setWebViewProvider(eq(DEFAULT_PACKAGE_NAME));
+      assertThat(shadowOf(webviewAppPicker).getResultCode()).isEqualTo(Activity.RESULT_CANCELED);
+      verify(wvusWrapper, times(1)).showInvalidChoiceToast(any());
+  }
+}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java
new file mode 100644
index 0000000..e0a32a4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.webview;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WebViewAppPreferenceControllerTest {
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
+    @Mock
+    private Preference mPreference;
+
+    private static final String DEFAULT_PACKAGE_NAME = "DEFAULT_PACKAGE_NAME";
+
+    @Before public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mPreferenceScreen.findPreference(any())).thenReturn(mPreference);
+    }
+
+    @Test public void testOnActivityResultUpdatesStateOnSuccess() {
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+        WebViewAppPreferenceController controller =
+                spy(new WebViewAppPreferenceController(mContext, wvusWrapper));
+
+        controller.displayPreference(mPreferenceScreen); // Makes sure Preference is non-null
+        controller.onActivityResult(Activity.RESULT_OK, new Intent(DEFAULT_PACKAGE_NAME));
+        verify(controller, times(1)).updateState(any());
+    }
+
+    @Test public void testOnActivityResultWithFailure() {
+        WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
+
+        WebViewAppPreferenceController controller =
+                spy(new WebViewAppPreferenceController(mContext, wvusWrapper));
+
+        controller.displayPreference(mPreferenceScreen); // Makes sure Preference is non-null
+        controller.onActivityResult(Activity.RESULT_CANCELED, new Intent(DEFAULT_PACKAGE_NAME));
+        verify(controller, times(1)).updateState(any());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
new file mode 100644
index 0000000..8cf3389
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.view.LayoutInflater;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.Switch;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+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.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class MasterSwitchPreferenceTest {
+
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = ShadowApplication.getInstance().getApplicationContext();
+    }
+
+    @Test
+    public void createNewPreference_shouldSetLayout() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+
+        assertThat(preference.getWidgetLayoutResource()).isEqualTo(
+            R.layout.preference_widget_master_switch);
+    }
+
+    @Test
+    public void setChecked_shouldUpdateButtonCheckedState() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext)
+            .inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        preference.onBindViewHolder(holder);
+
+        preference.setChecked(true);
+        assertThat(toggle.isChecked()).isTrue();
+
+        preference.setChecked(false);
+        assertThat(toggle.isChecked()).isFalse();
+    }
+
+    @Test
+    public void setSwitchEnabled_shouldUpdateButtonEnabledState() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(
+            LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        preference.onBindViewHolder(holder);
+
+        preference.setSwitchEnabled(true);
+        assertThat(toggle.isEnabled()).isTrue();
+
+        preference.setSwitchEnabled(false);
+        assertThat(toggle.isEnabled()).isFalse();
+    }
+
+    @Test
+    public void toggleButtonOn_shouldNotifyChecked() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(
+            LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
+        preference.setOnPreferenceChangeListener(listener);
+        preference.onBindViewHolder(holder);
+
+        toggle.setChecked(true);
+        verify(listener).onPreferenceChange(preference, true);
+    }
+
+    @Test
+    public void toggleButtonOff_shouldNotifyUnchecked() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(
+            LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
+        preference.setChecked(true);
+        preference.setOnPreferenceChangeListener(listener);
+        preference.onBindViewHolder(holder);
+
+        toggle.setChecked(false);
+        verify(listener).onPreferenceChange(preference, false);
+    }
+
+    @Test
+    public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(
+            LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        toggle.setEnabled(true);
+        preference.onBindViewHolder(holder);
+
+        preference.setDisabledByAdmin(mock(EnforcedAdmin.class));
+        assertThat(toggle.isEnabled()).isFalse();
+    }
+
+    @Test
+    public void setDisabledByAdmin_noEnforcedAdmin_shouldEnaableButton() {
+        final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
+        final PreferenceViewHolder holder = new PreferenceViewHolder(
+            LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null));
+        final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget);
+        toggle.setEnabled(false);
+        preference.onBindViewHolder(holder);
+
+        preference.setDisabledByAdmin(null);
+        assertThat(toggle.isEnabled()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java
new file mode 100644
index 0000000..e57d25a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SummaryUpdaterTest {
+
+    private Context mContext;
+
+    private SummaryUpdaterTestable mSummaryUpdater;
+    @Mock
+    private SummaryListener mListener;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application.getApplicationContext();
+        mSummaryUpdater = new SummaryUpdaterTestable(mContext, mListener);
+    }
+
+    @Test
+    public void notifyChangeIfNeeded_fistTimeInit_shouldNotifyChange() {
+        final String summary = "initialized";
+        mSummaryUpdater.setTestSummary(summary);
+        mSummaryUpdater.notifyChangeIfNeeded();
+
+        verify(mListener).onSummaryChanged(summary);
+    }
+
+    @Test
+    public void notifyChangeIfNeeded_summaryUpdated_shouldNotifyChange() {
+        final String summaryInit = "initialized";
+        mSummaryUpdater.setTestSummary(summaryInit);
+        mSummaryUpdater.notifyChangeIfNeeded();
+        final String summaryUpdate = "updated";
+
+        mSummaryUpdater.setTestSummary(summaryUpdate);
+        mSummaryUpdater.notifyChangeIfNeeded();
+
+        verify(mListener).onSummaryChanged(summaryUpdate);
+    }
+
+    @Test
+    public void notifyChangeIfNeeded_summaryNotUpdated_shouldOnlyNotifyChangeOnce() {
+        final String summaryInit = "initialized";
+        mSummaryUpdater.setTestSummary(summaryInit);
+        mSummaryUpdater.notifyChangeIfNeeded();
+        final String summaryUpdate = "updated";
+        mSummaryUpdater.setTestSummary(summaryUpdate);
+
+        mSummaryUpdater.notifyChangeIfNeeded();
+        mSummaryUpdater.notifyChangeIfNeeded();
+
+        verify(mListener, times(1)).onSummaryChanged(summaryUpdate);
+    }
+
+    private class SummaryListener implements SummaryUpdater.OnSummaryChangeListener {
+        String summary;
+
+        @Override
+        public void onSummaryChanged(String summary) {
+            this.summary = summary;
+        }
+    }
+
+    public final class SummaryUpdaterTestable extends SummaryUpdater {
+        private String mTestSummary;
+
+        SummaryUpdaterTestable(Context context, SummaryUpdater.OnSummaryChangeListener listener) {
+            super(context, listener);
+        }
+
+        @Override
+        public void register(boolean register) {
+        }
+
+        @Override
+        public void notifyChangeIfNeeded() {
+            super.notifyChangeIfNeeded();
+        }
+
+        @Override
+        public String getSummary() {
+            return mTestSummary;
+        }
+
+        public void setTestSummary(String summary) {
+            mTestSummary = summary;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/SavedNetworkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/SavedNetworkPreferenceControllerTest.java
deleted file mode 100644
index 657c21e..0000000
--- a/tests/robotests/src/com/android/settings/wifi/SavedNetworkPreferenceControllerTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.wifi;
-
-import android.content.Context;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-
-import com.android.settings.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-
-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 java.util.List;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class SavedNetworkPreferenceControllerTest {
-
-    @Mock
-    private Context mContext;
-    @Mock
-    private WifiManager mWifiManager;
-
-    private SavedNetworkPreferenceController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        mController = new SavedNetworkPreferenceController(mContext, mWifiManager);
-    }
-
-    @Test
-    public void isAvailable_noSavedNetwork_shouldReturnFalse() {
-        when(mWifiManager.getConfiguredNetworks()).thenReturn(null);
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void isAvailable_hasSavedNetwork_shouldReturnTrue() {
-        List<WifiConfiguration> configs = mock(List.class);
-        when(configs.isEmpty()).thenReturn(false);
-        when(mWifiManager.getConfiguredNetworks()).thenReturn(configs);
-
-        assertThat(mController.isAvailable()).isTrue();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiMasterSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiMasterSwitchPreferenceControllerTest.java
new file mode 100644
index 0000000..694fe0e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/WifiMasterSwitchPreferenceControllerTest.java
@@ -0,0 +1,127 @@
+/*
+ * 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.wifi;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.net.wifi.WifiManager;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.widget.MasterSwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WifiMasterSwitchPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    Context mMockContext;
+    @Mock
+    private WifiManager mWifiManager;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private MasterSwitchPreference mPreference;
+
+    private Context mContext;
+    private WifiMasterSwitchPreferenceController mController;
+    private FakeFeatureFactory mFakeFeatureFactory;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest(mMockContext);
+        mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
+        mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
+        mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+        mController = new WifiMasterSwitchPreferenceController(mContext, mMetricsFeatureProvider);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
+        when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
+    }
+
+    @Test
+    public void isAvailable_shouldAlwaysReturnTrue() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void onResume_shouldRegisterCallback() {
+        mController.onResume();
+
+        verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
+    }
+
+    @Test
+    public void onPause_shouldUnregisterCallback() {
+        mController.onResume();
+        mController.onPause();
+
+        verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
+    }
+
+    @Test
+    public void onStart_shouldRegisterPreferenceChangeListener() {
+        mController.displayPreference(mScreen);
+        mController.onStart();
+
+        verify(mPreference).setOnPreferenceChangeListener(any(OnPreferenceChangeListener.class));
+    }
+
+    @Test
+    public void onStop_shouldRegisterPreferenceChangeListener() {
+        mController.displayPreference(mScreen);
+        mController.onStart();
+
+        mController.onStop();
+
+        verify(mPreference).setOnPreferenceChangeListener(null);
+    }
+
+    @Test
+    public void onSummaryChanged_shouldUpdatePreferenceSummary() {
+        mController.displayPreference(mScreen);
+
+        mController.onSummaryChanged("test summary");
+
+        verify(mPreference).setSummary("test summary");
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java
new file mode 100644
index 0000000..df290b3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSummaryUpdaterTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.wifi;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.wifi.WifiManager;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
+import com.android.settingslib.wifi.WifiStatusTracker;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WifiSummaryUpdaterTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private WifiManager mWifiManager;
+    @Mock
+    private SummaryListener mListener;
+
+    private Context mContext;
+    private WifiSummaryUpdater mSummaryUpdater;
+    private WifiStatusTracker mWifiTracker;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mWifiTracker = new WifiStatusTracker(mWifiManager);
+
+        mContext = spy(RuntimeEnvironment.application.getApplicationContext());
+        mSummaryUpdater = new WifiSummaryUpdater(mContext, mListener, mWifiTracker);
+    }
+
+    @Test
+    public void register_true_shouldRegisterListener() {
+        mSummaryUpdater.register(true);
+
+        verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
+    }
+
+    @Test
+    public void register_false_shouldUnregisterListener() {
+        mSummaryUpdater.register(true);
+        mSummaryUpdater.register(false);
+
+        verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
+    }
+
+    @Test
+    public void onReceive_networkStateChanged_shouldSendSummaryChange() {
+        mSummaryUpdater.register(true);
+        mContext.sendBroadcast(new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
+
+
+        verify(mListener).onSummaryChanged(anyString());
+    }
+
+    @Test
+    public void onReceive_rssiChanged_shouldSendSummaryChange() {
+        mSummaryUpdater.register(true);
+        mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
+
+
+        verify(mListener).onSummaryChanged(anyString());
+    }
+
+    @Test
+    public void getSummary_wifiDisabled_shouldReturnDisabled() {
+        mWifiTracker.enabled = false;
+
+        assertThat(mSummaryUpdater.getSummary()).isEqualTo(
+            mContext.getString(R.string.wifi_disabled_generic));
+    }
+
+    @Test
+    public void getSummary_wifiDisconnected_shouldReturnDisconnected() {
+        mWifiTracker.enabled = true;
+        mWifiTracker.connected = false;
+
+        assertThat(mSummaryUpdater.getSummary()).isEqualTo(
+            mContext.getString(R.string.disconnected));
+    }
+
+    @Test
+    public void getSummary_wifiConnected_shouldReturnSsid() {
+        mWifiTracker.enabled = true;
+        mWifiTracker.connected = true;
+        mWifiTracker.ssid = "Test Ssid";
+
+        assertThat(mSummaryUpdater.getSummary()).isEqualTo("Test Ssid");
+    }
+
+    private class SummaryListener implements OnSummaryChangeListener {
+        String summary;
+
+        @Override
+        public void onSummaryChanged(String summary) {
+            this.summary = summary;
+        }
+    }
+
+}
diff --git a/tests/unit/Android.mk b/tests/unit/Android.mk
index d852ac5..f98fccd 100644
--- a/tests/unit/Android.mk
+++ b/tests/unit/Android.mk
@@ -11,7 +11,8 @@
     android-support-test \
     mockito-target-minus-junit4 \
     espresso-core \
-    truth-prebuilt
+    truth-prebuilt \
+    legacy-android-test
 
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java
new file mode 100644
index 0000000..231787e
--- /dev/null
+++ b/tests/unit/src/com/android/settings/display/ThemePreferenceControllerTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.core;
+
+import static junit.framework.TestCase.assertNotNull;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.UiModeManager;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v7.preference.ListPreference;
+
+import com.android.settings.R;
+import com.android.settings.display.ThemePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ThemePreferenceControllerTest {
+
+    private UiModeManager mMockUiModeManager;
+    private ContextWrapper mContext;
+    private ThemePreferenceController mPreferenceController;
+
+    @Before
+    public void setup() {
+        mMockUiModeManager = mock(UiModeManager.class);
+        mContext = new ContextWrapper(InstrumentationRegistry.getTargetContext()) {
+            @Override
+            public Object getSystemService(String name) {
+                if (Context.UI_MODE_SERVICE.equals(name)) {
+                    return mMockUiModeManager;
+                }
+                return super.getSystemService(name);
+            }
+        };
+        mPreferenceController = new ThemePreferenceController(mContext);
+    }
+
+    @Test
+    public void testUpdateState() {
+        when(mMockUiModeManager.getAvailableThemes()).thenReturn(new String[] {
+                null,
+                "Theme1",
+                "Theme2",
+        });
+        when(mMockUiModeManager.getTheme()).thenReturn("Theme1");
+        ListPreference pref = mock(ListPreference.class);
+        mPreferenceController.updateState(pref);
+        ArgumentCaptor<String[]> arg = ArgumentCaptor.forClass(String[].class);
+        verify(pref).setEntries(arg.capture());
+
+        String[] entries = arg.getValue();
+        assertEquals(3, entries.length);
+        assertNotNull(entries[0]);
+        assertEquals("Theme1", entries[1]);
+        assertEquals("Theme2", entries[2]);
+
+        verify(pref).setEntryValues(arg.capture());
+        String[] entryValues = arg.getValue();
+        assertEquals(3, entryValues.length);
+        assertNotNull(entryValues[0]);
+        assertEquals("Theme1", entryValues[1]);
+        assertEquals("Theme2", entryValues[2]);
+
+        verify(pref).setValue(eq("Theme1"));
+    }
+
+    @Test
+    public void testAvailable_false() {
+        when(mMockUiModeManager.getAvailableThemes()).thenReturn(new String[1]);
+        assertFalse(mPreferenceController.isAvailable());
+    }
+
+    @Test
+    public void testAvailable_true() {
+        when(mMockUiModeManager.getAvailableThemes()).thenReturn(new String[2]);
+        assertTrue(mPreferenceController.isAvailable());
+    }
+}
diff --git a/tests/unit/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroductionTest.java b/tests/unit/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroductionTest.java
new file mode 100644
index 0000000..8afed18
--- /dev/null
+++ b/tests/unit/src/com/android/settings/fingerprint/SetupFingerprintEnrollIntroductionTest.java
@@ -0,0 +1,109 @@
+/*
+ * 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.fingerprint;
+
+
+import static org.mockito.Mockito.doReturn;
+
+import android.app.KeyguardManager;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.test.ActivityUnitTestCase;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.settings.R;
+
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class SetupFingerprintEnrollIntroductionTest
+        extends ActivityUnitTestCase<SetupFingerprintEnrollIntroduction> {
+
+    private TestContext mContext;
+
+    @Mock
+    private KeyguardManager mKeyguardManager;
+
+    private SetupFingerprintEnrollIntroduction mActivity;
+
+    public SetupFingerprintEnrollIntroductionTest() {
+        super(SetupFingerprintEnrollIntroduction.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        MockitoAnnotations.initMocks(this);
+        mContext = new TestContext(getInstrumentation().getTargetContext());
+        setActivityContext(mContext);
+
+        getInstrumentation().runOnMainSync(() -> {
+            final Intent intent = new Intent();
+            mActivity = startActivity(intent,
+                    null /* savedInstanceState */, null /* lastNonConfigurationInstance */);
+        });
+    }
+
+    public void testKeyguardNotSecure_shouldShowSkipDialog() {
+        doReturn(false).when(mKeyguardManager).isKeyguardSecure();
+
+        getInstrumentation().runOnMainSync(() -> {
+            getInstrumentation().callActivityOnCreate(mActivity, null);
+            getInstrumentation().callActivityOnResume(mActivity);
+
+            final Button skipButton =
+                    (Button) mActivity.findViewById(R.id.fingerprint_cancel_button);
+            assertEquals(View.VISIBLE, skipButton.getVisibility());
+            skipButton.performClick();
+        });
+
+        assertFalse(isFinishCalled());
+    }
+
+    public void testKeyguardSecure_shouldNotShowSkipDialog() {
+        doReturn(true).when(mKeyguardManager).isKeyguardSecure();
+
+        getInstrumentation().runOnMainSync(() -> {
+            getInstrumentation().callActivityOnCreate(mActivity, null);
+            getInstrumentation().callActivityOnResume(mActivity);
+
+            final Button skipButton =
+                    (Button) mActivity.findViewById(R.id.fingerprint_cancel_button);
+            assertEquals(View.VISIBLE, skipButton.getVisibility());
+            skipButton.performClick();
+        });
+
+        assertTrue(isFinishCalled());
+    }
+
+    public class TestContext extends ContextWrapper {
+
+        public TestContext(Context base) {
+            super(base);
+        }
+
+        @Override
+        public Object getSystemService(String name) {
+            if (Context.KEYGUARD_SERVICE.equals(name)) {
+                return mKeyguardManager;
+            }
+            return super.getSystemService(name);
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/settings/search/SearchActivityTest.java b/tests/unit/src/com/android/settings/search/SearchActivityTest.java
index ffe2094..26b097e 100644
--- a/tests/unit/src/com/android/settings/search/SearchActivityTest.java
+++ b/tests/unit/src/com/android/settings/search/SearchActivityTest.java
@@ -32,8 +32,7 @@
 
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static com.google.common.truth.Truth.assertThat;
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
@@ -47,7 +46,8 @@
         final List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(
                 intent, PackageManager.GET_META_DATA);
 
-        assertFalse(resolveInfos.isEmpty());
-        assertEquals(Settings.class.getName(), resolveInfos.get(0).activityInfo.parentActivityName);
+        assertThat(resolveInfos).isNotEmpty();
+        assertThat(resolveInfos.get(0).activityInfo.parentActivityName)
+                .isEqualTo(Settings.class.getName());
     }
 }