Merge tag 'android-security-11.0.0_r54' into int/11/fp3

Android security 11.0.0 release 54

* tag 'android-security-11.0.0_r54':
  Add caller check to com.android.credentials.RESET

Change-Id: Idcdc33aec8a6ba070a1c431d06e6b2d67cc35bf1
diff --git a/Android.bp b/Android.bp
index 73f97cb..eae8f1b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -123,3 +123,59 @@
         },
     },
 }
+
+android_library {
+    name: "CarSettingsForUnitTesting",
+    platform_apis: true,
+    defaults: [
+        "SettingsLibDefaults",
+        "SettingsLib-search-defaults",
+    ],
+
+    manifest: "tests/unit/AndroidManifest.xml",
+
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "android.car",
+    ],
+
+    static_libs: [
+        "androidx.lifecycle_lifecycle-common-java8",
+        "androidx.lifecycle_lifecycle-extensions",
+        "androidx.preference_preference",
+        "androidx-constraintlayout_constraintlayout",
+        "car-apps-common",
+        "car-setup-wizard-lib-utils",
+        "SettingsLib",
+        "SettingsLib-search",
+        "android.car.userlib",
+        "androidx-constraintlayout_constraintlayout-solver",
+        "jsr305",
+        "car-ui-lib-testing-support",
+    ],
+
+    // Testing only resources must be applied last so they take precedence.
+    resource_dirs: [
+        "res",
+        "tests/unit/res",
+    ],
+
+    optimize: {
+        enabled: false,
+    },
+
+    dex_preopt: {
+        enabled: false,
+    },
+
+    dxflags: ["--multi-dex"],
+
+    aaptflags: ["--extra-packages com.android.car.settings"],
+
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d7ad028..071c09d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -25,7 +25,7 @@
 
     <uses-sdk
         android:minSdkVersion="24"
-        android:targetSdkVersion="24"/>
+        android:targetSdkVersion="29"/>
 
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
@@ -42,6 +42,7 @@
     <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
     <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
     <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
+    <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
     <uses-permission android:name="android.permission.INJECT_EVENTS"/>
     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
@@ -124,6 +125,18 @@
         </activity>
 
         <activity
+            android:name=".common.CarSettingActivities$RingtonePickerActivity"
+            android:windowSoftInputMode="adjustPan"
+            android:finishOnTaskLaunch="true"
+            android:exported="true">
+            <intent-filter android:priority="1">
+                <action android:name="android.intent.action.RINGTONE_PICKER" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="distractionOptimized" android:value="true"/>
+        </activity>
+
+        <activity
             android:name=".common.CarSettingActivities$NetworkAndInternetActivity"
             android:windowSoftInputMode="adjustPan"
             android:exported="true">
@@ -187,7 +200,6 @@
         <activity
             android:name=".common.CarSettingActivities$UserDetailsActivity"
             android:excludeFromRecents="true"
-            android:launchMode="singleInstance"
             android:exported="true">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.USER_SETTINGS" />
@@ -388,6 +400,7 @@
                 <action android:name="android.settings.NOTIFICATION_SETTINGS" />
                 <action android:name="android.settings.CHANNEL_NOTIFICATION_SETTINGS" />
                 <action android:name="android.settings.APP_NOTIFICATION_SETTINGS" />
+                <action android:name="android.intent.action.AUTO_REVOKE_PERMISSIONS" />
                 <data android:scheme="package" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
@@ -400,6 +413,7 @@
                 <action android:name="android.settings.NOTIFICATION_SETTINGS" />
                 <action android:name="android.settings.CHANNEL_NOTIFICATION_SETTINGS" />
                 <action android:name="android.settings.APP_NOTIFICATION_SETTINGS" />
+                <action android:name="android.intent.action.AUTO_REVOKE_PERMISSIONS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <meta-data android:name="distractionOptimized" android:value="true"/>
@@ -691,6 +705,20 @@
             </intent-filter>
         </activity>
 
+        <!-- This is used internally for CTS tests and should not be used in generally. -->
+        <activity android:name=".wifi.networkrequest.NetworkRequestDialogActivity"
+                  android:excludeFromRecents="true"
+                  android:exported="true"
+                  android:launchMode="singleTop"
+                  android:permission="android.permission.NETWORK_SETTINGS"
+                  android:taskAffinity=".wifi.networkrequest.NetworkRequestDialogActivity"
+                  android:theme="@style/ActionDialogTheme">
+            <intent-filter>
+                <action android:name="com.android.settings.wifi.action.NETWORK_REQUEST"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
         <!-- This logic is copied from phone.-->
         <!-- Ensures there's lightweight fallback activity when no other MAIN/HOME activity is present.-->
         <activity
diff --git a/res/drawable/ic_block.xml b/res/drawable/ic_block.xml
new file mode 100644
index 0000000..0c777f9
--- /dev/null
+++ b/res/drawable/ic_block.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportHeight="36.0"
+    android:viewportWidth="36.0">
+    <path
+        android:fillColor="?attr/iconColor"
+        android:pathData="M18 3C9.7125 3 3 9.7125 3 18C3 26.2875 9.7125 33 18 33C26.2875 33 33 26.2875 33 18C33 9.7125 26.2875 3 18 3ZM6 18C6 11.37 11.37 6 18 6C20.775 6 23.3175 6.9525 25.35 8.5275L8.5275 25.35C6.9525 23.3175 6 20.775 6 18ZM18 30C15.225 30 12.6825 29.0475 10.65 27.4725L27.4725 10.65C29.0475 12.6825 30 15.225 30 18C30 24.63 24.63 30 18 30Z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_check_circle.xml b/res/drawable/ic_check_circle.xml
new file mode 100644
index 0000000..4d917f1
--- /dev/null
+++ b/res/drawable/ic_check_circle.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportHeight="36.0"
+    android:viewportWidth="36.0">
+    <path
+        android:fillColor="?attr/iconColor"
+        android:pathData="M18 3C9.7125 3 3 9.7125 3 18C3 26.28 9.7125 33 18 33C26.28 33 33 26.28 33 18C33 9.7125 26.28 3 18 3ZM15 25.5L7.5 18L9.6225 15.8775L15 21.255L26.3775 9.8775L28.5 12L15 25.5Z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_find_device_disabled.xml b/res/drawable/ic_find_device_disabled.xml
new file mode 100644
index 0000000..631d3e8
--- /dev/null
+++ b/res/drawable/ic_find_device_disabled.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FFF44336"
+        android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9zM11,13h2v2h-2V13zM13,6h-2v5h2V6z"/>
+</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..d676a70
--- /dev/null
+++ b/res/drawable/ic_find_device_enabled.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FF43A047"
+        android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13C19,5.13 15.87,2 12,2zM7,9c0,-2.76 2.24,-5 5,-5s5,2.24 5,5c0,2.88 -2.88,7.19 -5,9.88C9.92,16.21 7,11.85 7,9zM14.5,9c0,1.38 -1.12,2.5 -2.5,2.5S9.5,10.38 9.5,9s1.12,-2.5 2.5,-2.5S14.5,7.62 14.5,9z"/>
+</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..d21f68a
--- /dev/null
+++ b/res/drawable/ic_ota_update_current.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FF43A047"
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3C19,1.9 18.1,1.01 17,1.01zM17,21H7l0,-1h10V21zM17,18H7V6h10V18zM7,4V3h10v1H7zM11.14,16l-3.84,-3.84l1.41,-1.42l2.43,2.42l4.16,-4.16l1.42,1.41L11.14,16z"/>
+</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..df6c8fe
--- /dev/null
+++ b/res/drawable/ic_ota_update_none.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FFF44336"
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3C19,1.9 18.1,1.01 17,1.01zM17,21H7l0,-1h10V21zM17,18H7V6h10V18zM7,4V3h10v1H7zM11,15h2v2h-2V15zM13,8h-2v5h2V8z"/>
+</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..df6c8fe
--- /dev/null
+++ b/res/drawable/ic_ota_update_stale.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FFF44336"
+        android:pathData="M17,1.01L7,1C5.9,1 5,1.9 5,3v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3C19,1.9 18.1,1.01 17,1.01zM17,21H7l0,-1h10V21zM17,18H7V6h10V18zM7,4V3h10v1H7zM11,15h2v2h-2V15zM13,8h-2v5h2V8z"/>
+</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..8ddc04e
--- /dev/null
+++ b/res/drawable/ic_package_verifier_disabled.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FFEF6C00"
+        android:pathData="M12,4.24l6,3v4.1c0,3.9 -2.55,7.5 -6,8.59c-3.45,-1.09 -6,-4.7 -6,-8.59v-4.1L12,4.24M12,2L4,6v5.33c0,4.93 3.41,9.55 8,10.67c4.59,-1.12 8,-5.73 8,-10.67V6L12,2L12,2zM11,15h2v2h-2V15zM13,8h-2v5h2V8z"/>
+</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..b46c5ea
--- /dev/null
+++ b/res/drawable/ic_package_verifier_enabled.xml
@@ -0,0 +1,25 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FF43A047"
+        android:pathData="M11.14,16l-3.84,-3.84l1.41,-1.42l2.43,2.42l4.16,-4.16l1.42,1.41L11.14,16zM12,4.24l6,3v4.1c0,3.9 -2.55,7.5 -6,8.59c-3.45,-1.09 -6,-4.7 -6,-8.59v-4.1L12,4.24M12,2L4,6v5.33c0,4.93 3.41,9.55 8,10.67c4.59,-1.12 8,-5.73 8,-10.67V6L12,2L12,2z"/>
+</vector>
diff --git a/res/drawable/ic_package_verifier_removed.xml b/res/drawable/ic_package_verifier_removed.xml
new file mode 100644
index 0000000..a8902ae
--- /dev/null
+++ b/res/drawable/ic_package_verifier_removed.xml
@@ -0,0 +1,24 @@
+<!--
+    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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#FFF44336"
+        android:pathData="M15.5,9.91L14.09,8.5L12,10.59L9.91,8.5L8.5,9.91L10.59,12L8.5,14.09l1.41,1.41L12,13.42l2.09,2.08l1.41,-1.41L13.42,12L15.5,9.91zM12,4.24l6,3v4.1c0,3.9 -2.55,7.5 -6,8.59c-3.45,-1.09 -6,-4.7 -6,-8.59v-4.1L12,4.24M12,2L4,6v5.33c0,4.93 3.41,9.55 8,10.67c4.59,-1.12 8,-5.73 8,-10.67V6L12,2L12,2z"/>
+</vector>
diff --git a/res/drawable/ic_placeholder.xml b/res/drawable/ic_placeholder.xml
new file mode 100644
index 0000000..cc3801e
--- /dev/null
+++ b/res/drawable/ic_placeholder.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ Copyright (C) 2020 The Android Open 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.
+  -->
+<!-- Transparent icon to be used as a placeholder for URI-based icons that take time to load. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="@android:color/transparent"
+        android:pathData="M 0 0 1 0 1 1 0 1 z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_warning.xml b/res/drawable/ic_warning.xml
new file mode 100644
index 0000000..0ea4785
--- /dev/null
+++ b/res/drawable/ic_warning.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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="@dimen/icon_size"
+    android:height="@dimen/icon_size"
+    android:viewportHeight="36.0"
+    android:viewportWidth="36.0">
+    <path
+        android:fillColor="?attr/iconColor"
+        android:pathData="M1.5 31.5H34.5L18 3L1.5 31.5ZM19.5 27H16.5V24H19.5V27ZM19.5 21H16.5V15H19.5V21Z"/>
+</vector>
diff --git a/res/drawable/wifi_signal.xml b/res/drawable/wifi_signal.xml
index 80aef79..819c235 100644
--- a/res/drawable/wifi_signal.xml
+++ b/res/drawable/wifi_signal.xml
@@ -17,7 +17,7 @@
 
 <selector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res/com.android.car.settings">
+    xmlns:settings="http://schemas.android.com/apk/res-auto">
     <item settings:state_encrypted="true">
         <layer-list>
             <item>
diff --git a/res/layout/action_buttons_preference.xml b/res/layout/action_buttons_preference.xml
new file mode 100644
index 0000000..c0326cd
--- /dev/null
+++ b/res/layout/action_buttons_preference.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:layout_marginTop="@dimen/action_buttons_margin_top"
+    android:layout_marginBottom="@dimen/action_buttons_margin_bottom"
+    android:orientation="vertical">
+
+    <View
+        android:id="@+id/topDivider"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_buttons_divider_height"
+        style="@style/Preference.CarUi.Divider"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <com.android.car.ui.uxr.DrawableStateLinearLayout
+            android:id="@+id/button1"
+            style="?android:attr/buttonBarButtonStyle"
+            android:background="?android:attr/selectableItemBackground"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:orientation="horizontal"
+            android:minHeight="?android:attr/listPreferredItemHeightSmall">
+            <com.android.car.ui.uxr.DrawableStateImageView
+                android:id="@+id/button1Icon"
+                style="@style/PreferenceButtonIconAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/action_buttons_icon_margin_end"
+                android:selectable="false"/>
+            <com.android.car.ui.uxr.DrawableStateTextView
+                android:id="@+id/button1Text"
+                style="@style/PreferenceButtonTextAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:selectable="false"/>
+        </com.android.car.ui.uxr.DrawableStateLinearLayout>
+
+        <com.android.car.ui.uxr.DrawableStateLinearLayout
+            android:id="@+id/button2"
+            style="?android:attr/buttonBarButtonStyle"
+            android:background="?android:attr/selectableItemBackground"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:orientation="horizontal"
+            android:minHeight="?android:attr/listPreferredItemHeightSmall">
+            <com.android.car.ui.uxr.DrawableStateImageView
+                android:id="@+id/button2Icon"
+                style="@style/PreferenceButtonIconAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/action_buttons_icon_margin_end"
+                android:selectable="false"/>
+            <com.android.car.ui.uxr.DrawableStateTextView
+                android:id="@+id/button2Text"
+                style="@style/PreferenceButtonTextAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:selectable="false"/>
+        </com.android.car.ui.uxr.DrawableStateLinearLayout>
+
+        <com.android.car.ui.uxr.DrawableStateLinearLayout
+            android:id="@+id/button3"
+            style="?android:attr/buttonBarButtonStyle"
+            android:background="?android:attr/selectableItemBackground"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:orientation="horizontal"
+            android:minHeight="?android:attr/listPreferredItemHeightSmall">
+            <com.android.car.ui.uxr.DrawableStateImageView
+                android:id="@+id/button3Icon"
+                style="@style/PreferenceButtonIconAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/action_buttons_icon_margin_end"
+                android:selectable="false"/>
+            <com.android.car.ui.uxr.DrawableStateTextView
+                android:id="@+id/button3Text"
+                style="@style/PreferenceButtonTextAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:selectable="false"/>
+        </com.android.car.ui.uxr.DrawableStateLinearLayout>
+
+        <com.android.car.ui.uxr.DrawableStateLinearLayout
+            android:id="@+id/button4"
+            style="?android:attr/buttonBarButtonStyle"
+            android:background="?android:attr/selectableItemBackground"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:orientation="horizontal"
+            android:minHeight="?android:attr/listPreferredItemHeightSmall">
+            <com.android.car.ui.uxr.DrawableStateImageView
+                android:id="@+id/button4Icon"
+                style="@style/PreferenceButtonIconAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/action_buttons_icon_margin_end"
+                android:selectable="false"/>
+            <com.android.car.ui.uxr.DrawableStateTextView
+                android:id="@+id/button4Text"
+                style="@style/PreferenceButtonTextAppearance"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:selectable="false"/>
+        </com.android.car.ui.uxr.DrawableStateLinearLayout>
+
+    </LinearLayout>
+
+    <View
+        android:id="@+id/bottomDivider"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/action_buttons_divider_height"
+        style="@style/Preference.CarUi.Divider"/>
+
+</LinearLayout>
+
diff --git a/res/layout/car_setting_activity.xml b/res/layout/car_setting_activity.xml
index 74501d7..5fc993f 100644
--- a/res/layout/car_setting_activity.xml
+++ b/res/layout/car_setting_activity.xml
@@ -43,6 +43,7 @@
             android:layout_height="match_parent"
             android:background="?android:attr/colorPrimary"
             android:clickable="true"
+            android:focusable="false"
             android:gravity="center"
             android:text="@string/restricted_while_driving"
             android:textAppearance="?android:attr/textAppearanceLarge"
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
index a57fa6b..33166e5 100644
--- a/res/layout/choose_lock_password.xml
+++ b/res/layout/choose_lock_password.xml
@@ -15,7 +15,7 @@
     limitations under the License.
 -->
 
-<LinearLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -78,4 +78,4 @@
 
         </LinearLayout>
     </LinearLayout>
-</LinearLayout>
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/choose_lock_pin.xml b/res/layout/choose_lock_pin.xml
index 643d0a6..33d4473 100644
--- a/res/layout/choose_lock_pin.xml
+++ b/res/layout/choose_lock_pin.xml
@@ -15,7 +15,7 @@
     limitations under the License.
 -->
 
-<LinearLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -38,7 +38,8 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:columnCount="3"/>
+                android:columnCount="3"
+                android:layoutDirection="ltr"/>
         </FrameLayout>
 
         <!-- End side: pin entry field and messages -->
@@ -87,4 +88,4 @@
 
         </LinearLayout>
     </LinearLayout>
-</LinearLayout>
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/confirm_lock_password.xml b/res/layout/confirm_lock_password.xml
index e016206..f6e19de 100644
--- a/res/layout/confirm_lock_password.xml
+++ b/res/layout/confirm_lock_password.xml
@@ -15,7 +15,7 @@
     limitations under the License.
 -->
 
-<LinearLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/container"
     android:layout_width="match_parent"
@@ -56,4 +56,4 @@
             android:gravity="center"
             android:textAppearance="?android:attr/textAppearanceMedium"/>
     </LinearLayout>
-</LinearLayout>
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/confirm_lock_pin.xml b/res/layout/confirm_lock_pin.xml
index 717d9d0..7901aef 100644
--- a/res/layout/confirm_lock_pin.xml
+++ b/res/layout/confirm_lock_pin.xml
@@ -15,7 +15,7 @@
     limitations under the License.
 -->
 
-<LinearLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -39,7 +39,8 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:columnCount="3"/>
+                android:columnCount="3"
+                android:layoutDirection="ltr"/>
         </FrameLayout>
 
         <!-- End side: pin entry field and messages -->
@@ -78,4 +79,4 @@
                 android:textAppearance="?android:attr/textAppearanceMedium"/>
         </LinearLayout>
     </LinearLayout>
-</LinearLayout>
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/date_picker.xml b/res/layout/date_picker.xml
index fdb5462..2543ed8 100644
--- a/res/layout/date_picker.xml
+++ b/res/layout/date_picker.xml
@@ -15,20 +15,20 @@
     limitations under the License.
 -->
 
-<RelativeLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/focus_area"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:gravity="center">
 
     <DatePicker
-        xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/date_picker"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:datePickerMode="spinner"
         android:calendarViewShown="false"
+        android:datePickerMode="spinner"
+        android:focusable="true"
         android:scaleX="1.6"
-        android:scaleY="1.6"/>
-
-</RelativeLayout>
\ No newline at end of file
+        android:scaleY="1.6" />
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/details_preference_widget.xml b/res/layout/details_preference_widget.xml
deleted file mode 100644
index 4f9fc41..0000000
--- a/res/layout/details_preference_widget.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright 2018 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center"
-    android:src="@drawable/ic_settings_gear"/>
diff --git a/res/layout/edit_icon_preference_widget.xml b/res/layout/edit_icon_preference_widget.xml
deleted file mode 100644
index 3797630..0000000
--- a/res/layout/edit_icon_preference_widget.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright 2018 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center"
-    android:src="@drawable/ic_edit"/>
diff --git a/res/layout/edit_username_fragment.xml b/res/layout/edit_username_fragment.xml
index 031866d..69733d1 100644
--- a/res/layout/edit_username_fragment.xml
+++ b/res/layout/edit_username_fragment.xml
@@ -14,14 +14,12 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-
-<RelativeLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <FrameLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
+    <com.android.car.ui.FocusArea
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentTop="true"
@@ -39,5 +37,5 @@
             android:inputType="text"
             android:maxLines="1"
             android:textAppearance="?android:attr/textAppearanceLarge"/>
-    </FrameLayout>
-</RelativeLayout>
+    </com.android.car.ui.FocusArea>
+</FrameLayout>
diff --git a/res/layout/entity_header_preference.xml b/res/layout/entity_header_preference.xml
new file mode 100644
index 0000000..fbd4403
--- /dev/null
+++ b/res/layout/entity_header_preference.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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/entity_header"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:layout_marginBottom="@dimen/entity_header_margin_bottom"
+    android:layout_centerHorizontal="true"
+    android:gravity="center_horizontal"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/entity_header_icon"
+        android:layout_width="@dimen/entity_header_icon_size"
+        android:layout_height="@dimen/entity_header_icon_size"
+        android:scaleType="fitCenter"
+        android:antialias="true"/>
+
+    <TextView
+        android:id="@+id/entity_header_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:ellipsize="marquee"
+        android:layout_marginTop="@dimen/entity_header_inner_margin"
+        android:textAppearance="@style/TextAppearance.CarUi.PreferenceTitle"/>
+
+    <TextView
+        android:id="@+id/entity_header_summary"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/entity_header_inner_margin"
+        android:textAppearance="@style/TextAppearance.CarUi.PreferenceSummary"/>
+
+</LinearLayout>
diff --git a/res/layout/make_admin_preference_widget.xml b/res/layout/make_admin_preference_widget.xml
deleted file mode 100644
index 981b235..0000000
--- a/res/layout/make_admin_preference_widget.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright 2018 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center"
-    android:maxEms="@integer/button_max_ems"
-    android:text="@string/grant_admin_permissions_button_text"
-    android:textAppearance="@style/PreferenceButtonTextAppearance"/>
diff --git a/res/layout/preference_access_point.xml b/res/layout/preference_access_point.xml
new file mode 100644
index 0000000..40b0841
--- /dev/null
+++ b/res/layout/preference_access_point.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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.
+  -->
+
+<!-- Based off preference_material_settings.xml except that the ripple effect is active only on
+     the left side. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false"
+    android:paddingStart="@dimen/ap_preference_item_padding_start"
+    android:paddingEnd="@dimen/ap_preference_item_padding_end">
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:background="?android:attr/selectableItemBackground"
+        android:gravity="start|center_vertical"
+        android:clipToPadding="false">
+
+        <FrameLayout
+            android:id="@+id/icon_frame"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_marginEnd="@dimen/ap_preference_item_icon_margin_end">
+            <ImageView
+                android:id="@android:id/icon"
+                android:layout_width="@dimen/icon_size"
+                android:layout_height="@dimen/icon_size"
+            />
+        </FrameLayout>
+
+        <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/textAppearanceLarge"
+                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/textAppearanceMedium"
+                android:maxLines="10" />
+
+        </RelativeLayout>
+
+    </LinearLayout>
+
+    <include layout="@layout/preference_two_target_divider" />
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="64dp"
+        android:gravity="center"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/res/layout/time_picker.xml b/res/layout/time_picker.xml
index 15dfac8..c643857 100644
--- a/res/layout/time_picker.xml
+++ b/res/layout/time_picker.xml
@@ -15,19 +15,19 @@
     limitations under the License.
 -->
 
-<RelativeLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/focus_area"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:gravity="center">
 
     <TimePicker
-        xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/time_picker"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
+        android:focusable="true"
         android:scaleX="1.6"
         android:scaleY="1.6"
-        android:timePickerMode="spinner"/>
-
-</RelativeLayout>
\ No newline at end of file
+        android:timePickerMode="spinner" />
+</com.android.car.ui.FocusArea>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0fb52ae..50a8ba4 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wil Wi-Fi aanskakel"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wil Wi-Fi afskakel"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Fout"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Toestel om saam met <xliff:g id="APPNAME">%1$s</xliff:g> te gebruik"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Geen toestelle gekry nie. Maak seker dat toestelle aangeskakel is en beskikbaar is om te koppel."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Probeer weer"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Iets het voorgeval. Die program het die versoek gekanselleer om \'n toestel te kies."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Verbinding suksesvol"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Wys alles"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Soek"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Naamlose toestel"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Saamgebinde toestelle"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Foonluitoon"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Verstekkennisgewingklank"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Verstekwekkerklank"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Stoor"</string>
     <string name="units_settings" msgid="402325305096925886">"Eenhede"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Spoed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Afstand"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Verkeerde patroon"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Hoe om \'n ontsluitpatroon te teken"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Kon nie patroon stoor nie"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Te veel verkeerde pogings. Probeer oor <xliff:g id="NUMBER">%d</xliff:g> sekondes weer."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Verwyder skermslot?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Dit sal enigiemand toegang tot jou rekening gee"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 812fc0c..6f74c31 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiን ማብራት ይፈልጋል"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiን ማጥፋት ይፈልጋል"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ስህተት"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"ከ<xliff:g id="APPNAME">%1$s</xliff:g> ጋር የሚጠቀሙበት መሣሪያ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ምንም መሣሪያዎች አልተገኙም መሣሪያዎች እንደበሩ እና ለመገናኘት የሚገኝ መሆኑን ያረጋግጡ።"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"እንደገና ይሞክሩ"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"የሆነ ነገር መጥቷል። መተግበሪያው መሣሪያን የመምረጥ ጥያቄውን ሰርዞታል።"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ግንኙነት ተሳክቷል"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ሁሉንም አሳይ"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"በመፈለግ ላይ"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ብሉቱዝ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ያልተሰየመ መሳሪያ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"የተጣመሩ መሣሪያዎች"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"የስልክ ጥሪ ቅላጼ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ነባሪ የማሳወቂያ ድምጽ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ነባሪ የማንቂያ ድምጽ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"አስቀምጥ"</string>
     <string name="units_settings" msgid="402325305096925886">"መለኪያዎች"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ፍጥነት"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ርቀት"</string>
@@ -508,7 +516,7 @@
     <string name="user_add_account_menu" msgid="6625351983590713721">"መለያ አክል"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"ምንም መለያዎች አልታከሉም"</string>
     <string name="account_list_title" msgid="7631588514613843065">"የ<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> መለያዎች"</string>
-    <string name="account_auto_sync_title" msgid="3238816995364191432">"ውሂብን በራስ-ሰር አሳምር"</string>
+    <string name="account_auto_sync_title" msgid="3238816995364191432">"ውሂብን በራስ-ሰር አስምር"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"መተግበሪያዎች ውሂብን በራስ-ሰር ያድሱ"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"ውሂብን ራስ-አሳምር ይብራ?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"ድር ላይ በመለያዎችዎ ላይ የሚያደርጓቸው ማንኛቸውም ለውጦች በራስ-ሰር ወደ ስልክዎ ይቀዳሉ።\n\nአንዳንድ መለያዎች እንዲሁም በስልክ ላይ የሚያደርጓቸውን ማንኛቸውም ለውጦች ወደ ድሩ ሊቀዷቸው ይችላሉ። የGoogle መለያ በዚህ መንገድ ነው የሚሰራው።"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"የተሳሳተ ሥርዓተ ጥለት"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"የመክፈቻ ስርዓተ ንጥል እንዴት እንደሚሳል"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ስርዓተ-ጥለትን ማስቀመጥ ላይ ስህተት"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ከልክ በላይ ብዙ የተሳሳቱ ሙከራዎች። በ<xliff:g id="NUMBER">%d</xliff:g> ሰከንዶች ውስጥ እንደገና ይሞክሩ።"</string>
     <string name="okay" msgid="4589873324439764349">"እሺ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"ማያ ገጽ ቆላፊ ይወገድ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ይህ ማንም የፈለገ ሰው የእርስዎን መለያ እንዲደርስበት ይፈቅዳል"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7175e34..2a09ef7 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -165,6 +165,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"هناك رغبة من <xliff:g id="REQUESTER">%s</xliff:g> في تفعيل شبكة Wi-Fi."</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"هناك رغبة من <xliff:g id="REQUESTER">%s</xliff:g> في إيقاف شبكة Wi-Fi."</string>
     <string name="wifi_error" msgid="3105105447117289410">"خطأ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"الجهاز المُستخدَم مع <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"لم يتمّ العثور على أيّ أجهزة. تأكَّد من تشغيل الأجهزة وتوفّرها للاتصال."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"إعادة المحاولة"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"حدث خطأ. ألغى التطبيق طلب اختيار أحد الأجهزة."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"تمّ الاتصال."</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"عرض الكل"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"البحث"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"البلوتوث"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"جهاز بدون اسم"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"الأجهزة المقترنة"</string>
@@ -228,6 +235,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"نغمة رنين الهاتف"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"الصوت التلقائي للإشعارات"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"الصوت التلقائي للمنبّه"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"حفظ"</string>
     <string name="units_settings" msgid="402325305096925886">"وحدات العرض"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"السرعة"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"المسافة"</string>
@@ -424,15 +432,15 @@
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"هل تريد إعادة ضبط جميع إعدادات الشبكة؟ لا يمكنك التراجع عن هذا الإجراء."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"إعادة ضبط الإعدادات"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"تمت إعادة ضبط إعدادات الشبكة."</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"إعادة ضبط خيارات التطبيقات المفضّلة"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"إعادة ضبط الإعدادات المفضّلة للتطبيقات"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"يؤدي ذلك إلى إعادة ضبط جميع الإعدادات المفضَّلة لما يلي:\n\n"<li>"التطبيقات الموقوفة"</li>\n<li>"إشعارات التطبيقات الموقوفة"</li>\n<li>"التطبيقات التلقائية للإجراءات"</li>\n<li>"القيود على البيانات الخلفية للتطبيقات"</li>\n<li>"أيّ قيود على الأذونات"</li>\n\n"ولن تفقد أيّ بيانات للتطبيقات."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"إعادة ضبط التطبيقات"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"تم إعادة ضبط خيارات التطبيقات المفضّلة"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"تمت إعادة ضبط الإعدادات المفضّلة للتطبيقات"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"محو جميع البيانات (factory reset)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"سيؤدي هذا الإجراء إلى محو جميع البيانات من الوحدة الأساسية لمركبتك، بما في ذلك:\n\n"<li>"حسابك على Google"</li>\n<li>"بيانات وإعدادات النظام والتطبيقات"</li>\n<li>"التطبيقات التي تم تنزيلها"</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"سيؤدي هذا الإجراء إلى محو جميع البيانات من الوحدة الأساسية لسيارتك، بما في ذلك:\n\n"<li>"حسابك على Google"</li>\n<li>"بيانات وإعدادات النظام والتطبيقات"</li>\n<li>"التطبيقات التي تم تنزيلها"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"الحسابات التي سجَّلت الدخول إليها حاليًا:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"هناك مستخدمون آخرون موجودون على هذه المركبة."</string>
-    <string name="master_clear_button_text" msgid="8010754220392741160">"إعادة ضبط المركبة"</string>
+    <string name="master_clear_button_text" msgid="8010754220392741160">"إعادة ضبط إعدادات السيارة"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"هل تريد إعادة الضبط؟"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"هل تريد محو جميع المعلومات الشخصية والتطبيقات التي تم تنزيلها؟ لا يمكنك التراجع عن هذا الإجراء."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"محو جميع المعلومات والتطبيقات"</string>
@@ -447,11 +455,11 @@
     <string name="date_time_24hour_title" msgid="3025576547136168692">"تنسيق ٢٤ ساعة"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"استخدام تنسيق ٢٤ ساعة"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"الوقت"</string>
-    <string name="date_time_set_time" msgid="6449555153906058248">"تعيين الوقت"</string>
+    <string name="date_time_set_time" msgid="6449555153906058248">"ضبط الوقت"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"المنطقة الزمنية"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"اختيار المنطقة الزمنية"</string>
     <string name="date_time_set_date_title" msgid="6834785820357051138">"التاريخ"</string>
-    <string name="date_time_set_date" msgid="2537494485643283230">"تعيين التاريخ"</string>
+    <string name="date_time_set_date" msgid="2537494485643283230">"ضبط التاريخ"</string>
     <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"ترتيب أبجدي"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"ترتيب بحسب المنطقة الزمنية"</string>
     <string name="date_picker_title" msgid="1533614225273770178">"التاريخ"</string>
@@ -472,7 +480,7 @@
     <string name="user_new_user_name" msgid="7115771396412339662">"مستخدم جديد"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"أتريد إضافة مستخدم جديد؟"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"عند إضافة مستخدم جديد، عليه إعداد مساحته."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"يمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"يمكن لأي مستخدم تعديل إعدادات التطبيقات لجميع المستخدمين الآخرين."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"تم الوصول إلى أقصى عدد للمستخدمين"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="zero">يمكنك إنشاء ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدم.</item>
@@ -570,7 +578,7 @@
     <string name="continue_button_text" msgid="5129979170426836641">"متابعة"</string>
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"إعادة المحاولة"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"تخطّي"</string>
-    <string name="set_screen_lock" msgid="5239317292691332780">"تعيين قفل شاشة"</string>
+    <string name="set_screen_lock" msgid="5239317292691332780">"ضبط قفل شاشة"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"اختيار رقم التعريف الشخصي"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"اختيار النّقش"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"اختيار كلمة المرور"</string>
@@ -587,6 +595,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"نقش غير صحيح"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"كيفية رسم نقش فتح القفل"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"حدث خطأ أثناء حفظ النقش."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"تم إجراء عدد كبير جدًا من المحاولات غير الصحيحة. أعِد المحاولة خلال <xliff:g id="NUMBER">%d</xliff:g> ثانية."</string>
     <string name="okay" msgid="4589873324439764349">"حسنًا"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"هل تريد إزالة قفل الشاشة؟"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"سيؤدي هذا الإجراء إلى السماح لأي شخص بالدخول إلى حسابك."</string>
@@ -594,7 +603,7 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"أدخل كلمة المرور"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"للحفاظ على الأمان، يجب تعيين رقم PIN."</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"إعادة إدخال رقم التعريف الشخصي"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"يجب أن يكون رقم PIN‏ 4 أرقام على الأقل."</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"يجب أن يتكوّن PIN من‏ 4 أرقام على الأقل."</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"رقم التعريف الشخصي غير صالح لأنه يجب أن يحتوي على 4 أرقام على الأقل."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"أرقام PIN غير متطابقة"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"حدث خطأ أثناء حفظ رقم التعريف الشخصي."</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 9f8bbed..476e450 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>এ ৱাই-ফাই অন কৰিব বিচাৰে"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> এ ৱাই-ফাই অফ কৰিব বিচাৰিছে"</string>
     <string name="wifi_error" msgid="3105105447117289410">"আসোঁৱাহ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g>ৰ সৈতে ব্যৱহাৰ কৰিবলগীয়া ডিভাইচ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"কোনো ডিভাইচ বিচাৰি পোৱা নগ’ল। ডিভাইচ যাতে অন হৈ থাকে আৰু সংযোগ কৰিব পৰাকৈ উপলব্ধ থাকে সেইয়া নিশ্চিত কৰক।"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"আকৌ চেষ্টা কৰক"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"কিবা এটা সমস্যা হৈছে। এপ্লিকেশ্বনটোৱে ডিভাইচ বাচনি কৰাৰ অনুৰোধ বাতিল কৰিলে।"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"সংযোগ সফল হৈছে"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"সকলো দেখুৱাওক"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"অনুসন্ধান কৰি থকা হৈছে"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ব্লুটুথ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"নাম নথকা ডিভাইচ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"যোৰা লগোৱা ডিভাইচসমূহ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ফ’নৰ ৰিংট’ন"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"জাননীৰ ডিফ’ল্ট ধ্বনি"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"এলাৰ্মৰ ডিফ’ল্ট ধ্বনি"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ছেভ কৰক"</string>
     <string name="units_settings" msgid="402325305096925886">"এককসমূহ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"বেগ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"দূৰত্ব"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ভুল আৰ্হি"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"লক খোলাৰ আৰ্হি অঁকা উপায়"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"আৰ্হি ছেভ কৰোঁতে আঁসোৱাহ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"বহুসংখ্যক ভুল প্ৰয়াস। <xliff:g id="NUMBER">%d</xliff:g> ছেকেণ্ডত পুনৰ চেষ্টা কৰক।"</string>
     <string name="okay" msgid="4589873324439764349">"ঠিক আছে"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"স্ক্ৰীণ লক আঁতৰাবনে?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"এই কাৰ্যই সকলোকে আপোনাৰ একাউণ্টৰ এক্সেছ দিব"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"অগ্ৰাহ্য কৰক"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"গাড়ী চলাই থকা সময়ত এই সুবিধাটো উপলব্ধ নহয়"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"গাড়ী চলাই থকা সময়ত ব্য়ৱহাৰকাৰীক যোগ কৰিব নোৱাৰি"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"সন্ধান কৰক"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 6b83c2f..0f95a28 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi‑Fi şəbəkəsini aktiv etmək istəyir"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi‑Fi şəbəkəsini deaktiv etmək istəyir"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Xəta"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ilə istifadə ediləcək cihaz"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Cihaz tapılmadı. Cihazların aktiv olması və qoşulmaq üçün əlçatan olmasından əmin olun."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Yenidən cəhd edin"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Xəta baş verdi. Bu tətbiq cihaz seçmək üçün sorğunu ləğv etdi."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Qoşuldu"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Hamısına baxın"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Axtarılır"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Adsız cihaz"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Birləşdirilmiş cihazlar"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefon zəng səsi"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Defolt bildiriş səsi"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Defolt zəngli saat səsi"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Yadda saxlayın"</string>
     <string name="units_settings" msgid="402325305096925886">"Vahidlər"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Sürət"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Məsafə"</string>
@@ -513,7 +521,7 @@
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Data avto-sinx aktiv edilsin?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Vebdə hesabınıza etdiyiniz istənilən dəyişiklik avtomatik cihazınıza kopyalayacaq.\n\nBəzi hesablar telefonda etdiyiniz dəyişiklikləri avtomatik vebə kopyalaya bilər. Google Hesabı bu cür işləyir."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"Data avto-sinx deaktiv edilsin?"</string>
-    <string name="data_usage_auto_sync_off_dialog" msgid="5040873073016183315">"Bu, data istifadəsinə qənaət edəcək, lakin Siz sonuncu məlumatları toplamaq üçün hər hesabı əl ilə sinxronlaşdırmalı olacaqsınız. Və güncəlləşmə olduqda Sizə bildiriş gəlməyəcək."</string>
+    <string name="data_usage_auto_sync_off_dialog" msgid="5040873073016183315">"Trafik və enerji sərfiyyatı azalacaq, lakin yeni datanın əldə edilməsi üçün hesab əl ilə sinxronlaşdırılmalı olacaq. Yeni güncəllənmə olanda sizə bildiriş gəlməyəcək."</string>
     <string name="account_details_title" msgid="7529571432258448573">"Hesab məlumatı"</string>
     <string name="add_account_title" msgid="5988746086885210040">"Hesab əlavə edin"</string>
     <string name="add_an_account" msgid="1072285034300995091">"Hesab əlavə edin"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Yanlış model"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Sxem kilidini necə çəkməli"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Modeli saxlamaqla bağlı problem var"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Həddindən çox yanlış cəhdlər. <xliff:g id="NUMBER">%d</xliff:g> saniyəyə yenidən cəhd edin."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Ekran kilidi ləğv edilsin?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Bu, hər kəsə hesabınıza daxil olmaq imkanı verəcək"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 730fcf2..37a7134 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -87,8 +87,8 @@
     <string name="data_usage_limit_editor_title" msgid="133468242379286689">"Podesite ograničenje potrošnje podataka"</string>
     <string name="usage_bytes_threshold_picker_positive_button" msgid="4625479840977965519">"Podesi"</string>
     <string name="wifi_settings" msgid="7701477685273103841">"Wi‑Fi"</string>
-    <string name="wifi_starting" msgid="473253087503153167">"Wi-Fi se uključuje..."</string>
-    <string name="wifi_stopping" msgid="3534173972547890148">"Wi-Fi se isključuje..."</string>
+    <string name="wifi_starting" msgid="473253087503153167">"WiFi se uključuje..."</string>
+    <string name="wifi_stopping" msgid="3534173972547890148">"WiFi se isključuje..."</string>
     <string name="loading_wifi_list" msgid="8584901433195876465">"Učitava se Wi‑Fi lista"</string>
     <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi je onemogućen"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Brisanje mreže nije uspelo"</string>
@@ -131,7 +131,7 @@
     <string name="wifi_wakeup" msgid="7451825226044542000">"Automatski uključi Wi‑Fi"</string>
     <string name="wifi_wakeup_summary" msgid="7237521683331291414">"Wi‑Fi će se ponovo uključiti u blizini sačuvanih mreža visokog kvaliteta, kao što je kućna mreža"</string>
     <string name="wifi_wakeup_summary_no_location" msgid="2821576525488435259">"Nije dostupno jer je lokacija isključena. Uključite "<annotation id="link">"lokaciju"</annotation>"."</string>
-    <string name="wifi_settings_scanning_required_title" msgid="2726782203331704928">"Želite li da uključite Wi-Fi skeniranje?"</string>
+    <string name="wifi_settings_scanning_required_title" msgid="2726782203331704928">"Želite li da uključite WiFi skeniranje?"</string>
     <string name="wifi_settings_scanning_required_turn_on" msgid="4464931023377210050">"Uključi"</string>
     <string name="wifi_settings_scanning_required_enabled" msgid="5457372118991438313">"Wi‑Fi skeniranje je uključeno"</string>
     <string name="wifi_cellular_fallback_title" msgid="8322675436784870862">"Automatski pređi na mobilne podatke"</string>
@@ -156,9 +156,16 @@
     <string name="tether_settings_title_all" msgid="4663704772599383169">"Hotspot i privezivanje"</string>
     <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Automatski isključi hotspot"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Wi‑Fi hotspot će se isključiti ako nijedan uređaj nije povezan"</string>
-    <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> želi da uključi Wi-Fi"</string>
-    <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> želi da isključi Wi-Fi"</string>
+    <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> želi da uključi WiFi"</string>
+    <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> želi da isključi WiFi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Greška"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Uređaj koji će se koristiti za <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nije pronađen nijedan uređaj Proverite da li je uređaj uključen i dostupan za povezivanje."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Probaj ponovo"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Došlo je do nekog problema. Aplikacija je otkazala zahtev za izbor uređaja."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Povezivanje je uspelo"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Prikaži sve"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Pretražuje se"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Neimenovani uređaj"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Upareni uređaji"</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Melodija zvona telefona"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Podrazumevani zvuk obaveštenja"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Podrazumevani zvuk alarma"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Sačuvaj"</string>
     <string name="units_settings" msgid="402325305096925886">"Jedinice"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Brzina"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Razdaljina"</string>
@@ -344,8 +352,8 @@
     <string name="premium_sms_access_description" msgid="7119026067677052169">"Premijum SMS-ovi mogu da koštaju i povećaće račune kod mobilnog operatera. Ako omogućite dozvolu za neku aplikaciju, moći ćete da šaljete premijum SMS-ove pomoću te aplikacije."</string>
     <string name="usage_access_title" msgid="7153427122072303254">"Pristup korišćenju"</string>
     <string name="usage_access_description" msgid="2413168719257435422">"Pristup korišćenju omogućava aplikaciji da prati koje druge aplikacije koristite i koliko često, kao i da vidi mobilnog operatera, jezička podešavanja i druge podatke."</string>
-    <string name="wifi_control_title" msgid="5660436566907731929">"Kontrola Wi-Fi mreže"</string>
-    <string name="wifi_control_description" msgid="6021926850423169261">"Kontrola Wi-Fi mreže omogućava aplikaciji da uključi ili isključi Wi-Fi, traži i povezuje se na Wi-Fi mreže, dodaje ili uklanja mreže ili pokreće samo lokalni hotspot."</string>
+    <string name="wifi_control_title" msgid="5660436566907731929">"Kontrola WiFi mreže"</string>
+    <string name="wifi_control_description" msgid="6021926850423169261">"Kontrola WiFi mreže omogućava aplikaciji da uključi ili isključi WiFi, traži i povezuje se na WiFi mreže, dodaje ili uklanja mreže ili pokreće samo lokalni hotspot."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Još"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Lokacija"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Nedavni zahtevi za lokaciju"</string>
@@ -400,7 +408,7 @@
     <string name="reset_options_summary" msgid="5508201367420359293">"Resetovanje mreže, aplikacija ili uređaja"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Resetuj mrežu"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"Ovim resetujete sva podešavanja mreže, uključujući:"</string>
-    <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi-Fi"</li></string>
+    <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"WiFi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Mobilni podaci"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"Bluetooth"</li></string>
     <string name="reset_esim_title" msgid="8132107637911831211">"Izbriši sve eSIM-ove vozila"</string>
@@ -416,7 +424,7 @@
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Ovim ćete resetovati sva podešavanja za:\n\n"<li>"Onemogućene aplikacije"</li>\n<li>"Obaveštenja o onemogućenim aplikacijama"</li>\n<li>"Podrazumevane aplikacije za radnje"</li>\n<li>"Ograničenja za pozadinske podatke za aplikacije"</li>\n<li>"Sva ograničenja za dozvole"</li>\n\n"Nećete izgubiti nikakve podatke aplikacije."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Resetuj aplikacije"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Podešavanja aplikacija su resetovana"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Obriši sve podatke"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Obriši sve podatke (fabrička podešavanja)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Ovim brišete sve podatke iz interne memorije vozila, uključujući:\n\n"<li>"Google nalog"</li>\n<li>"podatke i podešavanja sistema i aplikacija"</li>\n<li>"preuzete aplikacije"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Trenutno ste prijavljeni na sledeće naloge:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"U ovom vozilu su prisutni i drugi korisnici."</string>
@@ -525,7 +533,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Ograničeni profili ne mogu da dodaju naloge"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Ukloni nalog"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Želite da uklonite nalog?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Ako uklonite ovaj nalog, izbrisaćete sve poruke, kontakte i druge podatke sa uređaja!"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Ako uklonite ovaj nalog, izbrisaćete sve poruke, kontakte i druge podatke sa uređaja."</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Uklanjanje naloga nije uspelo."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Sinhronizacija naloga"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Sinhronizacija je uključena za određene stavke (<xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>)"</string>
@@ -567,14 +575,15 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Nacrtajte šablon za otključavanje"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Podignite prst kada završite"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Šablon je snimljen"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Ponovo nacrtajte šablon radi potvrde"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Ponovo nacrtajte šablon da biste potvrdili"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Povežite bar 4 tačke. Probajte ponovo."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Pogrešan šablon"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kako nacrtati šablon za otključavanje"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Greška pri čuvanju šablona"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Previše netačnih pokušaja. Probajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
     <string name="okay" msgid="4589873324439764349">"Potvrdi"</string>
-    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Želite li da ukl. zak. ekrana?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ovim ćete dozvoliti svima pristup vašem nalogu"</string>
+    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Uklonićete zaključavanje ekrana?"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tada će svako moći da pristupi vašem nalogu"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Unesite PIN"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Unesite lozinku"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Podesite PIN iz bezbednosnih razloga"</string>
@@ -593,7 +602,7 @@
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Potvrdi"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"Mora da sadrži najmanje 4 znaka"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Minimalan broj znakova je <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"Minimalan broj cifara za PIN je <xliff:g id="COUNT">%d</xliff:g>"</string>
+    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"PIN mora da sadrži bar <xliff:g id="COUNT">%d</xliff:g> cif."</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"Maksimalan broj znakova je <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="lockpassword_pin_too_long" msgid="62957683396974404">"Maksimalan broj cifara je <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="lockpassword_pin_contains_non_digits" msgid="3044526271686839923">"Mora da sadrži samo cifre 0–9."</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 0205007..cb8d3b8 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -100,7 +100,7 @@
     <string name="wifi_password" msgid="5565632142720292397">"Пароль"</string>
     <string name="wifi_show_password" msgid="8423293211933521097">"Паказваць пароль"</string>
     <string name="wifi_no_network_name" msgid="6819604337231313594">"Увядзіце назву сеткі"</string>
-    <string name="wifi_ssid" msgid="488604828159458741">"Імя сеткі"</string>
+    <string name="wifi_ssid" msgid="488604828159458741">"Назва сеткі"</string>
     <string name="wifi_ssid_hint" msgid="3170608752313710099">"Увядзіце SSID"</string>
     <string name="wifi_security" msgid="158358046038876532">"Бяспека"</string>
     <string name="wifi_signal_strength" msgid="8507318230553042817">"Узровень сігналу"</string>
@@ -156,11 +156,18 @@
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 ГГц"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Выберыце дыяпазон Wi‑Fi:"</string>
     <string name="tether_settings_title_all" msgid="4663704772599383169">"Хот-спот і мадэм"</string>
-    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Аўтаматычна выключыць хот-спот"</string>
+    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Аўтаматычна выключаць хот-спот"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Хот-спот Wi‑Fi выключыцца, калі прылады непадключаныя"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Уключыце Wi-Fi для праграмы \"<xliff:g id="REQUESTER">%s</xliff:g>\""</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Выключыце Wi-Fi для праграмы \"<xliff:g id="REQUESTER">%s</xliff:g>\""</string>
     <string name="wifi_error" msgid="3105105447117289410">"Памылка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Прылада для выкарыстання з праграмай <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Прылады не знойдзены. Пераканайцеся, што прылады ўключаны і даступныя для падключэння."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Паўтарыць спробу"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Нешта здарылася. Праграма скасавала запыт на выбар прылады."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Падключэнне выканана"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Паказаць усе"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Пошук"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Прылада без назвы"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Спалучаныя прылады"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Рынгтон тэлефона"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Стандартны гук апавяшчэння"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Стандартны сігнал будзільніка"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Захаваць"</string>
     <string name="units_settings" msgid="402325305096925886">"Адзінкі"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Хуткасць"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Адлегласць"</string>
@@ -562,7 +570,7 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Прапусціць"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Задайце блакіроўку экрана"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Набярыце PIN-код"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Выберыце шаблон"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Выберыце ўзор разблакіроўкі"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Выберыце пароль"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Бягучая блакіроўка экрана"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Задайце ўзор, каб абараніць прыладу"</string>
@@ -572,14 +580,15 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Нарысуйце ўзор разблакіроўкі"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Адпусціце палец, калі скончыце"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Узор разблакіроўкі запісаны"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Увядзіце ўзор, каб пацвердзіць"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Нарысуйце яшчэ раз для пацвярджэння"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Злучыце не менш за 4 кропкі. Паўтарыце."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Няправільны ўзор"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Як нарысаваць узор разблакіроўкі"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Памылка захавання ўзору разблакіроўкі"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Занадта шмат няўдалых спроб. Паспрабуйце яшчэ раз праз <xliff:g id="NUMBER">%d</xliff:g> с."</string>
     <string name="okay" msgid="4589873324439764349">"ОК"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Зняць блакіроўку экрана?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Доступ да вашага ўліковага запісу атрымае любы карыстальнік"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Доступ да вашага ўліковага запісу зможа атрымаць любы чалавек"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Увядзіце PIN-код"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Увядзіце пароль"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Задайце PIN-код, каб абараніць прыладу"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index dfe419e..80484c6 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -135,7 +135,7 @@
     <string name="wifi_cellular_fallback_title" msgid="8322675436784870862">"Автоматично превключване към мобилни данни"</string>
     <string name="wifi_cellular_fallback_summary" msgid="2433848528924203758">"Използване на мобилни данни, когато Wi‑Fi мрежата няма достъп до интернет. Може да бъдете таксувани за пренос на данни."</string>
     <string name="learn_more" msgid="8214605928933358604">"Научете повече"</string>
-    <string name="wifi_hotspot_name_title" msgid="8844779338692535356">"Точка за достъп: Име"</string>
+    <string name="wifi_hotspot_name_title" msgid="8844779338692535356">"Име на точката за достъп"</string>
     <string name="wifi_hotspot_name_summary_connecting" msgid="5262510450498600038">"„<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>“ се включва..."</string>
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Други устройства могат да се свързват към „<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>“"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Парола за точката за достъп"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> иска да включи Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> иска да изключи Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Грешка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Устройство, което да се използва с(ъс) „<xliff:g id="APPNAME">%1$s</xliff:g>“"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Няма намерени устройства. Уверете се, че устройствата са включени и налице за свързване."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Нов опит"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Нещо стана. Приложението анулира заявката за избиране на устройство."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Връзката е успешна"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Показване на всички"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Търси се"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Устройство без име"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Сдвоени устройства"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Мелодия на телефона"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Стандартен звук за известяване"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Стандартен звук за будилника"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Запазване"</string>
     <string name="units_settings" msgid="402325305096925886">"Мерни ед."</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Скорост"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Разстояние"</string>
@@ -281,7 +289,7 @@
     <string name="enable_text" msgid="1794971777861881238">"Активиране"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Деинсталиране"</string>
     <string name="app_disable_dialog_text" msgid="7731155411006654025">"Ако деактивирате това приложение, Android и други приложения може да спрат да работят както трябва."</string>
-    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Деактивиране на приложението"</string>
+    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Деактивиране"</string>
     <string name="not_installed" msgid="4218816013370552746">"Не е инсталирано за този потребител"</string>
     <string name="permissions_label" msgid="2701446753515612685">"Разрешения"</string>
     <string name="notifications_label" msgid="6586089149665170731">"Известия"</string>
@@ -327,7 +335,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Без отваряне в това приложение"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Поддържани връзки"</string>
     <string name="special_access" msgid="5730278220917123811">"Специален достъп за приложението"</string>
-    <string name="show_system" msgid="4401355756969485287">"Показване на сист. процеси"</string>
+    <string name="show_system" msgid="4401355756969485287">"Системни процеси"</string>
     <string name="hide_system" msgid="8845453295584638040">"Скриване на системните процеси"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Промяна на сист. настройки"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Това разрешение позволява на дадено приложение да променя системни настройки."</string>
@@ -454,7 +462,7 @@
     <string name="uninstall_apps_permission_title" msgid="8448422340567430659">"Деинсталиране на приложения"</string>
     <string name="user_add_user_menu" msgid="5319151436895941496">"Добавяне на потребител"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Нов потребител"</string>
-    <string name="user_add_user_title" msgid="7458813670614932479">"Добавяне на нов потреб.?"</string>
+    <string name="user_add_user_title" msgid="7458813670614932479">"Добавяне на нов потребител?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Когато добавите нов потребител, той трябва да настрои работното си пространство."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"Всеки потребител може да актуализира приложенията за всички останали потребители."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Достигнахте огранич. за потребители"</string>
@@ -542,7 +550,7 @@
     <string name="security_lock_pattern" msgid="1174352995619563104">"Фигура"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"ПИН код"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Парола"</string>
-    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Избор на типа на закл."</string>
+    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Избор на типа на заключване"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"Опции за заключване"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Въведете фигурата си"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Потвърждаване"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Грешна фигура"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Как се чертае фигура за отключване"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Грешка при запазването на фигурата"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Твърде много неправилни опити. Пробвайте отново след <xliff:g id="NUMBER">%d</xliff:g> секунди."</string>
     <string name="okay" msgid="4589873324439764349">"ОK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Премахване на закл. на екрана?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Така ще разрешите на всеки да има достъп до профила ви"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index d8f3df1..774d159 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ওয়াই-ফাই বন্ধ করতে চান"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ওয়াই-ফাই বন্ধ করতে চাইছেন"</string>
     <string name="wifi_error" msgid="3105105447117289410">"সমস্যা"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ব্যবহার করা যাবে এমন ডিভাইস"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"কোনও ডিভাইস খুঁজে পাওয়া যায়নি। ডিভাইস চালু আছে এবং কানেক্ট করার জন্য তৈরি কিনা তা ভাল করে দেখে নিন।"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"আবার চেষ্টা করুন"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"কোনও সমস্যা হয়েছে। ডিভাইস বেছে নেওয়ার আবেদনটি এই অ্যাপ্লিকেশনের মাধ্যমে বাতিল করা হয়েছে।"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"কানেক্ট করা হয়েছে"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"সব দেখুন"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"সার্চ করা হচ্ছে"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ব্লুটুথ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"নামবিহীন ডিভাইস"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"পেয়ার করা ডিভাইসগুলি"</string>
@@ -164,7 +171,7 @@
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"পেয়ার করার জন্য ব্লুটুথ চালু হবে"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"ডিভাইস ডিসকানেক্ট করতে চান?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>.ডিভাইস থেকে আপনার গাড়িটি ডিসকানেক্ট হয়ে যাবে।"</string>
-    <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"গাড়িতে ব্যবহার হওয়া ব্লুটুথ ঠিকানা: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
+    <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"গাড়িতে ব্যবহার হওয়া ব্লুটুথ অ্যাড্রেস: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"ডিভাইসে ব্যবহার হওয়া ব্লুটুথ ঠিকানা: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"গাড়ির নাম"</string>
     <string name="bluetooth_rename_vehicle" msgid="5769424875066563154">"এই গাড়িটির আবার নামকরণ করুন"</string>
@@ -185,7 +192,7 @@
     <string name="bluetooth_ask_enablement_and_discovery_no_name" msgid="907153034209916282">"একটি অ্যাপ ব্লুটুথ চালু করতে চায় এবং আপনার হেডইউনিটটিকে অন্যান্য ডিভাইসের জন্য <xliff:g id="TIMEOUT">%1$d</xliff:g> সেকেন্ড দেখাতে চায়।"</string>
     <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"ব্লুটুথ পেয়ার করার অনুরোধ"</string>
     <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"পেয়ার এবং কানেক্ট করুন"</string>
-    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"ব্লুটুথ এর সাথে পেয়ার করার কোড"</string>
+    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"ব্লুটুথ-এর সাথে পেয়ার করার কোড"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"পিনে অক্ষর বা চিহ্ন রয়েছে"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"যুক্ত করার কোড লিখে রিটার্ন অথবা এন্টার টিপুন"</string>
     <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সাথে পেয়ার করবেন?"</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"রিসেট করুন"</string>
     <string name="sound_settings" msgid="3072423952331872246">"সাউন্ড"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"রিং ভলিউম"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"ন্যাভিগেশন ভলিউম"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"নেভিগেশন ভলিউম"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"রিংটোন"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"বিজ্ঞপ্তি"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"মিডিয়া"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ফোনের রিংটোন"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ডিফল্ট বিজ্ঞপ্তির সাউন্ড"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ডিফল্ট অ্যালার্মের শব্দ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"সেভ করুন"</string>
     <string name="units_settings" msgid="402325305096925886">"একক"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"গতি"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"দূরত্ব"</string>
@@ -410,8 +418,8 @@
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"নেটওয়ার্ক সেটিংস রিসেট করা হয়েছে"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"অ্যাপের অভিরুচি রিসেট করুন"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"এটি এইগুলির জন্য সব পছন্দ রিসেট করবে:\n\n"<li>" বন্ধ করা অ্যাপ"</li>\n<li>" বন্ধ করা অ্যাপের বিজ্ঞপ্তি"</li>\n<li>" অ্যাকশনের জন্য ডিফল্ট অ্যাপ্লিকেশন"</li>\n<li>" অ্যাপের জন্য ব্যাকগ্রাউন্ড ডেটার সীমাবদ্ধতা"</li>\n<li>" যেকোনও অনুমতির সীমাবদ্ধতা"</li>\n\n" আপনি কোনও অ্যাপের ডেটা হারাবেন না।"</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"অ্যাপ আবার সেট করুন"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"অ্যাপের পছন্দ রিসেট করা হয়েছে"</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"অ্যাপ রিসেট করুন"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"অ্যাপের অভিরুচি রিসেট করা হয়েছে"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"সমস্ত ডেটা মুছে ফেলুন (ফ্যাক্টরি রিসেট)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"এটি গাড়ির প্রধান ডিসপ্লে ইউনিট থেকে সমস্ত ডেটা মুছে ফেলবে, নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:\n\n"<li>"আপনার Google অ্যাকাউন্ট"</li>\n<li>"সিস্টেম এবং অ্যাপের ডেটা এবং সেটিংস"</li>\n<li>"ডাউনলোড করা অ্যাপ"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"আপনি বর্তমানে নিম্নলিখিত অ্যাকাউন্টে সাইন-ইন করে আছেন:"</string>
@@ -488,7 +496,7 @@
     <string name="storage_settings_title" msgid="8957054192781341797">"স্টোরেজ"</string>
     <string name="storage_music_audio" msgid="7827147379976134040">"মিউজিক ও অডিও"</string>
     <string name="storage_other_apps" msgid="945509804756782640">"অন্যান্য অ্যাপ"</string>
-    <string name="storage_files" msgid="6382081694781340364">"Files"</string>
+    <string name="storage_files" msgid="6382081694781340364">"ফাইল"</string>
     <string name="storage_system" msgid="1271345630248014010">"সিস্টেম"</string>
     <string name="storage_detail_dialog_system" msgid="796365720531622361">"Android ভার্সন <xliff:g id="VERSION">%s</xliff:g> চালানোর জন্য সিস্টেমের মধ্যে ফাইল থাকে"</string>
     <string name="storage_audio_files_title" msgid="5183170457027181700">"অডিও ফাইলগুলি"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ভুল প্যাটার্ন"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"কীভাবে একটি আনলক প্যাটার্ন আঁকবেন"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"প্যাটার্ন সেভ করার সময় সমস্যা"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"অনেকবার ভুল প্রচেষ্টা করা হয়েছে। <xliff:g id="NUMBER">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
     <string name="okay" msgid="4589873324439764349">"ঠিক আছে"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"স্ক্রিন লক সরিয়ে দেবেন?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"এর ফলে যেকেউ আপনার অ্যাকাউন্ট অ্যাক্সেস করতে পারবেন"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"খারিজ করুন"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ড্রাইভ করার সময় এই ফিচার কাজ করবে না"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ড্রাইভ করার সময় ব্যবহারকারীকে যোগ করতে পারবেন না"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"সার্চ"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 42a8287..607cb5b 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -90,7 +90,7 @@
     <string name="wifi_starting" msgid="473253087503153167">"Uključivanje WiFi-a…"</string>
     <string name="wifi_stopping" msgid="3534173972547890148">"Isključivanje WiFi-a…"</string>
     <string name="loading_wifi_list" msgid="8584901433195876465">"Učitavanje liste WiFi mreža"</string>
-    <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi mreža je onemogućena"</string>
+    <string name="wifi_disabled" msgid="5013262438128749950">"WiFi je onemogućen"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Zaboravljanje mreže nije uspjelo"</string>
     <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Povezivanje na mrežu nije uspjelo"</string>
     <string name="wifi_setup_add_network" msgid="3660498520389954620">"Dodaj mrežu"</string>
@@ -137,7 +137,7 @@
     <string name="wifi_cellular_fallback_title" msgid="8322675436784870862">"Automatsko prebacivanje na prijenos podataka na mobilnoj mreži"</string>
     <string name="wifi_cellular_fallback_summary" msgid="2433848528924203758">"Korištenje prijenosa podataka na mobilnoj mreži kada WiFi mreža nema pristup internetu. Mogu nastati troškovi prijenosa podataka."</string>
     <string name="learn_more" msgid="8214605928933358604">"Saznajte više"</string>
-    <string name="wifi_hotspot_name_title" msgid="8844779338692535356">"Ime pristupne tačke"</string>
+    <string name="wifi_hotspot_name_title" msgid="8844779338692535356">"Naziv pristupne tačke"</string>
     <string name="wifi_hotspot_name_summary_connecting" msgid="5262510450498600038">"Uključivanje <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Drugi uređaji se mogu povezati na pristupnu tačku <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Lozinka pristupne tačke"</string>
@@ -153,12 +153,19 @@
     <string name="wifi_ap_2G" msgid="5364135697314262014">"2,4 GHz"</string>
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 GHz"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Odaberite barem jedan frekvencijski pojas za WiFi pristupnu tačku:"</string>
-    <string name="tether_settings_title_all" msgid="4663704772599383169">"Pristupna tačka i dijeljenje mobilne veze"</string>
+    <string name="tether_settings_title_all" msgid="4663704772599383169">"Pristupna tačka i povezivanje putem mobitela"</string>
     <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Automatski isključi pristupnu tačku"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"WiFi pristupna tačka će se isključiti ako nijedan uređaj nije povezan"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> želi uključiti WiFi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> želi isključiti WiFi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Greška"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Korištenje uređaja s aplikacijom <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nije pronađen nijedan uređaj Provjerite jesu li uređaji uključeni i dostupni za povezivanje."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Pokušaj ponovo"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Nešto se dogodilo. Ova aplikacija je otkazala zahtjev za odabir uređaja."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Uspješno povezivanje"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Prikaži sve"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Pretraživanje"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Neimenovani uređaj"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Upareni uređaji"</string>
@@ -185,12 +192,12 @@
     <string name="bluetooth_ask_discovery_no_name" msgid="164397600370102369">"Aplikacija želi da vaša glavna jedinica bude vidljiva drugim Bluetooth uređajima na <xliff:g id="TIMEOUT">%1$d</xliff:g> s."</string>
     <string name="bluetooth_ask_enablement_and_discovery" msgid="5487502083015708674">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> želi uključiti Bluetooth te učiniti vašu glavu jedinicu vidljivom drugim uređajima na <xliff:g id="TIMEOUT">%2$d</xliff:g> s."</string>
     <string name="bluetooth_ask_enablement_and_discovery_no_name" msgid="907153034209916282">"Aplikacija želi uključiti Bluetooth te učiniti vašu glavnu jedinicu vidljivom drugim uređajima na <xliff:g id="TIMEOUT">%1$d</xliff:g> s."</string>
-    <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Zahtjev za Bluetooth uparivanje"</string>
+    <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Zahtjev za uparivanje putem Bluetootha"</string>
     <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"Upari i poveži"</string>
-    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Kôd za Bluetooth uparivanje"</string>
+    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Kôd za uparivanje putem Bluetootha"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"PIN sadrži slova ili simbole"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Upišite kôd za uparivanje, a zatim pritisnite Return ili Enter"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Upariti sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Upariti s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"Dozvoli uređaju <xliff:g id="DEVICE_NAME">%1$s</xliff:g> pristup kontaktima i historiji poziva"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"Možda ćete morati unijeti ovaj PIN na drugom uređaju."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"Možda ćete morati unijeti ovaj pristupni kôd na drugom uređaju."</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Melodija zvona telefona"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Zadani zvuk obavještenja"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Zadani zvuk alarma"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Sačuvaj"</string>
     <string name="units_settings" msgid="402325305096925886">"Jedinice"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Brzina"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Razdaljina"</string>
@@ -291,7 +299,7 @@
     <string name="application_version_label" msgid="8556889839783311649">"Verzija: %1$s"</string>
     <string name="runtime_permissions_summary_no_permissions_granted" msgid="6001439205270250021">"Nema dodijeljenih odobrenja"</string>
     <string name="runtime_permissions_summary_no_permissions_requested" msgid="4074220596273432442">"Nema zatraženih odobrenja"</string>
-    <string name="storage_type_internal" msgid="8918688427078709570">"%s u unutrašnjoj memoriji"</string>
+    <string name="storage_type_internal" msgid="8918688427078709570">"%s u unutrašnjoj pohrani"</string>
     <string name="data_usage_summary_title" msgid="4368024763485916986">"Prijenos podataka"</string>
     <string name="data_usage_app_summary_title" msgid="5012851696585421420">"Prijenos podataka za apl."</string>
     <string name="computing_size" msgid="5791407621793083965">"Računanje…"</string>
@@ -413,10 +421,10 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Vrati postavke na zadano"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Postavke mreže su vraćene na zadano"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Vrati postavke aplikacije na zadano"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Ovim će se vratiti sve postavke na zadano za:\n\n"<li>" Onemogućene aplikacije"</li>\n<li>"Obavještenja za onemogućene aplikacije"</li>\n<li>"Zadane aplikacije za radnje"</li>\n<li>" Ograničenje pozadinskih podataka za aplikacije"</li>\n<li>" Sva ograničenja za odobrenja"</li>\n\n" Nećete izgubiti podatke iz aplikacija."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Ovim će se vratiti sve postavke na zadano za:\n\n"<li>"Onemogućene aplikacije"</li>\n<li>"Obavještenja za onemogućene aplikacije"</li>\n<li>"Zadane aplikacije za radnje"</li>\n<li>"Ograničenje pozadinskih podataka za aplikacije"</li>\n<li>"Sva ograničenja za odobrenja"</li>\n\n"Nećete izgubiti podatke iz aplikacija."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Vrati aplikacije na zadano"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Postavke aplikacije su vraćene na zadano"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Potpuno izbriši sve podatke"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Izbriši sve podatke"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Na ovaj način će se izbrisati svi podaci s glavne jedinice vozila, uključujući:\n\n"<li>"vaš Google račun"</li>\n<li>"sistemske i aplikacijske podatke i postavke"</li>\n<li>"preuzete aplikacije"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Trenutno ste prijavljeni u sljedeće račune:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Drugi korisnici su prisutni u ovom vozilu."</string>
@@ -543,11 +551,11 @@
     <string name="privacy_settings_title" msgid="3150145262029229572">"Privatnost"</string>
     <string name="security_settings_title" msgid="6955331714774709746">"Sigurnost"</string>
     <string name="security_settings_subtitle" msgid="2244635550239273229">"Zaključavanje ekrana"</string>
-    <string name="security_lock_none" msgid="1054645093754839638">"Nema"</string>
+    <string name="security_lock_none" msgid="1054645093754839638">"Ništa"</string>
     <string name="security_lock_pattern" msgid="1174352995619563104">"Uzorak"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Lozinka"</string>
-    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Izaberite vrstu zaklj."</string>
+    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Izaberite vrstu zaključavanja"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"Opcije zaključavanja"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Unesite svoj uzorak"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Potvrdi"</string>
@@ -567,16 +575,17 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Nacrtajte uzorak za otključavanje"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Podignite prst kada završite"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Uzorak snimljen"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Ponovo nacrtajte uzorak za potvrdu"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Ponovo nacrtajte uzorak da potvrdite"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Povežite bar 4 tačke. Pokušajte ponovo."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Pogrešan uzorak"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kako nacrtati uzorak za otključavanje"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Greška prilikom pohrane uzorka"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Previše pogrešnih pokušaja. Pokušajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"UREDU"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Ukloniti zaključavanje ekrana?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Svi će imati pristup vašem računu"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Unesite svoj PIN"</string>
-    <string name="lock_settings_enter_password" msgid="2636669926649496367">"Unesite svoju lozinku"</string>
+    <string name="lock_settings_enter_password" msgid="2636669926649496367">"Unesite lozinku"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Postavite PIN radi sigurnosti"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"Ponovo unesite PIN"</string>
     <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN mora sadržavati najmanje 4 cifre"</string>
@@ -590,7 +599,7 @@
     <string name="confirm_passwords_dont_match" msgid="7300229965206501753">"Lozinke se ne podudaraju"</string>
     <string name="lockpassword_clear_label" msgid="6363680971025188064">"Obriši"</string>
     <string name="lockpassword_cancel_label" msgid="5791237697404166450">"Otkaži"</string>
-    <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Potvrdi"</string>
+    <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Potvrdite"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"Mora sadržavati najmanje 4 znaka"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Broj znakova mora biti najmanje <xliff:g id="COUNT">%d</xliff:g>"</string>
     <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"Broj cifri u PIN-u mora biti najmanje <xliff:g id="COUNT">%d</xliff:g>"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e529fe0..cdf1956 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> vol activar la Wi‑Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> vol desactivar la Wi‑Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositiu per fer servir amb <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No s\'ha trobat cap dispositiu. Comprova que els dispositius estiguin activats i disponibles per connectar-s\'hi."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Torna-ho a provar"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"S\'ha produït un error. L\'aplicació ha cancel·lat la sol·licitud per seleccionar un dispositiu."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"S\'ha connectat correctament"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostra-ho tot"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"S\'està cercant"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositiu sense nom"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositius vinculats"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"So de trucada del telèfon"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"So de notificació predeterminat"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"So d\'alarma predeterminat"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Desa"</string>
     <string name="units_settings" msgid="402325305096925886">"Unitats"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocitat"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distància"</string>
@@ -272,7 +280,7 @@
     <string name="all_applications" msgid="7798210477486822168">"Mostra totes les aplicacions"</string>
     <string name="default_applications" msgid="1558183275638697087">"Aplicacions predeterminades"</string>
     <string name="app_permissions" msgid="32799922508313948">"Permisos d\'aplicacions"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Aplicacions que fan servir: <xliff:g id="APPS">%1$s</xliff:g>"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Aplicacions que utilitzen <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Informació de les aplicacions"</string>
     <string name="force_stop" msgid="2153183697014720520">"Força l\'aturada"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Vols forçar l\'aturada?"</string>
@@ -404,7 +412,7 @@
     <string name="reset_esim_error_title" msgid="7245109418130525492">"No es poden restablir les eSIM"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Selecciona una xarxa"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"Restableix la configuració"</string>
-    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Vols restablir-la?"</string>
+    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Restablir?"</string>
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Vols restablir tota la configuració de la xarxa? Aquesta acció no es pot desfer."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Restableix la configuració"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"S\'ha restablert la configuració de la xarxa"</string>
@@ -412,12 +420,12 @@
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Es restabliran totes les preferències de:\n\n"<li>"aplicacions desactivades"</li>\n<li>"notificacions d\'aplicacions desactivades"</li>\n<li>"aplicacions predeterminades per a les accions"</li>\n<li>"restriccions de dades en segon pla per a les aplicacions"</li>\n<li>"restriccions de permisos"</li>\n\n"No perdràs les dades de les aplicacions."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Restableix les aplicacions"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"S\'han restablert les preferències d\'aplicacions"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Esborra totes les dades"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Esborra totes les dades (restabliment de les dades de fàbrica)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Aquesta opció esborrarà totes dades de la unitat principal del vehicle, com ara:\n\n"<li>"el teu Compte de Google"</li>\n<li>"la configuració i les dades d\'aplicacions i del sistema"</li>\n<li>"les aplicacions baixades"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Actualment tens la sessió iniciada als comptes següents:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Hi ha altres usuaris al vehicle."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Restableix el vehicle"</string>
-    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Vols restablir-lo?"</string>
+    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Restablir?"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Vols esborrar tota la informació personal i les aplicacions baixades? Aquesta acció no es pot desfer."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Esborra-ho tot"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"S\'està esborrant"</string>
@@ -455,7 +463,7 @@
     <string name="user_add_user_menu" msgid="5319151436895941496">"Afegeix un usuari"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Usuari nou"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Vols afegir un usuari?"</string>
-    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar el seu espai."</string>
+    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Quan s\'afegeix un usuari nou, aquesta persona ha de configurar el seu espai."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"Qualsevol usuari pot actualitzar les aplicacions de la resta d\'usuaris."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"S\'ha assolit el límit d\'usuaris"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
@@ -507,7 +515,7 @@
     <string name="accounts_settings_title" msgid="436190037084293471">"Comptes"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Afegeix un compte"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"No s\'ha afegit cap compte"</string>
-    <string name="account_list_title" msgid="7631588514613843065">"Comptes de l\'usuari <xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g>"</string>
+    <string name="account_list_title" msgid="7631588514613843065">"Comptes de <xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g>"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Sincronitza les dades automàticament"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Permet que les aplicacions actualitzin dades automàticament"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Activar sincronització autom.?"</string>
@@ -562,14 +570,15 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Dibuixa un patró de desbloqueig"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Deixa anar el dit quan acabis"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Patró enregistrat"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Repeteix el patró per confirmar-lo"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Dibuixa el patró de nou per confirmar"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Connecta 4 punts com a mínim. Torna-ho a provar."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"El patró no és correcte"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Com es dibuixa un patró de desbloqueig"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"S\'ha produït un error en desar el patró"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Has superat el nombre d\'intents incorrectes permesos. Torna-ho a provar d\'aquí a <xliff:g id="NUMBER">%d</xliff:g> segons."</string>
     <string name="okay" msgid="4589873324439764349">"D\'acord"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Suprimir bloqueig de pantalla?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Permetràs que qualsevol persona accedeixi al teu compte"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Qualsevol persona podrà accedir al teu compte"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Introdueix el PIN"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Introdueix la contrasenya"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Per seguretat, defineix un PIN"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7b04a0d..54c04da 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -39,11 +39,11 @@
     </plurals>
     <string name="mobile_network_active_sim" msgid="1901674954229832811">"Aktivní / SIM karta"</string>
     <string name="mobile_network_inactive_sim" msgid="3644984830926224318">"Neaktivní / SIM karta"</string>
-    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Aktivní / stažená SIM karta"</string>
-    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Neaktivní / stažená SIM karta"</string>
+    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Aktivní stažená SIM karta"</string>
+    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Neaktivní stažená SIM karta"</string>
     <string name="mobile_network_list_add_more" msgid="6174294462747070655">"Přidat další"</string>
     <string name="mobile_network_toggle_title" msgid="3515647310810280063">"Mobilní data"</string>
-    <string name="mobile_network_toggle_summary" msgid="8698267487987697148">"Přistupovat k datům přes mobilní síť"</string>
+    <string name="mobile_network_toggle_summary" msgid="8698267487987697148">"Používat datové připojení přes mobilní síť"</string>
     <string name="confirm_mobile_data_disable" msgid="826493998804496639">"Vypnout mobilní data?"</string>
     <string name="sim_selection_required_pref" msgid="6599562910262785784">"Je vyžadován výběr"</string>
     <string name="sim_change_data_title" msgid="6677115745127365131">"Používat pro mobilní data <xliff:g id="CARRIER">%1$s</xliff:g>?"</string>
@@ -161,6 +161,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Aplikace <xliff:g id="REQUESTER">%s</xliff:g> chce zapnout Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Aplikace <xliff:g id="REQUESTER">%s</xliff:g> chce vypnout Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Chyba"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Zařízení, které chcete používat s aplikací <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nebyla nalezena žádná zařízení. Zajistěte, aby zařízení byla zapnutá a dostupná k připojení."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Zkusit znovu"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Něco se stalo. Aplikace zrušila požadavek na výběr zařízení."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Připojení úspěšně navázáno"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Zobrazit vše"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Hledání"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Zařízení bez názvu"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Spárovaná zařízení"</string>
@@ -216,14 +223,15 @@
     <string name="sound_settings" msgid="3072423952331872246">"Zvuk"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Hlasitost vyzvánění"</string>
     <string name="navi_volume_title" msgid="946292066759195165">"Hlasitost navigace"</string>
-    <string name="incoming_call_volume_title" msgid="6972117872424656876">"Vyzváněcí tón"</string>
+    <string name="incoming_call_volume_title" msgid="6972117872424656876">"Vyzvánění"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Oznámení"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Média"</string>
     <string name="media_volume_summary" msgid="2961762827637127239">"Umožňuje nastavit hlasitost hudby a videí"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Budík"</string>
-    <string name="ringtone_title" msgid="8370531086214517972">"Vyzváněcí tón telefonu"</string>
+    <string name="ringtone_title" msgid="8370531086214517972">"Vyzvánění telefonu"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Výchozí zvuk oznámení"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Výchozí zvuk budíku"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Uložit"</string>
     <string name="units_settings" msgid="402325305096925886">"Jednotky"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Rychlost"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Vzdálenost"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Nesprávné gesto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Zadání bezpečnostního gesta"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Při ukládání gesta došlo k chybě"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Příliš mnoho neplatných pokusů. Zkuste to znovu za <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Odstranit zámek obrazovky?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Kdokoli bude mít přístup k vašemu účtu"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 354e932..b7655aa 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ønsker at aktivere Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ønsker at deaktivere Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Fejl"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Enhed, der skal bruges sammen med <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Der blev ikke fundet nogen enheder. Sørg for, at enhederne er tændt, og at der kan oprettes forbindelse til dem."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Prøv igen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Der opstod et problem Appen har annulleret anmodningen om at vælge en enhed."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Der blev oprettet forbindelse"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Vis alle"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Søger"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Enhed uden navn"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Parrede enheder"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ringetone ved opkald"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standardlyd for notifikationer"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standardlyd for alarmer"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Gem"</string>
     <string name="units_settings" msgid="402325305096925886">"Måleenhed"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hastighed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Afstand"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Forkert mønster"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Sådan tegnes et mønster til at låse op"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Mønsteret kunne ikke gemmes"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"For mange mislykkede forsøg. Prøv igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Vil du fjerne skærmlåsen?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Dette vil betyde, at alle kan få adgang til din konto"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index b381488..eab461d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> möchte die WLAN-Funktion aktivieren"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> möchte die WLAN-Funktion deaktivieren"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Fehler"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Gerät zur Nutzung mit <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Keine Geräte gefunden. Achte darauf, dass die Geräte eingeschaltet und zur Verbindung bereit sind."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Noch einmal versuchen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Ein Fehler ist aufgetreten. Die Anwendung hat die Anfrage zur Auswahl eines Geräts abgebrochen."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Verbindung hergestellt"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Alle anzeigen"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Suche läuft"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Unbenanntes Gerät"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Gekoppelte Geräte"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Klingelton"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standard-Benachrichtigungston"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standard-Weckton"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Speichern"</string>
     <string name="units_settings" msgid="402325305096925886">"Einheiten"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Geschwindigkeit"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distanz"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Falsches Muster"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Zeichnen eines Entsperrungsmusters"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Fehler beim Speichern des Musters"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Zu viele fehlerhafte Versuche. Bitte versuch es in <xliff:g id="NUMBER">%d</xliff:g> Sekunden noch einmal."</string>
     <string name="okay" msgid="4589873324439764349">"Ok"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Displaysperre entfernen?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Dadurch können andere auf dein Konto zugreifen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 74710dd..8805f94 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Η εφαρμογή <xliff:g id="REQUESTER">%s</xliff:g> θέλει να ενεργοποιήσει το Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Η εφαρμογή <xliff:g id="REQUESTER">%s</xliff:g> θέλει να απενεργοποιήσει το Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Σφάλμα"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Συσκευή για χρήση με την εφαρμογή <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Δεν βρέθηκαν συσκευές. Βεβαιωθείτε ότι οι συσκευές είναι ενεργοποιημένες και διαθέσιμες για σύνδεση."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Δοκιμάστε ξανά"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Παρουσιάστηκε κάποιο πρόβλημα. Η εφαρμογή ακύρωσε το αίτημα για επιλογή συσκευής."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Η σύνδεση είναι επιτυχής"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Εμφάνιση όλων"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Αναζήτηση"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Ανώνυμη συσκευή"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Συσκευές σε σύζευξη"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ήχος κλήσης τηλεφώνου"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Προεπιλεγμ. ήχος ειδοποίησης"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Προεπιλεγμ. ήχος ξυπνητηριού"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Αποθήκευση"</string>
     <string name="units_settings" msgid="402325305096925886">"Μονάδες"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Ταχύτητα"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Απόσταση"</string>
@@ -409,11 +417,11 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Επαναφορά ρυθμίσεων"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Έγινε επαναφορά των ρυθμίσεων δικτύου"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Επαναφορά προτιμήσεων εφαρμογών"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Με αυτήν την ενέργεια, θα γίνει επαναφορά όλων των προτιμήσεων για:\n\n"<li>"Απενεργοποιημένες εφαρμογές"</li>\n<li>"Απενεργοποιημένες ειδοποιήσεις εφαρμογών"</li>\n<li>"Προεπιλεγμένες εφαρμογές για ενέργειες"</li>\n<li>"Περιορισμούς δεδομένων παρασκηνίου για εφαρμογές"</li>\n<li>"Τυχόν περιορισμούς αδειών"</li>\n\n"Δεν θα χάσετε τυχόν δεδομένα εφαρμογών."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Με αυτήν την ενέργεια, θα γίνει επαναφορά όλων των προτιμήσεων για:\n\n"<li>"απενεργοποιημένες εφαρμογές"</li>\n<li>"απενεργοποιημένες ειδοποιήσεις εφαρμογών"</li>\n<li>"προεπιλεγμένες εφαρμογές για ενέργειες"</li>\n<li>"περιορισμούς δεδομένων παρασκηνίου για εφαρμογές"</li>\n<li>"τυχόν περιορισμούς αδειών"</li>\n\n"Δεν θα χάσετε τυχόν δεδομένα εφαρμογών."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Επαναφορά εφαρμογών"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Έγινε επαναφορά των προτιμήσεων των εφαρμογών"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Διαγραφή δεδομένων (Επαν. εργοστ. ρυθμ.)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα από την κεντρική μονάδα του οχήματος, συμπεριλαμβανομένων:\n\n"<li>"Του Λογαριασμού σας Google"</li>\n<li>"Των δεδομένων και των ρυθμίσεων του συστήματος και των εφαρμογών"</li>\n<li>"Των εφαρμογών που έχετε κατεβάσει"</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Αυτή η ενέργεια θα διαγράψει όλα τα δεδομένα από την κεντρική μονάδα του οχήματος, συμπεριλαμβανομένων:\n\n"<li>"του Λογαριασμού σας Google"</li>\n<li>"των δεδομένων και των ρυθμίσεων του συστήματος και των εφαρμογών"</li>\n<li>"των εφαρμογών που έχετε κατεβάσει"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Αυτήν τη στιγμή είστε συνδεδεμένοι στους παρακάτω λογαριασμούς:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Υπάρχουν άλλοι χρήστες σε αυτό το όχημα."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Επαναφορά οχήματος"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Λανθασμένο μοτίβο"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Τρόπος σχεδίασης μοτίβου ξεκλειδώματος"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Σφάλμα κατά την αποθήκευση του μοτίβου"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Πάρα πολλές αποτυχημένες προσπάθειες. Δοκιμάστε ξανά σε <xliff:g id="NUMBER">%d</xliff:g> δευτερόλεπτα."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Κατάργηση κλειδώματος οθόνης;"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Έτσι όλοι οι χρήστες θα έχουν πρόσβαση στον λογαριασμό σας"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 41ac700..9c0dc84 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn on Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn off Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Device to use with <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No devices found. Make sure that devices are turned on and available to connect."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Try again"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Something came up. The application has cancelled the request to choose a device."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connection successful"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Show all"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Searching"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Unnamed device"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Paired devices"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Phone ringtone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Default notification sound"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Default alarm sound"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Save"</string>
     <string name="units_settings" msgid="402325305096925886">"Units"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Speed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -345,7 +353,7 @@
     <string name="wifi_control_description" msgid="6021926850423169261">"Wi-Fi control allows an app to turn Wi-Fi on or off, scan and connect to Wi-Fi networks add or remove networks, or start a local-only hotspot."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"More"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Location"</string>
-    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent Location Requests"</string>
+    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent location requests"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"No recent location requests"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"App-level permissions"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Location Services"</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"System updates"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android version"</string>
     <string name="security_patch" msgid="4794276590178386903">"Android security patch level"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"Model &amp; hardware"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"Model and hardware"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Model: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Baseband version"</string>
     <string name="kernel_version" msgid="7327212934187011508">"Kernel version"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Wrong pattern"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"How to draw an unlock pattern"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error saving pattern"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Too many incorrect attempts. Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remove screen lock?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"This will allow anyone to access your account"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index e1647b9..ba0a0c4 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn on Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn off Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Device to use with <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No devices found. Make sure that devices are turned on and available to connect."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Try again"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Something came up. The application has cancelled the request to choose a device."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connection successful"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Show all"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Searching"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Unnamed device"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Paired devices"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Phone ringtone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Default notification sound"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Default alarm sound"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Save"</string>
     <string name="units_settings" msgid="402325305096925886">"Units"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Speed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -345,7 +353,7 @@
     <string name="wifi_control_description" msgid="6021926850423169261">"Wi-Fi control allows an app to turn Wi-Fi on or off, scan and connect to Wi-Fi networks add or remove networks, or start a local-only hotspot."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"More"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Location"</string>
-    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent Location Requests"</string>
+    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent location requests"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"No recent location requests"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"App-level permissions"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Location Services"</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"System updates"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android version"</string>
     <string name="security_patch" msgid="4794276590178386903">"Android security patch level"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"Model &amp; hardware"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"Model and hardware"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Model: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Baseband version"</string>
     <string name="kernel_version" msgid="7327212934187011508">"Kernel version"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Wrong pattern"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"How to draw an unlock pattern"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error saving pattern"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Too many incorrect attempts. Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remove screen lock?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"This will allow anyone to access your account"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6b58119..022fb1b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -29,7 +29,7 @@
     <string name="keywords_display_auto_brightness" msgid="2700310050333468752">"dim screen, touchscreen, battery"</string>
     <string name="keywords_display_night_display" msgid="2922294576679769957">"dim screen, night, tint"</string>
     <string name="night_mode_tile_label" msgid="6603597795502131664">"Night mode"</string>
-    <string name="network_and_internet" msgid="4229023630498537530">"Network and internet"</string>
+    <string name="network_and_internet" msgid="4229023630498537530">"Network and Internet"</string>
     <string name="mobile_network_settings" msgid="1708621113321368597">"Mobile network"</string>
     <plurals name="mobile_network_summary_count" formatted="false" msgid="6917348330386831454">
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> SIMs</item>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn on Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn off Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Device to use with <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No devices found. Make sure that devices are turned on and available to connect."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Try again"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Something came up. The application has cancelled the request to choose a device."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connection successful"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Show all"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Searching"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Unnamed device"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Paired devices"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Phone ringtone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Default notification sound"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Default alarm sound"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Save"</string>
     <string name="units_settings" msgid="402325305096925886">"Units"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Speed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -345,7 +353,7 @@
     <string name="wifi_control_description" msgid="6021926850423169261">"Wi-Fi control allows an app to turn Wi-Fi on or off, scan and connect to Wi-Fi networks add or remove networks, or start a local-only hotspot."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"More"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Location"</string>
-    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent Location Requests"</string>
+    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent location requests"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"No recent location requests"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"App-level permissions"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Location Services"</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"System updates"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android version"</string>
     <string name="security_patch" msgid="4794276590178386903">"Android security patch level"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"Model &amp; hardware"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"Model and hardware"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Model: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Baseband version"</string>
     <string name="kernel_version" msgid="7327212934187011508">"Kernel version"</string>
@@ -405,7 +413,7 @@
     <string name="reset_network_select" msgid="2433825874868038739">"Select network"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"Reset settings"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"Reset?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reset all network settings? You can\'t undo this action!"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reset all network settings? You can\'t undo this action."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Reset settings"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Network settings have been reset"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Reset app preferences"</string>
@@ -418,7 +426,7 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"There are other users present on this vehicle."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Reset vehicle"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"Reset?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Erase all your personal information and downloaded apps? You can\'t undo this action!"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Delete all your personal information and downloaded apps? You won\'t be able to undo this action."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Erase everything"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Erasing"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Please wait..."</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Wrong pattern"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"How to draw an unlock pattern"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error saving pattern"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Too many incorrect attempts. Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remove screen lock?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"This will allow anyone to access your account"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index ac422de..d9e27c0 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn on Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wants to turn off Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Device to use with <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No devices found. Make sure that devices are turned on and available to connect."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Try again"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Something came up. The application has cancelled the request to choose a device."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connection successful"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Show all"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Searching"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Unnamed device"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Paired devices"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Phone ringtone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Default notification sound"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Default alarm sound"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Save"</string>
     <string name="units_settings" msgid="402325305096925886">"Units"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Speed"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -345,7 +353,7 @@
     <string name="wifi_control_description" msgid="6021926850423169261">"Wi-Fi control allows an app to turn Wi-Fi on or off, scan and connect to Wi-Fi networks add or remove networks, or start a local-only hotspot."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"More"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Location"</string>
-    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent Location Requests"</string>
+    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Recent location requests"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"No recent location requests"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"App-level permissions"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Location Services"</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"System updates"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android version"</string>
     <string name="security_patch" msgid="4794276590178386903">"Android security patch level"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"Model &amp; hardware"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"Model and hardware"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Model: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Baseband version"</string>
     <string name="kernel_version" msgid="7327212934187011508">"Kernel version"</string>
@@ -405,7 +413,7 @@
     <string name="reset_network_select" msgid="2433825874868038739">"Select network"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"Reset settings"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"Want to reset?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reset all network settings? You can\'t undo this action!"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reset all network settings? You can\'t undo this action."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Reset settings"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Network settings have been reset"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Reset app preferences"</string>
@@ -418,7 +426,7 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"There are other users present on this vehicle."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Reset vehicle"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"Want to reset?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Erase all your personal information and downloaded apps? You can\'t undo this action!"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Delete all your personal information and downloaded apps? You won\'t be able to undo this action."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Erase everything"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Erasing"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Please wait..."</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Wrong pattern"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"How to draw an unlock pattern"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error saving pattern"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Too many incorrect attempts. Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remove screen lock?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"This will allow anyone to access your account"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 2e2b36c..16069d8 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="REQUESTER">%s</xliff:g>‎‏‎‎‏‏‏‎ wants to turn on Wi-Fi‎‏‎‎‏‎"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="REQUESTER">%s</xliff:g>‎‏‎‎‏‏‏‎ wants to turn off Wi-Fi‎‏‎‎‏‎"</string>
     <string name="wifi_error" msgid="3105105447117289410">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎Error‎‏‎‎‏‎"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎Device to use with ‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎No devices found. Make sure devices are turned on and available to connect.‎‏‎‎‏‎"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎Try again‎‏‎‎‏‎"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎Something came up. The application has cancelled the request to choose a device.‎‏‎‎‏‎"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎Connection successful‎‏‎‎‏‎"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎Show all‎‏‎‎‏‎"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎Searching‎‏‎‎‏‎"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎Bluetooth‎‏‎‎‏‎"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎Unnamed device‎‏‎‎‏‎"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎Paired devices‎‏‎‎‏‎"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎Phone ringtone‎‏‎‎‏‎"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎Default notification sound‎‏‎‎‏‎"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎Default alarm sound‎‏‎‎‏‎"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎Save‎‏‎‎‏‎"</string>
     <string name="units_settings" msgid="402325305096925886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎Units‎‏‎‎‏‎"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎Speed‎‏‎‎‏‎"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎Distance‎‏‎‎‏‎"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎Wrong pattern‎‏‎‎‏‎"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎How to draw an unlock pattern‎‏‎‎‏‎"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎Error saving pattern‎‏‎‎‏‎"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎Too many incorrect attempts. Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
     <string name="okay" msgid="4589873324439764349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎OK‎‏‎‎‏‎"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎Remove screen lock?‎‏‎‎‏‎"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎This will allow anyone to access your account‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 40091d0..c5bbea1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -157,11 +157,18 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> quiere activar la conexión Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> quiere desactivar la conexión Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo para usar con <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No se encontraron dispositivos. Asegúrate de que los dispositivos estén encendidos y puedan conectarse."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Volver a intentarlo"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Se produjo un error. La aplicación canceló la solicitud para elegir un dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Conexión exitosa"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostrar todo"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Buscando"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo sin nombre"</string>
-    <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos sincronizados"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Sincronizar dispositivo nuevo"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Se activará el Bluetooth para iniciar la sincronización"</string>
+    <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos vinculados"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Vincular dispositivo nuevo"</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Se activará el Bluetooth para iniciar la vinculación"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"¿Desconectar dispositivo?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"El vehículo se desconectará de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Dirección Bluetooth del vehículo: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
@@ -183,19 +190,19 @@
     <string name="bluetooth_ask_discovery_no_name" msgid="164397600370102369">"Una app quiere que tu unidad central sea visible para otros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
     <string name="bluetooth_ask_enablement_and_discovery" msgid="5487502083015708674">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la conexión Bluetooth y que tu unidad central sea visible para otros dispositivos durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
     <string name="bluetooth_ask_enablement_and_discovery_no_name" msgid="907153034209916282">"Una app quiere activar la conexión Bluetooth y que tu unidad central sea visible para otros dispositivos durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
-    <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Solicitud de sincronización mediante Bluetooth"</string>
+    <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Solicitud de vinculación mediante Bluetooth"</string>
     <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"Vincular y conectar"</string>
-    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Código de sincronización mediante Bluetooth"</string>
+    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Código de vinculación mediante Bluetooth"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"El PIN contiene letras o símbolos"</string>
-    <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Ingresa el código de sincronización y, luego, presiona Intro"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"¿Sincronizar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+    <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Ingresa el código de vinculación y, luego, presiona Intro"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"¿Vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"Permitir que <xliff:g id="DEVICE_NAME">%1$s</xliff:g> acceda a los contactos y al historial de llamadas"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"Es posible que también debas ingresar este PIN de acceso en el otro dispositivo."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"Es posible que también debas ingresar esta clave de acceso en el otro dispositivo."</string>
     <string name="bluetooth_pin_values_hint_16_digits" msgid="418776900816984778">"Debe tener 16 dígitos"</string>
     <string name="bluetooth_pin_values_hint" msgid="1561325817559141687">"Por lo general, 0000 o 1234"</string>
-    <string name="bluetooth_notif_title" msgid="8374602799367803335">"Sincronizando solicitud"</string>
-    <string name="bluetooth_notif_message" msgid="1060821000510108726">"Presiona para sincronizar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_notif_title" msgid="8374602799367803335">"Solicitud de vinculación"</string>
+    <string name="bluetooth_notif_message" msgid="1060821000510108726">"Presiona para vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_device_picker" msgid="673238198452345475">"Elegir dispositivo Bluetooth"</string>
     <string name="language_settings" msgid="2079258598337245546">"Idiomas"</string>
     <string name="languages_and_input_settings" msgid="3672322610529408248">"Idiomas y entradas"</string>
@@ -218,8 +225,9 @@
     <string name="media_volume_summary" msgid="2961762827637127239">"Establecer volumen para la música y los videos"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Alarma"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"Tono del teléfono"</string>
-    <string name="notification_ringtone_title" msgid="8661716239594010288">"Sonido de notificación predet."</string>
+    <string name="notification_ringtone_title" msgid="8661716239594010288">"Sonido predeterminado"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Sonido de alarma predeterm."</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Guardar"</string>
     <string name="units_settings" msgid="402325305096925886">"Unidades"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocidad"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distancia"</string>
@@ -409,7 +417,7 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Restablecer configuración"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Se restableció la configuración de red"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Restablecer preferencias de apps"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Se restablecerán todas las preferencias de lo sigueinte:\n\n"<li>"Apps inhabilitadas"</li>\n<li>"Notificaciones de apps inhabilitadas"</li>\n<li>"Apps predeterminadas para realizar acciones"</li>\n<li>"Restricciones de datos en segundo plano para apps"</li>\n<li>"Restricciones de permisos"</li>\n\n"No perderás los datos de las apps."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Se restablecerán todas las preferencias de lo siguiente:\n\n"<li>"Apps inhabilitadas"</li>\n<li>"Notificaciones de apps inhabilitadas"</li>\n<li>"Apps predeterminadas para realizar acciones"</li>\n<li>"Restricciones de datos en segundo plano para apps"</li>\n<li>"Restricciones de permisos"</li>\n\n"No perderás los datos de las apps."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Restablecer apps"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Se restablecieron las preferencias de las apps"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Borrar todos los datos (restablecer)"</string>
@@ -456,7 +464,7 @@
     <string name="user_new_user_name" msgid="7115771396412339662">"Usuario nuevo"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"¿Agregar un usuario?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Cuando agregues un nuevo usuario, esa persona deberá configurar su espacio."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"Cualquier usuario podrá actualizar las apps de otras personas."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"Cualquier usuario puede actualizar las aplicaciones del resto de los usuarios."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Alcanzaste el límite de usuarios"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="other">Puedes crear hasta <xliff:g id="COUNT">%d</xliff:g> usuarios.</item>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Patrón incorrecto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Cómo dibujar un patrón de desbloqueo"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error al guardar el patrón"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Demasiados intentos incorrectos. Vuelve a intentarlo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
     <string name="okay" msgid="4589873324439764349">"Aceptar"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"¿Quitar bloqueo de pantalla?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Si lo haces, cualquiera podrá acceder a tu cuenta"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3cb4a73..4b5b84d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -46,7 +46,7 @@
     <string name="sim_selection_required_pref" msgid="6599562910262785784">"Debes seleccionar una opción"</string>
     <string name="sim_change_data_title" msgid="6677115745127365131">"¿Usar <xliff:g id="CARRIER">%1$s</xliff:g> para los datos móviles?"</string>
     <string name="sim_change_data_message" msgid="4669775284395549069">"Estás utilizando <xliff:g id="CARRIER2_0">%2$s</xliff:g> para los datos móviles. Si cambias a <xliff:g id="CARRIER1">%1$s</xliff:g>, no se utilizará más a <xliff:g id="CARRIER2_1">%2$s</xliff:g> para los datos móviles."</string>
-    <string name="sim_change_data_ok" msgid="2348804996223271081">"Utilizar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
+    <string name="sim_change_data_ok" msgid="2348804996223271081">"Usar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
     <string name="roaming_title" msgid="6218635014519017734">"Itinerancia"</string>
     <string name="roaming_summary" msgid="7476127740259728901">"Conectarse a servicios de datos en itinerancia"</string>
     <string name="roaming_alert_title" msgid="4433901635766775763">"¿Quieres permitir la itinerancia de datos?"</string>
@@ -65,7 +65,7 @@
     <string name="billing_cycle_less_than_one_day_left" msgid="8121013296375203759">"Queda menos de 1 día"</string>
     <string name="carrier_and_update_text" msgid="4351043160977741244">"Actualizado por <xliff:g id="ID_1">^1</xliff:g> hace <xliff:g id="ID_2">^2</xliff:g>"</string>
     <string name="no_carrier_update_text" msgid="4396108017586427442">"Actualizado hace <xliff:g id="ID_1">^2</xliff:g>"</string>
-    <string name="carrier_and_update_now_text" msgid="9058821833613481573">"Actualizado por <xliff:g id="ID_1">^1</xliff:g> ahora mismo"</string>
+    <string name="carrier_and_update_now_text" msgid="9058821833613481573">"Actualizado por <xliff:g id="ID_1">^1</xliff:g> justo ahora"</string>
     <string name="no_carrier_update_now_text" msgid="5953142546373783189">"Actualizado ahora"</string>
     <string name="launch_manage_plan_text" msgid="906657488611815787">"Ver plan"</string>
     <string name="app_data_usage" msgid="3878609885080232877">"Uso de datos de la app"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> quiere activar la conexión Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> quiere desactivar la conexión Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo para usar con <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"No se ha encontrado ningún dispositivo. Comprueba que estén encendidos y listos para conectarse."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Reintentar"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Se ha producido un error. La aplicación ha cancelado la solicitud para elegir un dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Se ha conectado correctamente"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostrar todo"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Buscando"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo sin nombre"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos vinculados"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Tono de llamada del teléfono"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Sonido de notificación predeterminado"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Sonido de alarma predeterminado"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Guardar"</string>
     <string name="units_settings" msgid="402325305096925886">"Unidades"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocidad"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distancia"</string>
@@ -273,10 +281,10 @@
     <string name="default_applications" msgid="1558183275638697087">"Aplicaciones predeterminadas"</string>
     <string name="app_permissions" msgid="32799922508313948">"Permisos de aplicaciones"</string>
     <string name="app_permissions_summary" msgid="1842858532315056367">"Aplicaciones que utilizan <xliff:g id="APPS">%1$s</xliff:g>"</string>
-    <string name="applications_settings" msgid="794261395191035632">"Información de la aplicación"</string>
+    <string name="applications_settings" msgid="794261395191035632">"Información de las aplicaciones"</string>
     <string name="force_stop" msgid="2153183697014720520">"Forzar detención"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"¿Quieres forzar la detención?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Si se fuerza la detención una aplicación, es posible que no funcione correctamente."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Si se fuerza la detención de una aplicación, es posible que no funcione correctamente."</string>
     <string name="disable_text" msgid="4358165448648990820">"Inhabilitar"</string>
     <string name="enable_text" msgid="1794971777861881238">"Habilitar"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Desinstalar"</string>
@@ -410,9 +418,9 @@
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Se han restablecido los ajustes de red"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Restablecer preferencias de aplicaciones"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Se restablecerán todas las preferencias de:\n\n"<li>"Aplicaciones desactivadas"</li>\n<li>"Notificaciones de aplicaciones desactivadas"</li>\n<li>"Aplicaciones para acciones predeterminadas"</li>\n<li>"Restricciones de datos en segundo plano de aplicaciones"</li>\n<li>"Restricciones de permisos"</li>\n\n"No se perderán los datos de las aplicaciones."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Restablecer aplicaciones"</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Restablecer"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Se han restablecido las preferencias de las aplicaciones"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Borrar todos los datos (restablecer)"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Volver al estado de fábrica (borrar todo)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Se borrarán todos los datos de la unidad principal de tu vehículo, como:\n\n"<li>"Tu cuenta de Google"</li>\n<li>"Los ajustes y datos de aplicaciones y del sistema"</li>\n<li>"Las aplicaciones descargadas"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Has iniciado sesión en estas cuentas:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Hay otros usuarios presentes en este vehículo."</string>
@@ -464,7 +472,7 @@
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"No se ha podido crear el usuario"</string>
     <string name="delete_user_dialog_title" msgid="3422867434431562007">"¿Eliminar este usuario?"</string>
-    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Se eliminarán los datos y las aplicaciones."</string>
+    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Se eliminarán todos los datos y aplicaciones."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"No se ha podido eliminar al usuario."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"Cerrar"</string>
     <string name="delete_user_error_retry" msgid="5116434895572670563">"Reintentar"</string>
@@ -480,7 +488,7 @@
     <string name="current_user_name" msgid="3813671533249316823">"Tú (%1$s)"</string>
     <string name="user_name_label" msgid="3210832645046206845">"Nombre"</string>
     <string name="user_summary_not_set_up" msgid="1473688119241224145">"Sin configurar"</string>
-    <string name="edit_user_name_title" msgid="6890782937520262478">"Cambiar el nombre de usuario"</string>
+    <string name="edit_user_name_title" msgid="6890782937520262478">"Cambiar nombre de usuario"</string>
     <string name="name_input_blank_error" msgid="2088850865880984123">"El campo no puede estar vacío."</string>
     <string name="name_input_invalid_error" msgid="3523545780580744273">"El nombre de usuario introducido no es válido."</string>
     <string name="users_list_title" msgid="770764290290240909">"Usuarios"</string>
@@ -519,7 +527,7 @@
     <string name="add_an_account" msgid="1072285034300995091">"Añadir una cuenta"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Los perfiles restringidos no pueden añadir cuentas"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Quitar cuenta"</string>
-    <string name="really_remove_account_title" msgid="3555164432587924900">"¿Quitar la cuenta?"</string>
+    <string name="really_remove_account_title" msgid="3555164432587924900">"¿Quitar cuenta?"</string>
     <string name="really_remove_account_message" msgid="4296769280849579900">"Si quitas esta cuenta, se eliminarán todos sus mensajes, contactos y otros datos del dispositivo."</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"No se ha podido eliminar la cuenta."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Sincronización"</string>
@@ -552,7 +560,7 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Saltar"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Definir un bloqueo de pantalla"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Elige un PIN"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Elige un patrón"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Elige tu patrón"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Elige tu contraseña"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Bloqueo de pantalla actual"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Por seguridad, establece un patrón"</string>
@@ -562,11 +570,12 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Dibuja un patrón de desbloqueo"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Levanta el dedo cuando termines"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Patrón guardado"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Dibuja el patrón de nuevo para confirmar"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Dibuja el patrón de nuevo para confirmarlo"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Une mín. 4 puntos. Vuelve a intentarlo."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Patrón incorrecto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Cómo crear un patrón de desbloqueo"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"No se ha podido guardar el patrón"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Demasiados intentos fallidos. Vuelve a intentarlo dentro de <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
     <string name="okay" msgid="4589873324439764349">"Aceptar"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"¿Quitar bloqueo de pantalla?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Cualquier usuario podrá acceder a tu cuenta"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 4608bb9..95c4f93 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -29,7 +29,7 @@
     <string name="keywords_display_auto_brightness" msgid="2700310050333468752">"ekraani hämardamine, puuteekraan, aku"</string>
     <string name="keywords_display_night_display" msgid="2922294576679769957">"ekraani hämardamine, öö, toon"</string>
     <string name="night_mode_tile_label" msgid="6603597795502131664">"Öörežiim"</string>
-    <string name="network_and_internet" msgid="4229023630498537530">"Võrk ja Internet"</string>
+    <string name="network_and_internet" msgid="4229023630498537530">"Võrk ja internet"</string>
     <string name="mobile_network_settings" msgid="1708621113321368597">"Mobiilsidevõrk"</string>
     <plurals name="mobile_network_summary_count" formatted="false" msgid="6917348330386831454">
       <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> SIM-kaarti</item>
@@ -140,7 +140,7 @@
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Muud seadmed saavad kuumkohaga <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> ühenduse luua"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Kuumkoha parool"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Turvalisus"</string>
-    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2, isiklik"</string>
+    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Puudub"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP sagedusriba"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"AP-riba valimine"</string>
@@ -151,12 +151,19 @@
     <string name="wifi_ap_2G" msgid="5364135697314262014">"2,4 GHz"</string>
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 GHz"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Valige WiFi-kuumkohale vähemalt üks riba:"</string>
-    <string name="tether_settings_title_all" msgid="4663704772599383169">"Leviala ja jagamine"</string>
-    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Lülita leviala automaatselt välja"</string>
-    <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Kui ükski seade pole ühendatud, lülitatakse WiFi-leviala välja"</string>
+    <string name="tether_settings_title_all" msgid="4663704772599383169">"Kuumkoht ja jagamine"</string>
+    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Lülita kuumkoht automaatselt välja"</string>
+    <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Kui ükski seade pole ühendatud, lülitatakse WiFi-kuumkoht välja"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Rakendus <xliff:g id="REQUESTER">%s</xliff:g> soovib WiFi sisse lülitada"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Rakendus <xliff:g id="REQUESTER">%s</xliff:g> soovib WiFi välja lülitada"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Viga"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Seade, mida rakendusega <xliff:g id="APPNAME">%1$s</xliff:g> kasutada"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Seadmeid ei leitud. Veenduge, et seadmed oleksid sisse lülitatud ja ühendamiseks saadaval."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Proovi uuesti"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Midagi tuli vahele. Rakendus tühistas seadme valimise taotluse."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Ühendamine õnnestus"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Kuva kõik"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Otsimine"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Nimetu seade"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Seotud seadmed"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefonihelin"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Märguande vaikeheli"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Alarmi vaikeheli"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Salvesta"</string>
     <string name="units_settings" msgid="402325305096925886">"Ühikud"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Kiirus"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Vahemaa"</string>
@@ -276,7 +284,7 @@
     <string name="applications_settings" msgid="794261395191035632">"Rakenduste teave"</string>
     <string name="force_stop" msgid="2153183697014720520">"Sundpeata"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Kas sundpeatada?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Kui sundpeatate rakenduse, võib see valesti käituda."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Kui sundpeatate rakenduse, võib see toimida valesti."</string>
     <string name="disable_text" msgid="4358165448648990820">"Keela"</string>
     <string name="enable_text" msgid="1794971777861881238">"Luba"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Desinstalli"</string>
@@ -394,7 +402,7 @@
     <string name="developer_options_settings" msgid="1530739225109118480">"Arendaja valikud"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"Lähtestamise valikud"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Võrgu, rakenduste või seadme lähtestamine"</string>
-    <string name="reset_network_title" msgid="1284233059990797263">"Võrgu taastamine"</string>
+    <string name="reset_network_title" msgid="1284233059990797263">"Võrgu lähtestamine"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"See lähtestab kõik võrguseaded, sh järgmised:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"WiFi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Mobiilne andmeside"</li></string>
@@ -408,11 +416,11 @@
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Kas lähtestada kõik võrguseaded? Seda toimingut ei saa tagasi võtta."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Lähtesta seaded"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Võrguseaded on lähtestatud"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Lähtesta rakenduse eelistused"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Lähtesta rakenduste eelistused"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"See lähtestab kõik järgmised eelistused.\n\n"<li>"Keelatud rakendused"</li>\n<li>"Keelatud rakenduste märguanded"</li>\n<li>"Toimingute vaikerakendused"</li>\n<li>"Rakenduste taustaandmete piirangud"</li>\n<li>"Mis tahes lubade piirangud"</li>\n\n"Rakenduste andmed säilivad."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Lähtesta rakendused"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Rakenduse eelistused on lähtestatud"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Kustuta kõik andmed (tehases. lähtest.)"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Kõigi andmete kustutamine (tehaseseaded)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"See kustutab teie sõiduki keskseadmest kõik andmed, sh:\n\n"<li>"teie Google\'i konto;"</li>\n<li>"süsteemi ja rakenduste andmed ning seaded;"</li>\n<li>"allalaaditud rakendused."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Olete praegu sisse logitud järgmistele kontodele:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Selles sõidukis on teisi kasutajaid."</string>
@@ -429,7 +437,7 @@
     <string name="zone_auto" msgid="3701878581920206160">"Automaatne ajavöönd"</string>
     <string name="zone_auto_summary" msgid="4345856882906981864">"Kasuta võrgu pakutud ajavööndit"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24-tunnine vorming"</string>
-    <string name="date_time_24hour" msgid="1137618702556486913">"Kasuta 24-tunnist vormingut"</string>
+    <string name="date_time_24hour" msgid="1137618702556486913">"Kasuta 24-tunni vormingut"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"Aeg"</string>
     <string name="date_time_set_time" msgid="6449555153906058248">"Kellaaja määramine"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Ajavöönd"</string>
@@ -552,7 +560,7 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Jäta vahele"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Ekraaniluku seadistamine"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Valige PIN-kood"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Mustri valimine"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Valige muster"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Valige parool"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Praegune ekraanilukk"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Turvalisuse huvides määrake muster"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Vale muster"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kuidas joonistada avamismustrit?"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Viga mustri salvestamisel"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Liiga palju valesid katseid. Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Kas eemaldada ekraanilukk?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"See lubab igaühel teie kontole juurde pääseda"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 2e96e39..dd92273 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -121,7 +121,7 @@
     <string name="wifi_network_detail" msgid="9070182553555487360">"Sarearen xehetasunak"</string>
     <string name="wifi_mac_address" msgid="1466178247802349180">"MAC helbidea"</string>
     <string name="wifi_ip_address_title" msgid="300539799594024884">"IP helbidea"</string>
-    <string name="wifi_subnet_mask" msgid="6238171812379380608">"Azpisarearen maskara"</string>
+    <string name="wifi_subnet_mask" msgid="6238171812379380608">"Azpisare-maskara"</string>
     <string name="wifi_dns" msgid="1841448353154932801">"DNS"</string>
     <string name="wifi_details_ipv6_address_header" msgid="4707181386646531890">"IPv6 helbideak"</string>
     <string name="wifi_gateway" msgid="4975799192860431013">"Atebidea"</string>
@@ -145,9 +145,9 @@
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP banda"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Hautatu AP banda"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Automatikoa"</string>
-    <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2,4 GHz-ko banda"</string>
-    <string name="wifi_ap_choose_5G" msgid="8561440488455528673">"5,0 GHz-ko banda"</string>
-    <string name="wifi_ap_prefer_5G" msgid="8252845223773871750">"5,0 GHz-ko banda hobetsia"</string>
+    <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2,4 GHz-eko banda"</string>
+    <string name="wifi_ap_choose_5G" msgid="8561440488455528673">"5,0 GHz-eko banda"</string>
+    <string name="wifi_ap_prefer_5G" msgid="8252845223773871750">"5,0 GHz-eko banda hobetsia"</string>
     <string name="wifi_ap_2G" msgid="5364135697314262014">"2,4 GHz"</string>
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 GHz"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Aukeratu gutxienez banda bat wifi-gunerako:"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> aplikazioak wifia aktibatu nahi du"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> aplikazioak wifia desaktibatu nahi du"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Errorea"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> aplikazioarekin erabili behar den gailua"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Ez da aurkitu gailurik. Ziurtatu gailuak piztuta daudela eta konekta daitezkeela."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Saiatu berriro"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Arazoren bat izan da. Aplikazioak bertan behera utzi du gailu bat aukeratzeko eskaera."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Konektatu da"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Erakutsi guztiak"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Bilatzen"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth-a"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Izenik gabeko gailua"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Parekatutako gailuak"</string>
@@ -185,7 +192,7 @@
     <string name="bluetooth_ask_enablement_and_discovery_no_name" msgid="907153034209916282">"Aplikazio batek Bluetooth-a aktibatu, eta gailu nagusia <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz ikusgai ezarri nahi du beste gailu batzuen aurrean."</string>
     <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Bluetooth bidez parekatzeko eskaera"</string>
     <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"Parekatu eta konektatu"</string>
-    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Bluetooth parekatze-kodea"</string>
+    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Bluetooth bidez parekatzeko kodea"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"PIN kodeak hizkiak edo ikurrak ditu"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Idatzi parekatze-kodea eta sakatu Itzuli edo Sartu"</string>
     <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin parekatu nahi duzu?"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefonoaren tonua"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Jakinarazpenen soinu lehenetsia"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Alarmen soinu lehenetsia"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Gorde"</string>
     <string name="units_settings" msgid="402325305096925886">"Unitateak"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Abiadura"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distantzia"</string>
@@ -352,7 +360,7 @@
     <string name="system_setting_title" msgid="6864599341809463440">"Sistema"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"Sistemaren eguneratzeak"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android-en bertsioa"</string>
-    <string name="security_patch" msgid="4794276590178386903">"Android segurtasun-adabakiaren maila"</string>
+    <string name="security_patch" msgid="4794276590178386903">"Android-en segurtasun-adabakiaren maila"</string>
     <string name="hardware_info" msgid="3973165746261507658">"Modeloa eta hardwarea"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Modeloa: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Oinarri-bandaren bertsioa"</string>
@@ -413,7 +421,7 @@
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Berrezarri aplikazioak"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Berrezarri dira aplikazioen hobespenak"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Ezabatu datu guztiak (berrezarri jatorrizkoak)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Ibilgailuaren gailu nagusiko datu guztiak ezabatuko dira, honako hauek barne:\n\n"<li>"Google kontua,"</li>\n<li>"sistemako eta aplikazioetako datuak eta ezarpenak,"</li>\n<li>"deskargatutako aplikazioak."</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Ibilgailuaren gailu nagusiko datu guztiak ezabatuko dira, honako hauek barne:\n\n"<li>"Google-ko kontua,"</li>\n<li>"sistemako eta aplikazioetako datuak eta ezarpenak,"</li>\n<li>"deskargatutako aplikazioak."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Kontu hauetan hasi duzu saioa:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Beste erabiltzaile batzuk daude ibilgailu honetan."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Berrezarri ibilgailua"</string>
@@ -525,7 +533,7 @@
     <string name="account_sync_title" msgid="6541844336300236915">"Kontuaren sinkronizazioa"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> elementuk aktibatuta daukate sinkronizazioa"</string>
     <string name="account_sync_summary_all_on" msgid="3652264471870312725">"Elementu guztiek aktibatuta daukate sinkronizazioa"</string>
-    <string name="account_sync_summary_all_off" msgid="6550959714035312414">"Elementu guztiek desaktibatuta dute sinkronizazioa"</string>
+    <string name="account_sync_summary_all_off" msgid="6550959714035312414">"Elementu guztiek desaktibatuta daukate sinkronizazioa"</string>
     <string name="sync_disabled" msgid="393531064334628258">"Sinkroniz. DESAKTIBATUTA"</string>
     <string name="sync_error" msgid="6698021343089247914">"Sinkronizazio-errorea"</string>
     <string name="last_synced" msgid="4745124489150101529">"Azken sinkronizazioa: <xliff:g id="LAST_SYNC_TIME">%1$s</xliff:g>"</string>
@@ -551,22 +559,23 @@
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Saiatu berriro"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Saltatu"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Ezarri pantailaren blokeo bat"</string>
-    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Aukeratu PIN kodea"</string>
+    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Aukeratu PIN kode bat"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Aukeratu eredu bat"</string>
-    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Aukeratu pasahitza"</string>
-    <string name="current_screen_lock" msgid="637651611145979587">"Uneko pantailaren blokeoa"</string>
+    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Aukeratu pasahitz bat"</string>
+    <string name="current_screen_lock" msgid="637651611145979587">"Ezarrita dagoen pantailaren blokeoa"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Babestuta egoteko, ezarri eredu bat"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Garbitu"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Utzi"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Desblokeatzeko eredu berria"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Marraztu desblokeatzeko eredua"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Marraztu desblokeatzeko eredu bat"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Bukatutakoan, jaso hatza"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Erregistratu da eredua"</string>
     <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Berresteko, marraztu eredua berriro"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Lotu gutxienez 4 puntu. Saiatu berriro."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Eredua ez da zuzena"</string>
-    <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Desblokeatzeko eredua nola marraztu"</string>
+    <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Desblokeatzeko eredu bat nola marraztu"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Errore bat gertatu da eredua gordetzean"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Saiakera oker gehiegi egin dituzu. Saiatu berriro <xliff:g id="NUMBER">%d</xliff:g> segundo barru."</string>
     <string name="okay" msgid="4589873324439764349">"Ados"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Pantailaren blokeoa kendu?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Edonork atzitu ahalko du zure kontua"</string>
@@ -586,7 +595,7 @@
     <string name="lockpassword_clear_label" msgid="6363680971025188064">"Garbitu"</string>
     <string name="lockpassword_cancel_label" msgid="5791237697404166450">"Utzi"</string>
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Berretsi"</string>
-    <string name="choose_lock_password_hints" msgid="3903696950202491593">"Gutxienez lau karaktere izan behar ditu"</string>
+    <string name="choose_lock_password_hints" msgid="3903696950202491593">"Lau karaktere izan behar ditu gutxienez"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Gutxienez <xliff:g id="COUNT">%d</xliff:g> karaktere izan behar ditu"</string>
     <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"PIN kodeak <xliff:g id="COUNT">%d</xliff:g> digitu izan behar ditu gutxienez"</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"Gehienez <xliff:g id="NUMBER">%d</xliff:g> karaktere izan behar ditu"</string>
@@ -595,7 +604,7 @@
     <string name="lockpassword_pin_recently_used" msgid="7901918311213276207">"Gailuaren administratzaileak ez du eman beste PIN kode bat erabiltzeko baimenik"</string>
     <string name="lockpassword_pin_blacklisted_by_admin" msgid="7412709707800738442">"IKT saileko administratzaileak blokeatu egiten ditu asmatzen errazak diren PIN kodeak. Erabili beste PIN bat."</string>
     <string name="lockpassword_illegal_character" msgid="1984970060523635618">"Ezin da erabili onartzen ez den karaktererik."</string>
-    <string name="lockpassword_invalid_password" msgid="1690956113717418430">"Pasahitzak ez du balio; gutxienez lau karaktere izan behar ditu."</string>
+    <string name="lockpassword_invalid_password" msgid="1690956113717418430">"Pasahitzak ez du balio; lau karaktere izan behar ditu gutxienez."</string>
     <plurals name="lockpassword_password_requires_letters" formatted="false" msgid="424616259312760303">
       <item quantity="other">Gutxienez <xliff:g id="COUNT">%d</xliff:g> hizki izan behar ditu</item>
       <item quantity="one">Gutxienez 1 hizki izan behar du</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 5a3b390..950ece7 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -141,7 +141,7 @@
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"گذرواژه نقطه اتصال"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"امنیت"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-شخصی"</string>
-    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"هیچ‌کدام"</string>
+    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"وجود ندارد"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"باند AP"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"انتخاب باند AP"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"خودکار"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> می‌خواهد Wi-Fi را روشن کند"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> می‌خواهد Wi-Fi را خاموش کند"</string>
     <string name="wifi_error" msgid="3105105447117289410">"خطا"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"دستگاه مورداستفاده با <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"دستگاهی پیدا نشد. مطمئن شوید دستگاه‌ها روشن و برای اتصال دردسترس هستند."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"امتحان مجدد"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"مشکلی رخ داد. برنامه درخواست انتخاب دستگاه را لغو کرد."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"اتصال برقرار شد"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"نمایش همه"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"در حال جستجو"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"بلوتوث"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"دستگاه بی‌نام"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"دستگاه‌های مرتبط‌شده"</string>
@@ -188,7 +195,7 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"کد مرتبط‌سازی بلوتوث"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"پین شامل حروف یا نماد است"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"کد مرتبط‌سازی را وارد کنید سپس بازگشت یا Enter را فشار دهید"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> مرتبط‌سازی شود؟"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"‏<xliff:g id="DEVICE_NAME">%1$s</xliff:g> مرتبط‌سازی شود؟"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"به <xliff:g id="DEVICE_NAME">%1$s</xliff:g> اجازه داده شود به مخاطبین و سابقه تماس شما دسترسی داشته باشد"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"ممکن است لازم باشد که این پین را در دستگاه دیگر وارد کنید."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"ممکن است لازم باشد این کلید عبور را نیز در دستگاه دیگر وارد کنید."</string>
@@ -216,10 +223,11 @@
     <string name="notification_volume_title" msgid="6749411263197157876">"اعلان"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"رسانه"</string>
     <string name="media_volume_summary" msgid="2961762827637127239">"تنظیم میزان صدا برای موسیقی و ویدیو"</string>
-    <string name="alarm_volume_title" msgid="840384014895796587">"هشدار"</string>
+    <string name="alarm_volume_title" msgid="840384014895796587">"زنگ"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"آهنگ زنگ تلفن"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"صدای اعلان پیش‌فرض"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"صدای زنگ پیش‌فرض"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ذخیره"</string>
     <string name="units_settings" msgid="402325305096925886">"واحدها"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"سرعت"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"فاصله"</string>
@@ -347,7 +355,7 @@
     <string name="location_settings_title" msgid="901334356682423679">"مکان"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"درخواست‌های اخیر مکان"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"درخواست مکان جدیدی وجود ندارد"</string>
-    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"مجوزهای سطح برنامه"</string>
+    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"اجازه‌های سطح برنامه"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"خدمات مکان"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"سیستم"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"به‌روزرسانی‌های سیستم"</string>
@@ -372,7 +380,7 @@
     <string name="manual" msgid="4819839169843240804">"دفترچه راهنما"</string>
     <string name="regulatory_labels" msgid="3165587388499646779">"برچسب‌های نظارتی"</string>
     <string name="safety_and_regulatory_info" msgid="1204127697132067734">"دفترچه راهنمای ایمنی و مقررات نظارتی"</string>
-    <string name="copyright_title" msgid="4220237202917417876">"حق نسخه‌برداری"</string>
+    <string name="copyright_title" msgid="4220237202917417876">"حق نشر"</string>
     <string name="license_title" msgid="936705938435249965">"مجوز"</string>
     <string name="terms_title" msgid="5201471373602628765">"شرایط و مقررات"</string>
     <string name="webview_license_title" msgid="6442372337052056463">"مجوزهای «وب‌نمای» سیستم"</string>
@@ -562,11 +570,12 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"الگوی بازگشایی قفل را بکشید"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"وقتی الگو را کشیدید، انگشتتان را بردارید"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"الگو ضبط شد"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"برای تأیید دوباره الگو را بکشید"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"برای تأیید، دوباره الگو را بکشید"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"حداقل ۴ نقطه را وصل و دوباره امتحان کنید."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"الگو اشتباه است"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"نحوه ترسیم الگوی بازگشایی قفل"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"خطای ذخیره الگو"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"تلاش‌های نادرست زیادی انجام شده است. <xliff:g id="NUMBER">%d</xliff:g> ثانیه دیگر دوباره امتحان کنید."</string>
     <string name="okay" msgid="4589873324439764349">"تأیید"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"قفل صفحه برداشته شود؟"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"این کار به همه افراد اجازه می‌دهد به حسابتان دسترسی پیدا کنند"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6174bea..54f9a42 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -141,7 +141,7 @@
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Hotspotin salasana"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Suojaus"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
-    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"–"</string>
+    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Ei mitään"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP-taajuus"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Valitse AP-taajuus"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Autom."</string>
@@ -157,10 +157,17 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> haluaa käynnistää Wi-Fin"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> haluaa poistaa Wi-Fin käytöstä"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Virhe"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Käytettävä laite: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Laitteita ei löytynyt. Varmista, että laitteet ovat päällä ja voivat muodostaa yhteyden."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Yritä uudelleen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Jotain meni pieleen.. Sovellus peruutti laitteenvalintapyynnön."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Yhteyden muodostus onnistui"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Näytä kaikki"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Haetaan"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Nimetön laite"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Laiteparit"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Muodosta laitepari uuden laitteen kanssa"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Muodosta uusi laitepari"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth käynnistetään parinmuodostusta varten"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Katkaistaanko laitteen yhteys?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Ajoneuvo ja <xliff:g id="DEVICE_NAME">%1$s</xliff:g> erotetaan."</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Puhelimen soittoääni"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Ilmoituksen oletusääni"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Herätyksen oletusääni"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Tallenna"</string>
     <string name="units_settings" msgid="402325305096925886">"Yksiköt"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Nopeus"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Etäisyys"</string>
@@ -275,8 +283,8 @@
     <string name="app_permissions_summary" msgid="1842858532315056367">"Sovellukset, joilla on lupa käyttää seuraavia: <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Sovellustiedot"</string>
     <string name="force_stop" msgid="2153183697014720520">"Pakota sulkeutumaan"</string>
-    <string name="force_stop_dialog_title" msgid="3342850939200388694">"Pakotetaanko lopetus?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Jos pakotat sovelluksen pysähtymään, se ei välttämättä enää toimi oikein."</string>
+    <string name="force_stop_dialog_title" msgid="3342850939200388694">"Pakotetaanko sulkeutumaan?"</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Jos pakotat sovelluksen sulkeutumaan, se ei välttämättä enää toimi oikein."</string>
     <string name="disable_text" msgid="4358165448648990820">"Poista käytöstä"</string>
     <string name="enable_text" msgid="1794971777861881238">"Käytä"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Poista"</string>
@@ -424,7 +432,7 @@
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Odota…"</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"Päivämäärä ja aika"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"Aseta päivämäärä, aika, aikavyöhyke ja formaatit"</string>
-    <string name="date_time_auto" msgid="3570339569471779767">"Automaattinen pvm. ja aika"</string>
+    <string name="date_time_auto" msgid="3570339569471779767">"Automaattinen päivä ja aika"</string>
     <string name="date_time_auto_summary" msgid="3311706425095342759">"Käytä verkon määrittämää aikaa"</string>
     <string name="zone_auto" msgid="3701878581920206160">"Automaattinen aikavyöhyke"</string>
     <string name="zone_auto_summary" msgid="4345856882906981864">"Käytä verkon määrittämää aikavyöhykettä"</string>
@@ -456,7 +464,7 @@
     <string name="user_new_user_name" msgid="7115771396412339662">"Uusi käyttäjä"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Lisätäänkö uusi käyttäjä?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Kun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"Kaikki käyttäjät voivat päivittää muiden käyttäjien sovelluksia."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"Kaikki käyttäjät voivat päivittää sovelluksia muille käyttäjille."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Käyttäjäraja saavutettu"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="other">Voit lisätä korkeintaan <xliff:g id="COUNT">%d</xliff:g> käyttäjää.</item>
@@ -506,7 +514,7 @@
     <string name="storage_unmount_failure" msgid="4591934911541762883">"Turvallinen poistaminen epäonnistui: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="accounts_settings_title" msgid="436190037084293471">"Tilit"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Lisää tili"</string>
-    <string name="no_accounts_added" msgid="5148163140691096055">"Tilejä ei lisätty"</string>
+    <string name="no_accounts_added" msgid="5148163140691096055">"Tilejä ei ole lisätty"</string>
     <string name="account_list_title" msgid="7631588514613843065">"Tilit: <xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g>"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Synkronoi data automaattisesti"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Salli sovellusten päivittää dataa automaattisesti"</string>
@@ -520,11 +528,11 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Rajoitetut profiilit eivät voi lisätä tilejä."</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Poista tili"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Poistetaanko tili?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Poistamalla tämän tilin poistat kaikki sen viestit, yhteystiedot ja muut tiedot laitteelta."</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Jos poistat tämän tilin, myös kaikki sen viestit, yhteystiedot ja muut tiedot poistetaan laitteelta."</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Tilin poistaminen epäonnistui."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Tilin synkronointi"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Synkronointi käytössä <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> kohteella"</string>
-    <string name="account_sync_summary_all_on" msgid="3652264471870312725">"Synkronointi käytössä kaikilla kohteilla"</string>
+    <string name="account_sync_summary_all_on" msgid="3652264471870312725">"Synkronointi käytössä kaikille kohteille"</string>
     <string name="account_sync_summary_all_off" msgid="6550959714035312414">"Synkronointi pois käytöstä kaikilla kohteilla"</string>
     <string name="sync_disabled" msgid="393531064334628258">"Synkronointi EI KÄYTÖSSÄ"</string>
     <string name="sync_error" msgid="6698021343089247914">"Synkronointivirhe"</string>
@@ -538,7 +546,7 @@
     <string name="privacy_settings_title" msgid="3150145262029229572">"Tietosuoja"</string>
     <string name="security_settings_title" msgid="6955331714774709746">"Tietoturva"</string>
     <string name="security_settings_subtitle" msgid="2244635550239273229">"Näytön lukitus"</string>
-    <string name="security_lock_none" msgid="1054645093754839638">"–"</string>
+    <string name="security_lock_none" msgid="1054645093754839638">"Ei mitään"</string>
     <string name="security_lock_pattern" msgid="1174352995619563104">"Kuvio"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN-koodi"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Salasana"</string>
@@ -559,7 +567,7 @@
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Tyhjennä"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Peruuta"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Uusi lukituksenpoistokuvio"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Piirrä lukituksenpoistokuvio"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Piirrä lukituksen avaava kuvio"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Nosta sormi, kun olet valmis"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Kuvio tallennettu"</string>
     <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Vahvista piirtämällä kuvio uudelleen"</string>
@@ -567,14 +575,15 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Väärä kuvio"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Lukituksenpoistokuvion piirtäminen"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Virhe tallennettaessa kuviota"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Liian monta virheellistä yritystä. Yritä uudelleen <xliff:g id="NUMBER">%d</xliff:g> sekunnin kuluttua."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Poistetaanko näytön lukitus?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tämän avulla kuka tahansa voi päästä tilillesi"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Kuka tahansa voi päästä tilillesi"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Syötä PIN-koodi"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Syötä salasana"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Aseta PIN-koodi tietoturvasyistä"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"Syötä PIN-koodi uudelleen"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN-koodin vähimmäispituus on 4 merkkiä."</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN-koodissa täytyy olla ainakin 4 merkkiä."</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"Virheellinen PIN-koodi. Vähimmäispituus on 4 numeroa."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"PIN-koodit eivät täsmää"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"Virhe tallennettaessa PIN-koodia"</string>
@@ -588,7 +597,7 @@
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Vahvista"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"Vähimmäispituus on 4 merkkiä."</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Salasanan vähimmäispituus on <xliff:g id="COUNT">%d</xliff:g> merkkiä."</string>
-    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"PIN-koodin vähimmäispituus on <xliff:g id="COUNT">%d</xliff:g> numeroa."</string>
+    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"PIN-koodissa täytyy olla ainakin <xliff:g id="COUNT">%d</xliff:g> numeroa."</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"Salasanassa saa olla enintään <xliff:g id="NUMBER">%d</xliff:g> merkkiä."</string>
     <string name="lockpassword_pin_too_long" msgid="62957683396974404">"PIN-koodissa saa olla enintään <xliff:g id="NUMBER">%d</xliff:g> numeroa."</string>
     <string name="lockpassword_pin_contains_non_digits" msgid="3044526271686839923">"PIN-koodi saa sisältää vain numeroita 0–9."</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 2428bf5..f4a94be 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -140,7 +140,7 @@
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"D\'autres appareils peuvent se connecter à <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Mot de passe du point d\'accès"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Sécurité"</string>
-    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2 personnel"</string>
+    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personnel"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Aucun"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Bande PA"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Sélectionner la bande PA"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> souhaite activer le Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> souhaite désactiver le Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Erreur"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Appareil à utiliser avec <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Aucun appareil trouvé. Assurez-vous que l\'appareil est allumé et prêt à se connecter."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Réessayer"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Une erreur s\'est produite. L\'application a annulé la demande de sélection d\'un appareil."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connexion réussie"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Tout afficher"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Recherche en cours…"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Appareil sans nom"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Appareils associés"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Sonnerie du téléphone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Son de notification par défaut"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Son d\'alarme par défaut"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Enregistrer"</string>
     <string name="units_settings" msgid="402325305096925886">"Unités"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Vitesse"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -306,7 +314,7 @@
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"Autoriser l\'application d\'assistance à accéder à une image affichée à l\'écran"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Entrée vocale"</string>
     <string name="autofill_settings_title" msgid="1188754272680049972">"Service de remplissage automatique"</string>
-    <string name="app_list_preference_none" msgid="7753357799926715901">"Aucun"</string>
+    <string name="app_list_preference_none" msgid="7753357799926715901">"Aucune"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"Sélectionnée"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"L\'Assistant Google pourra accéder aux données des applications en cours d\'utilisation sur votre système, y compris les données visibles à l\'écran ou accessibles au sein des applications."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Assurez-vous de faire confiance à cette application&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Le remplissage automatique de Google&gt;%1$s&lt;/xliff:g&gt; utilise les éléments affichés à l\'écran pour déterminer les champs qui peuvent bénéficier de l\'entrée automatique."</string>
@@ -342,7 +350,7 @@
     <string name="usage_access_title" msgid="7153427122072303254">"Accès aux données utilisation"</string>
     <string name="usage_access_description" msgid="2413168719257435422">"L\'accès aux données d\'utilisation permet à une application d\'effectuer le suivi des applications que vous utilisez, de la fréquence d\'utilisation, du fournisseur de services, des paramètres de langue et d\'autres détails."</string>
     <string name="wifi_control_title" msgid="5660436566907731929">"Gestion du Wi-Fi"</string>
-    <string name="wifi_control_description" msgid="6021926850423169261">"Le contrôle Wi-Fi permet d\'autoriser une application à activer ou à désactiver le Wi-Fi, à rechercher les réseaux Wi-Fi et à s\'y connecter, à ajouter ou supprimer des réseaux, ou à lancer un point d\'accès local uniquement."</string>
+    <string name="wifi_control_description" msgid="6021926850423169261">"Le contrôle Wi-Fi permet d\'autoriser une application à activer ou à désactiver le Wi-Fi, à rechercher les réseaux Wi-Fi et à s\'y connecter, à ajouter ou retirer des réseaux, ou à lancer un point d\'accès local uniquement."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Plus"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Lieu"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Récentes demandes de localisation"</string>
@@ -350,7 +358,7 @@
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Autorisations à l\'échelle des applis"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Services de localisation"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"Système"</string>
-    <string name="system_update_settings_title" msgid="8448588267784138855">"Mises à jour système"</string>
+    <string name="system_update_settings_title" msgid="8448588267784138855">"Mises à jour du système"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Version d\'Android"</string>
     <string name="security_patch" msgid="4794276590178386903">"Niveau du correctif de sécurité Android"</string>
     <string name="hardware_info" msgid="3973165746261507658">"Modèle et matériel"</string>
@@ -497,7 +505,7 @@
     <string name="storage_data_size_label" msgid="5022911581004239367">"Données de l\'utilisateur"</string>
     <string name="storage_cache_size_label" msgid="6361308766707419555">"Cache"</string>
     <string name="storage_total_size_label" msgid="3892138268243791912">"Total"</string>
-    <string name="storage_clear_user_data_text" msgid="8787615136779130680">"Vider le stockage"</string>
+    <string name="storage_clear_user_data_text" msgid="8787615136779130680">"Effacer l\'espace de stockage"</string>
     <string name="storage_clear_cache_btn_text" msgid="8449547925966775612">"Vider le cache"</string>
     <string name="storage_clear_data_dlg_title" msgid="5863775997588969879">"Supprimer les données de l\'appli?"</string>
     <string name="storage_clear_data_dlg_text" msgid="795055288575727801">"Toutes les données de cette application seront supprimées définitivement, y compris l\'intégralité des fichiers, des paramètres, des comptes, des bases de données, etc."</string>
@@ -521,7 +529,7 @@
     <string name="remove_account_title" msgid="8840386525787836381">"Supprimer le compte"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Supprimer le compte?"</string>
     <string name="really_remove_account_message" msgid="4296769280849579900">"La suppression de ce compte entraînera la suppression de tous les messages, les contacts et les autres données de l\'appareil."</string>
-    <string name="remove_account_error_title" msgid="8368044943174826635">"Impossible de supprimer le compte."</string>
+    <string name="remove_account_error_title" msgid="8368044943174826635">"Impossible de retirer le compte."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Synchronisation du compte"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"La synchronisation est activée pour <xliff:g id="ID_1">%1$d</xliff:g> éléments sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="account_sync_summary_all_on" msgid="3652264471870312725">"La synchronisation est activée pour tous les éléments"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Schéma incorrect"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Comment dessiner un schéma de déverr."</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Erreur lors de l\'enregistrement du schéma"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Trop de tentatives incorrectes. Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Suppr. le verrouill. de l\'écran?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Cela permettra à quiconque d\'accéder à votre compte"</string>
@@ -627,13 +636,13 @@
     <string name="setup_lock_settings_options_button_label" msgid="3337845811029780896">"Options de verrouillage de l\'écran"</string>
     <string name="build_info_fmt" msgid="5592554123908086426">"<xliff:g id="FINGERPRINT">%1$s</xliff:g>\n<xliff:g id="DATE">%2$s</xliff:g> : il y a <xliff:g id="NUM_DAYS">%3$s</xliff:g> jours"</string>
     <string name="credentials_reset" msgid="873900550885788639">"Effacer les authentifiants"</string>
-    <string name="credentials_reset_summary" msgid="6067911547500459637">"Supprimer tous les certificats"</string>
-    <string name="credentials_reset_hint" msgid="3459271621754137661">"Voulez-vous supprimer l\'intégralité du contenu?"</string>
+    <string name="credentials_reset_summary" msgid="6067911547500459637">"Retirer tous les certificats"</string>
+    <string name="credentials_reset_hint" msgid="3459271621754137661">"Voulez-vous retirer l\'intégralité du contenu?"</string>
     <string name="credentials_erased" msgid="2515915439705550379">"Le stockage des authentifiants est effacé."</string>
     <string name="credentials_not_erased" msgid="6118567459076742720">"Impossible d\'effacer le stockage des authentifiants."</string>
     <string name="forget" msgid="3971143908183848527">"Oublier"</string>
     <string name="connect" msgid="5861699594602380150">"Connexion"</string>
-    <string name="disconnect" msgid="6140789953324820336">"Déconnexion"</string>
+    <string name="disconnect" msgid="6140789953324820336">"Déconnecter"</string>
     <string name="delete_button" msgid="5840500432614610850">"Supprimer"</string>
     <string name="remove_button" msgid="6664656962868194178">"Supprimer"</string>
     <string name="cancel" msgid="750286395700355455">"Annuler"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index ecaac84..995f6af 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> requiert l\'activation du Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> requiert la désactivation du Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Erreur"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Appareil à utiliser avec l\'application <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Aucun appareil trouvé. Assurez-vous que des appareils soient activés et prêts à être connectés."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Réessayer"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Un problème est survenu. L\'application a annulé la demande de sélection d\'un appareil."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connexion réussie"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Tout afficher"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Recherche en cours"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Appareil sans nom"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Appareils associés"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Sonnerie du téléphone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Son de notification par défaut"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Son de l\'alarme par défaut"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Enregistrer"</string>
     <string name="units_settings" msgid="402325305096925886">"Unités"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Vitesse"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distance"</string>
@@ -327,7 +335,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Ne pas ouvrir dans cette application"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Liens compatibles"</string>
     <string name="special_access" msgid="5730278220917123811">"Droits d\'accès spécifiques accordés aux applications"</string>
-    <string name="show_system" msgid="4401355756969485287">"Afficher les processus système"</string>
+    <string name="show_system" msgid="4401355756969485287">"Afficher process. système"</string>
     <string name="hide_system" msgid="8845453295584638040">"Masquer les processus système"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Changer les paramètres système"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Cette autorisation permet à une application de modifier les paramètres système."</string>
@@ -409,8 +417,8 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Réinitialiser paramètres"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Les paramètres réseau ont bien été réinitialisés"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Réinitialiser les préférences des applis"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Toutes les préférences relatives aux éléments suivants seront réinitialisées :\n\n"<li>"Applications désactivées"</li>\n<li>"Notifications associées aux applications désactivées"</li>\n<li>"Applications par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applications"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n\n"Vous ne perdrez aucune donnée liée aux applications."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Réinitialiser les applications"</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Toutes les préférences liées à ces éléments seront réinitialisées :\n\n"<li>"Applications désactivées"</li>\n<li>"Notifications associées aux applications désactivées"</li>\n<li>"Applis par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applis"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n\n"Vous ne perdrez aucune donnée liée aux applications."</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Réinitialiser les applis"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Les préférences relatives aux applications ont été réinitialisées"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Effacer données (rétablir config. d\'usine)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Cette action effacera toutes les données de l\'unité principale du véhicule, y compris :\n\n"<li>"Votre compte Google"</li>\n<li>"Les données et paramètres du système et des applications"</li>\n<li>"Les applications téléchargées"</li></string>
@@ -551,8 +559,8 @@
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Réessayer"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Passer"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Configurer le verrouillage de l\'écran"</string>
-    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Sélectionner un code"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Choisir votre schéma"</string>
+    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Choisissez votre code"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Sélectionner un schéma"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Sélectionner un mot de passe"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Verrouillage actuel de l\'écran"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Pour la sécurité, définissez un schéma"</string>
@@ -562,11 +570,12 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Dessinez un schéma de déverrouillage"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Relevez le doigt quand vous avez terminé"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Schéma enregistré"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Redessiner le schéma pour le confirmer"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Redessinez le schéma pour le confirmer"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Reliez au moins 4 points. Réessayez."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Schéma incorrect"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Pour dessiner un schéma de déverrouillage"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Erreur d\'enregistrement du schéma"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Trop de tentatives incorrectes. Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Annuler le verrouillage écran ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Si vous continuez, n\'importe qui pourra accéder à votre compte"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index e6a01a6..247724c 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -21,7 +21,7 @@
     <string name="more_settings_label" msgid="3867559443480110616">"Máis"</string>
     <string name="display_settings" msgid="5325515247739279185">"Pantalla"</string>
     <string name="brightness" msgid="2919605130898772866">"Nivel de brillo"</string>
-    <string name="auto_brightness_title" msgid="9124647862844666581">"Brillo automático"</string>
+    <string name="auto_brightness_title" msgid="9124647862844666581">"Brillo intelixente"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"Optimiza o nivel de brillo en función da luz dispoñible"</string>
     <string name="condition_night_display_title" msgid="3777509730126972675">"Luz nocturna activada"</string>
     <string name="keywords_display" msgid="3978416985146943922">"pantalla, pantalla táctil"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> quere activar a wifi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> quere desactivar a wifi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Produciuse un erro"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo para usar coa aplicación <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Non se atoparon dispositivos. Asegúrate de que estean activados e dispoñibles para a conexión."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Tentar de novo"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Produciuse un erro. A aplicación cancelou a solicitude de escoller un dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Conexión correcta"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostrar todo"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Buscando"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo sen nome"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos vinculados"</string>
@@ -218,8 +225,9 @@
     <string name="media_volume_summary" msgid="2961762827637127239">"Define o volume da música e dos vídeos"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Alarma"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"Ton de chamada do teléfono"</string>
-    <string name="notification_ringtone_title" msgid="8661716239594010288">"Son de notificación predeterm."</string>
+    <string name="notification_ringtone_title" msgid="8661716239594010288">"Son de notificación predeterminado"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Son de alarma predeterminado"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Gardar"</string>
     <string name="units_settings" msgid="402325305096925886">"Unidades"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocidade"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distancia"</string>
@@ -327,7 +335,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Non abre nesta aplicación"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Ligazóns compatibles"</string>
     <string name="special_access" msgid="5730278220917123811">"Acceso especial das aplicacións"</string>
-    <string name="show_system" msgid="4401355756969485287">"Mostrar procesos do sistema"</string>
+    <string name="show_system" msgid="4401355756969485287">"Mostrar sistema"</string>
     <string name="hide_system" msgid="8845453295584638040">"Ocultar sistema"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Modificar axustes do sistema"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Con este permiso as aplicacións poden modificar a configuración do sistema."</string>
@@ -395,7 +403,7 @@
     <string name="reset_options_title" msgid="4388902952861833420">"Opcións de restablecemento"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Restablecemento do dispositivo, das aplicacións ou da rede"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Restablecer rede"</string>
-    <string name="reset_network_desc" msgid="602381374544634925">"Con esta acción restablecerase toda a configuración da rede, incluso:"</string>
+    <string name="reset_network_desc" msgid="602381374544634925">"Con esta acción restablecerase toda a configuración da rede, como:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wifi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Datos móbiles"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"Bluetooth"</li></string>
@@ -551,7 +559,7 @@
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Tentar de novo"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Omitir"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Definir un bloqueo de pantalla"</string>
-    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Escolle o teu PIN"</string>
+    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Escoller o teu PIN"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Seleccionar o teu padrón"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Escoller o teu contrasinal"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Bloqueo de pantalla actual"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"O padrón é incorrecto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Como debuxar un padrón de desbloqueo"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Erro ao gardar o padrón"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Realizáronse demasiados intentos incorrectos. Téntao de novo en <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
     <string name="okay" msgid="4589873324439764349">"Aceptar"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Eliminar bloqueo de pantalla?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Desta forma calquera poderá acceder á túa conta"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 8d0a132..53dffc7 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>, વાઇ-ફાઇ ચાલુ કરવા માગે છે"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>, વાઇ-ફાઇ બંધ કરવા માગે છે"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ભૂલ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> સાથે ઉપયોગમાં લેવાનું ડિવાઇસ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"કોઈ ડિવાઇસ મળ્યું નથી. ખાતરી કરો કે ડિવાઇસ ચાલુ છે અને કનેક્ટ કરવા માટે ઉપલબ્ધ છે."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ફરી પ્રયાસ કરો"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"કંઈક નડ્યું. ઍપ્લિકેશને ડિવાઇસ પસંદ કરવાની વિનંતી રદ કરી છે."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"કનેક્શન સફળ થયું"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"બધા બતાવો"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"શોધી રહ્યું છે"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"બ્લૂટૂથ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"અનામાંકિત ડિવાઇસ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"જોડાણ કરેલા ડિવાઇસ"</string>
@@ -220,7 +227,8 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ફોન રિંગટોન"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ડિફૉલ્ટ નોટિફિકેશન સાઉન્ડ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ડિફૉલ્ટ અલાર્મ સાઉન્ડ"</string>
-    <string name="units_settings" msgid="402325305096925886">"એકમ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"સાચવો"</string>
+    <string name="units_settings" msgid="402325305096925886">"યુનિટ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ઝડપ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"અંતર"</string>
     <string name="units_fuel_consumption_title" msgid="6415108114453652570">"ઇંધણના વપરાશની વિગતો"</string>
@@ -305,11 +313,11 @@
     <string name="assist_access_screenshot_title" msgid="2855956879971465044">"સ્ક્રીનશૉટનો ઉપયોગ કરો"</string>
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"સહાયક ઍપને સ્ક્રીનની છબીને ઍક્સેસ કરવાની મંજૂરી આપો"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"વૉઇસ ઇનપુટ"</string>
-    <string name="autofill_settings_title" msgid="1188754272680049972">"આપમેળે ભરાવાની સેવા"</string>
+    <string name="autofill_settings_title" msgid="1188754272680049972">"ઑટોમૅટિક રીતે ભરવાની સુવિધા"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"એકપણ નહીં"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"પસંદ કરેલી"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"તમારી સ્ક્રીન પર જોઈ શકાતી અથવા ઍપમાંથી ઍક્સેસ કરી શકાય તેવી માહિતી સહિતની તમારી સિસ્ટમમાં ઉપયોગમાં લેવાતી ઍપ વિશેની માહિતી આસિસ્ટંટ વાંચી શકશે."</string>
-    <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;ખાતરી કરો કે તમે આ ઍપનો વિશ્વાસ કરો છો&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google આપમેળે ભરાવાની સુવિધા&gt;%1$s&lt;/xliff:g&gt; તમારી સ્ક્રીન પર શું છે તેનો ઉપયોગ એ નક્કી કરવા કરે છે કે આપમેળે શું ભરાઈ શકે."</string>
+    <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;ખાતરી કરો કે તમે આ ઍપનો વિશ્વાસ કરો છો&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google ઑટોમૅટિક રીતે ભરવાની સુવિધા&gt;%1$s&lt;/xliff:g&gt; તમારી સ્ક્રીન પર શું છે તેનો ઉપયોગ એ નક્કી કરવા કરે છે કે ઑટોમૅટિક રીતે શું દાખલ થશે."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"સેવા ઉમેરો"</string>
     <string name="app_launch_domain_links_title" msgid="774480184927726651">"લિંક ખોલવી"</string>
     <string name="domain_url_section_title" msgid="9070403140947787214">"ઇન્સ્ટૉલ કરેલી ઍપ"</string>
@@ -393,7 +401,7 @@
     <string name="show_dev_already" msgid="1678087328973865736">"કોઈ જરૂર નથી, તમે પહેલાંથી જ ડેવલપર છો."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"ડેવલપરના વિકલ્પો"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"રીસેટ કરવાના વિકલ્પો"</string>
-    <string name="reset_options_summary" msgid="5508201367420359293">"નેટવર્ક, ઍપ અથવા ઉપકરણ રીસેટ કરો"</string>
+    <string name="reset_options_summary" msgid="5508201367420359293">"નેટવર્ક, ઍપ અથવા ડિવાઇસ રીસેટ કરો"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"નેટવર્ક રીસેટ કરો"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"આ બધા નેટવર્ક સેટિંગ રીસેટ કરશે, જેમાં આનો સમાવેશ છે:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"વાઇ-ફાઇ"</li></string>
@@ -418,15 +426,15 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"આ વાહન પર અન્ય વપરાશકર્તા હાજર છે."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"વાહન રીસેટ કરો"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"રીસેટ કરીએ?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"તમારી બધી વ્યક્તિગત માહિતી અને ડાઉનલોડ કરેલી એપ્લિકેશન્સને કાઢી નાખીએ? તમે આ ક્રિયાને પૂર્વવત્ કરી શકતા નથી!"</string>
-    <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"દરેક વસ્તુ કાઢી નાંખો"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"તમારી બધી વ્યક્તિગત માહિતી અને ડાઉનલોડ કરેલી ઍપ કાઢી નાખીએ? તમે આ ક્રિયા માટે કરેલો છેલ્લો ફેરફાર રદ કરી શકશો નહીં!"</string>
+    <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"દરેક વસ્તુ કાઢી નાખો"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"કાઢી નાંખી રહ્યું છે"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"કૃપા કરીને રાહ જુઓ..."</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"તારીખ અને સમય"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"તારીખ, સમય, સમય ઝોન અને ફૉર્મેટ સેટ કરો"</string>
-    <string name="date_time_auto" msgid="3570339569471779767">"આપમેળે તારીખ અને સમય"</string>
+    <string name="date_time_auto" msgid="3570339569471779767">"ઑટોમૅટિક રીતે તારીખ અને સમય"</string>
     <string name="date_time_auto_summary" msgid="3311706425095342759">"નેટવર્ક દ્વારા પ્રદાન કરવામાં આવેલ સમયનો ઉપયોગ કરો"</string>
-    <string name="zone_auto" msgid="3701878581920206160">"આપમેળે સમય ઝોન"</string>
+    <string name="zone_auto" msgid="3701878581920206160">"ઑટોમૅટિક સમય ઝોન"</string>
     <string name="zone_auto_summary" msgid="4345856882906981864">"નેટવર્ક દ્વારા પ્રદાન કરાયેલ સમય ઝોનનો ઉપયોગ કરો"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24‑કલાકનું ફૉર્મેટ"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"24-કલાકના ફૉર્મેટનો ઉપયોગ કરો"</string>
@@ -463,7 +471,7 @@
       <item quantity="other">તમે <xliff:g id="COUNT">%d</xliff:g> વપરાશકર્તા સુધી મંજૂરી આપી શકશો.</item>
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"નવો વપરાશકર્તા બનાવવામાં નિષ્ફળ"</string>
-    <string name="delete_user_dialog_title" msgid="3422867434431562007">"આ યુઝરને ડિલીટ કરીએ?"</string>
+    <string name="delete_user_dialog_title" msgid="3422867434431562007">"આ વપરાશકર્તાને ડિલીટ કરીએ?"</string>
     <string name="delete_user_dialog_message" msgid="4346777604351785057">"બધી ઍપ અને ડેટા ડિલીટ કરવામાં આવશે."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"વપરાશકર્તાને ડિલીટ કરવામાં નિષ્ફળ થયાં."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"છોડી દો"</string>
@@ -520,7 +528,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"પ્રતિબંધિત પ્રોફાઇલ એકાઉન્ટ ઉમેરી શકતી નથી"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"એકાઉન્ટ કાઢી નાખો"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"એકાઉન્ટ કાઢી નાખીએ?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"આ એકાઉન્ટને કાઢી નાખવાથી તેમાંના બધા સંદેશા, સંપર્કો તેમજ ઉપકરણમાંનો અન્ય ડેટા ડિલીટ થઈ જશે!"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"આ એકાઉન્ટને કાઢી નાખવાથી તેમાંના બધા સંદેશા, સંપર્કો તેમજ ડિવાઇસનો અન્ય ડેટા ડિલીટ થઈ જશે!"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"એકાઉન્ટ કાઢી નાખવામાં નિષ્ફળ થયાં."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"એકાઉન્ટ સિંક કરો"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"<xliff:g id="ID_2">%2$d</xliff:g> માંથી <xliff:g id="ID_1">%1$d</xliff:g> આઇટમ માટે સિંક ચાલુ છે"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ખોટી પૅટર્ન"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"એક અનલૉક પૅટર્ન કેવી રીતે દોરવી"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"પૅટર્ન સાચવવામાં ભૂલ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"વધુ પડતા અયોગ્ય પ્રયાસો. <xliff:g id="NUMBER">%d</xliff:g> સેકન્ડમાં ફરી પ્રયાસ કરો."</string>
     <string name="okay" msgid="4589873324439764349">"ઓકે"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"સ્ક્રીન લૉક કાઢી નાખીએ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"આ ક્રિયા તમારા એકાઉન્ટને ઍક્સેસ કરવાની મંજૂરી કોઈને પણ આપશે"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"છોડી દો"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ડ્રાઇવિંગ કરતી વખતે આ સુવિધા ઉપલબ્ધ નથી"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ડ્રાઇવ કરતી વખતે વપરાશકર્તાને ઉમેરી શકાતા નથી"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"શોધ"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8359b73..fde5203 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -20,7 +20,7 @@
     <string name="settings_label" msgid="5147911978211079839">"सेटिंग"</string>
     <string name="more_settings_label" msgid="3867559443480110616">"ज़्यादा"</string>
     <string name="display_settings" msgid="5325515247739279185">"डिसप्ले"</string>
-    <string name="brightness" msgid="2919605130898772866">"स्क्रीन की चमक का लेवल"</string>
+    <string name="brightness" msgid="2919605130898772866">"स्क्रीन की रोशनी का लेवल"</string>
     <string name="auto_brightness_title" msgid="9124647862844666581">"रोशनी के अनुसार सेट होने वाली चमक"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"आस-पास मौजूद रोशनी के हिसाब से स्क्रीन की चमक कम या ज़्यादा करें"</string>
     <string name="condition_night_display_title" msgid="3777509730126972675">"नाइट लाइट चालू है"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> को वाई-फ़ाई चालू करने की अनुमति चाहिए"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> को वाई-फ़ाई बंद करने की अनुमति चाहिए"</string>
     <string name="wifi_error" msgid="3105105447117289410">"गड़बड़ी"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> के साथ इस्तेमाल किया जाने वाला डिवाइस"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"कोई डिवाइस नहीं मिला देख लें कि डिवाइस चालू हों और कनेक्ट किए जा सकते हों."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"फिर से कोशिश करें"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"कुछ गड़बड़ी हुई है ऐप्लिकेशन ने डिवाइस चुनने का अनुरोध रद्द कर दिया है."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"कनेक्शन कामयाब रहा"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"सभी दिखाएं"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"खोजना"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ब्लूटूथ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"बिना नाम वाला डिवाइस"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"जुड़े हुए डिवाइस"</string>
@@ -166,7 +173,7 @@
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"आपका वाहन <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से डिसकनेक्ट हो जाएगा."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"वाहन का ब्लूटूथ पता: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"डिवाइस का ब्लूटूथ पता: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
-    <string name="bluetooth_name" msgid="2609869978821094114">"वाहन का नाम"</string>
+    <string name="bluetooth_name" msgid="2609869978821094114">"गाड़ी का नाम"</string>
     <string name="bluetooth_rename_vehicle" msgid="5769424875066563154">"इस वाहन का नाम बदलें"</string>
     <string name="bluetooth_rename_device" msgid="8406868875363878712">"डिवाइस का नाम बदलें"</string>
     <string name="bluetooth_rename_button" msgid="2397892174725986383">"नाम बदलें"</string>
@@ -188,7 +195,7 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"ब्‍लूटूथ के ज़रिए जोड़ने वाला कोड"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"पिन में अक्षर या चिह्न शामिल होते हैं"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"दूसरे डिवाइस से जोड़ने वाला कोड लिखें और फिर Return या Enter दबाएं"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से जोड़ें?"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"क्या आप <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से जोड़ना चाहते हैं?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को अपने संपर्क या कॉल इतिहास का इस्तेमाल करने की मंज़ूरी दें"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"आपको यह पि‍न दूसरे डिवाइस पर भी डालना होगा."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"आपको यह पासवर्ड दूसरे डिवाइस पर भी डालना होगा."</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"रीसेट करें"</string>
     <string name="sound_settings" msgid="3072423952331872246">"आवाज़"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"घंटी बजने की आवाज़"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"नेविगेशन की आवाज़"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"नेविगेशन वॉल्यूम"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"रिंगटोन"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"सूचना"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"मीडिया"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"फ़ोन की रिंगटोन"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"सूचना की डिफ़ॉल्ट आवाज़"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"अलार्म की डिफ़ॉल्ट आवाज़"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"सेव करें"</string>
     <string name="units_settings" msgid="402325305096925886">"इकाइयां"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"रफ़्तार"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"दूरी"</string>
@@ -344,10 +352,10 @@
     <string name="wifi_control_title" msgid="5660436566907731929">"वाई-फ़ाई नियंत्रण"</string>
     <string name="wifi_control_description" msgid="6021926850423169261">"वाई-फ़ाई का नियंत्रण किसी ऐप्लिकेशन को वाई-फ़ाई चालू या बंद करने, वाई-फ़ाई नेटवर्क ढूंढने और उससे जुड़ने की अनुमति देता है. साथ ही, नेटवर्क जोड़ने या हटाने या सिर्फ़ सीमित दायरे में इस्तेमाल होने वाला हॉटस्पॉट चालू करने की अनुमति देता है."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"ज़्यादा सेटिंग"</string>
-    <string name="location_settings_title" msgid="901334356682423679">"जगह"</string>
+    <string name="location_settings_title" msgid="901334356682423679">"जगह की जानकारी"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"हाल ही में किए गए जगह के अनुरोध"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"हाल ही में जगह का कोई अनुरोध नहीं है"</string>
-    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"ऐप्लिकेशन-स्तर की अनुमतियां"</string>
+    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"ऐप्लिकेशन-लेवल की अनुमतियां"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"जगह की जानकारी की सेवाएं"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"सिस्टम"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"सिस्टम अपडेट"</string>
@@ -410,13 +418,13 @@
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"नेटवर्क सेटिंग रीसेट कर दी गई हैं"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"ऐप्लिकेशन की सेटिंग रीसेट करें"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"इससे इन सबके लिए प्राथमिकताएं रीसेट हो जाएंगी:\n\n"<li>"बंद किए गए ऐप्लिकेशन"</li>\n<li>"बंद की गई ऐप्लिकेशन सूचनाएं"</li>\n<li>"कार्रवाइयों के लिए डिफ़ॉल्ट ऐप्लिकेशन"</li>\n<li>"ऐप्लिकेशन के लिए बैकग्राउंड डेटा पाबंदियां"</li>\n<li>"अनुमति से जुड़ी सभी पाबंदियां"</li>\n\n"आपका सारा ऐप्लिकेशन डेटा बना रहेगा."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"ऐप्लिकेशन रीसेट करें"</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"ऐप्लिकेशन को रीसेट करें"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"ऐप्लिकेशन की सेटिंग रीसेट कर दी गई हैं"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"पूरा डेटा हमेशा के लिए मिटाएं (फ़ैक्ट्री रीसेट)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"इससे आपके वाहन की हेड यूनिट से सारा डेटा हमेशा के लिए मिटा दिया जाएगा, जिसमें शामिल हैं:\n\n"<li>"आपका Google खाता"</li>\n<li>"सिस्टम, ऐप्लिकेशन का डेटा और सेटिंग"</li>\n<li>"डाउनलोड किए गए ऐप्लिकेशन"</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"इससे आपकी गाड़ी की हेड यूनिट से सारा डेटा हमेशा के लिए मिटा दिया जाएगा, जिसमें शामिल हैं:\n\n"<li>"आपका Google खाता"</li>\n<li>"सिस्टम, ऐप्लिकेशन का डेटा और सेटिंग"</li>\n<li>"डाउनलोड किए गए ऐप्लिकेशन"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"आपने इस समय नीचे दिए गए खातों में साइन इन कर रखा है:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"इस वाहन पर दूसरे उपयोगकर्ता मौजूद हैं."</string>
-    <string name="master_clear_button_text" msgid="8010754220392741160">"वाहन रीसेट करें"</string>
+    <string name="master_clear_button_text" msgid="8010754220392741160">"गाड़ी को रीसेट करें"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"रीसेट करें?"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"अपनी सारी निजी जानकारी और डाउनलोड किए गए ऐप्लिकेशन हमेशा के लिए मिटाना चाहते हैं? आप इस कार्रवाई को पहले जैसा नहीं कर सकते!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"सब कुछ हमेशा के लिए मिटाएं"</string>
@@ -424,10 +432,10 @@
     <string name="master_clear_progress_text" msgid="3440789441935303176">"कृपया इंतज़ार करें..."</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"तारीख और समय"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"तारीख, समय, समय क्षेत्र और फ़ॉर्मैट सेट करें"</string>
-    <string name="date_time_auto" msgid="3570339569471779767">"अपने आप तारीख और समय सेट होना"</string>
-    <string name="date_time_auto_summary" msgid="3311706425095342759">"नेटवर्क की ओर से तय किए गए समय का इस्तेमाल करें"</string>
-    <string name="zone_auto" msgid="3701878581920206160">"समय क्षेत्र अपने आप तय होना"</string>
-    <string name="zone_auto_summary" msgid="4345856882906981864">"नेटवर्क की ओर से तय किए गए समय क्षेत्र का इस्तेमाल करें"</string>
+    <string name="date_time_auto" msgid="3570339569471779767">"तारीख और समय अपने-आप सेट होना"</string>
+    <string name="date_time_auto_summary" msgid="3311706425095342759">"नेटवर्क का दिया हुआ समय इस्तेमाल करें"</string>
+    <string name="zone_auto" msgid="3701878581920206160">"समय क्षेत्र अपने-आप सेट होना"</string>
+    <string name="zone_auto_summary" msgid="4345856882906981864">"नेटवर्क का दिया हुआ समय क्षेत्र इस्तेमाल करें"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24‑घंटे वाला फ़ॉर्मैट"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"24-घंटे वाला फ़ॉर्मैट इस्तेमाल करें"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"समय"</string>
@@ -455,8 +463,8 @@
     <string name="user_add_user_menu" msgid="5319151436895941496">"उपयोगकर्ता जोड़ें"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"नया उपयोगकर्ता"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"नया उपयोगकर्ता जोड़ें?"</string>
-    <string name="user_add_user_message_setup" msgid="6030901156040053106">"जब आप कोई नया उपयोगकर्ता जोड़ते हैं तो, उस व्यक्ति को अपनी जगह सेट करनी होती है."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"कोई भी उपयोगकर्ता बाकी सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकते हैं."</string>
+    <string name="user_add_user_message_setup" msgid="6030901156040053106">"जब आप कोई नया उपयोगकर्ता जोड़ते हैं, तो उस व्यक्ति को अपनी जगह सेट करनी होती है."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"कोई भी उपयोगकर्ता बाकी सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"अब और उपयोगकर्ता नहीं जोड़े जा सकते"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="one">आप <xliff:g id="COUNT">%d</xliff:g> उपयोगकर्ता जोड़ सकते हैं.</item>
@@ -480,7 +488,7 @@
     <string name="current_user_name" msgid="3813671533249316823">"आप (%1$s)"</string>
     <string name="user_name_label" msgid="3210832645046206845">"नाम"</string>
     <string name="user_summary_not_set_up" msgid="1473688119241224145">"सेट नहीं है"</string>
-    <string name="edit_user_name_title" msgid="6890782937520262478">"\'उपयोगकर्ता नाम\' में बदलाव करें"</string>
+    <string name="edit_user_name_title" msgid="6890782937520262478">"उपयोगकर्ता का नाम बदलें"</string>
     <string name="name_input_blank_error" msgid="2088850865880984123">"नाम लिखने की जगह खाली नहीं रखी जा सकती."</string>
     <string name="name_input_invalid_error" msgid="3523545780580744273">"डाला गया उपयोगकर्ता नाम गलत है."</string>
     <string name="users_list_title" msgid="770764290290240909">"उपयोगकर्ता"</string>
@@ -508,7 +516,7 @@
     <string name="user_add_account_menu" msgid="6625351983590713721">"खाता जोड़ें"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"कोई खाता जोड़ा नहीं गया है"</string>
     <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> के खाते"</string>
-    <string name="account_auto_sync_title" msgid="3238816995364191432">"डेटा को अपने आप सिंक करें"</string>
+    <string name="account_auto_sync_title" msgid="3238816995364191432">"डेटा को अपने-आप सिंक होने दें"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"ऐप्लिकेशन को डेटा अपने-आप रीफ़्रेश करने दें"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"अपने आप डेटा सिंक होना चालू करें?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"आपने वेब पर अपने खातों में जो भी बदलाव किए हैं, उनकी कॉपी आपके डिवाइस में अपने आप बन जाएगी.\n\nआपने जो भी बदलाव फ़ोन पर किए हैं, उन्हें कुछ खाते वेब पर भी कॉपी कर सकते हैं. Google खाता इसी तरह काम करता है."</string>
@@ -567,8 +575,9 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"गलत पैटर्न"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"लॉक खोलने का पैटर्न बनाने का तरीका"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"पैटर्न सेव करने में गड़बड़ी हुई"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"आपकी कोशिशें बहुत बार गलत हुई हैं. <xliff:g id="NUMBER">%d</xliff:g> सेकंड में फिर से कोशिश करें."</string>
     <string name="okay" msgid="4589873324439764349">"ठीक है"</string>
-    <string name="remove_screen_lock_title" msgid="1234382338764193387">"स्क्रीन लॉक हटाएं?"</string>
+    <string name="remove_screen_lock_title" msgid="1234382338764193387">"क्या आप स्क्रीन लॉक हटाना चाहते हैं?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"स्क्रीन लॉक हटाने पर कोई भी आपका खाता इस्तेमाल कर सकता है"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"अनलॉक करने के लिए पिन डालें"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"अपना पासवर्ड डालें"</string>
@@ -627,13 +636,13 @@
     <string name="setup_lock_settings_options_button_label" msgid="3337845811029780896">"स्क्रीन लॉक विकल्प"</string>
     <string name="build_info_fmt" msgid="5592554123908086426">"<xliff:g id="FINGERPRINT">%1$s</xliff:g>\n<xliff:g id="DATE">%2$s</xliff:g> : <xliff:g id="NUM_DAYS">%3$s</xliff:g> days ago"</string>
     <string name="credentials_reset" msgid="873900550885788639">"क्रेडेंशियल मिटाएं"</string>
-    <string name="credentials_reset_summary" msgid="6067911547500459637">"सभी प्रमाणपत्र हटाएं"</string>
+    <string name="credentials_reset_summary" msgid="6067911547500459637">"सभी सर्टिफ़िकेट हटाएं"</string>
     <string name="credentials_reset_hint" msgid="3459271621754137661">"सभी सामग्री हटाएं?"</string>
     <string name="credentials_erased" msgid="2515915439705550379">"क्रेडेंशियल स्टोरेज हमेशा के लिए मिटाई गई."</string>
     <string name="credentials_not_erased" msgid="6118567459076742720">"क्रेडेंशियल स्टोरेज हमेशा के लिए नहीं मिटाई जा सकती."</string>
     <string name="forget" msgid="3971143908183848527">"भूल जाएं"</string>
     <string name="connect" msgid="5861699594602380150">"कनेक्शन जोड़ें"</string>
-    <string name="disconnect" msgid="6140789953324820336">"कनेक्शन हटाएं"</string>
+    <string name="disconnect" msgid="6140789953324820336">"डिसकनेक्ट करें"</string>
     <string name="delete_button" msgid="5840500432614610850">"मिटाएं"</string>
     <string name="remove_button" msgid="6664656962868194178">"हटाएं"</string>
     <string name="cancel" msgid="750286395700355455">"अभी नहीं"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 82dfd73..d3e2ab0 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -159,6 +159,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> želi uključiti Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> želi isključiti Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Pogreška"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Uređaj za upotrebu s aplikacijom <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nije pronađen nijedan uređaj. Provjerite je li uređaj uključen i dostupan za povezivanje."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Pokušajte ponovo"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Došlo je do pogreške. Aplikacija je otkazala zahtjev za odabir uređaja."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Povezivanje je uspjelo"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Pokaži sve"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Pretraživanje"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Uređaj bez naziva"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Upareni uređaji"</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Melodija zvona telefona"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Zadani zvuk obavijesti"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Zadani zvuk alarma"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Spremi"</string>
     <string name="units_settings" msgid="402325305096925886">"Jedinice"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Brzina"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Udaljenost"</string>
@@ -354,7 +362,7 @@
     <string name="location_settings_services_title" msgid="1186133632690970468">"Usluge lokacije"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"Sustav"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"Ažuriranja sustava"</string>
-    <string name="firmware_version" msgid="8491753744549309333">"verziju Androida"</string>
+    <string name="firmware_version" msgid="8491753744549309333">"Verzija Androida"</string>
     <string name="security_patch" msgid="4794276590178386903">"Razina Androidove sigurnosne zakrpe"</string>
     <string name="hardware_info" msgid="3973165746261507658">"Model i hardver"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Model: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
@@ -407,14 +415,14 @@
     <string name="reset_esim_desc" msgid="1437276625485586740">"Time se neće otkazati vaš paket usluge."</string>
     <string name="reset_esim_error_title" msgid="7245109418130525492">"Poništavanje eSIM-ova nije uspjelo"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Odaberite mrežu"</string>
-    <string name="reset_network_button_text" msgid="8374174455632765033">"Vrati postavke na zadano"</string>
+    <string name="reset_network_button_text" msgid="8374174455632765033">"Poništi postavke"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"Vratiti na zadano?"</string>
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Želite li vratiti sve postavke mreže na zadano? Tu radnju nije moguće poništiti!"</string>
-    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Vrati postavke na zadano"</string>
+    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Poništi postavke"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Postavke mreže vraćene su na zadano"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Vrati postavke aplikacija na zadano"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Time će se poništiti sve postavke za sljedeće:\n\n"<li>"onemogućene aplikacije"</li>\n<li>"onemogućene obavijesti aplikacija"</li>\n<li>"zadane aplikacije za radnje"</li>\n<li>"ograničenja pozadinskih podataka za aplikacije"</li>\n<li>"sva ograničenja dozvola."</li>\n\n"Nećete izgubiti podatke nijedne aplikacije."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Vrati aplikacije na zadano"</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Poništi aplikacije"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Postavke aplikacija vraćene su na zadano"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Izbriši sve podatke (vrati na tvorničke)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Time će se izbrisati svi podaci s glavne jedinice vozila, uključujući:\n\n"<li>"vaš Google račun"</li>\n<li>"podatke i postavke sustava i aplikacija"</li>\n<li>"preuzete aplikacije"</li></string>
@@ -547,7 +555,7 @@
     <string name="security_lock_pattern" msgid="1174352995619563104">"Uzorak"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Zaporka"</string>
-    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Odaberite vrstu zaklj."</string>
+    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Odaberite vrstu zaključavanja"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"Opcije zaključavanja"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Unesite uzorak"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Potvrdi"</string>
@@ -572,6 +580,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Pogrešan uzorak"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kako iscrtati uzorak za otključavanje"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Pogreška pri spremanju uzorka"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Previše netočnih pokušaja. Pokušajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"U redu"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Ukloniti zaključavanje zaslona?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Druge osobe moći će pristupiti vašem računu"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 6142d5a..4e5d9f1 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -140,7 +140,7 @@
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Más eszközök is csatlakozhatnak a(z) <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> hotspothoz"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Hotspot jelszava"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Biztonság"</string>
-    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2 személyes"</string>
+    <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Nincs"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP-sáv"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"AP-sáv kiválasztása"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"A(z) <xliff:g id="REQUESTER">%s</xliff:g> szeretné bekapcsolni a Wi-Fi-t"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"A(z) <xliff:g id="REQUESTER">%s</xliff:g> szeretné kikapcsolni a Wi-Fi-t"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Hiba"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> alkalmazással használandó eszköz"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nem találhatók eszközök. Ellenőrizze, hogy be vannak-e kapcsolva az eszközök, és lehetséges-e a hozzájuk való csatlakozás."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Újrapróbálkozás"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Valami történt. Az alkalmazás megszakította az eszköz kiválasztására irányuló kérést."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Sikeres kapcsolódás"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Összes mutatása"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Keresés"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Név nélküli eszköz"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Párosított eszközök"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefon csengőhangja"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Alapértelmezett értesítőhang"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Alapértelmezett ébresztőhang"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Mentés"</string>
     <string name="units_settings" msgid="402325305096925886">"Egységek"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Sebesség"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Távolság"</string>
@@ -490,7 +498,7 @@
     <string name="storage_other_apps" msgid="945509804756782640">"Egyéb alkalmazások"</string>
     <string name="storage_files" msgid="6382081694781340364">"Fájlok"</string>
     <string name="storage_system" msgid="1271345630248014010">"Rendszer"</string>
-    <string name="storage_detail_dialog_system" msgid="796365720531622361">"A rendszer tartalmaz <xliff:g id="VERSION">%s</xliff:g> verziójú Android futtatásához használt fájlokat"</string>
+    <string name="storage_detail_dialog_system" msgid="796365720531622361">"A rendszer az Android <xliff:g id="VERSION">%s</xliff:g>. verziójának futtatásához használt fájlokat tartalmaz"</string>
     <string name="storage_audio_files_title" msgid="5183170457027181700">"Hangfájlok"</string>
     <string name="memory_calculating_size" msgid="1672238502950390033">"Számítás…"</string>
     <string name="storage_application_size_label" msgid="1146156683170661354">"Alkalmazás mérete"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Helytelen minta"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Hogyan kell feloldási mintát rajzolni?"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Hiba történt a minta mentése során"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Túl sok helytelen próbálkozás. Próbálja újra <xliff:g id="NUMBER">%d</xliff:g> másodperc múlva."</string>
     <string name="okay" msgid="4589873324439764349">"Rendben"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Eltávolítja a képernyőzárat?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ezzel bárki hozzáférhet majd az Ön fiókjához"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index a341e6b..b4175fb 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Թույլտատրե՞լ <xliff:g id="REQUESTER">%s</xliff:g> հավելվածին միացնել Wi-Fi-ը"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Թույլտատրե՞լ <xliff:g id="REQUESTER">%s</xliff:g> հավելվածին անջատել Wi-Fi-ը"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Սխալ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Սարք <xliff:g id="APPNAME">%1$s</xliff:g> հավելվածի հետ օգտագործելու համար"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Սարքեր չեն գտնվել։ Համոզվեք, որ սարքերը միացված են և հասանելի են կապակցման համար։"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Նորից փորձել"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Սխալ առաջացավ: Հավելվածը չեղարկել է սարք ընտրելու հայտը:"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Կապը հաստատվեց"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Ցույց տալ բոլորը"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Որոնում"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Անանուն սարք"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Զուգակցված սարքեր"</string>
@@ -206,12 +213,12 @@
     <string name="text_to_speech_settings" msgid="811985746199507343">"Տեքստի հնչեցում"</string>
     <string name="text_to_speech_preferred_engine_settings" msgid="2766782925699132256">"Կանխադրված սինթեզատոր"</string>
     <string name="text_to_speech_current_engine" msgid="8133107484909612597">"Ընթացիկ սինթեզատոր"</string>
-    <string name="tts_speech_rate" msgid="4512944877291943133">"Խոսքի արագություն"</string>
+    <string name="tts_speech_rate" msgid="4512944877291943133">"Խոսքի արագությունը"</string>
     <string name="tts_pitch" msgid="2389171233852604923">"Ձայներանգ"</string>
     <string name="tts_reset" msgid="6289481549801844709">"Զրոյացնել"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Ձայն"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Զանգի ձայնը"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Նավիգացիայի ձայնը"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Նավիգացիա"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Զանգերանգ"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Ծանուցում"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Մեդիա"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Հեռախոսի զանգերանգը"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Ծանուցման կանխադրված ազդանշանը"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Զարթուցիչի կանխադրված ազդանշանը"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Պահել"</string>
     <string name="units_settings" msgid="402325305096925886">"Միավորներ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Արագություն"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Հեռավորություն"</string>
@@ -347,7 +355,7 @@
     <string name="location_settings_title" msgid="901334356682423679">"Տեղորոշում"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Տեղադրության տվյալների վերջին հարցումները"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"Վերջերս տեղորոշման տվյալների հարցումներ չեն արվել"</string>
-    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Հավելվածի թույլտվություններ"</string>
+    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Հավելվածների թույլտվություններ"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Տեղորոշման ծառայություններ"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"Համակարգ"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"Համակարգի թարմացումներ"</string>
@@ -392,10 +400,10 @@
     <string name="show_dev_on" msgid="5339077400040834808">"Դուք արդեն մշակող եք:"</string>
     <string name="show_dev_already" msgid="1678087328973865736">"Կարիք չկա, դուք արդեն իսկ մշակող եք:"</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Մշակողների համար"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"Կարգավորումների վերակայում"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"Կարգավորումների զրոյացում"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Ցանցի, հավելվածների և սարքի վերակայում"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Զրոյացնել ցանցի կարգավորումները"</string>
-    <string name="reset_network_desc" msgid="602381374544634925">"Ցանցի բոլոր կարգավորումները կվերակայվեն, այդ թվում՝"</string>
+    <string name="reset_network_desc" msgid="602381374544634925">"Ցանցի բոլոր կարգավորումները կզրոյացվեն, այդ թվում՝"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi-Fi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Բջջային ինտերնետ"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"Bluetooth"</li></string>
@@ -403,22 +411,22 @@
     <string name="reset_esim_desc" msgid="1437276625485586740">"Ձեր սակագնային պլանը չի չեղարկվի:"</string>
     <string name="reset_esim_error_title" msgid="7245109418130525492">"Չհաջողվեց վերակայել eSIM քարտերը"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Ընտրեք ցանց"</string>
-    <string name="reset_network_button_text" msgid="8374174455632765033">"Վերակայել կարգավորումները"</string>
+    <string name="reset_network_button_text" msgid="8374174455632765033">"Զրոյացնել կարգավորումները"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"Զրոյացնե՞լ կարգավորումները"</string>
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Զրոյացնե՞լ ցանցի բոլոր կարգավորումները: Այս գործողությունը հնարավոր չի լինի հետարկել:"</string>
-    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Վերակայել կարգավորումները"</string>
+    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Զրոյացնել կարգավորումները"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Ցանցի կարգավորումները վերակայվել են"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Վերակայել հավելվածների կարգավորումները"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Զրոյացնել հավելվածների կարգավորումները"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Հետևյալ կարգավորումները կզրոյանան՝\n\n"<li>"անջատված հավելվածները,"</li>\n<li>"հավելվածների անջատված ծանուցումները,"</li>\n<li>"կանխադրված հավելվածները,"</li>\n<li>"ֆոնային ռեժիմում տվյալների փոխանցման սահմանափակումները,"</li>\n<li>"թույլտվությունների բոլոր սահմանափակումները։"</li>\n\n"Հավելվածների տվյալները կպահպանվեն։"</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Վերակայել կարգավորումները"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Հավելվածների կարգավորումները վերակայվեցին"</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Զրոյացնել կարգավորումները"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Հավելվածների կարգավորումները զրոյացվեցին"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Ջնջել բոլոր տվյալները (գործ. վերակայում)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Մեքենայի գլխավոր վահանակից կջնջվեն բոլոր տվյալները, այդ թվում՝\n\n"<li>"Ձեր Google հաշիվը"</li>\n<li>"Համակարգի և հավելվածների տվյալներն ու կարգավորումները"</li>\n<li>"Ներբեռնված հավելվածները"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Դուք մտել եք հետևյալ հաշիվներ՝"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Այս մեքենայում այլ օգտատերեր կան:"</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Զրոյացնել կարգավորումները"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"Զրոյացնե՞լ"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Ջնջե՞լ բոլոր անձնական տեղեկությունները և ներբեռնված հավելվածները: Դուք այլևս չեք կարողանա հետարկել այս գործողությունը:"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Ջնջե՞լ բոլոր անձնական տեղեկությունները և ներբեռնված հավելվածները: Դուք չեք կարողանա հետարկել այս գործողությունը:"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Ջնջել ամեն ինչ"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Ջնջում"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Խնդրում ենք սպասել..."</string>
@@ -431,13 +439,13 @@
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24-ժամյա ձևաչափ"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"Օգտագործել 24-ժամյա ձևաչափը"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"Ժամ"</string>
-    <string name="date_time_set_time" msgid="6449555153906058248">"Սահմանել Ժամը"</string>
+    <string name="date_time_set_time" msgid="6449555153906058248">"Սահմանել ժամը"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Ժամային գոտի"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"Ընտրել ժամային գոտի"</string>
     <string name="date_time_set_date_title" msgid="6834785820357051138">"Ամսաթիվ"</string>
     <string name="date_time_set_date" msgid="2537494485643283230">"Սահմանել ամսաթիվը"</string>
-    <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Տեսակավորել ըստ այբուբենի"</string>
-    <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Տեսակավորել ըստ ժամային գոտու"</string>
+    <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Դասավորել ըստ այբուբենի"</string>
+    <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Դասավորել ըստ ժամային գոտու"</string>
     <string name="date_picker_title" msgid="1533614225273770178">"Ամսաթիվ"</string>
     <string name="time_picker_title" msgid="7436045944320504639">"Ժամանակ"</string>
     <string name="user_admin" msgid="1535484812908584809">"Ադմինիստրատոր"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Նախշը սխալ է"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Ինչպես ապակողպող նախշ գծել"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Չհաջողվեց պահել նախշը"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Չափից շատ սխալ փորձ է կատարվել։ Նորից փորձեք <xliff:g id="NUMBER">%d</xliff:g> վայրկյանից։"</string>
     <string name="okay" msgid="4589873324439764349">"Հաստատել"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Անջատե՞լ էկրանի կողպումը"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ցանկացած մարդ կկարողանա մտնել ձեր հաշիվ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 983c526..2bcdd61 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -70,7 +70,7 @@
     <string name="launch_manage_plan_text" msgid="906657488611815787">"Lihat paket"</string>
     <string name="app_data_usage" msgid="3878609885080232877">"Penggunaan kuota aplikasi"</string>
     <string name="data_usage_app_restricted" msgid="4570970078120010951">"terbatas"</string>
-    <string name="cycle_reset_day_of_month_picker_title" msgid="1374568502823735361">"Tanggal penyetelan ulang siklus penggunaan"</string>
+    <string name="cycle_reset_day_of_month_picker_title" msgid="1374568502823735361">"Tanggal peresetan siklus penggunaan"</string>
     <string name="cycle_reset_day_of_month_picker_subtitle" msgid="5361061448258189846">"Tanggal setiap bulannya:"</string>
     <string name="cycle_reset_day_of_month_picker_positive_button" msgid="6919858010423269305">"Setel"</string>
     <string name="data_warning_limit_title" msgid="4950868241810828601">"Peringatan &amp; batas data"</string>
@@ -90,9 +90,9 @@
     <string name="loading_wifi_list" msgid="8584901433195876465">"Memuat daftar Wi‑Fi"</string>
     <string name="wifi_disabled" msgid="5013262438128749950">"Wi-Fi dinonaktifkan"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Gagal melupakan jaringan"</string>
-    <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Gagal menyambung ke jaringan"</string>
+    <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Gagal menghubungkan ke jaringan"</string>
     <string name="wifi_setup_add_network" msgid="3660498520389954620">"Tambahkan jaringan"</string>
-    <string name="wifi_setup_connect" msgid="3512399573397979101">"Sambungkan"</string>
+    <string name="wifi_setup_connect" msgid="3512399573397979101">"Hubungkan"</string>
     <string name="wifi_password" msgid="5565632142720292397">"Sandi"</string>
     <string name="wifi_show_password" msgid="8423293211933521097">"Tampilkan sandi"</string>
     <string name="wifi_no_network_name" msgid="6819604337231313594">"Harap masukkan nama jaringan"</string>
@@ -152,17 +152,24 @@
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 GHz"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Pilih minimal satu band untuk hotspot Wi‑Fi:"</string>
     <string name="tether_settings_title_all" msgid="4663704772599383169">"Hotspot &amp; tethering"</string>
-    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Nonaktifkan hotspot secara otomatis"</string>
+    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Otomatis nonaktifkan hotspot"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Hotspot Wi-Fi akan dinonaktifkan jika tidak ada perangkat yang terhubung"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ingin mengaktifkan Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ingin menonaktifkan Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Perangkat yang digunakan dengan <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Perangkat tidak ditemukan. Pastikan perangkat dihidupkan dan dapat terhubung ke jaringan."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Coba lagi"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Ada masalah. Aplikasi telah membatalkan permintaan untuk memilih perangkat."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Koneksi berhasil"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Tampilkan semua"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Menelusuri"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Perangkat tanpa nama"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Perangkat yang tersambung"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Sambungkan perangkat baru"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth akan diaktifkan untuk menyambungkan"</string>
-    <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Putuskan sambungan perangkat?"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Hubungkan perangkat baru"</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth akan diaktifkan untuk menghubungkan"</string>
+    <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Putuskan hubungan perangkat?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Kendaraan Anda akan diputuskan sambungannya dari <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Alamat Bluetooth kendaraan: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Alamat Bluetooth perangkat: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
@@ -188,14 +195,14 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Kode penyambungan Bluetooth"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"PIN berisi huruf atau simbol"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Ketik kode penghubung, lalu tekan Kembali atau Enter"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Sambungkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Hubungkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"Izinkan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> mengakses kontak dan histori panggilan"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"Anda mungkin juga perlu mengetikkan PIN ini ke perangkat lain."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"Anda mungkin juga perlu mengetikkan kode sandi ini ke perangkat lain."</string>
     <string name="bluetooth_pin_values_hint_16_digits" msgid="418776900816984778">"Harus berisi 16 digit"</string>
     <string name="bluetooth_pin_values_hint" msgid="1561325817559141687">"Biasanya 0000 atau 1234"</string>
     <string name="bluetooth_notif_title" msgid="8374602799367803335">"Permintaan penyambungan"</string>
-    <string name="bluetooth_notif_message" msgid="1060821000510108726">"Ketuk untuk menyambungkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_notif_message" msgid="1060821000510108726">"Ketuk agar terhubung dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_device_picker" msgid="673238198452345475">"Pilih perangkat Bluetooth"</string>
     <string name="language_settings" msgid="2079258598337245546">"Bahasa"</string>
     <string name="languages_and_input_settings" msgid="3672322610529408248">"Bahasa &amp; masukan"</string>
@@ -206,9 +213,9 @@
     <string name="text_to_speech_settings" msgid="811985746199507343">"Keluaran text-to-speech"</string>
     <string name="text_to_speech_preferred_engine_settings" msgid="2766782925699132256">"Mesin yang dipilih"</string>
     <string name="text_to_speech_current_engine" msgid="8133107484909612597">"Mesin saat ini"</string>
-    <string name="tts_speech_rate" msgid="4512944877291943133">"Laju Bicara"</string>
+    <string name="tts_speech_rate" msgid="4512944877291943133">"Kecepatan Ucapan"</string>
     <string name="tts_pitch" msgid="2389171233852604923">"Tinggi nada"</string>
-    <string name="tts_reset" msgid="6289481549801844709">"Setel ulang"</string>
+    <string name="tts_reset" msgid="6289481549801844709">"Reset"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Suara"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Volume dering"</string>
     <string name="navi_volume_title" msgid="946292066759195165">"Volume navigasi"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Nada dering ponsel"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Suara notifikasi default"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Suara alarm default"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Simpan"</string>
     <string name="units_settings" msgid="402325305096925886">"Unit"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Kecepatan"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Jarak"</string>
@@ -276,11 +284,11 @@
     <string name="applications_settings" msgid="794261395191035632">"Info aplikasi"</string>
     <string name="force_stop" msgid="2153183697014720520">"Paksa berhenti"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Paksa berhenti?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Jika aplikasi dihentikan secara paksa, mungkin fungsinya akan terganggu."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Jika aplikasi dihentikan paksa, fungsinya mungkin akan terganggu."</string>
     <string name="disable_text" msgid="4358165448648990820">"Nonaktifkan"</string>
     <string name="enable_text" msgid="1794971777861881238">"Aktifkan"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Uninstal"</string>
-    <string name="app_disable_dialog_text" msgid="7731155411006654025">"Jika Anda menonaktifkan aplikasi ini, Android dan aplikasi lain mungkin tidak berfungsi lagi sesuai harapan."</string>
+    <string name="app_disable_dialog_text" msgid="7731155411006654025">"Jika aplikasi ini dinonaktifkan, Android dan aplikasi lain mungkin tidak berfungsi normal."</string>
     <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Nonaktifkan aplikasi"</string>
     <string name="not_installed" msgid="4218816013370552746">"Tidak diinstal untuk pengguna ini"</string>
     <string name="permissions_label" msgid="2701446753515612685">"Izin"</string>
@@ -305,7 +313,7 @@
     <string name="assist_access_screenshot_title" msgid="2855956879971465044">"Gunakan screenshot"</string>
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"Izinkan aplikasi bantuan mengakses gambar layar"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Masukan suara"</string>
-    <string name="autofill_settings_title" msgid="1188754272680049972">"Layanan IsiOtomatis"</string>
+    <string name="autofill_settings_title" msgid="1188754272680049972">"Layanan isi otomatis"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"Tidak Ada"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"Dipilih"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"Asisten dapat membaca informasi tentang aplikasi yang sedang digunakan di sistem, termasuk informasi yang terlihat di layar atau dapat diakses dalam aplikasi."</string>
@@ -393,8 +401,8 @@
     <string name="show_dev_already" msgid="1678087328973865736">"Tidak perlu, Anda sudah menjadi developer."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Opsi developer"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"Opsi reset"</string>
-    <string name="reset_options_summary" msgid="5508201367420359293">"Menyetel ulang jaringan, aplikasi, atau perangkat"</string>
-    <string name="reset_network_title" msgid="1284233059990797263">"Setel ulang jaringan"</string>
+    <string name="reset_options_summary" msgid="5508201367420359293">"Mereset jaringan, aplikasi, atau perangkat"</string>
+    <string name="reset_network_title" msgid="1284233059990797263">"Reset jaringan"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"Tindakan ini akan menyetel ulang semua setelan jaringan, termasuk:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi‑Fi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Kuota"</li></string>
@@ -403,21 +411,21 @@
     <string name="reset_esim_desc" msgid="1437276625485586740">"Tindakan ini tidak akan membatalkan paket layanan Anda."</string>
     <string name="reset_esim_error_title" msgid="7245109418130525492">"Tidak dapat menyetel ulang eSIM"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Pilih jaringan"</string>
-    <string name="reset_network_button_text" msgid="8374174455632765033">"Setel ulang setelan"</string>
-    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Setel ulang?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Setel ulang semua setelan jaringan? Tindakan ini tidak dapat diurungkan!"</string>
-    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Setel ulang setelan"</string>
-    <string name="reset_network_complete_toast" msgid="3804108209431416865">"Setelan jaringan telah disetel ulang"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Setel ulang preferensi aplikasi"</string>
+    <string name="reset_network_button_text" msgid="8374174455632765033">"Reset setelan"</string>
+    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Reset?"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reset semua setelan jaringan? Tindakan ini tidak dapat diurungkan!"</string>
+    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Reset setelan"</string>
+    <string name="reset_network_complete_toast" msgid="3804108209431416865">"Setelan jaringan telah direset"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Reset preferensi aplikasi"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Tindakan ini akan menyetel ulang semua preferensi untuk:\n\n"<li>"Aplikasi yang dinonaktifkan"</li>\n<li>"Notifikasi aplikasi yang dinonaktifkan"</li>\n<li>"Aplikasi default untuk tindakan"</li>\n<li>"Batasan data latar belakang untuk aplikasi"</li>\n<li>"Batasan izin apa pun"</li>\n\n"Data aplikasi Anda tidak akan hilang."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Setel ulang aplikasi"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Preferensi aplikasi telah disetel ulang"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Hapus semua (reset ke setelan pabrik)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Tindakan ini akan menghapus semua data dari head unit kendaraan, termasuk:\n\n"<li>"Akun Google Anda"</li>\n<li>"Data sistem dan aplikasi serta setelan"</li>\n<li>"Aplikasi yang diunduh"</li></string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Reset aplikasi"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Preferensi aplikasi telah direset"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Hapus semua (kembali ke setelan pabrik)"</string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Tindakan ini akan menghapus semua data dari head unit kendaraan, termasuk:\n\n"<li>"Akun Google Anda"</li>\n<li>"Data dan setelan sistem dan aplikasi"</li>\n<li>"Aplikasi yang didownload"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Saat ini Anda telah login ke akun berikut:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Ada pengguna lain yang aktif di kendaraan ini."</string>
-    <string name="master_clear_button_text" msgid="8010754220392741160">"Setel ulang kendaraan"</string>
-    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Setel ulang?"</string>
+    <string name="master_clear_button_text" msgid="8010754220392741160">"Reset kendaraan"</string>
+    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Reset?"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Hapus semua informasi pribadi dan aplikasi yang didownload? Tindakan ini tidak dapat diurungkan!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Hapus semua"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Menghapus"</string>
@@ -444,7 +452,7 @@
     <string name="signed_in_admin_user" msgid="1267225622818673274">"Sedang login admin"</string>
     <string name="grant_admin_permissions_title" msgid="4628430467359951437">"Semua izin admin"</string>
     <string name="grant_admin_permissions_button_text" msgid="988239414372882401">"Jadikan Admin"</string>
-    <string name="grant_admin_permissions_message" msgid="1751910369004774830">"Pengguna dapat menghapus pengguna, termasuk Admin lain, dan me-reset sistem ke setelan pabrik."</string>
+    <string name="grant_admin_permissions_message" msgid="1751910369004774830">"Pengguna dapat menghapus pengguna lain, termasuk Admin lain, dan mengembalikan sistem ke setelan pabrik."</string>
     <string name="action_not_reversible_message" msgid="740401337875726973">"Tindakan ini tidak dapat dibatalkan."</string>
     <string name="confirm_grant_admin" msgid="7852596890218647682">"Ya, jadikan admin"</string>
     <string name="create_user_permission_title" msgid="7781550880565935298">"Membuat pengguna baru"</string>
@@ -455,7 +463,7 @@
     <string name="user_add_user_menu" msgid="5319151436895941496">"Tambahkan pengguna"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Pengguna baru"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Tambahkan pengguna baru?"</string>
-    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Saat Anda menambahkan pengguna baru, orang tersebut perlu menyiapkan ruang mereka sendiri."</string>
+    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Jika ditambahkan, pengguna baru harus menyiapkan ruangnya sendiri."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"Setiap pengguna dapat mengupdate aplikasi untuk semua pengguna lain."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Batas pengguna tercapai"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
@@ -509,7 +517,7 @@
     <string name="no_accounts_added" msgid="5148163140691096055">"Tidak ada akun yang ditambahkan"</string>
     <string name="account_list_title" msgid="7631588514613843065">"Akun untuk <xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g>"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Otomatis sinkronkan data"</string>
-    <string name="account_auto_sync_summary" msgid="6963837893148304128">"Izinkan aplikasi memuat ulang data secara otomatis"</string>
+    <string name="account_auto_sync_summary" msgid="6963837893148304128">"Izinkan aplikasi otomatis memuat ulang data"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Aktifkan sinkronisasi data otomatis?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Perubahan apa pun yang dilakukan pada akun Anda di web akan disalin ke perangkat secara otomatis.\n\nBeberapa akun juga dapat otomatis menyalin setiap perubahan yang dilakukan di ponsel ke web. Akun Google mengikuti cara kerja tersebut."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"Nonaktifkan sinkronisasi data otomatis?"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Pola salah"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Cara menggambar pola pembuka kunci"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Error saat menyimpan pola"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Terlalu banyak kesalahan pola. Coba kembali dalam <xliff:g id="NUMBER">%d</xliff:g> detik."</string>
     <string name="okay" msgid="4589873324439764349">"Oke"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Hapus kunci layar?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tindakan ini akan mengizinkan siapa pun mengakses akun Anda"</string>
@@ -643,7 +652,7 @@
     <string name="enter_key" msgid="2121394305541579468">"Tombol enter"</string>
     <string name="exit_retail_button_text" msgid="6093240315583384473">"Keluar dari Demo"</string>
     <string name="exit_retail_mode_dialog_title" msgid="7970631760237469168">"Keluar dari mode demo"</string>
-    <string name="exit_retail_mode_dialog_body" msgid="8314316171782527301">"Tindakan ini akan menghapus akun demo dan mereset sistem ke setelan pabrik. Semua data pengguna akan hilang."</string>
+    <string name="exit_retail_mode_dialog_body" msgid="8314316171782527301">"Tindakan ini akan menghapus akun demo dan mengembalikan sistem ke setelan pabrik. Semua data pengguna akan hilang."</string>
     <string name="exit_retail_mode_dialog_confirmation_button_text" msgid="3147249675355968649">"Keluar dari Demo"</string>
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"TOLAK"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"Fitur tidak tersedia saat mengemudi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 18e9268..0f97267 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> vill kveikja á Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> vill slökkva á Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Villa"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Tæki sem á að nota með <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Engin tæki fundust. Gakktu úr skugga um að kveikt sé á tækjunum og að hægt sé að tengjast við þau."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Reyna aftur"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Eitthvað kom upp. Forritið hætti við beiðnina til að velja tæki."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Tenging tókst"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Sýna allar"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Leitar"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Ónefnt tæki"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Pöruð tæki"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Hringitónn síma"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Sjálfgefið hljóð tilkynninga"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Sjálfgefið hljóð í vekjara"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Vista"</string>
     <string name="units_settings" msgid="402325305096925886">"Mælieining"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hraði"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Vegalengd"</string>
@@ -272,7 +280,7 @@
     <string name="all_applications" msgid="7798210477486822168">"Sýna öll forrit"</string>
     <string name="default_applications" msgid="1558183275638697087">"Sjálfgefin forrit"</string>
     <string name="app_permissions" msgid="32799922508313948">"Heimildir forrits"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Forrit sem nota <xliff:g id="APPS">%1$s</xliff:g>"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Forrit sem nota heimildirnar: <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Upplýsingar um forrit"</string>
     <string name="force_stop" msgid="2153183697014720520">"Þvinga lokun"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Þvinga fram lokun?"</string>
@@ -435,7 +443,7 @@
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Tímabelti"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"Velja tímabelti"</string>
     <string name="date_time_set_date_title" msgid="6834785820357051138">"Dagsetning"</string>
-    <string name="date_time_set_date" msgid="2537494485643283230">"Veldu dagsetningu"</string>
+    <string name="date_time_set_date" msgid="2537494485643283230">"Velja dagsetningu"</string>
     <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Raða í stafrófsröð"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Raða eftir tímabelti"</string>
     <string name="date_picker_title" msgid="1533614225273770178">"Dagsetning"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Rangt mynstur"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Hvernig opnunarmynstur er teiknað"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Villa við að vista mynstur"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Of margar misheppnaðar tilraunir. Reyndu aftur eftir <xliff:g id="NUMBER">%d</xliff:g> sekúndur."</string>
     <string name="okay" msgid="4589873324439764349">"Í lagi"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Viltu fjarlægja skjálás?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Þetta gefur hverjum sem er aðgang að reikningnum þínum"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index be5bc4f..1cc29af 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -92,7 +92,7 @@
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Eliminazione delle rete non riuscita"</string>
     <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Conessione alla rete non riuscita"</string>
     <string name="wifi_setup_add_network" msgid="3660498520389954620">"Aggiungi rete"</string>
-    <string name="wifi_setup_connect" msgid="3512399573397979101">"Collega"</string>
+    <string name="wifi_setup_connect" msgid="3512399573397979101">"Connetti"</string>
     <string name="wifi_password" msgid="5565632142720292397">"Password"</string>
     <string name="wifi_show_password" msgid="8423293211933521097">"Mostra password"</string>
     <string name="wifi_no_network_name" msgid="6819604337231313594">"Inserisci il nome di una rete"</string>
@@ -157,13 +157,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> chiede di attivare il Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> chiede di disattivare il Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Errore"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo da usare con <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nessun dispositivo trovato. Assicurati che i dispositivi siano accesi e disponibili per la connessione."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Riprova"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Si è verificato un problema. L\'applicazione ha annullato la richiesta di scegliere un dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Connessione riuscita"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostra tutte"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Ricerca"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo senza nome"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivi accoppiati"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Accoppia nuovo dispositivo"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Il Bluetooth verrà attivato per consentire l\'accoppiamento"</string>
-    <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Scollegare il dispositivo?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Il veicolo verrà scollegato dal dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Disconnettere il dispositivo?"</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Il veicolo verrà disconnesso da <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Indirizzo Bluetooth del veicolo: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Indirizzo Bluetooth del dispositivo: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"Nome del veicolo"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Suoneria telefono"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Suono di notifica predefinito"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Suono sveglia predefinito"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Salva"</string>
     <string name="units_settings" msgid="402325305096925886">"Unità"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocità"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distanza"</string>
@@ -289,7 +297,7 @@
     <string name="application_version_label" msgid="8556889839783311649">"Versione: %1$s"</string>
     <string name="runtime_permissions_summary_no_permissions_granted" msgid="6001439205270250021">"Nessuna autorizzazione concessa"</string>
     <string name="runtime_permissions_summary_no_permissions_requested" msgid="4074220596273432442">"Nessuna autorizzazione richiesta"</string>
-    <string name="storage_type_internal" msgid="8918688427078709570">"%s in memoria interna"</string>
+    <string name="storage_type_internal" msgid="8918688427078709570">"%s nella memoria interna"</string>
     <string name="data_usage_summary_title" msgid="4368024763485916986">"Utilizzo dei dati"</string>
     <string name="data_usage_app_summary_title" msgid="5012851696585421420">"Utilizzo dati dell\'app"</string>
     <string name="computing_size" msgid="5791407621793083965">"Elaborazione…"</string>
@@ -404,14 +412,14 @@
     <string name="reset_esim_error_title" msgid="7245109418130525492">"Impossibile reimpostare le eSIM"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Seleziona rete"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"Reimposta impostazioni"</string>
-    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Reimpostare?"</string>
+    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Vuoi reimpostare?"</string>
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Reimpostare tutte le impostazioni di rete? Questa azione è irreversibile."</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Reimposta impostazioni"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Le impostazioni di rete sono state reimpostate"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Reimposta preferenze app"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Verranno reimpostate tutte le preferenze relative a:\n\n"<li>"App disattivate"</li>\n<li>"Notifiche di app disattivate"</li>\n<li>"Applicazioni predefinite per azioni"</li>\n<li>"Limitazioni di dati in background per app"</li>\n<li>"Eventuali limitazioni di autorizzazione"</li>\n\n"Non perderai i dati delle app."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Verranno reimpostate tutte le preferenze relative a:\n\n"<li>"App disattivate"</li>\n<li>"Notifiche di app disattivate"</li>\n<li>"Applicazioni predefinite per le azioni"</li>\n<li>"Limitazioni di dati in background per le app"</li>\n<li>"Eventuali limitazioni delle autorizzazioni"</li>\n\n"Non perderai i dati delle app."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Reimposta app"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Le preferenze dell\'app sono state reimpostate"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Le preferenze per le app sono state reimpostate"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Cancella tutti i dati"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Tutti i dati verranno cancellati dall\'unità principale del veicolo, inclusi:\n\n"<li>"Il tuo Account Google"</li>\n<li>"Le impostazioni e i dati di sistema e delle app"</li>\n<li>"Le app scaricate"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Al momento sono collegati i seguenti account:"</string>
@@ -490,7 +498,7 @@
     <string name="storage_other_apps" msgid="945509804756782640">"Altre app"</string>
     <string name="storage_files" msgid="6382081694781340364">"File"</string>
     <string name="storage_system" msgid="1271345630248014010">"Sistema"</string>
-    <string name="storage_detail_dialog_system" msgid="796365720531622361">"Il sistema include i file utilizzati per eseguire la versione Android <xliff:g id="VERSION">%s</xliff:g>"</string>
+    <string name="storage_detail_dialog_system" msgid="796365720531622361">"Il sistema include i file utilizzati per eseguire Android versione <xliff:g id="VERSION">%s</xliff:g>"</string>
     <string name="storage_audio_files_title" msgid="5183170457027181700">"File audio"</string>
     <string name="memory_calculating_size" msgid="1672238502950390033">"Calcolo…"</string>
     <string name="storage_application_size_label" msgid="1146156683170661354">"Dimensioni app"</string>
@@ -542,14 +550,14 @@
     <string name="security_lock_pattern" msgid="1174352995619563104">"Sequenza"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Password"</string>
-    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Scegli tipo di blocco"</string>
+    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Scegli un tipo di blocco"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"Opzioni di blocco"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Inserisci la sequenza"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Conferma"</string>
     <string name="lockpattern_restart_button_text" msgid="9355771277617537">"Ricrea"</string>
     <string name="continue_button_text" msgid="5129979170426836641">"Continua"</string>
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Riprova"</string>
-    <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Ignora"</string>
+    <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Salta"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Imposta un blocco schermo"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Scegli il PIN"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Scegli la tua sequenza"</string>
@@ -559,7 +567,7 @@
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Cancella"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Annulla"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Nuova sequenza di sblocco"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Imposta una sequenza di sblocco"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Inserisci una sequenza di sblocco"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Solleva il dito al termine"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Sequenza registrata"</string>
     <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Ripeti la sequenza per confermare"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Sequenza errata"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Come creare una sequenza di sblocco"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Errore di salvataggio della sequenza"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Troppi tentativi errati. Riprova tra <xliff:g id="NUMBER">%d</xliff:g> secondi."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Rimuovere il blocco schermo?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"In questo modo chiunque potrà accedere al tuo dispositivo"</string>
@@ -574,7 +583,7 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Inserisci la password"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Per sicurezza, imposta un PIN"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"Inserisci di nuovo il PIN"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"Il PIN deve avere almeno quattro cifre"</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"Deve essere di almeno quattro cifre"</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"PIN non valido: deve avere almeno quattro cifre."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"I PIN non corrispondono"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"Errore di salvataggio del PIN"</string>
@@ -638,7 +647,7 @@
     <string name="remove_button" msgid="6664656962868194178">"Rimuovi"</string>
     <string name="cancel" msgid="750286395700355455">"Annulla"</string>
     <string name="allow" msgid="7519431342750394402">"Consenti"</string>
-    <string name="deny" msgid="340512788979930804">"Nega"</string>
+    <string name="deny" msgid="340512788979930804">"Rifiuta"</string>
     <string name="backspace_key" msgid="1545590866688979099">"Tasto Backspace"</string>
     <string name="enter_key" msgid="2121394305541579468">"Inserisci il codice"</string>
     <string name="exit_retail_button_text" msgid="6093240315583384473">"Chiudi demo"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index b1773f5..bbff3b8 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -84,7 +84,7 @@
     <string name="set_data_limit" msgid="7136539812414500084">"הגדרת מגבלת נתונים"</string>
     <string name="data_limit" msgid="227338836292511425">"מגבלת נתונים"</string>
     <string name="data_usage_limit_dialog_title" msgid="1864716658371721883">"הגבלת שימוש בחבילת הגלישה"</string>
-    <string name="data_usage_limit_dialog_mobile" msgid="3633960011913085089">"כשיחידת הראש ברכב תגיע למגבלה שהגדרת, היא תשבית את חבילת הגלישה.\n\nמכיוון שעשויים להיות הבדלים בין השימוש בחבילת הגלישה שנמדד על ידי יחידת הראש לבין השימוש שנמדד על ידי הספק, מומלץ להגדיר מגבלה סבירה."</string>
+    <string name="data_usage_limit_dialog_mobile" msgid="3633960011913085089">"כשהיחידה הראשית ברכב תגיע למגבלה שהגדרת, היא תשבית את חבילת הגלישה.\n\nמכיוון שעשויים להיות הבדלים בין השימוש בחבילת הגלישה שנמדד על ידי היחידה הראשית לבין השימוש שנמדד על ידי הספק, מומלץ להגדיר מגבלה סבירה."</string>
     <string name="data_usage_warning_editor_title" msgid="2041517150169038813">"הגדרת אזהרה לגבי שימוש בחבילת הגלישה"</string>
     <string name="data_usage_limit_editor_title" msgid="133468242379286689">"מגבלה לשימוש בחבילת הגלישה"</string>
     <string name="usage_bytes_threshold_picker_positive_button" msgid="4625479840977965519">"הגדרה"</string>
@@ -161,13 +161,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> רוצה להפעיל את ה-Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> רוצה לכבות את ה-Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"שגיאה"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"מכשיר לשימוש עם <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"לא נמצאו מכשירים. יש לוודא שהמכשירים פועלים וזמינים לחיבור."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"לניסיון חוזר"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"משהו קרה. האפליקציה ביטלה את הבקשה לבחירת מכשיר."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"החיבור הצליח"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"הצגת הכול"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"מחפש"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"מכשיר ללא שם"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"מכשירים מותאמים"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"התאמה של מכשיר חדש"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth יופעל לצורך התאמה"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"לנתק את המכשיר?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"יתבצע ניתוק של הרכב מ-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"הרכב יתנתק מ-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"כתובת ה-Bluetooth של הרכב: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"כתובת המכשיר לחיבור דרך Bluetooth: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"שם הרכב"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"רינגטון לשיחת טלפון"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"צליל ברירת מחדל להתראות"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"צליל ברירת מחדל לשעון מעורר"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"שמירה"</string>
     <string name="units_settings" msgid="402325305096925886">"יחידות"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"מהירות"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"מרחק"</string>
@@ -314,7 +322,7 @@
     <string name="autofill_settings_title" msgid="1188754272680049972">"שירות מילוי אוטומטי"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"ללא"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"נבחרה"</string>
-    <string name="assistant_security_warning" msgid="1844807956967428012">"ה-Assistant יוכל לקרוא מידע על אפליקציות שבהן נעשה שימוש במערכת שלך, כולל מידע המופיע במסך או שניתן לגשת אליו באפליקציות."</string>
+    <string name="assistant_security_warning" msgid="1844807956967428012">"Assistant תוכל לקרוא מידע על אפליקציות שבהן נעשה שימוש במערכת שלך, כולל מידע המופיע במסך או שניתן לגשת אליו באפליקציות."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;יש לוודא שהאפליקציה מהימנה&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=המילוי האוטומטי של Google&gt;%1$s&lt;/xliff:g&gt; משתמש בתוכן המסך כדי לקבוע אילו שדות אפשר למלא באופן אוטומטי."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"הוספת שירות"</string>
     <string name="app_launch_domain_links_title" msgid="774480184927726651">"פתיחת קישורים"</string>
@@ -421,7 +429,7 @@
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"איפוס אפליקציות"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"העדפות האפליקציה אופסו"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"מחיקת כל הנתונים (איפוס להגדרות היצרן)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"פעולה זו תמחק את כל הנתונים מיחידת הראש של הרכב שלך, כולל:\n\n"<li>"חשבון Google שלך"</li>\n<li>"נתוני מערכת ואפליקציות והגדרות"</li>\n<li>"אפליקציות שהורדו"</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"פעולה זו תמחק את כל הנתונים מהיחידה הראשית של הרכב שלך, כולל:\n\n"<li>"חשבון Google שלך"</li>\n<li>"נתוני מערכת ואפליקציות והגדרות"</li>\n<li>"אפליקציות שהורדו"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"יש לך חיבור פעיל כרגע אל החשבונות הבאים:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"קיימים משתמשים נוספים ברכב זה."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"איפוס הרכב"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"קו ביטול נעילה שגוי"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"כיצד לשרטט קו ביטול נעילה"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"שגיאה בשמירה של קו ביטול הנעילה"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"יותר מדי ניסיונות שגויים. ניתן לנסות שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות."</string>
     <string name="okay" msgid="4589873324439764349">"אישור"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"להסיר את נעילת המסך?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"פעולה זו תאפשר לכל אחד לגשת לחשבון שלך"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 9128a89..e35ce5a 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"「<xliff:g id="REQUESTER">%s</xliff:g>」が Wi-Fi を ON にしようとしています"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"「<xliff:g id="REQUESTER">%s</xliff:g>」が Wi-Fi を OFF にしようとしています"</string>
     <string name="wifi_error" msgid="3105105447117289410">"エラー"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> で使用するデバイス"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"デバイスが見つかりません。デバイスの電源が入っており、接続が可能であることを確認してください。"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"再試行"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"エラーが発生しました。アプリはデバイス選択リクエストをキャンセルしました。"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"接続しました"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"すべて表示"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"検索中"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"名前のないデバイス"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ペア設定済みのデバイス"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"着信音"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"デフォルトの通知音"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"デフォルトのアラーム音"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"保存"</string>
     <string name="units_settings" msgid="402325305096925886">"単位"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"速度"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"距離"</string>
@@ -333,7 +341,7 @@
     <string name="modify_system_settings_description" msgid="5295023124419592452">"この権限により、アプリはシステム設定を変更できるようになります。"</string>
     <string name="notification_access_title" msgid="1467340098885813473">"通知へのアクセス"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"通知へのアクセス を <xliff:g id="SERVICE">%1$s</xliff:g> に許可しますか?"</string>
-    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> はすべての通知を読み取ることができます。通知には、連絡先名などの個人情報や受信したメッセージの本文も含まれます。また、通知を非表示にしたり、通知内のボタン操作を実行したりすることもできます。\n\nこれにより、アプリがサイレント モード設定を切り替えたり、関連する設定を変更したりすることも可能になります。"</string>
+    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> がすべての通知を読み取れるようになります。通知には、連絡先名などの個人情報や受信したメッセージの本文も含まれます。また、通知を非表示にしたり、通知内の操作ボタンをタップしたりすることも許可されます。\n\nこれにより、アプリがサイレント モード設定を切り替えたり、関連する設定を変更したりすることも可能になります。"</string>
     <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> の通知アクセスを無効にすると、サイレント モードのアクセスも無効になります。"</string>
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"無効にする"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"キャンセル"</string>
@@ -386,11 +394,11 @@
     <string name="settings_license_activity_unavailable" msgid="6104592821991010350">"ライセンスの読み込み中に問題が発生しました。"</string>
     <string name="settings_license_activity_loading" msgid="6163263123009681841">"読み込んでいます…"</string>
     <plurals name="show_dev_countdown" formatted="false" msgid="2968627665608969405">
-      <item quantity="other">デベロッパー設定が有効になるまであと <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> ステップです。</item>
-      <item quantity="one">デベロッパー設定が有効になるまであと <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> ステップです。</item>
+      <item quantity="other">開発者向けオプションが有効になるまであと <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> 回です。</item>
+      <item quantity="one">開発者向けオプションが有効になるまであと <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> 回です</item>
     </plurals>
-    <string name="show_dev_on" msgid="5339077400040834808">"デベロッパー設定が有効になりました!"</string>
-    <string name="show_dev_already" msgid="1678087328973865736">"デベロッパー設定はすでに有効です。"</string>
+    <string name="show_dev_on" msgid="5339077400040834808">"開発者向けオプションが有効になりました"</string>
+    <string name="show_dev_already" msgid="1678087328973865736">"開発者向けオプションはすでに有効です"</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"開発者向けオプション"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"リセット オプション"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"ネットワーク、アプリ、デバイスのリセット"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"パターンが間違っています"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ロック解除パターンの描き方"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"パターンの保存中にエラーが発生しました"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"間違えた回数が上限を超えました。<xliff:g id="NUMBER">%d</xliff:g> 秒後にもう一度お試しください。"</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"画面ロックを解除しますか?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"解除すると、誰でもアカウントにアクセスできるようになります"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 08d36e0..ce3b44f 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>-ს სურს, ჩართოს Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>-ს სურს, გამორთოს Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"შეცდომა"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g>-თან გამოსაყენებელი მოწყობილობა"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"მოწყობილობები ვერ მოიძებნა. დარწმუნდით, რომ მოწყობილობები ჩართულია და ხელმისაწვდომია დასაკავშირებლად."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ხელახლა ცდა"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"წარმოიქმნა შეფერხება. აპლიკაციამ გააუქმა მოწყობილობის არჩევის მოთხოვნა."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"წარმატებით დაკავშირდა"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ყველას ჩვენება"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"მიმდინარეობს ძიება"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"უსახელო მოწყობილობა"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"დაწყვილებული მოწყობილობები"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ტელეფონის ზარი"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"შეტყობინების ნაგულისხმევი ხმა"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"მაღვიძარას ნაგულ. ხმა"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"შენახვა"</string>
     <string name="units_settings" msgid="402325305096925886">"ერთეულები"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"სიჩქარე"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"მანძილი"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ნიმუში არასწორია"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"როგორ დახაზოთ განბლოკვის გრაფიკული გასაღები"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ნიმუშის შენახვისას მოხდა შეცდომა"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"დაფიქსირდა მეტისმეტად ბევრი არასწორი მცდელობა. ცადეთ ხელახლა <xliff:g id="NUMBER">%d</xliff:g> წამში."</string>
     <string name="okay" msgid="4589873324439764349">"კარგი"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"გაუქმდეს ეკრანის დაბლოკვა?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ეს ქმედება ხელმისაწვდომს გახდის თქვენს ანგარიშს ყველასთვის"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 0c1782b..d92d44c 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -91,7 +91,7 @@
     <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi өшірулі"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Желі өшірілмеді"</string>
     <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Желіге қосылмады"</string>
-    <string name="wifi_setup_add_network" msgid="3660498520389954620">"Желіні енгізу"</string>
+    <string name="wifi_setup_add_network" msgid="3660498520389954620">"Желі қосу"</string>
     <string name="wifi_setup_connect" msgid="3512399573397979101">"Қосылу"</string>
     <string name="wifi_password" msgid="5565632142720292397">"Құпия сөз"</string>
     <string name="wifi_show_password" msgid="8423293211933521097">"Құпия сөзді көрсету"</string>
@@ -105,7 +105,7 @@
     <string name="wifi_frequency" msgid="8951455949682864922">"Жиілік"</string>
     <string name="wifi_ip_address" msgid="3128140627890954061">"IP мекенжайы"</string>
     <string name="show_password" msgid="2074628020371139240">"Құпия сөзді көрсету"</string>
-    <string name="default_network_name_summary" msgid="8148402439232464276">"Желі атауын енгізу"</string>
+    <string name="default_network_name_summary" msgid="8148402439232464276">"Желі атауын енгізіңіз."</string>
     <string name="default_password_summary" msgid="8789594645836902982">"Құпия сөзді енгізу"</string>
     <string name="access_point_tag_key" msgid="1517143378973053337">"access_point_tag_key"</string>
   <string-array name="wifi_signals">
@@ -157,11 +157,18 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi байланысын қосқысы келеді."</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi байланысын өшіргісі келеді."</string>
     <string name="wifi_error" msgid="3105105447117289410">"Қате"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасымен пайдаланылатын құрылғы"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Ешбір құрылғы табылмады. Құрылғылардың қосулы екенін, оларды жалғауға болатынын тексеріңіз."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Қайталау"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Байланыс қатесі шықты. Қолданба құрылғыны таңдау сұрауынан бас тартты."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Байланыс орнатылды."</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Барлығын көрсету"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Іздеуде..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Атаусыз құрылғы"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Жұпталған құрылғылар"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Жаңа құрылғыны жұптау"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Жұптау үшін Bluetooth функциясы қосылады"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Жаңа құрылғымен жұптау"</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Жұптау үшін Bluetooth функциясы қосылады."</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Құрылғы ажыратылсын ба?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Көлігіңіз <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысынан ажыратылады."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Көліктің Bluetooth мекенжайы: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
@@ -198,7 +205,7 @@
     <string name="bluetooth_notif_message" msgid="1060821000510108726">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысымен жұптау үшін түртіңіз."</string>
     <string name="bluetooth_device_picker" msgid="673238198452345475">"Bluetooth құрылғысын таңдау"</string>
     <string name="language_settings" msgid="2079258598337245546">"Тілдер"</string>
-    <string name="languages_and_input_settings" msgid="3672322610529408248">"Тілдер және кіріс"</string>
+    <string name="languages_and_input_settings" msgid="3672322610529408248">"Тілдер және енгізу"</string>
     <string name="language_picker_list_suggested_header" msgid="7593893806003415948">"Ұсынылған"</string>
     <string name="language_picker_list_all_header" msgid="1577387973934368428">"Барлық тілдер"</string>
     <string name="keyboard_settings" msgid="1959697870618278081">"Пернетақта"</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"Қалпына келтіру"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Дыбыс"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Қоңыраудың дыбыс деңгейі"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Навигациялау дыбысының қаттылығы"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Навигация кезіндегі дыбыс деңгейі"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Қоңырау әуені"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Хабарландыру"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Meдиа"</string>
@@ -219,7 +226,8 @@
     <string name="alarm_volume_title" msgid="840384014895796587">"Дабыл"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"Телефон рингтоны"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Әдепкі хабарландыру дыбысы"</string>
-    <string name="alarm_ringtone_title" msgid="3257364170646440908">"Әдепкі дабыл сигналы"</string>
+    <string name="alarm_ringtone_title" msgid="3257364170646440908">"Әдепкі оятқыш сигналы"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Сақтау"</string>
     <string name="units_settings" msgid="402325305096925886">"Өлшем бірліктер"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Жылдамдық"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Арақашықтық"</string>
@@ -272,11 +280,11 @@
     <string name="all_applications" msgid="7798210477486822168">"Барлық қолданбаларды көрсету"</string>
     <string name="default_applications" msgid="1558183275638697087">"Әдепкі қолданбалар"</string>
     <string name="app_permissions" msgid="32799922508313948">"Қолданба рұқсаттары"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"<xliff:g id="APPS">%1$s</xliff:g> қолданбасын пайдаланып жатқан қолданбалар"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Рұқсаты бар қолданбалар: <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Қолданба ақпараты"</string>
     <string name="force_stop" msgid="2153183697014720520">"Қолмен тоқтату"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Қолмен тоқтатылсын ба?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Егер қолданбаны күштеп тоқтату оның жұмысына кері әсерін тигізуі мүмкін."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Қолданбаны қолмен тоқтату оның жұмысына кері әсерін тигізуі мүмкін."</string>
     <string name="disable_text" msgid="4358165448648990820">"Өшіру"</string>
     <string name="enable_text" msgid="1794971777861881238">"Қосу"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Жою"</string>
@@ -333,8 +341,8 @@
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Бұл рұқсат қолданбаға жүйе параметрлерін өзгертуге рұқсат етеді."</string>
     <string name="notification_access_title" msgid="1467340098885813473">"Хабарландыруларды пайдалану"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"<xliff:g id="SERVICE">%1$s</xliff:g> қызметіне хабарландыруларды пайдалануға рұқсат берілсін бе?"</string>
-    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> барлық хабарландыруларды, соның ішінде контакт аттары, сізге келген хабарлардың мәтіні сияқты жеке ақпаратты оқи алатын болады. Сондай-ақ хабарландыруларды өзгерте, жаба немесе олардағы әрекет түймелерін қоса алады. \n\nБұл, сондай-ақ қолданбаға \"Мазаламау\" режимін қосуға немесе өшіруге және тиісті параметрлерді өзгертуге мүмкіндік береді."</string>
-    <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"Егер <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> үшін хабарландыруларды пайдалану мүмкіндігін өшірсеңіз, \"Мазаламау\" режимін пайдалану мүмкін болмайды."</string>
+    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> барлық хабарландыруларды, соның ішінде контакт аттары, сізге келген хабарлардың мәтіні сияқты жеке ақпаратты оқи алатын болады. Сондай-ақ хабарландыруларды өзгерте, жаба немесе олардағы әрекет түймелерін қоса алады. \n\nБұл, сондай-ақ қолданбаға Мазаламау режимін қосуға немесе өшіруге және тиісті параметрлерді өзгертуге мүмкіндік береді."</string>
+    <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"Егер <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> үшін хабарландыруларды пайдалану мүмкіндігін өшірсеңіз, Мазаламау режимін пайдалану мүмкін болмайды."</string>
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"Өшіру"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"Бас тарту"</string>
     <string name="premium_sms_access_title" msgid="1409118461646148686">"Ақылы SMS жіберу"</string>
@@ -344,8 +352,8 @@
     <string name="wifi_control_title" msgid="5660436566907731929">"Wi-Fi желісін басқару"</string>
     <string name="wifi_control_description" msgid="6021926850423169261">"Wi-Fi желісін басқару функциясы қолданбаға Wi-Fi желісін қосуға немесе өшіруге, Wi-Fi желілерін іздеуге және оларға жалғануға, желілерді енгізуге не өшіруге немесе тек жергілікті хотспотты іске қосуға рұқсат етеді."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Тағы"</string>
-    <string name="location_settings_title" msgid="901334356682423679">"Орналасқан жер"</string>
-    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Жақында жасалған орналасқан жерді анықтау сұраулары"</string>
+    <string name="location_settings_title" msgid="901334356682423679">"Орналасу"</string>
+    <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Соңғы орынды анықтау сұраулары"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"Орналасқан жерді анықтау сұраулары жақында жасалмаған"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Қолданба деңгейіндегі рұқсаттар"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Орынды анықтау қызметтері"</string>
@@ -364,7 +372,7 @@
     <string name="device_status" msgid="267298179806290920">"Күйі"</string>
     <string name="device_status_summary" product="tablet" msgid="600543254608862075">"Батарея күйі, желі және басқа ақпарат"</string>
     <string name="device_status_summary" product="default" msgid="9130360324418117815">"Телефон нөмірі, сигнал, т.б."</string>
-    <string name="about_settings" msgid="4329457966672592345">"Мәліметтер"</string>
+    <string name="about_settings" msgid="4329457966672592345">"Телефон туралы"</string>
     <string name="about_summary" msgid="5374623866267691206">"Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="about_settings_summary" msgid="7975072809083281401">"Құқықтық ақпаратын, күйін, бағдарламалық жасақтама нұсқасын көру"</string>
     <string name="legal_information" msgid="1838443759229784762">"Құқықтық ақпарат"</string>
@@ -392,7 +400,7 @@
     <string name="show_dev_on" msgid="5339077400040834808">"Енді сіз әзірлеушісіз!"</string>
     <string name="show_dev_already" msgid="1678087328973865736">"Қажет емес, сіз енді әзірлеушісіз."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Әзірлеуші опциялары"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"Опцияларды қайтару"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"Бастапқы күйге қайтару"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Желі, қолданбалар және құрылғы параметрлерін қайтару"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Желіні бастапқы күйге қайтару"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"Келесілерді қоса, барлық желі параметрлері бастапқы күйіне қайтарылады:"</string>
@@ -411,7 +419,7 @@
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Параметрлерді бастапқы күйіне қайтару"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Келесілердің параметрлері бастапқы күйіне қайтарылады:\n\n"<li>"өшірілген қолданбалар;"</li>\n<li>"қолданбалардың өшірілген хабарландырулары;"</li>\n<li>"әрекеттерге арналған әдепкі қолданбалар;"</li>\n<li>"фондық режимдегі дерек тасымалын шектеу;"</li>\n<li>"барлық рұқсат шектеулері."</li>\n\n"Қолданба деректері жоғалмайды."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Бастапқы күйге қайтару"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Қолданба параметрлері бастапқы күйіне қайтарылды"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Қолданба параметрлері бастапқы күйіне қайтарылды."</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Барлық деректі өшіру (зауыттық мәнге қайтару)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Көліктің басты құрылғысынан барлық деректер өшеді, оның ішінде:\n\n"<li>"Google есептік жазбаңыз;"</li>\n<li>"жүйе мен қолданба деректері және параметрлері;"</li>\n<li>"жүктеп алынған қолданбалар."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Сіз келесі есептік жазбаларға кірдіңіз:"</string>
@@ -434,11 +442,11 @@
     <string name="date_time_set_time" msgid="6449555153906058248">"Уақытты реттеу"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Уақыт белдеуі"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"Уақыт белдеуін таңдау"</string>
-    <string name="date_time_set_date_title" msgid="6834785820357051138">"Күні"</string>
-    <string name="date_time_set_date" msgid="2537494485643283230">"Күнін реттеу"</string>
+    <string name="date_time_set_date_title" msgid="6834785820357051138">"Күн"</string>
+    <string name="date_time_set_date" msgid="2537494485643283230">"Күнді реттеу"</string>
     <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Алфавит бойынша сұрыптау"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Уақыт белдеуі бойынша сұрыптау"</string>
-    <string name="date_picker_title" msgid="1533614225273770178">"Күні"</string>
+    <string name="date_picker_title" msgid="1533614225273770178">"Күн"</string>
     <string name="time_picker_title" msgid="7436045944320504639">"Уақыт"</string>
     <string name="user_admin" msgid="1535484812908584809">"Әкімші"</string>
     <string name="signed_in_admin_user" msgid="1267225622818673274">"Әкімші ретінде кірдіңіз"</string>
@@ -452,10 +460,10 @@
     <string name="sms_messaging_permission_title" msgid="6099328509729071243">"Автокөліктің мобильдік деректері арқылы хабар алмасу"</string>
     <string name="install_apps_permission_title" msgid="3099705360827925296">"Жаңа қолданбаларды орнату"</string>
     <string name="uninstall_apps_permission_title" msgid="8448422340567430659">"Қолданбаларды жою"</string>
-    <string name="user_add_user_menu" msgid="5319151436895941496">"Пайдаланушы енгізу"</string>
+    <string name="user_add_user_menu" msgid="5319151436895941496">"Пайдаланушы қосу"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Жаңа пайдаланушы"</string>
-    <string name="user_add_user_title" msgid="7458813670614932479">"Жаңа пайдаланушы енгізілсін бе?"</string>
-    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Енгізілген жаңа пайдаланушы өз профилін реттеуі керек."</string>
+    <string name="user_add_user_title" msgid="7458813670614932479">"Жаңа пайдаланушы қосылсын ба?"</string>
+    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Қосылған жаңа пайдаланушы өз профилін реттеуі керек."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"Кез келген пайдаланушы қолданбаларды басқа пайдаланушылар үшін жаңарта алады."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Пайдаланушылар саны шегіне жетті"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
@@ -506,7 +514,7 @@
     <string name="storage_unmount_failure" msgid="4591934911541762883">"<xliff:g id="NAME">%1$s</xliff:g> қауіпсіз шығару мүмкін емес."</string>
     <string name="accounts_settings_title" msgid="436190037084293471">"Есептік жазбалар"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Есептік жазба енгізу"</string>
-    <string name="no_accounts_added" msgid="5148163140691096055">"Ешқандай есептік жазба енгізілмеген"</string>
+    <string name="no_accounts_added" msgid="5148163140691096055">"Ешқандай есептік жазба қосылмаған"</string>
     <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> атты пайдаланушының есептік жазбалары"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Деректерді автоматты түрде синхрондау"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Қолданбалардың деректерді автоматты жаңартуына рұқсат беру"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Қате өрнек"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Құлыпты ашу өрнегін сызу"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Өрнекті сақтау кезінде қате кетті"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Тым көп қате әрекет жасалды. <xliff:g id="NUMBER">%d</xliff:g> секундтан кейін қайталап көріңіз."</string>
     <string name="okay" msgid="4589873324439764349">"Жарайды"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Экран құлпы өшірілсін бе?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Кез келген адам есептік жазбаңызға кіре алатын болады"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 929f8a0..8810d1c 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ចង់បើក Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ចង់បិទ Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"បញ្ហា"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"ឧបករណ៍​សម្រាប់ប្រើ​ជាមួយ <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"រកមិន​ឃើញ​ឧបករណ៍ទេ។ សូម​ប្រាកដថា​ឧបករណ៍​បានបើក និងអាច​ភ្ជាប់បាន។"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ព្យាយាមម្ដងទៀត"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"មាន​បញ្ហា​អ្វីមួយ។ កម្មវិធី​បាន​បោះបង់សំណើ​ក្នុងការ​ជ្រើសរើស​ឧបករណ៍។"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ការតភ្ជាប់​ទទួលបាន​ជោគជ័យ​ហើយ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"បង្ហាញ​ទាំងអស់"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ស្វែងរក"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ប៊្លូធូស"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ឧបករណ៍​គ្មានឈ្មោះ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ឧបករណ៍​ដែល​បាន​ផ្គូផ្គង"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"សំឡេងរោទ៍ទូរសព្ទ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"សំឡេង​ជូន​ដំណឹង​លំនាំដើម"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"សំឡេង​ម៉ោងរោទ៍​លំនាំដើម"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"រក្សាទុក"</string>
     <string name="units_settings" msgid="402325305096925886">"ខ្នាត"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ល្បឿន"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ចម្ងាយ"</string>
@@ -326,7 +334,7 @@
     <string name="app_link_open_ask" msgid="7242075065136237456">"សួរគ្រប់ពេល"</string>
     <string name="app_link_open_never" msgid="2173174327831792316">"កុំបើកនៅក្នុងកម្មវិធីនេះ"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"តំណដែលស្គាល់"</string>
-    <string name="special_access" msgid="5730278220917123811">"ការចូលប្រើកម្មវិធីពិសេស"</string>
+    <string name="special_access" msgid="5730278220917123811">"សិទ្ធិចូលប្រើប្រាស់កម្មវិធីពិសេស"</string>
     <string name="show_system" msgid="4401355756969485287">"បង្ហាញ​ប្រព័ន្ធ"</string>
     <string name="hide_system" msgid="8845453295584638040">"លាក់ប្រព័ន្ធ"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"កែការកំណត់ប្រព័ន្ធ"</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"បច្ចុប្បន្នភាព​ប្រព័ន្ធ"</string>
     <string name="firmware_version" msgid="8491753744549309333">"កំណែ Android"</string>
     <string name="security_patch" msgid="4794276590178386903">"កម្រិតបំណះសុវត្ថិភាព Android"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"ម៉ូដែល និង​ផ្នែករឹង"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"ម៉ូដែល និង​ហាតវែរ"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"ម៉ូដែល៖ <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"កំណែ​មូលដ្ឋាន"</string>
     <string name="kernel_version" msgid="7327212934187011508">"កំណែ​ខឺណែល"</string>
@@ -567,15 +575,16 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"លំនាំ​មិន​ត្រឹមត្រូវ​ទេ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"របៀបគូរ​លំនាំ​ដោះ​សោ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"មាន​បញ្ហា​ក្នុងការរក្សាទុក​លំនាំ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ការព្យាយាម​ចូលខុស​ច្រើនដងពេក។ សូមព្យាយាម​ម្ដងទៀត​ក្នុងរយៈពេល <xliff:g id="NUMBER">%d</xliff:g> វិនាទី​។"</string>
     <string name="okay" msgid="4589873324439764349">"យល់ព្រម"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"លុប​ការ​ចាក់សោ​អេក្រង់?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"វា​នឹង​អនុញ្ញាត​ឱ្យ​នរណា​ម្នាក់​ចូល​ប្រើ​គណនី​របស់អ្នក"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"ការធ្វើបែបនេះ​នឹង​អនុញ្ញាតឱ្យ​នរណាក៏អាចចូល​ប្រើ​គណនី​របស់អ្នក"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"បញ្ចូល​កូដ PIN របស់​អ្នក"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"បញ្ចូល​ពាក្យ​សម្ងាត់​របស់​អ្នក"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"ដើម្បី​សុវត្ថិភាព សូម​កំណត់​កូដ PIN"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"បញ្ចូល​កូដ PIN របស់អ្នក​ឡើងវិញ"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"កូដ PIN ត្រូវតែ​មាន​លេខ​យ៉ាង​ហោច​ណាស់ 4 ខ្ទង់"</string>
-    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"កូដ PIN មិនត្រឹមត្រូវ​ទេ ត្រូវ​មាន​លេខ​យ៉ាង​ហោច​ណាស់ 4 ខ្ទង់។"</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"កូដ PIN ត្រូវមានយ៉ាងតិច 4 ខ្ទង់"</string>
+    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"កូដ PIN មិនត្រឹមត្រូវ​ទេ ត្រូវ​មានយ៉ាងតិច 4 ខ្ទង់។"</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"កូដ PIN មិន​ត្រូវគ្នាទេ"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"មាន​បញ្ហា​ក្នុងការ​រក្សាទុក​កូដ PIN"</string>
     <string name="lockscreen_wrong_pin" msgid="4922465731473805306">"កូដ PIN មិន​ត្រឹមត្រូវ​"</string>
@@ -588,7 +597,7 @@
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"បញ្ជាក់"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"ត្រូវ​មាន​យ៉ាងហោចណាស់ 4 តួ"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"ត្រូវ​​មាន​យ៉ាង​ហោច​ណាស់ <xliff:g id="COUNT">%d</xliff:g> តួ"</string>
-    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"កូដ PIN ​ត្រូវ​មាន​លេខ​យ៉ាង​ហោច​ណាស់ <xliff:g id="COUNT">%d</xliff:g> ខ្ទង់"</string>
+    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"កូដ PIN ​ត្រូវ​មានយ៉ាងតិច <xliff:g id="COUNT">%d</xliff:g> ខ្ទង់"</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"ត្រូវមានតិចជាង <xliff:g id="NUMBER">%d</xliff:g> តួ"</string>
     <string name="lockpassword_pin_too_long" msgid="62957683396974404">"ត្រូវមានលេខតិចជាង <xliff:g id="NUMBER">%d</xliff:g> ខ្ទង់"</string>
     <string name="lockpassword_pin_contains_non_digits" msgid="3044526271686839923">"ត្រូវមាន​លេខពី 0-9 តែ​ប៉ុណ្ណោះ។"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 6e17611..835f512 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -153,17 +153,24 @@
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"ವೈ-ಫೈ ಹಾಟ್‌ಸ್ಪಾಟ್‌ಗೆ ಬ್ಯಾಂಡ್ ಆರಿಸಿ:"</string>
     <string name="tether_settings_title_all" msgid="4663704772599383169">"ಹಾಟ್‌ಸ್ಪಾಟ್ &amp; ಟೆಥರಿಂಗ್"</string>
     <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಾಟ್‌ಸ್ಪಾಟ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ"</string>
-    <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"ಯಾವುದೇ ಸಾಧನಗಳು ಸಂಪರ್ಕಗೊಂಡಿದೇ ಇರುವಾಗ ವೈ-ಫೈ ಹಾಟ್‌ಸ್ಪಾಟ್ ಆಫ್ ಆಗುತ್ತದೆ"</string>
+    <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"ಯಾವುದೇ ಸಾಧನಗಳು ಸಂಪರ್ಕಗೊಳ್ಳದೇ ಇರುವಾಗ ವೈ-ಫೈ ಹಾಟ್‌ಸ್ಪಾಟ್ ಆಫ್ ಆಗುತ್ತದೆ"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ಗಾಗಿ ವೈ-ಫೈ ಆನ್ ಮಾಡಬೇಕು"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ಗಾಗಿ ವೈ-ಫೈ ಆನ್ ಮಾಡಬೇಕು"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ದೋಷ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ನ ಜೊತೆಗೆ ಬಳಸಲು ಸಾಧನ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ಯಾವುದೇ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ಸಾಧನಗಳನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಸಂಪರ್ಕಿಸಲು ಲಭ್ಯವಿದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"ಏನೋ ಬಂದಿದೆ. ಸಾಧನವನ್ನು ಆರಿಸಲು ಆ್ಯಪ್‌ ವಿನಂತಿಯನ್ನು ರದ್ದುಗೊಳಿಸಿದೆ."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ಸಂಪರ್ಕ ಯಶಸ್ವಿಯಾಗಿದೆ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ಎಲ್ಲವನ್ನೂ ತೋರಿಸಿ"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ಬ್ಲೂಟೂತ್‌"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ಹೆಸರಿಸದಿರುವ ಸಾಧನ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ಜೋಡಿಸಲಾದ ಸಾಧನಗಳು"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"ಜೋಡಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗುತ್ತದೆ"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"ಸಾಧನದ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸುವುದೇ?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನದಿಂದ ನಿಮ್ಮ ವಾಹನದ ಸಂಪರ್ಕವನ್ನು ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತದೆ."</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನದಿಂದ ವಾಹನ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"ವಾಹನದ ಬ್ಲೂಟೂತ್‌ ವಿಳಾಸ: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"ಸಾಧನದ ಬ್ಲೂಟೂತ್ ವಿಳಾಸ: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"ವಾಹನದ ಹೆಸರು"</string>
@@ -188,7 +195,7 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"ಬ್ಲೂಟೂತ್ ಜೋಡಣೆ ಕೋಡ್"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"ಅಕ್ಷರಗಳು ಅಥವಾ ಚಿಹ್ನೆಗಳನ್ನು ಪಿನ್‌ ಹೊಂದಿದೆ"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"ಜೋಡಣೆ ಕೋಡ್‌ ಟೈಪ್‌ ಮಾಡಿ ತದನಂತರ ರಿಟರ್ನ್‌ ಅಥವಾ ಎಂಟರ್‌ ಒತ್ತಿ."</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನದೊಂದಿಗೆ ಜೊಡಿಸುವುದೇ?"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆ ಜೋಡಿಸುವುದೇ?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಹಾಗೂ ಕರೆ ಇತಿಹಾಸವನ್ನು ಪ್ರವೇಶಿಸಲು <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನವನ್ನು ಅನುಮತಿಸಿ"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"ನಿಮಗೆ ಇತರ ಸಾಧನದಲ್ಲಿ ಈ ಪಿನ್‌ ಟೈಪ್‌ ಮಾಡುವ ಅಗತ್ಯವಿರಬಹುದು."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"ನಿಮಗೆ ಇತರ ಸಾಧನದಲ್ಲಿ ಈ ಪಾಸ್‌ಕೀಯನ್ನು ಟೈಪ್‌ ಮಾಡುವ ಅಗತ್ಯವಿರಬಹುದು."</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ಫೋನ್ ರಿಂಗ್‌ಟೋನ್"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ಡಿಫಾಲ್ಟ್ ಅಧಿಸೂಚನೆ ಧ್ವನಿ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ಡೀಫಾಲ್ಟ್ ಅಲಾರಾಂ ಧ್ವನಿ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ಉಳಿಸಿ"</string>
     <string name="units_settings" msgid="402325305096925886">"ಯೂನಿಟ್‌ಗಳು"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ವೇಗ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ದೂರ"</string>
@@ -273,15 +281,15 @@
     <string name="default_applications" msgid="1558183275638697087">"ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್‌ಗಳು"</string>
     <string name="app_permissions" msgid="32799922508313948">"ಆ್ಯಪ್ ಅನುಮತಿಗಳು"</string>
     <string name="app_permissions_summary" msgid="1842858532315056367">"<xliff:g id="APPS">%1$s</xliff:g> ಅನ್ನು ಬಳಸುವ ಆ್ಯಪ್‌ಗಳು"</string>
-    <string name="applications_settings" msgid="794261395191035632">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
+    <string name="applications_settings" msgid="794261395191035632">"ಆ್ಯಪ್‍ ಮಾಹಿತಿ"</string>
     <string name="force_stop" msgid="2153183697014720520">"ಸ್ಥಗಿತಗೊಳಿಸಿ"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"ಬಲವಂತವಾಗಿ ಸ್ಥಗಿತಗೊಳಿಸುವುದೇ?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಬಲವಂತವಾಗಿ ಸ್ಥಗಿತಗೊಳಿಸಿದರೆ, ಅದು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"ಆ್ಯಪ್‍ ಅನ್ನು ಬಲವಂತವಾಗಿ ಸ್ಥಗಿತಗೊಳಿಸಿದರೆ, ಅದು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
     <string name="disable_text" msgid="4358165448648990820">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="enable_text" msgid="1794971777861881238">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="uninstall_text" msgid="277907956072833012">"ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್"</string>
-    <string name="app_disable_dialog_text" msgid="7731155411006654025">"ನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ Android  ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಉದ್ದೇಶಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
-    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"ಅಪ್ಲಿಕೇಶನ್‌ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
+    <string name="app_disable_dialog_text" msgid="7731155411006654025">"ನೀವು ಈ ಆ್ಯಪ್‍ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಇನ್ನು ಮುಂದೆ Android  ಮತ್ತು ಇತರ ಆ್ಯಪ್‍‌ಗಳು ಉದ್ದೇಶಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು."</string>
+    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"ಆ್ಯಪ್‍‌ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="not_installed" msgid="4218816013370552746">"ಈ ಬಳಕೆದಾರರಿಗಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿಲ್ಲ"</string>
     <string name="permissions_label" msgid="2701446753515612685">"ಅನುಮತಿಗಳು"</string>
     <string name="notifications_label" msgid="6586089149665170731">"ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -291,7 +299,7 @@
     <string name="runtime_permissions_summary_no_permissions_requested" msgid="4074220596273432442">"ಯಾವುದೇ ಅನುಮತಿಗಳನ್ನು ವಿನಂತಿಸಿಲ್ಲ"</string>
     <string name="storage_type_internal" msgid="8918688427078709570">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ %s"</string>
     <string name="data_usage_summary_title" msgid="4368024763485916986">"ಡೇಟಾ ಬಳಕೆ"</string>
-    <string name="data_usage_app_summary_title" msgid="5012851696585421420">"ಅಪ್ಲಿಕೇಶನ್‌ ಡೇಟಾ ಬಳಕೆ"</string>
+    <string name="data_usage_app_summary_title" msgid="5012851696585421420">"ಆ್ಯಪ್‍ ಡೇಟಾ ಬಳಕೆ"</string>
     <string name="computing_size" msgid="5791407621793083965">"ಗಣನೆ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <plurals name="runtime_permissions_additional_count" formatted="false" msgid="3513360187065317613">
       <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳು</item>
@@ -409,10 +417,10 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"ಸೆಟ್ಟಿಂಗ್‌ ಮರುಹೊಂದಿಸಿ"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"ನೆಟ್‌ವರ್ಕ್‌ ಸೆಟ್ಟಿಂಗ್‌ ಅನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"ಆ್ಯಪ್ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"ಇದು ಕೆಳಗಿನ ಎಲ್ಲಾ ಆದ್ಯತೆಗಳಿಗಾಗಿ ಮರುಹೊಂದಿಸುತ್ತದೆ:\n\n"<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್‌ಗಳು"</li>\n<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್‌ ಅಧಿಸೂಚನೆಗಳು"</li>\n<li>"ಕ್ರಿಯೆಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್‌ಗಳು"</li>\n<li>"ಆ್ಯಪ್‌ ಹಿನ್ನೆಲೆ ಡೇಟಾ ನಿರ್ಬಂಧಗಳು"</li>\n<li>"ಯಾವುದೇ ಅನುಮತಿ ನಿರ್ಬಂಧಗಳು"</li>\n\n"ಯಾವುದೇ ಆ್ಯಪ್‌ ಡೇಟಾವನ್ನು ನೀವು ಕಳೆದುಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
-    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"ಆಪ್‌‌ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"ಎಲ್ಲಾ ಡೇಟಾ ಅಳಿಸಿ (ಫ್ಯಾಕ್ಟರಿ ಮರುಹೊಂದಿಸಿ)"</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"ಇದು ಕೆಳಗಿನವುಗಳ ಎಲ್ಲಾ ಆದ್ಯತೆಗಳನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ:\n\n"<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್‌ಗಳು"</li>\n<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್‌ ಅಧಿಸೂಚನೆಗಳು"</li>\n<li>"ಕ್ರಿಯೆಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್‌ಗಳು"</li>\n<li>"ಆ್ಯಪ್‌ ಹಿನ್ನೆಲೆ ಡೇಟಾ ನಿರ್ಬಂಧಗಳು"</li>\n<li>"ಯಾವುದೇ ಅನುಮತಿ ನಿರ್ಬಂಧಗಳು"</li>\n\n"ಯಾವುದೇ ಆ್ಯಪ್‌ ಡೇಟಾವನ್ನು ನೀವು ಕಳೆದುಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
+    <string name="reset_app_pref_button_text" msgid="6270820447321231609">"ಆ್ಯಪ್‍‍ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"ಆ್ಯಪ್‍ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"ಎಲ್ಲಾ ಡೇಟಾ ಅಳಿಸಿ (ಫ್ಯಾಕ್ಟರಿ ರಿಸೆಟ್‌)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"ಇವುಗಳು ಸೇರಿದಂತೆ ಇದು ನಿಮ್ಮ ವಾಹನದ ಹೆಡ್ ಯೂನಿಟ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ:\n\n"<li>"ನಿಮ್ಮ Google ಖಾತೆ"</li>\n<li>"ಸಿಸ್ಟಂ ಮತ್ತು ಆ್ಯಪ್‌ ಡೇಟಾ ಹಾಗೂ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</li>\n<li>"ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"ನೀವು ಪ್ರಸ್ತುತವಾಗಿ ಕೆಳಗಿನ ಖಾತೆಗಳಿಗೆ ಸೈನ್ ಇನ್ ಆಗಿರುವಿರಿ:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"ಈ ವಾಹನದಲ್ಲಿ ಇತರ ಬಳಕೆದಾರರಿದ್ದಾರೆ."</string>
@@ -422,7 +430,7 @@
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"ಎಲ್ಲವನ್ನೂ ಅಳಿಸಿ"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"ಅಳಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"ನಿರೀಕ್ಷಿಸಿ..."</string>
-    <string name="date_and_time_settings_title" msgid="4058492663544475485">"ದಿನಾಂಕ, ಸಮಯವನ್ನು ಬದಲಾಯಿಸಿ"</string>
+    <string name="date_and_time_settings_title" msgid="4058492663544475485">"ದಿನಾಂಕ ಮತ್ತು ಸಮಯ"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"ದಿನಾಂಕ, ಸಮಯ, ಸಮಯದ ವಲಯದ, ಮತ್ತು ಫರ್ಮ್ಯಾಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
     <string name="date_time_auto" msgid="3570339569471779767">"ಸ್ವಯಂಚಾಲಿತ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ"</string>
     <string name="date_time_auto_summary" msgid="3311706425095342759">"ನೆಟ್‌ವರ್ಕ್‌ ಒದಗಿಸಿದ ಸಮಯವನ್ನು ಬಳಸಿ"</string>
@@ -464,7 +472,7 @@
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
     <string name="delete_user_dialog_title" msgid="3422867434431562007">"ಈ ಬಳಕೆದಾರರನ್ನು ಅಳಿಸುವುದೇ?"</string>
-    <string name="delete_user_dialog_message" msgid="4346777604351785057">"ಎಲ್ಲ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
+    <string name="delete_user_dialog_message" msgid="4346777604351785057">"ಎಲ್ಲಾ ಆ್ಯಪ್‍‍ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"ಬಳಕೆದಾರರನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"ವಜಾಗೊಳಿಸಿ"</string>
     <string name="delete_user_error_retry" msgid="5116434895572670563">"ಮರುಪ್ರಯತ್ನ"</string>
@@ -490,7 +498,7 @@
     <string name="storage_other_apps" msgid="945509804756782640">"ಇತರ ಆ್ಯಪ್‌ಗಳು"</string>
     <string name="storage_files" msgid="6382081694781340364">"Files"</string>
     <string name="storage_system" msgid="1271345630248014010">"ಸಿಸ್ಟಂ"</string>
-    <string name="storage_detail_dialog_system" msgid="796365720531622361">"Android ಆವೃತ್ತಿ <xliff:g id="VERSION">%s</xliff:g> ರನ್ ಮಾಡಲು ಬಳಸುವ ಫೈಲ್‌ಗಳನ್ನು ಸಿಸ್ಟಂ ಒಳಗೊಂಡಿದೆ"</string>
+    <string name="storage_detail_dialog_system" msgid="796365720531622361">"Android ಆವೃತ್ತಿ <xliff:g id="VERSION">%s</xliff:g> ರನ್ ಮಾಡಲು ಬಳಸುವ ಫೈಲ್‌ಗಳು ಈ ಸಿಸ್ಟಂನಲ್ಲಿವೆ"</string>
     <string name="storage_audio_files_title" msgid="5183170457027181700">"ಆಡಿಯೋ ಫೈಲ್‌ಗಳು"</string>
     <string name="memory_calculating_size" msgid="1672238502950390033">"ಲೆಕ್ಕ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="storage_application_size_label" msgid="1146156683170661354">"ಆ್ಯಪ್ ಗಾತ್ರ"</string>
@@ -552,7 +560,7 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"ಸ್ಕಿಪ್"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಸೆಟ್ ಮಾಡಿ"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"ನಿಮ್ಮ ಪಿನ್‌ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"ಪ್ಯಾಟರ್ನ್ ಆಯ್ಕೆ ಮಾಡಿ"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"ನಿಮ್ಮ ಪ್ಯಾಟರ್ನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"ಪ್ರಸ್ತುತ ಸ್ಕ್ರೀನ್ ಲಾಕ್"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"ಸುರಕ್ಷತೆಗಾಗಿ, ಪ್ಯಾಟ್ರನ್ ಹೊಂದಿಸಿ"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ಪ್ಯಾಟರ್ನ್ ತಪ್ಪಾಗಿದೆ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ಅನ್‌ಲಾಕ್ ನಮೂನೆಯನ್ನು ರಚಿಸುವುದು ಹೇಗೆ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ಪ್ಯಾಟರ್ನ್‌ ಉಳಿಸುವಲ್ಲಿ ದೋಷ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ಹಲವಾರು ತಪ್ಪು ಪ್ರಯತ್ನಗಳು. ಪುನಃ <xliff:g id="NUMBER">%d</xliff:g> ಸೆಕೆಂಡ್‌ಗಳ ನಂತರ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="okay" msgid="4589873324439764349">"ಸರಿ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ತೆಗೆದುಹಾಕಿ"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ಇದು ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಯಾರು ಬೇಕಾದರೂ ಪ್ರವೇಶಿಸಲು ಅನುಮತಿಸುತ್ತದೆ"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"ವಜಾಗೊಳಿಸಿ"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಈ ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"ಹುಡುಕಿ"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index e5b1776..d0618a7 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>에서 Wi-Fi를 사용 설정하려고 합니다."</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>에서 Wi-Fi를 사용 중지하려고 합니다."</string>
     <string name="wifi_error" msgid="3105105447117289410">"오류"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g>에서 사용할 기기"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"기기가 없습니다. 기기가 켜져 있으며 연결 가능한지 확인하세요."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"다시 시도"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"문제가 발생했습니다. 애플리케이션에서 기기 선택 요청을 취소했습니다."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"연결되었습니다."</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"모두 표시"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"검색 중"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"블루투스"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"이름이 없는 기기"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"페어링된 기기"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"전화 벨소리"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"기본 알림 소리"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"기본 알람 소리"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"저장"</string>
     <string name="units_settings" msgid="402325305096925886">"단위"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"속도"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"거리"</string>
@@ -367,7 +375,7 @@
     <string name="about_settings" msgid="4329457966672592345">"정보"</string>
     <string name="about_summary" msgid="5374623866267691206">"Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="about_settings_summary" msgid="7975072809083281401">"법률 정보, 상태, 소프트웨어 버전 보기"</string>
-    <string name="legal_information" msgid="1838443759229784762">"법률정보"</string>
+    <string name="legal_information" msgid="1838443759229784762">"법률 정보"</string>
     <string name="contributors_title" msgid="7698463793409916113">"도움을 주신 분들"</string>
     <string name="manual" msgid="4819839169843240804">"수동"</string>
     <string name="regulatory_labels" msgid="3165587388499646779">"규정 라벨"</string>
@@ -394,7 +402,7 @@
     <string name="developer_options_settings" msgid="1530739225109118480">"개발자 옵션"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"옵션 재설정"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"네트워크, 앱, 기기 재설정"</string>
-    <string name="reset_network_title" msgid="1284233059990797263">"네트워크 재설정"</string>
+    <string name="reset_network_title" msgid="1284233059990797263">"네트워크 초기화"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"다음을 포함한 모든 네트워크 설정을 초기화합니다."</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi‑Fi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"모바일 데이터"</li></string>
@@ -409,7 +417,7 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"설정 초기화"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"네트워크 설정이 초기화되었습니다."</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"앱 환경설정 초기화"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"이 작업을 하면 다음 환경설정이 재설정됩니다.\n\n"<li>"사용 중지된 앱"</li>\n<li>"사용 중지된 알림"</li>\n<li>"작업에 사용하는 기본 애플리케이션"</li>\n<li>"앱의 백그라운드 데이터 제한"</li>\n<li>"그 밖의 권한 제한"</li>\n\n"앱 데이터는 손실되지 않습니다."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"다음 환경설정이 초기화됩니다.\n\n"<li>"사용 중지된 앱"</li>\n<li>"사용 중지된 앱 알림"</li>\n<li>"작업에 사용하는 기본 애플리케이션"</li>\n<li>"앱의 백그라운드 데이터 제한"</li>\n<li>"그 밖의 권한 제한"</li>\n\n"앱 데이터는 손실되지 않습니다."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"앱 초기화"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"앱 환경설정이 초기화되었습니다."</string>
     <string name="master_clear_title" msgid="8515335233363214414">"모든 데이터 삭제(초기화)"</string>
@@ -418,7 +426,7 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"이 차량에 다른 사용자가 있습니다."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"차량 초기화"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"초기화하시겠습니까?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"모든 개인정보와 다운로드한 앱을 삭제하시겠습니까? 삭제한 후에는 작업을 취소할 수 없습니다."</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"모든 개인 정보와 다운로드한 앱을 삭제하시겠습니까? 삭제한 후에는 작업을 취소할 수 없습니다."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"모두 삭제"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"삭제 중"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"잠시 기다려 주세요..."</string>
@@ -454,7 +462,7 @@
     <string name="uninstall_apps_permission_title" msgid="8448422340567430659">"앱 제거"</string>
     <string name="user_add_user_menu" msgid="5319151436895941496">"사용자 추가"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"새 사용자"</string>
-    <string name="user_add_user_title" msgid="7458813670614932479">"새 사용자를 추가할까요?"</string>
+    <string name="user_add_user_title" msgid="7458813670614932479">"새 사용자를 추가하시겠습니까?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"추가된 새로운 사용자는 자신의 공간을 설정해야 합니다."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"모든 사용자는 다른 사용자들을 위하여 앱을 업데이트할 수 있습니다."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"사용자 제한 도달"</string>
@@ -519,7 +527,7 @@
     <string name="add_an_account" msgid="1072285034300995091">"계정 추가"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"제한된 프로필은 계정을 추가할 수 없습니다."</string>
     <string name="remove_account_title" msgid="8840386525787836381">"계정 삭제"</string>
-    <string name="really_remove_account_title" msgid="3555164432587924900">"계정을 삭제할까요?"</string>
+    <string name="really_remove_account_title" msgid="3555164432587924900">"계정을 삭제하시겠습니까?"</string>
     <string name="really_remove_account_message" msgid="4296769280849579900">"계정을 삭제하면 기기의 메시지, 연락처 및 다른 데이터가 모두 지워집니다."</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"계정을 삭제하지 못했습니다"</string>
     <string name="account_sync_title" msgid="6541844336300236915">"계정 동기화"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"잘못된 패턴"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"잠금해제 패턴을 그리는 방법"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"패턴 저장 중 오류 발생"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"잘못 시도한 횟수가 너무 많습니다. <xliff:g id="NUMBER">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
     <string name="okay" msgid="4589873324439764349">"확인"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"화면 잠금을 삭제하시겠습니까?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"화면 잠금을 삭제하면 누구나 계정에 액세스할 수 있습니다."</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index bcccfc3..7c0ebb4 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settings_label" msgid="5147911978211079839">"Жөндөөлөр"</string>
     <string name="more_settings_label" msgid="3867559443480110616">"Дагы"</string>
-    <string name="display_settings" msgid="5325515247739279185">"Көрүнүш"</string>
+    <string name="display_settings" msgid="5325515247739279185">"Экран"</string>
     <string name="brightness" msgid="2919605130898772866">"Жарык деңгээли"</string>
     <string name="auto_brightness_title" msgid="9124647862844666581">"Ыңгайлаштырылуучу жарык"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"Жарык деңгээлин учурдагы жарыкка жараша өзгөртүү"</string>
@@ -138,12 +138,12 @@
     <string name="wifi_hotspot_name_title" msgid="8844779338692535356">"Байланыш түйүнүнүн аталышы"</string>
     <string name="wifi_hotspot_name_summary_connecting" msgid="5262510450498600038">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> күйгүзүлүүдө…"</string>
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Башка түзмөктөр <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> тармагына туташа алышат"</string>
-    <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Байланыш түйүнү тун сырсөзү"</string>
+    <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Байланыш түйүнүнүн сырсөзү"</string>
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Коопсуздук"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Жок"</string>
-    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"БТ жыштыгы"</string>
-    <string name="wifi_ap_band_config" msgid="6143905484067008736">"Wi-Fi жыштыгынын диапазону"</string>
+    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Wi-Fi диапазону"</string>
+    <string name="wifi_ap_band_config" msgid="6143905484067008736">"Wi-Fi диапазону"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Авто"</string>
     <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2.4 ГГц жыштыгы"</string>
     <string name="wifi_ap_choose_5G" msgid="8561440488455528673">"5.0 ГГц жыштыгы"</string>
@@ -157,16 +157,23 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> WiFi\'ды күйгүзгөнү жатат"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> WiFi\'ды өчүргөнү жатат"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Ката"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> менен колдонулуучу түзмөк"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Түзмөктөр табылган жок. Түзмөктөр күйгүзүлүп, байланышууга даяр экенин текшериңиз."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Кайталоо"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Бир нерсе болду. Колдонмо түзмөктү тандоо сурамын жокко чыгарды."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Ийгиликтүү туташты"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Баарын көрсөтүү"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Изделүүдө"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Аты жок түзмөк"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Жупташтырылган түзмөктөр"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Жаңы түзмөктү байланыштыруу"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth жупташтыруу үчүн күйгүзүлөт"</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth күйгүзүлөт"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Түзмөк ажыратылсынбы?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Унааңыз <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүнөн ажыратылат."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Унаанын Bluetooth дареги: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Түзмөктүн Bluetooth дареги: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
-    <string name="bluetooth_name" msgid="2609869978821094114">"Унаанын Bluetooth аталышы"</string>
+    <string name="bluetooth_name" msgid="2609869978821094114">"Унаанын аталышы"</string>
     <string name="bluetooth_rename_vehicle" msgid="5769424875066563154">"Унаанын атын өзгөртүү"</string>
     <string name="bluetooth_rename_device" msgid="8406868875363878712">"Түзмөктүн атын өзгөртүү"</string>
     <string name="bluetooth_rename_button" msgid="2397892174725986383">"Аталышын өзгөртүү"</string>
@@ -184,17 +191,17 @@
     <string name="bluetooth_ask_enablement_and_discovery" msgid="5487502083015708674">"<xliff:g id="APP_NAME">%1$s</xliff:g> Bluetooth\'ду күйгүзүп, негизги шайманыңызды башка түзмөктөр үчүн <xliff:g id="TIMEOUT">%2$d</xliff:g> секундка көрүнүктүү кылганы жатат."</string>
     <string name="bluetooth_ask_enablement_and_discovery_no_name" msgid="907153034209916282">"Колдонмо Bluetooth\'ду күйгүзүп, негизги шайманыңызды башка түзмөктөр үчүн <xliff:g id="TIMEOUT">%1$d</xliff:g> секундка көрүнүктүү кылганы жатат."</string>
     <string name="bluetooth_notif_ticker" msgid="7192577740198156792">"Bluetooth жупташтыруу өтүнүчү"</string>
-    <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"Жупташтыруу жана туташтыруу"</string>
-    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Bluetooth жупташтыруучу коду"</string>
+    <string name="bluetooth_device_context_pair_connect" msgid="3138105800372470422">"Байланыштыруу жана туташтыруу"</string>
+    <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Bluetooth аркылуу байланыштыруу коду"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"PIN код тамгалардан же символдордон турат"</string>
-    <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Жупташтыруу кодун терип, андан соң \"Артка\" же \"Киргизүү\" баскычын басыңыз"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен жупташтырылсынбы?"</string>
+    <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Байланыштыруу кодун терип, андан соң \"Артка\" же \"Киргизүү\" баскычын басыңыз"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен байланыштырасызбы?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүнө байланыштар менен чалуу таржымалына кирүү мүмкүнчүлүгүн бериңиз"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"Сиз бул PIN кодду башка түзмөккө дагы киргизишиңиз керек."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"Сиз бул сырсөздү башка түзмөккө дагы киргизишиңиз керек."</string>
     <string name="bluetooth_pin_values_hint_16_digits" msgid="418776900816984778">"16 сандан турушу керек"</string>
     <string name="bluetooth_pin_values_hint" msgid="1561325817559141687">"Адатта, 0000 же 1234 болот"</string>
-    <string name="bluetooth_notif_title" msgid="8374602799367803335">"Жупташтыруу өтүнүчү"</string>
+    <string name="bluetooth_notif_title" msgid="8374602799367803335">"Байланыштыруу өтүнүчү"</string>
     <string name="bluetooth_notif_message" msgid="1060821000510108726">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен жупташуу үчүн таптап коюңуз."</string>
     <string name="bluetooth_device_picker" msgid="673238198452345475">"Bluetooth түзмөгүн тандоо"</string>
     <string name="language_settings" msgid="2079258598337245546">"Тилдер"</string>
@@ -211,15 +218,16 @@
     <string name="tts_reset" msgid="6289481549801844709">"Баштапкы абалга келтирүү"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Үн"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Шыңгырдын үнү"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Чабыттоонун үнү"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Чабыттоонун катуулугу"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Рингтон"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Эскертме"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Медиа"</string>
     <string name="media_volume_summary" msgid="2961762827637127239">"Музыка жана видеолор үчүн үн көлөмүн коюу"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Ойготкуч"</string>
-    <string name="ringtone_title" msgid="8370531086214517972">"Телефондун рингтону"</string>
+    <string name="ringtone_title" msgid="8370531086214517972">"Телефондун шыңгыры"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Билдирменин демейки үнү"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Ойготкучтун демейки үнү"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Сактоо"</string>
     <string name="units_settings" msgid="402325305096925886">"Бирдиктер"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Ылдамдык"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Аралык"</string>
@@ -308,7 +316,7 @@
     <string name="autofill_settings_title" msgid="1188754272680049972">"Автотолтуруу кызматы"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"Жок"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"Тандалды"</string>
-    <string name="assistant_security_warning" msgid="1844807956967428012">"Жардамчы тутумуңузда иштеп жаткан колдонмолор тууралуу маалыматтарды, анын ичинде экраныңызда көрүнүп турган же колдонмолордо жеткиликтүү болгон маалыматты окуй алат."</string>
+    <string name="assistant_security_warning" msgid="1844807956967428012">"Жардамчы системаңызда иштеп жаткан колдонмолор тууралуу маалыматтарды, анын ичинде экраныңызда көрүнүп турган же колдонмолордо жеткиликтүү болгон маалыматты окуй алат."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Бул колдонмо ишенимдүү экенин тактаңыз&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google Autofill&gt;%1$s&lt;/xliff:g&gt; экрандагы нерселерди аныктап, автоматтык түрдө толтурууга боло турган талааларды табат."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"Кызмат кошуу"</string>
     <string name="app_launch_domain_links_title" msgid="774480184927726651">"Шилтемелерди ачуу"</string>
@@ -328,9 +336,9 @@
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Колдоого алынган шилтемелер"</string>
     <string name="special_access" msgid="5730278220917123811">"Колдонмонун атайын уруксаты"</string>
     <string name="show_system" msgid="4401355756969485287">"Тутум процесстерин көрсөтүү"</string>
-    <string name="hide_system" msgid="8845453295584638040">"Тутумдагы процесстерди жашыруу"</string>
-    <string name="modify_system_settings_title" msgid="4596320571562433972">"Тутум жөндөөлөрүн өзгөртүү"</string>
-    <string name="modify_system_settings_description" msgid="5295023124419592452">"Колдонмо тутум жөндөөлөрүн өзгөртө алат."</string>
+    <string name="hide_system" msgid="8845453295584638040">"Системалык процесстерди жашыруу"</string>
+    <string name="modify_system_settings_title" msgid="4596320571562433972">"Системанын жөндөөлөрүн өзгөртүү"</string>
+    <string name="modify_system_settings_description" msgid="5295023124419592452">"Колдонмо системанын жөндөөлөрүн өзгөртө алат."</string>
     <string name="notification_access_title" msgid="1467340098885813473">"Билдирмелерди угуу"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"<xliff:g id="SERVICE">%1$s</xliff:g> кызматына билдирмелерди угууга уруксат берилсинби?"</string>
     <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> колдонмосу эскертмелердин баарын, ошону менен катар байланыштардын аты-жөнү жана кабыл алынган билдирүүлөр сыяктуу жеке маалыматты окуй алат. Мындан тышкары, ал билдирмелерди жок кылып же алардагы баскычтарды баса алат.\n\nУшуну менен колдонмо \"Тынчымды алба\" режимин иштетүү же өчүрүү, ошондой эле анын жөндөөлөрүн өзгөртүү мүмкүнчүлүгүнө ээ болот."</string>
@@ -350,7 +358,7 @@
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Колдонмонун уруксаттары"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Жайгашкан жерди аныктоо кызматтары"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"Тутум"</string>
-    <string name="system_update_settings_title" msgid="8448588267784138855">"Тутум жаңыртуулары"</string>
+    <string name="system_update_settings_title" msgid="8448588267784138855">"Системанын жаңыртуулары"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android версиясы"</string>
     <string name="security_patch" msgid="4794276590178386903">"Коопсуздук тутумун жаңыртуу:"</string>
     <string name="hardware_info" msgid="3973165746261507658">"Үлгү жана аппараттык камсыздоо"</string>
@@ -405,7 +413,7 @@
     <string name="reset_network_select" msgid="2433825874868038739">"Тармак тандоо"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"Жөндөөлөрдү кайра коюу"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"Кайра коесузбу?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Тармак жөндөөлөрүнүн баары баштапкы абалга келтирилсинби? Бул аракетти кайра кайтара албайсыз!"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Тармак жөндөөлөрүн баштапкы абалга келтирсеңиз, аларды артка кайтара албайсыз. Уланта бересизби?"</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Жөндөөлөрдү кайра коюу"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Тармак жөндөөлөрү кайра коюлду"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Колдонмонун жөндөөлөрүн баштапкы абалга келтирүү"</string>
@@ -418,7 +426,7 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Бул унаада башка колдонуучулар бар."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Унааны баштапкы абалга келтирүү"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"Кайра коесузбу?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Бардык жеке маалыматтарыңыз жана жүктөп алынган колдонмолоруңуз тазалансынбы? Бул аракетти кайра кайтара албайсыз!"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Жеке маалыматыңыз менен жүктөп алган колдонмолоруңузду өчүрөсүзбү? Аларды кайра калыбына келтире албайсыз."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Баарын тазалоо"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Тазаланууда"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Күтө туруңуз…"</string>
@@ -431,11 +439,11 @@
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24 сааттык формат"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"24 сааттык форматты колдонуу"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"Убакыт"</string>
-    <string name="date_time_set_time" msgid="6449555153906058248">"Убакытты жөндөө"</string>
+    <string name="date_time_set_time" msgid="6449555153906058248">"Убакытты коюу"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Убакыт алкагы"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"Убакыт алкагын тандоо"</string>
     <string name="date_time_set_date_title" msgid="6834785820357051138">"Күн"</string>
-    <string name="date_time_set_date" msgid="2537494485643283230">"Күндү жөндөө"</string>
+    <string name="date_time_set_date" msgid="2537494485643283230">"Күндү тууралоо"</string>
     <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Алфавит боюнча иргөө"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Убакыт алкагы боюнча иргөө"</string>
     <string name="date_picker_title" msgid="1533614225273770178">"Күн"</string>
@@ -456,7 +464,7 @@
     <string name="user_new_user_name" msgid="7115771396412339662">"Жаңы колдонуучу"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Колдонуучуну кошосузбу?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Жаңы колдонуучу кошулганда, ал өзүнүн профилин жөндөп алышы керек."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"Колдонмолорду бир колдонуучу калган бардык колдонуучулар үчүн да жаңырта алат."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"Колдонмолорду бир колдонуучу жаңыртканда, ал калган бардык колдонуучулар үчүн да жаңырат."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Дагы колдонуучу кошууга болбойт"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> колдонуучуга чейин кошууга болот.</item>
@@ -464,7 +472,7 @@
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"Жаңы колдонуучу кошулбай калды"</string>
     <string name="delete_user_dialog_title" msgid="3422867434431562007">"Бул колдонуучуну өчүрөсүзбү?"</string>
-    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Бардык колдонмолор жана дайындар өчүрүлөт."</string>
+    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Бардык колдонмолор жана алардагы нерселер өчүрүлөт."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"Колдонуучу өчүрүлгөн жок."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"Четке кагуу"</string>
     <string name="delete_user_error_retry" msgid="5116434895572670563">"Кайталоо"</string>
@@ -480,7 +488,7 @@
     <string name="current_user_name" msgid="3813671533249316823">"Сиз (%1$s)"</string>
     <string name="user_name_label" msgid="3210832645046206845">"Колдонуучунун аты"</string>
     <string name="user_summary_not_set_up" msgid="1473688119241224145">"Түзүлгөн жок"</string>
-    <string name="edit_user_name_title" msgid="6890782937520262478">"Колдонуучунун атын түзөтүү"</string>
+    <string name="edit_user_name_title" msgid="6890782937520262478">"Колдонуучунун атын өзгөртүү"</string>
     <string name="name_input_blank_error" msgid="2088850865880984123">"Талаа бош болбошу керек."</string>
     <string name="name_input_invalid_error" msgid="3523545780580744273">"Киргизилген колдонуучунун аты жараксыз."</string>
     <string name="users_list_title" msgid="770764290290240909">"Колдонуучулар"</string>
@@ -508,7 +516,7 @@
     <string name="user_add_account_menu" msgid="6625351983590713721">"Аккаунт кошуу"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"Бир да аккаунт кошулган эмес"</string>
     <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> аттуу колдонуучунун аккаунттары"</string>
-    <string name="account_auto_sync_title" msgid="3238816995364191432">"Дайын-даректердин автоматтык түрдө шайкештирилиши"</string>
+    <string name="account_auto_sync_title" msgid="3238816995364191432">"Дайын-даректерди шайкештирүү"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Колдонмолордун маалыматы автоматтык түрдө жаңырып турат"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Автошайкештирүүнү иштетесизби?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Желеден аккаунтуңузга кандайдыр бир өзгөртүүлөр киргизилгенде, алардын баары телефонуңузга автоматтык түрдө көчүрүлөт.\n\nАйрым учурларда телефонуңуздагы өзгөртүүлөр автоматтык түрдө желеге көчүрүлүшү мүмкүн. Кыскасы, Google аккаунту ушундай жол менен иштейт."</string>
@@ -518,9 +526,9 @@
     <string name="add_account_title" msgid="5988746086885210040">"Аккаунт кошуу"</string>
     <string name="add_an_account" msgid="1072285034300995091">"Аккаунт кошуу"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Чектелген профилдер аккаунт кошо алышпайт"</string>
-    <string name="remove_account_title" msgid="8840386525787836381">"Аккаунтту алып салуу"</string>
-    <string name="really_remove_account_title" msgid="3555164432587924900">"Аккаунт өчүрүлсүнбү?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Бул аккаунт өчүрүлсө, ага байланыштуу бардык билдирүүлөр, байланыштар жана башка дайындар түзмөктөн өчүрүлөт!"</string>
+    <string name="remove_account_title" msgid="8840386525787836381">"Аккаунтту өчүрүү"</string>
+    <string name="really_remove_account_title" msgid="3555164432587924900">"Аккаунтту өчүрөсүзбү?"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Түзмөктөн ушул аккаунтка байланыштуу бардык билдирүүлөр, байланыштар жана башка нерселер өчүрүлөт"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Аккаунт өчүрүлгөн жок."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Аккаунтту шайкештирүү"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Шайкештирүү <xliff:g id="ID_2">%2$d</xliff:g> нерсенин ичинен <xliff:g id="ID_1">%1$d</xliff:g> үчүн күйүк"</string>
@@ -546,7 +554,7 @@
     <string name="screen_lock_options" msgid="8531177937577168185">"Кулпулоо параметрлери"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Графикалык ачкычты киргизиңиз"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Ырастоо"</string>
-    <string name="lockpattern_restart_button_text" msgid="9355771277617537">"Кайра тартуу"</string>
+    <string name="lockpattern_restart_button_text" msgid="9355771277617537">"Кайра тартам"</string>
     <string name="continue_button_text" msgid="5129979170426836641">"Улантуу"</string>
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Кайталоо"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Өткөрүп жиберүү"</string>
@@ -557,7 +565,7 @@
     <string name="current_screen_lock" msgid="637651611145979587">"Учурдагы экран кулпусу"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Коопсуздук үчүн графикалык ачкыч коюңуз"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Тазалоо"</string>
-    <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Жокко чыгаруу"</string>
+    <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Жок"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Жаңы графикалык ачкычыңыз"</string>
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Графикалык ачкычты тартыңыз"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Даяр болгондо манжаңызды алыңыз"</string>
@@ -567,9 +575,10 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Графикалык ачкыч туура эмес"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Графикалык ачкычты кантип тартуу керек"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Графикалык ачкычты сактоо катасы"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Туура эмес аракеттер өтө көп болду. <xliff:g id="NUMBER">%d</xliff:g> секунддан кийин кайталап көрүңүз."</string>
     <string name="okay" msgid="4589873324439764349">"Жарайт"</string>
-    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Экран кулпусу өчүрүлсүнбү?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ушуну менен аккаунтуңузга каалаган киши кире берет"</string>
+    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Экранды кулпулабайсызбы?"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Аккаунтуңузга каалаган киши кире берет"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"PIN кодуңузду киргизиңиз"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Сырсөзүңүздү киргизиңиз"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Коопсуздук үчүн PIN код коюп алыңыз"</string>
@@ -584,7 +593,7 @@
     <string name="confirm_your_password_header" msgid="7052891840366724938">"Сырсөзүңүздү кайра киргизиңиз"</string>
     <string name="confirm_passwords_dont_match" msgid="7300229965206501753">"Сырсөздөр дал келген жок"</string>
     <string name="lockpassword_clear_label" msgid="6363680971025188064">"Тазалоо"</string>
-    <string name="lockpassword_cancel_label" msgid="5791237697404166450">"Жокко чыгаруу"</string>
+    <string name="lockpassword_cancel_label" msgid="5791237697404166450">"Жок"</string>
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Ырастоо"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"Кеминде 4 белгиден турушу керек"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Кеминде <xliff:g id="COUNT">%d</xliff:g> белгиден турушу керек"</string>
@@ -634,9 +643,9 @@
     <string name="forget" msgid="3971143908183848527">"Унутулсун"</string>
     <string name="connect" msgid="5861699594602380150">"Туташтыруу"</string>
     <string name="disconnect" msgid="6140789953324820336">"Ажыратуу"</string>
-    <string name="delete_button" msgid="5840500432614610850">"Жок кылуу"</string>
-    <string name="remove_button" msgid="6664656962868194178">"Алып салуу"</string>
-    <string name="cancel" msgid="750286395700355455">"Жокко чыгаруу"</string>
+    <string name="delete_button" msgid="5840500432614610850">"Өчүрүү"</string>
+    <string name="remove_button" msgid="6664656962868194178">"Ооба"</string>
+    <string name="cancel" msgid="750286395700355455">"Жок"</string>
     <string name="allow" msgid="7519431342750394402">"Уруксат берүү"</string>
     <string name="deny" msgid="340512788979930804">"Жок"</string>
     <string name="backspace_key" msgid="1545590866688979099">"Backspace баскычы"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index c32ee86..c7350dd 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ຕ້ອງການເປີດໃຊ້ Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ຕ້ອງການປິດ Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ຜິດພາດ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"ອຸປະກອນທີ່ຈະໃຊ້ກັບ <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ບໍ່ພົບອຸປະກອນ. ກະລຸນາກວດສອບວ່າເປີດອຸປະກອນແລ້ວ ແລະ ສາມາດເຊື່ອມຕໍ່ໄດ້."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ລອງໃໝ່"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"ມີບາງຢ່າງເກີດຂຶ້ນ. ແອັບພລິເຄຊັນໄດ້ຍົກເລີກຄຳຮ້ອງຂໍເພື່ອເລືອກອຸປະກອນແລ້ວ."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ການເຊື່ອມຕໍ່ສຳເລັດແລ້ວ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ສະແດງທັງໝົດ"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ກຳລັງຊອກຫາ..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ອຸປະກອນທີ່ບໍ່ມີຊື່"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ອຸປະກອນທີ່ຈັບຄູ່ແລ້ວ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ຣິງໂທນໂທລະສັບ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ສຽງການແຈ້ງເຕືອນເລີ່ມຕົ້ນ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ສຽງ​ໂມງ​ປຸກ​ຕາມຄ່າເລີ່ມຕົ້ນ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ບັນທຶກ"</string>
     <string name="units_settings" msgid="402325305096925886">"ຫົວໜ່ວຍ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ຄວາມໄວ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ໄລຍະທາງ"</string>
@@ -357,7 +365,7 @@
     <string name="hardware_info_summary" msgid="8262576443254075921">"ຮຸ່ນ: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"ເວີຊັນເບສແບນ"</string>
     <string name="kernel_version" msgid="7327212934187011508">"ເວີຊັນ Kernel"</string>
-    <string name="build_number" msgid="3997326631001009102">"ເລກທີລຸ້ນ"</string>
+    <string name="build_number" msgid="3997326631001009102">"ໝາຍເລກສ້າງ"</string>
     <string name="bluetooth_mac_address" msgid="7641425947941688072">"ທີ່ຢູ່ Bluetooth"</string>
     <string name="device_info_not_available" msgid="2095601973977376655">"ບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="device_status_activity_title" msgid="4083567497305368200">"ສະຖານະ"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ຮູບແບບບໍ່ຖືກຕ້ອງ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ວິທີແຕ້ມຮູບແບບປົດລັອກ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກຮູບແບບ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ພະຍາຍາມຢ່າງບໍ່ຖືກຕ້ອງຫຼາຍຄັ້ງເກີນໄປ. ກະລຸນາລອງໃໝ່ໃນ <xliff:g id="NUMBER">%d</xliff:g> ວິນາທີ."</string>
     <string name="okay" msgid="4589873324439764349">"ຕົກລົງ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"ລຶບການລັອກໜ້າຈໍອອກບໍ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ນີ້ຈະອະນຸຍາດໃຫ້ທຸກຄົນເຂົ້າເຖິງບັນຊີຂອງທ່ານໄດ້"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d72585f..82c5b21 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -161,6 +161,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> nori įjungti „Wi-Fi“"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> nori išjungti „Wi-Fi“"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Klaida"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Įrenginiai, kuriuos galima naudoti su „<xliff:g id="APPNAME">%1$s</xliff:g>“"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nerasta jokių įrenginių. Įsitikinkite, kad įrenginiai įjungti ir prie jų galima prisijungti."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Bandyti dar kartą"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Kažkas nutiko. Programa atšaukė įrenginio pasirinkimo užklausą."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Sėkmingai prisijungta"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Rodyti viską"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Ieškoma"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Įrenginys be pavadinimo"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Susieti įrenginiai"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefono skambėjimo tonas"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Numatytasis pranešimo garsas"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Numatytasis signalo garsas"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Išsaugoti"</string>
     <string name="units_settings" msgid="402325305096925886">"Vienetai"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Greitis"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Atstumas"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Netinkamas atrakinimo piešinys"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kaip nustatyti atrakinimo piešinį"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Klaida išsaugant atrakinimo piešinį"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Per daug klaidingų bandymų. Bandykite dar kartą po <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
     <string name="okay" msgid="4589873324439764349">"Gerai"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Pašalinti ekrano užraktą?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tai atlikus visi žmonės galės pasiekti jūsų paskyrą"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 131998b..eb90d35 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -159,6 +159,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Lietotnē <xliff:g id="REQUESTER">%s</xliff:g> tiek mēģināts ieslēgt Wi-Fi savienojumu"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Lietotnē <xliff:g id="REQUESTER">%s</xliff:g> tiek mēģināts izslēgt Wi-Fi savienojumu"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Kļūda"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Ierīce izmantošanai ar lietotni <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nav atrasta neviena ierīce. Ierīcēm ir jābūt ieslēgtām un pieejamām savienojuma izveidei."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Mēģināt vēlreiz"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Radās kļūda. Lietojumprogramma atsauca ierīces atlases pieprasījumu."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Savienojums izveidots"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Rādīt visu"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Notiek meklēšana"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Nenosaukta ierīce"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Pārī savienotās ierīces"</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Tālruņa zvana signāls"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Paziņojuma noklusējuma skaņa"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Modinātāja noklusējuma skaņa"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Saglabāt"</string>
     <string name="units_settings" msgid="402325305096925886">"Mērvien."</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Ātrums"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Attālums"</string>
@@ -572,6 +580,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Nepareiza kombinācija"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kā zīmēt atbloķēšanas kombināciju"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Saglabājot kombināciju, radās kļūda."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Pārāk daudz neveiksmīgu mēģinājumu. Mēģiniet vēlreiz pēc <xliff:g id="NUMBER">%d</xliff:g> sekundēm."</string>
     <string name="okay" msgid="4589873324439764349">"Labi"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Vai noņemt ekrāna bloķēšanu?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tādējādi ikviens varēs piekļūt jūsu kontam."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 477d2c6..f26b9a3 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> сака да вклучи Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> сака да исклучи Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Грешка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Уред за користење со <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Не се најдени уреди. Уверете се дека уредите се вклучени и достапни за поврзување."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Обидете се повторно"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Нешто се случи. Апликацијата го откажа барањето за избор на уред."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Поврзувањето е успешно"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Прикажи ги сите"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Пребарување"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Неименуван уред"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Спарени уреди"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Мелодија на телефонот"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Стандарден звук за известување"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Стандарден звук за аларм"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Зачувај"</string>
     <string name="units_settings" msgid="402325305096925886">"Мерни единици"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Брзина"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Растојание"</string>
@@ -281,7 +289,7 @@
     <string name="enable_text" msgid="1794971777861881238">"Овозможи"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Деинсталирај"</string>
     <string name="app_disable_dialog_text" msgid="7731155411006654025">"Ако ја оневозможите оваа апликација, Android и другите апликации можеби веќе нема да функционираат како што треба."</string>
-    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Оневозможете ја апликацијата"</string>
+    <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Оневозможи ја апликацијата"</string>
     <string name="not_installed" msgid="4218816013370552746">"Не е инсталирано за корисников"</string>
     <string name="permissions_label" msgid="2701446753515612685">"Дозволи"</string>
     <string name="notifications_label" msgid="6586089149665170731">"Известувања"</string>
@@ -409,11 +417,11 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Ресетирај поставки"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Мрежните поставки се ресетирани"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Ресетирај ги поставките за апликациите"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Со ова ќе се ресетираат сите поставки за:\n\n"<li>"оневозможените апликации;"</li>\n<li>"оневозможените известувања за апликации;"</li>\n<li>"стандардните апликации за дејства;"</li>\n<li>"ограничувањата за податоци од заднина за апликациите;"</li>\n<li>"сите ограничувања за дозволите."</li>\n\n"Нема да изгубите никакви податоци на апликациите."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Со ова ќе се ресетираат сите поставки за:\n\n"<li>"оневозможените апликации;"</li>\n<li>"оневозможените известувања за апликации;"</li>\n<li>"стандардните апликации за дејства;"</li>\n<li>"ограничувањата за интернет во заднина за апликациите;"</li>\n<li>"сите ограничувања за дозволите."</li>\n\n"Нема да изгубите никакви податоци од апликациите."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Ресетирај апликации"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Параметрите за апликацијата се ресетирани"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Избриши ги сите податоци"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Ова ќе ги избрише сите податоци од уредот за на глава на возилото, заедно со:\n\n"<li>"вашата сметка на Google;"</li>\n<li>"податоците и поставките на системот и апликациите;"</li>\n<li>"преземените апликации."</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Ова ќе ги избрише сите податоци од главниот уред на возилото, заедно со:\n\n"<li>"вашата сметка на Google"</li>\n<li>"податоците и поставките на системот и апликациите"</li>\n<li>"преземените апликации"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Моментално сте најавени на следниве сметки:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Присутни се и други корисници на возилово."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Ресетирај го возилото"</string>
@@ -476,7 +484,7 @@
     <string name="choose_new_admin_label" msgid="5987653639387437939">"Изберете администратор"</string>
     <string name="user_guest" msgid="3465399481257448601">"Гостин"</string>
     <string name="start_guest_session" msgid="4438752398760283201">"Гостин"</string>
-    <string name="user_switch" msgid="6544839750534690781">"Префрли"</string>
+    <string name="user_switch" msgid="6544839750534690781">"Промени"</string>
     <string name="current_user_name" msgid="3813671533249316823">"Вие (%1$s)"</string>
     <string name="user_name_label" msgid="3210832645046206845">"Име"</string>
     <string name="user_summary_not_set_up" msgid="1473688119241224145">"Не е поставен"</string>
@@ -500,10 +508,10 @@
     <string name="storage_clear_user_data_text" msgid="8787615136779130680">"Избриши го капацитетот"</string>
     <string name="storage_clear_cache_btn_text" msgid="8449547925966775612">"Избриши го кешот"</string>
     <string name="storage_clear_data_dlg_title" msgid="5863775997588969879">"Да се избришат податоци на аплик.?"</string>
-    <string name="storage_clear_data_dlg_text" msgid="795055288575727801">"Сите податоци на оваа апликација ќе бидат трајно избришани. Ова ги опфаќа сите датотеки, поставки, сметки, бази на податоци, итн."</string>
+    <string name="storage_clear_data_dlg_text" msgid="795055288575727801">"Сите податоци на оваа апликација ќе бидат трајно избришани. Ова ги опфаќа сите датотеки, поставки, сметки, бази на податоци итн."</string>
     <string name="storage_clear_failed_dlg_text" msgid="6710485971686866306">"Не може да се избрише капацитетот за апликацијата."</string>
     <string name="storage_unmount_success" msgid="1553591517580407021">"<xliff:g id="NAME">%1$s</xliff:g> безбедно се отстрани"</string>
-    <string name="storage_unmount_failure" msgid="4591934911541762883">"<xliff:g id="NAME">%1$s</xliff:g> не можеше безбедно да се отстрани"</string>
+    <string name="storage_unmount_failure" msgid="4591934911541762883">"<xliff:g id="NAME">%1$s</xliff:g> не може безбедно да се отстрани"</string>
     <string name="accounts_settings_title" msgid="436190037084293471">"Сметки"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Додајте сметка"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"Нема додадени сметки"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Погрешна шема"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Како се употребува шемата на отклучување"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Грешка при зачувување на шемата"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Премногу погрешни обиди. Обидете се повторно за <xliff:g id="NUMBER">%d</xliff:g> секунди."</string>
     <string name="okay" msgid="4589873324439764349">"Во ред"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Отстрани заклучување екран?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ова ќе овозможи секој да пристапува до вашата сметка"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 3b6a489..b52a235 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>വൈഫൈ ഓണാക്കാൻ ആഗ്രഹിക്കുന്നു"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>വൈഫൈ ഓഫാക്കാൻ ആഗ്രഹിക്കുന്നു"</string>
     <string name="wifi_error" msgid="3105105447117289410">"പിശക്"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ഉപയോഗിക്കാനുള്ള ഉപകരണം"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ഉപകരണങ്ങളൊന്നും കണ്ടെത്തിയില്ല. ഉപകരണം ഓണാണെന്നും കണക്റ്റ് ചെയ്യാൻ ലഭ്യമാണെന്നും ഉറപ്പാക്കുക."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"വീണ്ടും ശ്രമിക്കുക"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"എന്തോ സംഭവിച്ചു. ഒരു ഉപകരണം തിരഞ്ഞെടുക്കാനുള്ള അഭ്യർത്ഥന ആപ്പ് റദ്ദാക്കിയിരിക്കുന്നു."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"കണക്ഷൻ വിജയകരം"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"എല്ലാം കാണിക്കുക"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"തിരയുന്നു"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"പേരിടാത്ത ഉപകരണം"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ജോടിയാക്കിയ ഉപകരണങ്ങൾ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ഫോണിന്റെ റിംഗ്ടോൺ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ഡിഫോൾട്ടായ അറിയിപ്പ് ശബ്‌ദം"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ഡിഫോൾട്ടായ അലാറം ശബ്‌ദം"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"സംരക്ഷിക്കുക"</string>
     <string name="units_settings" msgid="402325305096925886">"യൂണിറ്റുകൾ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"വേഗത"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ദൂരം"</string>
@@ -333,7 +341,7 @@
     <string name="modify_system_settings_description" msgid="5295023124419592452">"സിസ്‌റ്റം ക്രമീകരണം പരിഷ്‌ക്കരിക്കുന്നതിന് ഈ അനുമതി ആപ്പിനെ അനുവദിക്കുന്നു."</string>
     <string name="notification_access_title" msgid="1467340098885813473">"അറിയിപ്പ് ആക്‌സസ്"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"<xliff:g id="SERVICE">%1$s</xliff:g>-ന് അറിയിപ്പ് ആക്‌സസ് അനുവദിക്കണോ?"</string>
-    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"കോൺടാക്റ്റ് പേരുകൾ, നിങ്ങൾക്ക് ലഭിക്കുന്ന സന്ദേശങ്ങൾ എന്നിവ പോലുള്ള വ്യക്തിഗത വിവരങ്ങൾ ഉൾപ്പെടെ എല്ലാ അറിയിപ്പുകളും <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>-ന് വായിക്കാൻ കഴിയും. അറിയിപ്പുകൾ ഡിസ്‍മിസ് ചെയ്യാനോ അവയിലടങ്ങിയിരിക്കുന്ന പ്രവർത്തന ബട്ടണുകൾ ട്രിഗർ ചെയ്യാനോ ഇതിന് കഴിയും.\n\nആപ്പിന് \'ശല്യപ്പെടുത്തരുത്\' ഓണോ ഓഫോ ആക്കാനും ബന്ധപ്പെട്ട ക്രമീകരണം മാറ്റാനുമുള്ള ശേഷിയും ഇത് നൽകും."</string>
+    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"കോൺടാക്റ്റ് പേരുകൾ, നിങ്ങൾക്ക് ലഭിക്കുന്ന സന്ദേശങ്ങൾ എന്നിവ പോലുള്ള വ്യക്തിപരമായ വിവരങ്ങൾ ഉൾപ്പെടെ എല്ലാ അറിയിപ്പുകളും <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>-ന് വായിക്കാൻ കഴിയും. അറിയിപ്പുകൾ ഡിസ്‍മിസ് ചെയ്യാനോ അവയിലടങ്ങിയിരിക്കുന്ന പ്രവർത്തന ബട്ടണുകൾ ട്രിഗർ ചെയ്യാനോ ഇതിന് കഴിയും.\n\nആപ്പിന് \'ശല്യപ്പെടുത്തരുത്\' ഓണോ ഓഫോ ആക്കാനും ബന്ധപ്പെട്ട ക്രമീകരണം മാറ്റാനുമുള്ള ശേഷിയും ഇത് നൽകും."</string>
     <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> എന്നതിനുള്ള അറിയിപ്പ് ആക്‌സസ് നിങ്ങൾ ഓഫാക്കുന്നുവെങ്കിൽ, \'ശല്യപ്പെടുത്തരുത്\' ആക്‌സസും ഓഫാക്കപ്പെട്ടേക്കാം."</string>
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"ഓഫാക്കുക"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"റദ്ദാക്കുക"</string>
@@ -418,15 +426,15 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"ഈ വാഹനത്തിൽ മറ്റ് ഉപയോക്താക്കളുണ്ട്."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"വാഹനത്തിലെ ക്രമീകരണം പുനഃസജ്ജീകരിക്കുക"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"പുനഃസജ്ജീകരിക്കണോ?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"നിങ്ങളുടെ എല്ലാ വ്യക്തിഗത വിവരവും ഡൗൺലോഡ് ചെയ്‌ത ആപ്പുകളും മായ്‌ക്കണോ? നിങ്ങൾക്ക് ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാകില്ല!"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"നിങ്ങളുടെ എല്ലാ വ്യക്തിപരമായ വിവരങ്ങളും ഡൗൺലോഡ് ചെയ്‌ത ആപ്പുകളും മായ്‌ക്കണോ? നിങ്ങൾക്ക് ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാകില്ല!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"എല്ലാം മായ്ക്കുക"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"മായ്‌ക്കുന്നു"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"കാത്തിരിക്കുക..."</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"തീയതിയും സമയവും"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"തീയതി, സമയം, സമയ മേഖല, ഫോർമാറ്റുകൾ എന്നിവ സജ്ജീകരിക്കുക"</string>
-    <string name="date_time_auto" msgid="3570339569471779767">"സ്വമേധയാ ഉള്ള തീയതിയും സമയവും"</string>
+    <string name="date_time_auto" msgid="3570339569471779767">"സ്വയമേവ ഉള്ള തീയതിയും സമയവും"</string>
     <string name="date_time_auto_summary" msgid="3311706425095342759">"നെറ്റ്‌വർക്ക് നൽകുന്ന സമയം ഉപയോഗിക്കുക"</string>
-    <string name="zone_auto" msgid="3701878581920206160">"സ്വമേധയാ ഉള്ള സമയ മേഖല"</string>
+    <string name="zone_auto" msgid="3701878581920206160">"സ്വയമേവ ഉള്ള സമയ മേഖല"</string>
     <string name="zone_auto_summary" msgid="4345856882906981864">"നെറ്റ്‌വർക്ക് നൽകുന്ന സമയ മേഖല ഉപയോഗിക്കുക"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24 മണിക്കൂർ ഫോർമാറ്റ്"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"24 മണിക്കൂർ ഫോർമാറ്റ് ഉപയോഗിക്കുക"</string>
@@ -514,7 +522,7 @@
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"വെബിൽ നിങ്ങളുടെ അക്കൗണ്ടുകളിൽ വരുത്തുന്ന മാറ്റങ്ങളെല്ലാം ഉപകരണത്തിലേക്ക് സ്വയമേവ പകർത്തും.\n\nഫോണിൽ വരുത്തുന്ന മാറ്റങ്ങളെല്ലാം ചില അക്കൗണ്ടുകൾ സ്വയമേവ വെബ്ബിലേക്കും പകർത്തിയേക്കാം. ഇങ്ങനെയാണ് Google അക്കൗണ്ട് പ്രവർത്തിക്കുന്നത്."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"ഡാറ്റാ സ്വയം സമന്വയം ഓഫാക്കണോ?"</string>
     <string name="data_usage_auto_sync_off_dialog" msgid="5040873073016183315">"ഇത് ഡാറ്റ ലാഭിക്കും, എന്നാൽ അടുത്തിടെയുള്ള വിവരം ശേഖരിക്കാൻ, നിങ്ങൾ ഓരോ അക്കൗണ്ടും നേരിട്ട് സമന്വയിപ്പിക്കേണ്ടിവരും. അപ്‌ഡേറ്റുകൾ നടക്കുമ്പോൾ അറിയിപ്പുകൾ ലഭിക്കുകയുമില്ല."</string>
-    <string name="account_details_title" msgid="7529571432258448573">"അക്കൗണ്ട് വിവരം"</string>
+    <string name="account_details_title" msgid="7529571432258448573">"അക്കൗണ്ട് വിവരങ്ങൾ"</string>
     <string name="add_account_title" msgid="5988746086885210040">"അക്കൗണ്ട് ചേർക്കുക"</string>
     <string name="add_an_account" msgid="1072285034300995091">"ഒരു അക്കൗണ്ട് ചേർക്കുക"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"നിയന്ത്രിത പ്രൊഫൈലുകൾക്ക് അക്കൗണ്ടുകൾ ചേർക്കാനാകില്ല"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"പാറ്റേൺ തെറ്റാണ്"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ഒരു അൺലോക്ക് പാറ്റേൺ വരയ്‌ക്കേണ്ടതെങ്ങനെ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"പാറ്റേൺ സംരക്ഷിക്കുന്നതിൽ പിശക്"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"നിരവധി തെറ്റായ ശ്രമങ്ങൾ. <xliff:g id="NUMBER">%d</xliff:g> സെക്കൻഡിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="okay" msgid="4589873324439764349">"ശരി"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"സ്‌ക്രീൻ ലോക്ക് നീക്കം ചെയ്യണോ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ഇത് നിങ്ങളുടെ അക്കൗണ്ട് ആർക്കും ആക്‌സസ് ചെയ്യാൻ അനുവദിക്കും"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ഫീച്ചർ ലഭ്യമല്ല"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ഉപയോക്താവിനെ ചേർക്കാനാവില്ല"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"തിരയുക"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 3a6a17d..9e9b189 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settings_label" msgid="5147911978211079839">"Тохиргоо"</string>
     <string name="more_settings_label" msgid="3867559443480110616">"Бусад"</string>
-    <string name="display_settings" msgid="5325515247739279185">"Харуулах"</string>
+    <string name="display_settings" msgid="5325515247739279185">"Дэлгэц"</string>
     <string name="brightness" msgid="2919605130898772866">"Гэрэлтүүлгийн түвшин"</string>
     <string name="auto_brightness_title" msgid="9124647862844666581">"Дасан зохицох боломжтой гэрэлтүүлэг"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"Боломжтой гэрлийн гэрэлтүүлгийн түвшнийг оновчлох"</string>
@@ -32,13 +32,13 @@
     <string name="network_and_internet" msgid="4229023630498537530">"Сүлжээ &amp; интернэт"</string>
     <string name="mobile_network_settings" msgid="1708621113321368597">"Мобайл сүлжээ"</string>
     <plurals name="mobile_network_summary_count" formatted="false" msgid="6917348330386831454">
-      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> СИМ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> СИМ</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> SIM</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> SIM</item>
     </plurals>
-    <string name="mobile_network_active_sim" msgid="1901674954229832811">"Идэвхтэй / СИМ"</string>
-    <string name="mobile_network_inactive_sim" msgid="3644984830926224318">"Идэвхгүй / СИМ"</string>
-    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Идэвхтэй / Татаж авсан СИМ"</string>
-    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Идэвхгүй / Татаж авсан СИМ"</string>
+    <string name="mobile_network_active_sim" msgid="1901674954229832811">"Идэвхтэй / SIM"</string>
+    <string name="mobile_network_inactive_sim" msgid="3644984830926224318">"Идэвхгүй / SIM"</string>
+    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Идэвхтэй / Татаж авсан SIM"</string>
+    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Идэвхгүй / Татаж авсан SIM"</string>
     <string name="mobile_network_list_add_more" msgid="6174294462747070655">"Бусдыг нэмэх"</string>
     <string name="mobile_network_toggle_title" msgid="3515647310810280063">"Мобайл дата"</string>
     <string name="mobile_network_toggle_summary" msgid="8698267487987697148">"Мобайл сүлжээг ашиглан датад хандах"</string>
@@ -142,21 +142,28 @@
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Аюулгүй байдал"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Хувийн"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Байхгүй"</string>
-    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP Зурвас"</string>
-    <string name="wifi_ap_band_config" msgid="6143905484067008736">"AP зурвас сонгох"</string>
+    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"AP Мессеж"</string>
+    <string name="wifi_ap_band_config" msgid="6143905484067008736">"AP мессеж сонгох"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Автомат"</string>
-    <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2,4 Гц зурвас"</string>
-    <string name="wifi_ap_choose_5G" msgid="8561440488455528673">"5,0 Гц зурвас"</string>
-    <string name="wifi_ap_prefer_5G" msgid="8252845223773871750">"5,0 Гц зурвасыг тохиромжтой гэж үздэг"</string>
+    <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2,4 Гц мессеж"</string>
+    <string name="wifi_ap_choose_5G" msgid="8561440488455528673">"5,0 Гц мессеж"</string>
+    <string name="wifi_ap_prefer_5G" msgid="8252845223773871750">"5,0 Гц мессежийг тохиромжтой гэж үздэг"</string>
     <string name="wifi_ap_2G" msgid="5364135697314262014">"2,4 Гц"</string>
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5,0 Гц"</string>
-    <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Wi-Fi сүлжээний цэгт хамгийн багадаа нэг зурвас сонгоно уу:"</string>
+    <string name="wifi_ap_band_select_one" msgid="615578175244067396">"Wi-Fi сүлжээний цэгт хамгийн багадаа нэг мессеж сонгоно уу:"</string>
     <string name="tether_settings_title_all" msgid="4663704772599383169">"Сүлжээний цэг, модем болгох"</string>
     <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Сүлжээний цэгийг автоматаар унтраах"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Хэрэв төхөөрөмж холбогдоогүй бол Wi‑Fi сүлжээний цэг унтарна"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi-г асаах хүсэлтэй байна"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi-г унтраах хүсэлтэй байна"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Алдаа"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g>-тай ашиглах төхөөрөмж"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Төхөөрөмж олдсонгүй. Төхөөрөмжүүдийг асаалттай бөгөөд холбогдох боломжтой эсэхийг нь шалгана уу."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Дахин оролдох"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Ямар нэг асуудал гарлаа. Энэ апп төхөөрөмж сонгох хүсэлтийг цуцаллаа."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Амжилттай холбогдлоо"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Бүгдийг харуулах"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Хайж байна..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Нэргүй төхөөрөмж"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Хослуулсан төхөөрөмжүүд"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Утасны хонхны ая"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Мэдэгдлийн өгөгдмөл ая"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Сэрүүлгийн өгөгдмөл ая"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Хадгалах"</string>
     <string name="units_settings" msgid="402325305096925886">"Нэгж"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Хурд"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Зай"</string>
@@ -333,7 +341,7 @@
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Энэ зөвшөөрөл аппад системийн тохиргоог өөрчлөхийг зөвшөөрдөг."</string>
     <string name="notification_access_title" msgid="1467340098885813473">"Мэдэгдлийн хандалт"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"<xliff:g id="SERVICE">%1$s</xliff:g>-н мэдэгдлийн хандалтыг зөвшөөрөх үү?"</string>
-    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> таны харилцагчийн нэр, хүлээн авсан зурвасын текст зэрэг хувийн мэдээлэл бүхий бүх мэдэгдлийг унших боломжтой бөгөөд мэдэгдлийг хаах, тэдгээрийн доторх үйлдлийн товчлуурыг хэрэгсэхгүй болгох боломжтой. \n\nМөн энэ нь аппад \'Бүү саад бол\' тохиргоог асаах, унтраах болон үүнтэй холбоотой тохиргоог өөрчлөхийг зөвшөөрнө."</string>
+    <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> таны харилцагчийн нэр, хүлээн авсан мессежийн текст зэрэг хувийн мэдээлэл бүхий бүх мэдэгдлийг унших боломжтой бөгөөд мэдэгдлийг хаах, тэдгээрийн доторх үйлдлийн товчлуурыг хэрэгсэхгүй болгох боломжтой. \n\nМөн энэ нь аппад \'Бүү саад бол\' тохиргоог асаах, унтраах болон үүнтэй холбоотой тохиргоог өөрчлөхийг зөвшөөрнө."</string>
     <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"Та <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>-н мэдэгдлийн хандалтыг унтраасан тохиолдолд Бүү саад бол горимын хандалт мөн унтарна."</string>
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"Унтраах"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"Цуцлах"</string>
@@ -352,7 +360,7 @@
     <string name="system_setting_title" msgid="6864599341809463440">"Систем"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"Системийн шинэчлэлт"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Андройд хувилбар"</string>
-    <string name="security_patch" msgid="4794276590178386903">"Андройдын аюулгүй байдлын patch-н түвшин"</string>
+    <string name="security_patch" msgid="4794276590178386903">"Андройдын аюулгүй байдлын засварын түвшин"</string>
     <string name="hardware_info" msgid="3973165746261507658">"Загвар, техник хангамж"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Загвар: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Долгион баригчийн хувилбар"</string>
@@ -376,7 +384,7 @@
     <string name="license_title" msgid="936705938435249965">"Лиценз"</string>
     <string name="terms_title" msgid="5201471373602628765">"Ерөнхий нөхцөлүүд"</string>
     <string name="webview_license_title" msgid="6442372337052056463">"Системийн WebView-н лиценз"</string>
-    <string name="wallpaper_attributions" msgid="9201272150014500697">"Ханын зураг"</string>
+    <string name="wallpaper_attributions" msgid="9201272150014500697">"Дэлгэцийн зураг"</string>
     <string name="wallpaper_attributions_values" msgid="4292446851583307603">"Хиймэл дагуулын зураглал нийлүүлэгчид:\n© 2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
     <string name="model_info" msgid="4966408071657934452">"Загвар"</string>
     <string name="status_serial_number" msgid="9158889113131907656">"Серийн дугаар"</string>
@@ -511,7 +519,7 @@
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Өгөгдлийг автоматаар синк хийх"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Өгөгдлийг автоматаар сэргээхийг аппад зөвшөөрөх"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Өгөгдлийг автоматаар синк хийхийг асаах уу?"</string>
-    <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Таны вэб дээрээс бүртгэлдээ оруулсан аливаа өөрчлөлтийг таны төхөөрөмжид автоматаар хуулах болно.\n\nЗарим бүртгэл нь таны утсан дээрээ оруулсан аливаа өөрчлөлтийг вэб рүү автоматаар хуулж болзошгүй. Google бүртгэл ингэж ажилладаг."</string>
+    <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Таны веб дээрээс бүртгэлдээ оруулсан аливаа өөрчлөлтийг таны төхөөрөмжид автоматаар хуулах болно.\n\nЗарим бүртгэл нь таны утсан дээрээ оруулсан аливаа өөрчлөлтийг веб рүү автоматаар хуулж болзошгүй. Google бүртгэл ингэж ажилладаг."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"Өгөгдлийг автоматаар синк хийхийг унтраах уу?"</string>
     <string name="data_usage_auto_sync_off_dialog" msgid="5040873073016183315">"Энэ нь датаг хэмнэх боловч та сүүлийн үеийн мэдээллийг цуглуулахын тулд бүртгэл бүрийг гараар синк хийх шаардлагатай болно. Мөн шинэчлэлтийг хийх үед та мэдэгдэл хүлээн авахгүй."</string>
     <string name="account_details_title" msgid="7529571432258448573">"Бүртгэлийн мэдээлэл"</string>
@@ -519,8 +527,8 @@
     <string name="add_an_account" msgid="1072285034300995091">"Бүртгэл нэмэх"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Хязгаарлагдсан профайлууд бүртгэл нэмэх боломжгүй"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Бүртгэл хасах"</string>
-    <string name="really_remove_account_title" msgid="3555164432587924900">"Бүртгэлийг устгах уу?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Энэ бүртгэлийг устгаснаар үүний бүх зурвас, харилцагч болон бусад өгөгдлийг төхөөрөмжөөс устгана!"</string>
+    <string name="really_remove_account_title" msgid="3555164432587924900">"Бүртгэлийг хасах уу?"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Энэ бүртгэлийг хассанаар үүний бүх мессеж, харилцагч болон бусад өгөгдлийг төхөөрөмжөөс устгана!"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Бүртгэлийг хасаж чадсангүй."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Бүртгэл синк хийх"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"<xliff:g id="ID_2">%2$d</xliff:g>-с <xliff:g id="ID_1">%1$d</xliff:g> зүйлд синк асаалттай"</string>
@@ -558,15 +566,16 @@
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Аюулгүй байдлын үүднээс загвар тохируулах"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Устгах"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Цуцлах"</string>
-    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Таны түгжээ тайлах шинэ загвар"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Түгжээ тайлах загварыг зурах"</string>
+    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Таны шинэ түгжээ тайлах хээ"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Түгжээ тайлах хээг зурна уу"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Дуусаад хуруугаа аваарай"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Загварыг бичсэн"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Баталгаажуулахын тулд загварыг дахин зурна уу"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Баталгаажуулахын тулд хээг дахин зурна уу"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Хамгийн багадаа 4 цэг холбоно уу. Дахин оролдоно уу."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Загвар буруу байна"</string>
-    <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Түгжээг тайлах загварыг хэрхэн зурах вэ?"</string>
+    <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Түгжээг тайлах хээг хэрхэн зурах вэ?"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Загварыг хадгалахад алдаа гарлаа"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Хэт олон удаа буруу оруулсан байна. <xliff:g id="NUMBER">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
     <string name="okay" msgid="4589873324439764349">"ОК"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Дэлгэцийн түгжээг хасах уу?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ингэснээр хүн бүхэн таны бүртгэлд хандах боломжтой болно"</string>
@@ -574,7 +583,7 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Нууц үгээ оруулна уу"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Аюулгүй байдлын үүднээс ПИН тохируулах"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"ПИН-ээ дахин оруулах"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"ПИН хамгийн багадаа 4 оронтой цифр байх ёстой"</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"ПИН хамгийн багадаа 4 цифртэй байх ёстой"</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"Пин буруу байна. Хамгийн багадаа 4 цифр байх ёстой."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"ПИН таарахгүй байна"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"ПИН-г хадгалахад алдаа гарлаа"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 8becb4d..0d0e27d 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -157,13 +157,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ला वाय-फाय सुरू करू करायचे आहे"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ला वाय-फाय बंद करायचे आहे"</string>
     <string name="wifi_error" msgid="3105105447117289410">"एरर आली"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"डिव्हाइस <xliff:g id="APPNAME">%1$s</xliff:g> सह वापरा"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"डिव्हाइस सापडले नाही. डिव्हाइस सुरू केली आहेत आणि ती कनेक्ट करण्यासाठी उपलब्ध आहेत याची खात्री करा."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"पुन्हा प्रयत्न करा"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"काहीतरी गडबड झाली. अ‍ॅप्लिकेशनने डिव्हाइस निवडण्याची विनंती रद्द केली."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"कनेक्शन यशस्वी"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"सर्व दाखवा"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"शोधत आहे"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ब्लूटूथ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"निनावी डिव्हाइस"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"पेअर केलेले डिव्हाइस"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"नवीन डिव्हाइस पेअर करा"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"पेअर करण्यासाठी ब्लूटूथ सुरू होईल"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"डिव्हाइस डिस्‍कनेक्‍ट करायचे?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"तुमचे डिव्हाइस <xliff:g id="DEVICE_NAME">%1$s</xliff:g>वरून डिस्कनेक्ट होईल."</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"तुमचे वाहन <xliff:g id="DEVICE_NAME">%1$s</xliff:g> वरून डिस्कनेक्ट होईल."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"वाहनाचा ब्लूटूथ अ‍ॅड्रेस: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"डिव्हाइसचा ब्लूटूथ अ‍ॅड्रेस: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"वाहनाचे नाव"</string>
@@ -204,22 +211,23 @@
     <string name="keyboard_settings" msgid="1959697870618278081">"कीबोर्ड"</string>
     <string name="manage_keyboard" msgid="4045394766282200132">"कीबोर्ड व्यवस्थापित करा"</string>
     <string name="text_to_speech_settings" msgid="811985746199507343">"टेक्स्ट-टू-स्पीच आउटपुट"</string>
-    <string name="text_to_speech_preferred_engine_settings" msgid="2766782925699132256">"प्राधान्य असलेले इंजिन"</string>
-    <string name="text_to_speech_current_engine" msgid="8133107484909612597">"वर्तमान इंजिन"</string>
+    <string name="text_to_speech_preferred_engine_settings" msgid="2766782925699132256">"प्राधान्य असलेले इंजीन"</string>
+    <string name="text_to_speech_current_engine" msgid="8133107484909612597">"वर्तमान इंजीन"</string>
     <string name="tts_speech_rate" msgid="4512944877291943133">"स्पीच रेट"</string>
     <string name="tts_pitch" msgid="2389171233852604923">"पिच"</string>
     <string name="tts_reset" msgid="6289481549801844709">"रीसेट करा"</string>
     <string name="sound_settings" msgid="3072423952331872246">"ध्वनी"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"रिंग आवाज"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"नेव्हिगेशन आवाज"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"नेव्हिगेशन व्हॉल्यूम"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"रिंगटोन"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"सूचना"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"मीडिया"</string>
     <string name="media_volume_summary" msgid="2961762827637127239">"संगीत आणि व्हिडिओंसाठी व्हॉल्यूम सेट करा"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"अलार्म"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"फोनची रिंगटोन"</string>
-    <string name="notification_ringtone_title" msgid="8661716239594010288">"सूचनेचा डीफॉल्ट आवाज"</string>
+    <string name="notification_ringtone_title" msgid="8661716239594010288">"डीफॉल्ट सूचना आवाज"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"अलार्मचा डीफॉल्ट आवाज"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"सेव्ह करा"</string>
     <string name="units_settings" msgid="402325305096925886">"युनिट"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"वेग"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"अंतर"</string>
@@ -289,7 +297,7 @@
     <string name="application_version_label" msgid="8556889839783311649">"आवृत्त्या: %1$s"</string>
     <string name="runtime_permissions_summary_no_permissions_granted" msgid="6001439205270250021">"कोणत्याही परवानग्यांना मंजूरी दिली नाही"</string>
     <string name="runtime_permissions_summary_no_permissions_requested" msgid="4074220596273432442">"कोणत्याही परवानग्यांची विनंती केली नाही"</string>
-    <string name="storage_type_internal" msgid="8918688427078709570">"संचयमध्ये %s"</string>
+    <string name="storage_type_internal" msgid="8918688427078709570">"%s अंतर्गत स्टोरेजमध्ये"</string>
     <string name="data_usage_summary_title" msgid="4368024763485916986">"डेटा वापर"</string>
     <string name="data_usage_app_summary_title" msgid="5012851696585421420">"ॲप डेटा वापर"</string>
     <string name="computing_size" msgid="5791407621793083965">"गणना करत आहे…"</string>
@@ -297,7 +305,7 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> अतिरिक्त परवानग्या</item>
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> अतिरिक्त परवानगी</item>
     </plurals>
-    <string name="direct_boot_unaware_dialog_message_car" msgid="2857599310518724080">"टीप: रीबूट केल्यानंतर, तुम्ही तुमचे वाहन अनलॉक करेपर्यंत हे ॲप सुरू होऊ शकत नाही."</string>
+    <string name="direct_boot_unaware_dialog_message_car" msgid="2857599310518724080">"टीप: रीबूट केल्यानंतर, तुम्ही तुमचे वाहन अनलॉक करेपर्यंत हे अ‍ॅप सुरू होऊ शकत नाही."</string>
     <string name="assist_and_voice_input_settings" msgid="8813195157136637132">"साहाय्य आणि व्हॉइस इनपुट"</string>
     <string name="assist_app_settings" msgid="9085261410166776497">"साहाय्य अ‍ॅप"</string>
     <string name="assist_access_context_title" msgid="8034851731390785301">"स्क्रीनवरील मजकूर वापरा"</string>
@@ -405,7 +413,7 @@
     <string name="reset_network_select" msgid="2433825874868038739">"नेटवर्क निवडा"</string>
     <string name="reset_network_button_text" msgid="8374174455632765033">"सेटिंग्ज रीसेट करा"</string>
     <string name="reset_network_confirm_title" msgid="5255502723840197663">"रीसेट करायचे?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"सर्व नेटवर्क सेटिंग्ज रीसेट करायच्या? तुम्ही ही क्रिया पूर्ववत करू शकत नाही!"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"सर्व नेटवर्क सेटिंग्ज रीसेट करायची? तुम्ही ही क्रिया पूर्ववत करू शकत नाही!"</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"सेटिंग्ज रीसेट करा"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"नेटवर्क सेटिंग्ज रीसेट केल्या आहेत"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"ॲप प्राधान्ये रीसेट करा"</string>
@@ -559,17 +567,18 @@
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"साफ करा"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"रद्द करा"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"तुमचा नवीन अनलॉक पॅटर्न"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"अनलॉक पॅटर्न रेखाटा"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"अनलॉक पॅटर्न रेखांकित करा"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"पूर्ण झाल्यावर बोट काढा"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"पॅटर्न रेकॉर्ड झाला"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"निश्चित करण्यासाठी पुन्हा रेखांकित करा"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"खात्री करण्यासाठी पॅटर्न पुन्हा रेखांकित करा"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"किमान ४ बिंदू जोडा. पुन्हा प्रयत्न करा."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"चुकीचा पॅटर्न"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"अनलॉक पॅटर्न कसा काढावा"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"पॅटर्न सेव्ह करताना एरर आली"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"बरेच चुकीचे प्रयत्‍न. <xliff:g id="NUMBER">%d</xliff:g> सेकंदांमध्‍ये पुन्हा प्रयत्न करा."</string>
     <string name="okay" msgid="4589873324439764349">"ठीक आहे"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"स्क्रीन लॉक काढायचा?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"तुमचे खाते ॲक्‍सेस करण्‍यासाठी हे कुणालाही अनुमती देते"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"तुमचे खाते ॲक्‍सेस करण्‍यासाठी हे कोणालाही अनुमती देईल"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"तुमचा पिन एंटर करा"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"तुमचा पासवर्ड एंटर करा"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"सुरक्षिततेसाठी पिन सेट करा"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"डिसमिस करा"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ड्राइव्ह करताना वैशिष्ट्य उपलब्ध नाही"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ड्राइव्ह करत असताना वापरकर्त्याला जोडू शकत नाही"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"शोधा"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index a594b55..0a0bde6 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> mahu menghidupkan Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> mahu mematikan Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Ralat"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Peranti untuk digunakan dengan <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Tiada peranti ditemui. Pastikan peranti dihidupkan dan tersedia untuk menyambung."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Cuba lagi"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Sesuatu telah berlaku. Aplikasi telah membatalkan permintaan untuk memilih peranti."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Sambungan berjaya"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Tunjukkan semua"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Mencari"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Peranti tidak bernama"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Peranti gandingan"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Nada dering telefon"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Bunyi pemberitahuan lalai"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Bunyi penggera lalai"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Simpan"</string>
     <string name="units_settings" msgid="402325305096925886">"Unit"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Kelajuan"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Jarak"</string>
@@ -280,7 +288,7 @@
     <string name="disable_text" msgid="4358165448648990820">"Lumpuhkan"</string>
     <string name="enable_text" msgid="1794971777861881238">"Dayakan"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Nyahpasang"</string>
-    <string name="app_disable_dialog_text" msgid="7731155411006654025">"Jika anda melumpuhkan apl ini, Android dan apl lain mungkin tidak berfungsi seperti yang dimaksudkan lagi."</string>
+    <string name="app_disable_dialog_text" msgid="7731155411006654025">"Jika anda melumpuhkan apl ini, Android dan apl lain mungkin tidak berfungsi seperti yang sepatutnya."</string>
     <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Lumpuhkan apl"</string>
     <string name="not_installed" msgid="4218816013370552746">"Tidak dipasang untuk pengguna ini"</string>
     <string name="permissions_label" msgid="2701446753515612685">"Kebenaran"</string>
@@ -412,7 +420,7 @@
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Tindakan ini akan menetapkan semula semua pilihan untuk:\n\n"<li>"Apl dilumpuhkan"</li>\n<li>"Pemberitahuan apl dilumpuhkan"</li>\n<li>"Aplikasi lalai untuk tindakan"</li>\n<li>"Sekatan data latar belakang untuk apl"</li>\n<li>"Sebarang sekatan kebenaran"</li>\n\n"Anda tidak akan kehilangan sebarang data apl."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Tetapkan semula apl"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Pilihan apl telah ditetapkan semula"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Padamkan semua data (ttpn semula kilang)"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Padam semua data (tetapan semula kilang)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Tindakan ini akan memadamkan semua data daripada unit kepala kenderaan anda, termasuk:\n\n"<li>"Akaun Google anda"</li>\n<li>"Data dan tetapan sistem dan apl"</li>\n<li>"Apl yang dimuat turun"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Pada masa ini, anda telah dilog masuk ke akaun berikut:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Terdapat pengguna lain pada kenderaan ini."</string>
@@ -567,9 +575,10 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Corak salah"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Cara melukis corak buka kunci"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Ralat semasa menyimpan corak"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Terlalu banyak percubaan yang salah. Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Alih keluar kunci skrin?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tindakan ini membenarkan sesiapa sahaja mengakses akaun anda"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Tindakan ini membolehkan sesiapa sahaja mengakses akaun anda"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Masukkan PIN anda"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Masukkan kata laluan anda"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Untuk keselamatan, tetapkan PIN"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 62fa9a4..a76fcb5 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -48,7 +48,7 @@
     <string name="sim_change_data_message" msgid="4669775284395549069">"မိုဘိုင်းဒေတာအတွက် <xliff:g id="CARRIER2_0">%2$s</xliff:g> အသုံးပြုနေသည်။ <xliff:g id="CARRIER1">%1$s</xliff:g> သို့ပြောင်းလျှင် မိုဘိုင်းဒေတာအတွက် <xliff:g id="CARRIER2_1">%2$s</xliff:g> ကို အသုံးပြုတော့မည် မဟုတ်ပါ။"</string>
     <string name="sim_change_data_ok" msgid="2348804996223271081">"<xliff:g id="CARRIER">%1$s</xliff:g> သုံးရန်"</string>
     <string name="roaming_title" msgid="6218635014519017734">"ပြင်ပကွန်ရက်သို့ ချိတ်ဆက်ခြင်း"</string>
-    <string name="roaming_summary" msgid="7476127740259728901">"ပြင်ပကွန်ရက် သုံးသောအခါ ဒေတာဝန်ဆောင်မှုများနှင့် ချိတ်ဆက်သည်"</string>
+    <string name="roaming_summary" msgid="7476127740259728901">"ပြင်ပကွန်ရက်သုံးလျှင် ဒေတာဝန်ဆောင်မှုများနှင့် ချိတ်ဆက်ရန်"</string>
     <string name="roaming_alert_title" msgid="4433901635766775763">"ပြင်ပကွန်ရက် ဒေတာသုံးခွင့်ပြုမလား။"</string>
     <string name="roaming_warning" msgid="4908184914868720704">"ပြင်ပကွန်ရက်နှင့် ချိတ်ဆက်သော အသုံးပြုခများ ကျသင့်နိုင်သည်။"</string>
     <string name="data_usage_settings" msgid="7877132994777987848">"ဒေတာသုံးစွဲမှု"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> က Wi-Fi ဖွင့်လိုသည်"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> က Wi-Fi ပိတ်လိုသည်"</string>
     <string name="wifi_error" msgid="3105105447117289410">"အမှား"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> နှင့် အသုံးပြုရန် ကိရိယာ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"မည်သည့်စက်မျှ မတွေ့ပါ။ စက်များဖွင့်ထားပြီး ချိတ်ဆက်နိုင်ခြင်း ရှိမရှိ စစ်ဆေးပါ။"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ထပ်စမ်းကြည့်ရန်"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"တစ်ခုခု ဖြစ်သွားသည်။ အပလီကေးရှင်းက ကိရိယာရွေးရန် တောင်းဆိုချက်ကို ပယ်ဖျက်လိုက်သည်။"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ချိတ်ဆက်ပြီးပါပြီ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"အားလုံးပြရန်"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ရှာဖွေနေသည်…"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ဘလူးတုသ်"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"အမည်ပေးမထားသော စက်"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"တွဲချိတ်ထားသည့် စက်များ"</string>
@@ -199,7 +206,7 @@
     <string name="bluetooth_device_picker" msgid="673238198452345475">"ဘလူးတုသ် စက်ကိရိယာကို ရွေးပါ"</string>
     <string name="language_settings" msgid="2079258598337245546">"ဘာသာစကားများ"</string>
     <string name="languages_and_input_settings" msgid="3672322610529408248">"ဘာသာစကားနှင့် ထည့်သွင်းမှုစနစ်"</string>
-    <string name="language_picker_list_suggested_header" msgid="7593893806003415948">"အကြံပြုထားသော"</string>
+    <string name="language_picker_list_suggested_header" msgid="7593893806003415948">"အကြံပြုထားသည်"</string>
     <string name="language_picker_list_all_header" msgid="1577387973934368428">"ဘာသာစကားအားလုံး"</string>
     <string name="keyboard_settings" msgid="1959697870618278081">"လက်ကွက်"</string>
     <string name="manage_keyboard" msgid="4045394766282200132">"လက်ကွက်များ စီမံခန့်ခွဲရန်"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ဖုန်းမြည်သံ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"အကြောင်းကြားချက် မူရင်းအသံ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"မူရင်းနှိုးစက်သံ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"သိမ်းရန်"</string>
     <string name="units_settings" msgid="402325305096925886">"ယူနစ်များ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"မြန်နှုန်း"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"အကွာအဝေး"</string>
@@ -339,7 +347,7 @@
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"ပိတ်ရန်"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"မလုပ်တော့"</string>
     <string name="premium_sms_access_title" msgid="1409118461646148686">"ပရီမီယံ SMS သုံးခွင့်ရှိခြင်း"</string>
-    <string name="premium_sms_access_description" msgid="7119026067677052169">"ပရီမီယံ SMS သည်ငွေကြေးကုန်ကျနိုင်ပြီး သင့်ဖုန်းဝန်ဆောင်မှုပေးသူ၏ ငွေတောင်းခံလွှာသို့ ပေါင်း၍ ထည့်သွင်းပါမည်။ အက်ပ်တစ်ခုကို သင်ခွင့်ပြုလိုက်လျှင် ၎င်းအက်ပ်ကိုအသုံးပြုပြီး ပရီမီယံ SMS ပို့နိုင်မည်ဖြစ်သည်။"</string>
+    <string name="premium_sms_access_description" msgid="7119026067677052169">"ပရီမီယံ SMS သည်ငွေကြေးကုန်ကျနိုင်ပြီး သင့်ဖုန်းကုမ္ပဏီ၏ ငွေတောင်းခံလွှာသို့ ပေါင်း၍ ထည့်သွင်းပါမည်။ အက်ပ်တစ်ခုကို သင်ခွင့်ပြုလိုက်လျှင် ၎င်းအက်ပ်ကိုအသုံးပြုပြီး ပရီမီယံ SMS ပို့နိုင်မည်ဖြစ်သည်။"</string>
     <string name="usage_access_title" msgid="7153427122072303254">"အသုံးပြုမှု ကြည့်ခြင်း"</string>
     <string name="usage_access_description" msgid="2413168719257435422">"ဝင်ရောက်အသုံးပြုခွင့်သည် အက်ပ်တစ်ခုအား သင်အသုံးပြုနေသော အခြားအက်ပ်များနှင့် သုံးသည့် အကြိမ်ရေနှင့်တကွ သင့်ဖုန်း၏ ဝန်ဆောင်မှုဌာန၊ ဘာသာစကား ဆက်တင်နှင့် အခြားအသေးစိတ်များကို ခြေရာခံရန် ခွင့်ပြုသည်။"</string>
     <string name="wifi_control_title" msgid="5660436566907731929">"Wi-Fi ထိန်းချုပ်မှု"</string>
@@ -390,7 +398,7 @@
       <item quantity="other">သင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်ရန် အဆင့် <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> ဆင့် လိုပါသေးသည်။</item>
       <item quantity="one">သင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်ရန် အဆင့် <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> ဆင့် လိုပါသေးသည်။</item>
     </plurals>
-    <string name="show_dev_on" msgid="5339077400040834808">"သင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်သွားပါပြီ။"</string>
+    <string name="show_dev_on" msgid="5339077400040834808">"သင်သည် ယခု ဆော့ဖ်ဝဲအင်ဂျင်နီယာ တစ်ဦး ဖြစ်နေပါပြီ။"</string>
     <string name="show_dev_already" msgid="1678087328973865736">"မလိုပါ၊ သင်က ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်ပြီးသားပါ။"</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"တီထွင်သူများရွေးစရာ"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"ပြင်ဆင်သတ်မှတ်ရန် ရွေးစရာများ"</string>
@@ -419,7 +427,7 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"ဤစက်ပစ္စည်းပေါ်တွင် အခြားအသုံးပြုသူများလည်း ရှိသည်။"</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"စက်ပစ္စည်း ပြင်ဆင်သတ်မှတ်ရန်"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"ပြင်ဆင်သတ်မှတ်လိုပါသလား။"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"သင့်ကိုယ်ရေးကိုယ်တာအချက်လက်များနှင့် ဒေါင်းလုဒ်ချထားသောအက်ပ်များ အားလုံးကို ဖျက်မည်လား။ ဤလုပ်ဆောင်ချက်ကို တစ်ဆင့် နောက်ပြန်၍ မရပါ။"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"သင့်ပုဂ္ဂိုလ်ရေးအချက်အလက်များနှင့် ဒေါင်းလုဒ်လုပ်ထားသောအက်ပ်များကို ဖျက်မလား။ ဤလုပ်ဆောင်ချက်ကို ပြန်ပြင်၍မရပါ!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"အားလုံးကိုဖျက်ရန်"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"ဖျက်နေသည်"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"ခဏစောင့်ပါ..."</string>
@@ -551,7 +559,7 @@
     <string name="continue_button_text" msgid="5129979170426836641">"ဆက်လုပ်ရန်"</string>
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"ထပ်လုပ်ရန်"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"ကျော်ရန်"</string>
-    <string name="set_screen_lock" msgid="5239317292691332780">"မျက်နှာပြင်လော့ခ်တစ်ခု သတ်မှတ်ခြင်း"</string>
+    <string name="set_screen_lock" msgid="5239317292691332780">"မျက်နှာပြင်လော့ခ် သတ်မှတ်ခြင်း"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"သင့် PIN နံပါတ် ရွေးချယ်ခြင်း"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"သင့်လော့ခ်ဖွင့်ပုံစံ ရွေးပါ"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"သင့်စကားဝှက်ကိုရွေးချယ်ပါ"</string>
@@ -568,6 +576,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ပုံစံ မှားနေသည်"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"လော့ခ်ဖွင့်ရန်ပုံစံ ဆွဲနည်း"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ပုံစံကို သိမ်းရာတွင် အမှားရှိနေသည်"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"အလွန်များသည့် မမှန်ကန်သော ကြိုးစားမှုများရှိသည်။ <xliff:g id="NUMBER">%d</xliff:g> စက္ကန့်ကြာမှ ထပ်မံကြိုးစားပါ။"</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"မျက်နှာပြင်လော့ခ် ဖယ်လိုသလား။"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"၎င်းက မည်သူ့ကိုမဆို သင့်အကောင့်ထဲ ဝင်ခွင့်ပေးမည်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 337fbf9..c8685e6 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ønsker å slå på Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ønsker å slå av Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Feil"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Enhet som skal brukes med <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Fant ingen enheter. Sørg for at enhetene er slått på og tilgjengelige for tilkobling."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Prøv igjen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Noe dukket opp. Appen har kansellert forespørselen om å velge en enhet."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Tilkoblingen var vellykket"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Vis alle"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Søker"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Enhet uten navn"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Tilkoblede enheter"</string>
@@ -217,9 +224,10 @@
     <string name="media_volume_title" msgid="6697416686272606865">"Medier"</string>
     <string name="media_volume_summary" msgid="2961762827637127239">"Volum for musikk og video"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Alarm"</string>
-    <string name="ringtone_title" msgid="8370531086214517972">"Telefonringelyd"</string>
+    <string name="ringtone_title" msgid="8370531086214517972">"Ringetone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standard varsellyd"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standard alarmlyd"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Lagre"</string>
     <string name="units_settings" msgid="402325305096925886">"Enheter"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hastighet"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Avstand"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Feil mønster"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Slik tegner du et opplåsingsmønster"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Feil ved lagring av mønster"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"For mange ugyldige forsøk. Prøv på nytt om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Vil du fjerne skjermlåsen?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Dette gir hvem som helst tilgang til kontoen din"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 7ee9d21..acb8147 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -157,16 +157,23 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi सक्रिय गर्न चाहन्छ"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi निष्क्रिय पार्न चाहन्छ"</string>
     <string name="wifi_error" msgid="3105105447117289410">"त्रुटि"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> प्रयोग गरिने यन्त्र"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"कुनै पनि यन्त्र फेला परेन। यन्त्रहरू सक्रिय हुनुका साथै जडान गर्नका लागि उपलब्ध भएको कुरा सुनिश्चित गर्नुहोस्।"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"फेरि प्रयास गर्नुहोस्"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"केही चिज गडबड भयो। यो अनुप्रयोगले कुनै यन्त्र छनौट गर्नेसम्बन्धी अनुरोध रद्द गरेको छ।"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"सफलतापूर्वक जोडियो"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"सबै देखाउनुहोस्"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"खोजी गर्दै"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ब्लुटुथ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"बेनामी यन्त्र"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"जोडा बनाइएका यन्त्रहरू"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"नयाँ यन्त्रलाई जोडा बनाउनुहोस्"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"नयाँ यन्त्रको जोडा बनाउनुहोस्"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"जोडा बनाउनका लागि ब्लुटुथ सक्रिय हुने छ"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"यन्त्र विच्छेद गर्ने हो?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"तपाईंको यन्त्र <xliff:g id="DEVICE_NAME">%1$s</xliff:g> बाट विच्छेद हुने छ।"</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"सवारी साधनको ब्लुटुथ ठेगाना: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"यन्त्रको ब्लुटुथ ठेगाना: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
-    <string name="bluetooth_name" msgid="2609869978821094114">"यन्त्रको नाम"</string>
+    <string name="bluetooth_name" msgid="2609869978821094114">"गाडीको नाम"</string>
     <string name="bluetooth_rename_vehicle" msgid="5769424875066563154">"यो सवारी साधनको पुनः नामकरण गर्नुहोस्"</string>
     <string name="bluetooth_rename_device" msgid="8406868875363878712">"यन्त्रको पुनः नामकरण गर्नुहोस्"</string>
     <string name="bluetooth_rename_button" msgid="2397892174725986383">"पुनः नामकरण गर्नुहोस्"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"फोनको रिङटोन"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"सूचनाको पूर्वनिर्धारित ध्वनि"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"अलार्मको पूर्वनिर्धारित ध्वनि"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"सुरक्षित गर्नुहोस्"</string>
     <string name="units_settings" msgid="402325305096925886">"एकाइहरू"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"गति"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"दूरी"</string>
@@ -271,9 +279,9 @@
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"एप तथा सूचनाहरू"</string>
     <string name="all_applications" msgid="7798210477486822168">"सबै एपहरू देखाउनुहोस्"</string>
     <string name="default_applications" msgid="1558183275638697087">"पूर्वनिर्धारित एपहरू"</string>
-    <string name="app_permissions" msgid="32799922508313948">"अनुप्रयोगसम्बन्धी अनुमति"</string>
+    <string name="app_permissions" msgid="32799922508313948">"एपसम्बन्धी अनुमति"</string>
     <string name="app_permissions_summary" msgid="1842858532315056367">"<xliff:g id="APPS">%1$s</xliff:g> प्रयोग गरिरहेका एपहरू"</string>
-    <string name="applications_settings" msgid="794261395191035632">"अनुप्रयोगसम्बन्धी जानकारी"</string>
+    <string name="applications_settings" msgid="794261395191035632">"एपसम्बन्धी जानकारी"</string>
     <string name="force_stop" msgid="2153183697014720520">"जबर्जस्ती रोक्नुहोस्"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"जबरजस्ती रोक्ने हो?"</string>
     <string name="force_stop_dialog_text" msgid="4354954014318432599">"तपाईंले कुनै एपलाई जबरजस्ती रोक्नुभयो भने त्यसले सही तरिकाले काम नगर्न सक्छ।"</string>
@@ -309,7 +317,7 @@
     <string name="app_list_preference_none" msgid="7753357799926715901">"कुनै पनि होइन"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"चयन गरिएको"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"सहायकले तपाईंको स्क्रिनमा देख्न सकिने वा अनुप्रयोगहरूभित्र पहुँच राख्न सकिने जानकारीलगायत तपाईंको प्रणालीमा प्रयोगमा रहेका अनुप्रयोगहरूबारे जानकारी पढ्न सक्ने छ।"</string>
-    <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;तपाईं यो अनुप्रयोगमाथि भरोसा गर्नुहुन्छ भन्ने कुरा सुनिश्चित गर्नुहोस्&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google Autofill&gt;%1$s&lt;/xliff:g&gt; यस अनुप्रयोगले स्वतः भर्न सकिने कुराहरूको निर्धारण गर्न तपाईंको स्क्रिनमा भएका वस्तुहरूको प्रयोग गर्छ।"</string>
+    <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;तपाईं यो एपमाथि भरोसा गर्नुहुन्छ भन्ने कुरा सुनिश्चित गर्नुहोस्&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google Autofill&gt;%1$s&lt;/xliff:g&gt; यस अनुप्रयोगले स्वतः भर्न सकिने कुराहरूको निर्धारण गर्न तपाईंको स्क्रिनमा भएका वस्तुहरूको प्रयोग गर्छ।"</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"सेवा थप्नुहोस्"</string>
     <string name="app_launch_domain_links_title" msgid="774480184927726651">"लिंकहरू खोल्दै"</string>
     <string name="domain_url_section_title" msgid="9070403140947787214">"स्थापना गरिएका एपहरू"</string>
@@ -338,7 +346,7 @@
     <string name="notification_listener_revoke_warning_confirm" msgid="2759583507454984812">"निष्क्रिय पार्नुहोस्"</string>
     <string name="notification_listener_revoke_warning_cancel" msgid="4399941651358241154">"रद्द गर्नुहोस्"</string>
     <string name="premium_sms_access_title" msgid="1409118461646148686">"प्रिमियम SMS सुविधामाथिको पहुँच"</string>
-    <string name="premium_sms_access_description" msgid="7119026067677052169">"प्रिमियम SMS सुविधा सक्रिय गर्नाले तपाईंलाई पैसा लाग्न सक्छ र उक्त लागत तपाईंको सेवा प्रदायकलाई तिर्नु पर्ने बिलमा जोडिने छ। तपाईंले अनुप्रयोगका लागि अनुमति सक्षम पार्नुभएका खण्डमा तपाईं त्यस एपको प्रयोग गरेर प्रिमियम SMS पठाउन सक्नु हुने छ।"</string>
+    <string name="premium_sms_access_description" msgid="7119026067677052169">"प्रिमियम SMS सुविधा सक्रिय गर्नाले तपाईंलाई पैसा लाग्न सक्छ र उक्त लागत तपाईंको सेवा प्रदायकलाई तिर्नु पर्ने बिलमा जोडिने छ। तपाईंले एपका लागि अनुमति सक्षम पार्नुभएका खण्डमा तपाईं त्यस एपको प्रयोग गरेर प्रिमियम SMS पठाउन सक्नु हुने छ।"</string>
     <string name="usage_access_title" msgid="7153427122072303254">"प्रयोगसम्बन्धी पहुँच"</string>
     <string name="usage_access_description" msgid="2413168719257435422">"प्रयोगको पहुँचले एपलाई तपाईंले आफ्नो सेवा प्रदायक, भाषासम्बन्धी सेटिङ र अन्य विवरणहरूसहित अन्य कुन कुन एपहरू गरिरहनुभएको छ र कत्तिको प्रयोग गर्नुहुन्छ भन्ने कुरा ट्र्याक गर्न दिन्छ।"</string>
     <string name="wifi_control_title" msgid="5660436566907731929">"Wi-Fi को नियन्त्रण"</string>
@@ -357,7 +365,7 @@
     <string name="hardware_info_summary" msgid="8262576443254075921">"मोडेल: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"बेसब्यान्ड संस्करण"</string>
     <string name="kernel_version" msgid="7327212934187011508">"कर्नेल संस्करण"</string>
-    <string name="build_number" msgid="3997326631001009102">"बिल्डको नम्बर"</string>
+    <string name="build_number" msgid="3997326631001009102">"बिल्ड नम्बर"</string>
     <string name="bluetooth_mac_address" msgid="7641425947941688072">"ब्लुटुथ ठेगाना"</string>
     <string name="device_info_not_available" msgid="2095601973977376655">"उपलब्ध छैन"</string>
     <string name="device_status_activity_title" msgid="4083567497305368200">"स्थिति"</string>
@@ -389,7 +397,7 @@
       <item quantity="other">तपाईं अब एउटा विकासकर्ता हुनबाट <xliff:g id="STEP_COUNT_1">%1$d</xliff:g>चरण टाढा हुनुहुन्छ।</item>
       <item quantity="one">तपाईं अब एउटा विकासकर्ता हुनबाट <xliff:g id="STEP_COUNT_0">%1$d</xliff:g>चरण टाढा हुनुहुन्छ।</item>
     </plurals>
-    <string name="show_dev_on" msgid="5339077400040834808">"तपाईं अब एउटा विकासकर्ता हुनुहुन्छ!"</string>
+    <string name="show_dev_on" msgid="5339077400040834808">"तपाईं अब एउटा विकासकर्ता हुनुभएको छ!"</string>
     <string name="show_dev_already" msgid="1678087328973865736">"आवश्यक छैन, तपाईं आफैँ नै एउटा विकासकर्ता हुनुहुन्छ।"</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"विकासकर्ताका विकल्पहरू"</string>
     <string name="reset_options_title" msgid="4388902952861833420">"रिसेटका विकल्पहरू"</string>
@@ -408,12 +416,12 @@
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"नेटवर्कसम्बन्धी सबै सेटिङहरू रिसेट गर्ने हो? तपाईं यो कार्य अन्डू गर्न सक्नुहुन्न!"</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"सेटिङहरू रिसेट गर्नुहोस्"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"नेटवर्कसम्बन्धी सेटिङहरू रिसेट गरिएको छ"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"अनुप्रयोगका प्राथमिकताहरू रिसेट गर्नुहोस्"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"यस कार्यले निम्न सुविधाहरूका सबै प्राथमिकताहरूलाई रिसेट गर्ने छ:\n\n"<li>"असक्षम पारिएका अनुप्रयोगहरू"</li>\n<li>"असक्षम पारिएका अनुप्रयोगका सूचनाहरू"</li>\n<li>"कारबाहीका लागि पूर्वनिर्धारित अनुप्रयोगहरू"</li>\n<li>"अनुप्रयोगका लागि पृष्ठभूमिका डेटासम्बन्धी बन्देजहरू"</li>\n<li>"अनुमतिसम्बन्धी सबै बन्देजहरू"</li>\n\n"तपाईं एपको कुनै पनि डेटा गुमाउनु हुने छैन।"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"एपका प्राथमिकताहरू रिसेट गर्नुहोस्"</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"यस कार्यले निम्न सुविधाहरूका सबै प्राथमिकताहरूलाई रिसेट गर्ने छ:\n\n"<li>"असक्षम पारिएका अनुप्रयोगहरू"</li>\n<li>"असक्षम पारिएका एपका सूचनाहरू"</li>\n<li>"कारबाहीका लागि पूर्वनिर्धारित अनुप्रयोगहरू"</li>\n<li>"एपका लागि पृष्ठभूमिका डेटासम्बन्धी बन्देजहरू"</li>\n<li>"अनुमतिसम्बन्धी सबै बन्देजहरू"</li>\n\n"तपाईं एपको कुनै पनि डेटा गुमाउनु हुने छैन।"</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"एपहरू रिसेट गर्नुहोस्"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"अनुप्रयोगका प्राथमिकताहरू रिसेट गरिएको छ"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"एपका प्राथमिकताहरू रिसेट गरिएको छ"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"सबै डेटा मेटाउनुहोस् (फ्याक्ट्री रिसेट गर्नुहोस्)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"यस कार्यले तपाईंको सवारी साधनाको मुख्य भागबाट सम्पूर्ण डेटा मेटाउने छ, जसमा निम्न कुराहरू पर्दछन्:\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र अनुप्रयोगका डेटा तथा सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका एपहरू"</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"यस कार्यले तपाईंको सवारी साधनाको मुख्य भागबाट सम्पूर्ण डेटा मेटाउने छ, जसमा निम्न कुराहरू पर्दछन्:\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र एपका डेटा तथा सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका एपहरू"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"तपाईं अहिले निम्न खाताहरूमा साइन इन हुनुहुन्छ:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"यस सवारी साधनमा अन्य प्रयोगकर्ताहरू छन्।"</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"सवारी साधन रिसेट गर्नुहोस्"</string>
@@ -480,9 +488,9 @@
     <string name="current_user_name" msgid="3813671533249316823">"तपाईं (%1$s)"</string>
     <string name="user_name_label" msgid="3210832645046206845">"नाम"</string>
     <string name="user_summary_not_set_up" msgid="1473688119241224145">"सेटअप गरिएको छैन"</string>
-    <string name="edit_user_name_title" msgid="6890782937520262478">"प्रयोगकर्ताको नाम सम्पादन गर्नु…"</string>
+    <string name="edit_user_name_title" msgid="6890782937520262478">"युजरनेम सम्पादन गर्नु…"</string>
     <string name="name_input_blank_error" msgid="2088850865880984123">"फिल्ड खाली हुनु हुँदैन।"</string>
-    <string name="name_input_invalid_error" msgid="3523545780580744273">"प्रविष्टि गरिएको प्रयोगकर्ताको नाम अमान्य छ।"</string>
+    <string name="name_input_invalid_error" msgid="3523545780580744273">"प्रविष्टि गरिएको युजरनेम अमान्य छ।"</string>
     <string name="users_list_title" msgid="770764290290240909">"प्रयोगकर्ताहरू"</string>
     <string name="user_details_admin_title" msgid="3530292857178371891">"%1$s लाई अनुमति प्रदान गरियो"</string>
     <string name="storage_settings_title" msgid="8957054192781341797">"भण्डारण"</string>
@@ -501,7 +509,7 @@
     <string name="storage_clear_cache_btn_text" msgid="8449547925966775612">"क्यास हटाउनुहोस्"</string>
     <string name="storage_clear_data_dlg_title" msgid="5863775997588969879">"एपको डेटा मेटाउने हो?"</string>
     <string name="storage_clear_data_dlg_text" msgid="795055288575727801">"यस एपका सम्पूर्ण डेटा स्थायी रूपमा मेटाइने छ। यसमा सम्पूर्ण फाइल, सेटिङ, खाता, डेटाबेस आदि पर्दछन्।"</string>
-    <string name="storage_clear_failed_dlg_text" msgid="6710485971686866306">"अनुप्रयोगका लागि भण्डारण खाली गर्न सकिएन।"</string>
+    <string name="storage_clear_failed_dlg_text" msgid="6710485971686866306">"एपका लागि भण्डारण खाली गर्न सकिएन।"</string>
     <string name="storage_unmount_success" msgid="1553591517580407021">"<xliff:g id="NAME">%1$s</xliff:g> सुरक्षित तवरले निकालिएको छ"</string>
     <string name="storage_unmount_failure" msgid="4591934911541762883">"<xliff:g id="NAME">%1$s</xliff:g> सुरक्षित तवरले निकाल्न सकिएन"</string>
     <string name="accounts_settings_title" msgid="436190037084293471">"खाताहरू"</string>
@@ -509,7 +517,7 @@
     <string name="no_accounts_added" msgid="5148163140691096055">"कुनै पनि खाता थपिएन"</string>
     <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> को खाता"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"डेटा स्वतः सिंक गर्नुहोस्"</string>
-    <string name="account_auto_sync_summary" msgid="6963837893148304128">"अनुप्रयोगहरूलाई डेटा स्वतः पुनः ताजा गर्न दिनुहोस्"</string>
+    <string name="account_auto_sync_summary" msgid="6963837893148304128">"एपहरूलाई डेटा स्वतः पुनः ताजा गर्न दिनुहोस्"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"डेटा स्वतः सिंक गर्ने कार्य सक्रिय गर्ने हो?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"तपाईंले वेबमार्फत आफ्नो खातामा गर्ने सबै परिवर्तनहरू स्वतः तपाईंको यन्त्रमा प्रतिलिपि गरिने छन्।\n\nकेही खाताहरूले तपाईंले फोनमा गर्ने सबै परिवर्तनहरूलाई वेबमा स्वतः प्रतिलिपि गर्न पनि सक्छन्। Google खाताले यसरी काम गर्दछ।"</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"डेटा स्वतः सिंक गर्ने कार्य निष्क्रिय पार्ने हो?"</string>
@@ -539,12 +547,12 @@
     <string name="security_settings_title" msgid="6955331714774709746">"सुरक्षा"</string>
     <string name="security_settings_subtitle" msgid="2244635550239273229">"स्क्रिन लक"</string>
     <string name="security_lock_none" msgid="1054645093754839638">"कुनै पनि होइन"</string>
-    <string name="security_lock_pattern" msgid="1174352995619563104">"ढाँचा"</string>
+    <string name="security_lock_pattern" msgid="1174352995619563104">"प्याटर्न"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"पासवर्ड"</string>
     <string name="lock_settings_picker_title" msgid="6590330165050361632">"लकको प्रकार चयन गर्ने"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"लक गर्ने विकल्पहरू"</string>
-    <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"आफ्नो ढाँचा प्रविष्टि गर्नुहोस्"</string>
+    <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"आफ्नो प्याटर्न प्रविष्टि गर्नुहोस्"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"पुष्टि गर्नुहोस्"</string>
     <string name="lockpattern_restart_button_text" msgid="9355771277617537">"पुनः चित्रण गर्नुहोस्"</string>
     <string name="continue_button_text" msgid="5129979170426836641">"जारी राख्नुहोस्"</string>
@@ -552,24 +560,25 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"छाड्नुहोस्"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"स्क्रिन लक सेट गर्नुहोस्"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"आफ्नो PIN छनौट गर्नुहोस्"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"आफ्नो ढाँचा छनौट गर्नुहोस्"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"आफ्नो प्याटर्न छनौट गर्नुहोस्"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"आफ्नो पासवर्ड छनौट गर्नुहोस्"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"हालको स्क्रिन लक"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"सुरक्षाका लागि प्याटर्न सेट गर्नुहोस्"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"खाली गर्नुहोस्"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"रद्द गर्नुहोस्"</string>
-    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"तपाईंको नयाँ अनलक शैली:"</string>
+    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"तपाईंको नयाँ अनलक प्याटर्न"</string>
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"अनलक प्याटर्न बनाउनुहोस्"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"सकिएपछि औँला उचाल्नुहोस्"</string>
-    <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"ढाँचा रेकर्ड गरियो"</string>
+    <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"प्याटर्न रेकर्ड गरियो"</string>
     <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"पुष्टि गर्न प्याटर्न फेरि बनाउनुहोस्"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"कम्तीमा ४ वटा थोप्लाहरू जोड्नुहोस्। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"प्याटर्न मिलेन"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"अनलक शैली कोर्ने तरिका"</string>
-    <string name="error_saving_lockpattern" msgid="2933512812768570130">"ढाँचा सुरक्षित गर्ने क्रममा त्रुटि भयो"</string>
+    <string name="error_saving_lockpattern" msgid="2933512812768570130">"प्याटर्न सुरक्षित गर्ने क्रममा त्रुटि भयो"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"अत्यन्तै धेरै गलत प्रयास गरिए। <xliff:g id="NUMBER">%d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string>
     <string name="okay" msgid="4589873324439764349">"ठिक छ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"स्क्रिन लक हटाउने हो?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"यस कार्यले जुनसुकै व्यक्तिलाई तपाईंको खातामाथि पहुँच राख्न दिने छ"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"यस कार्यले जुनसुकै व्यक्तिलाई तपाईंको खाता प्रयोग गर्न दिने छ"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"आफ्नो PIN प्रविष्टि गर्नुहोस्"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"सुरक्षाका ला‍गि एउटा PIN सेट गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7b43188..e194433 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settings_label" msgid="5147911978211079839">"Instellingen"</string>
     <string name="more_settings_label" msgid="3867559443480110616">"Meer"</string>
-    <string name="display_settings" msgid="5325515247739279185">"Display"</string>
+    <string name="display_settings" msgid="5325515247739279185">"Scherm"</string>
     <string name="brightness" msgid="2919605130898772866">"Helderheidsniveau"</string>
     <string name="auto_brightness_title" msgid="9124647862844666581">"Aanpasbare helderheid"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"Helderheidsniveau optimaliseren voor het beschikbare licht"</string>
@@ -142,7 +142,7 @@
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Beveiliging"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Geen"</string>
-    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Band toegangsp."</string>
+    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Toegangspunt"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Frequentieband TP kiezen"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Auto"</string>
     <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"2,4GHz-frequentieband"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> wil wifi inschakelen"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> wil wifi uitschakelen"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Fout"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Apparaat om te gebruiken met <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Geen apparaten gevonden. Zorg dat apparaten zijn ingeschakeld en beschikbaar zijn voor verbinding."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Opnieuw proberen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Er is een probleem opgetreden. De app heeft het verzoek om een apparaat te kiezen geannuleerd."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Verbinding gemaakt"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Alles tonen"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Zoeken"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Naamloos apparaat"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Gekoppelde apparaten"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ringtone telefoon"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standaard meldingsgeluid"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standaard wekkergeluid"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Opslaan"</string>
     <string name="units_settings" msgid="402325305096925886">"Eenheden"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Snelheid"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Afstand"</string>
@@ -305,7 +313,7 @@
     <string name="assist_access_screenshot_title" msgid="2855956879971465044">"Screenshot gebruiken"</string>
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"Toestaan dat de app voor assistentie toegang krijgt tot een afbeelding van het scherm"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Spraakinvoer"</string>
-    <string name="autofill_settings_title" msgid="1188754272680049972">"Service voor automatisch aanvullen"</string>
+    <string name="autofill_settings_title" msgid="1188754272680049972">"Service voor automatisch invullen"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"Geen"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"Geselecteerd"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"De Assistent kan informatie over de gebruikte apps in je systeem lezen, waaronder informatie die zichtbaar is op je scherm of toegankelijk is in de apps."</string>
@@ -455,7 +463,7 @@
     <string name="user_add_user_menu" msgid="5319151436895941496">"Gebruiker toevoegen"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Nieuwe gebruiker"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Nieuwe gebruiker?"</string>
-    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Wanneer je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen."</string>
+    <string name="user_add_user_message_setup" msgid="6030901156040053106">"Als je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen."</string>
     <string name="user_add_user_message_update" msgid="1528170913388932459">"Elke gebruiker kan apps updaten voor alle andere gebruikers"</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Gebruikerslimiet bereikt"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Onjuist patroon"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Ontgrendelingspatroon tekenen"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Fout bij patroon opslaan"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Te veel onjuiste pogingen. Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Schermvergrendeling verwijderen?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Zo kan iedereen toegang tot je account krijgen"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index bf7cef7..f3c152c 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ୱାଇ-ଫାଇ ଚାଲୁ କରିବାକୁ ଚାହୁଁଛନ୍ତି"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ୱାଇ-ଫାଇ ବନ୍ଦ କରିବାକୁ ଚାହୁଁଛନ୍ତି"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ତ୍ରୁଟି"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ସହ ବ୍ୟବହାର କରିବା ପାଇଁ ଡିଭାଇସ୍"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"କୌଣସି ଡିଭାଇସ୍ ମିଳିଲା ନାହିଁ। ସୁନିଶ୍ଚିତ ହୁଅନ୍ତୁ ଯେ ଡିଭାଇସ୍‍ ଚାଲୁ ହୋଇଛି ଏବଂ ସଂଯୋଗ କରିବା ପାଇଁ ଉପଲବ୍ଧ ଅଛି।"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"କିଛି ଗୋଟିଏ ବାହାରିଛି ଏକ ଡିଭାଇସ୍‍କୁ ବାଛିବାକୁ, ଆପ୍ଲିକେସନ୍‌ ଅନୁରୋଧ ବାତିଲ୍‌ କରିଛି।"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ସଫଳତାର ସହ ସଂଯୋଗ ହୋଇଛି"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ସମସ୍ତ ଦେଖାନ୍ତୁ"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ଖୋଜୁଛି..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ବ୍ଲୁଟୁଥ୍‌"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ନାମହୀନ ଡିଭାଇସ୍‍"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ପେୟାର୍‌ ହୋଇଥିବା ଡିଭାଇସ୍‌ଗୁଡ଼ିକ"</string>
@@ -171,7 +178,7 @@
     <string name="bluetooth_rename_device" msgid="8406868875363878712">"ଡିଭାଇସକୁ ରିନେମ୍‌ କରନ୍ତୁ"</string>
     <string name="bluetooth_rename_button" msgid="2397892174725986383">"ରିନେମ୍‌ କରନ୍ତୁ"</string>
     <string name="bluetooth_available_devices" msgid="1854446368146061448">"ଉପଲବ୍ଧ ଥିବା ଡିଭାଇସ୍"</string>
-    <string name="bluetooth_profiles" msgid="5580372290862835951">"ପ୍ରୋଫାଇଲ୍‌ଗୁଡିକ"</string>
+    <string name="bluetooth_profiles" msgid="5580372290862835951">"ପ୍ରୋଫାଇଲ୍‌ଗୁଡ଼ିକ"</string>
     <string name="bluetooth_error_title" msgid="2341600997536511742"></string>
     <string name="bluetooth_turning_on" msgid="7046983059601710414">"ବ୍ଲୁଟୂଥ୍ ଚାଲୁ ହେଉଛି…"</string>
     <string name="bluetooth_turning_off" msgid="1753975097241024061">"ବ୍ଲୁଟୂଥ୍ ବନ୍ଦ ହେଉଛି…"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ଫୋନ୍‌ ରିଙ୍ଗଟୋନ୍‌"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ଡିଫଲ୍ଟ ବିଜ୍ଞପ୍ତି ସାଉଣ୍ଡ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ଡିଫଲ୍ଟ ଆଲାର୍ମ ସାଉଣ୍ଡ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ସେଭ୍ କରନ୍ତୁ"</string>
     <string name="units_settings" msgid="402325305096925886">"ୟୁନିଟ୍"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ବେଗ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ଦୂରତା"</string>
@@ -533,7 +541,7 @@
     <string name="sync_one_time_sync" msgid="491707183321353107">"ବର୍ତ୍ତମାନ <xliff:g id="LAST_SYNC_TIME">
 %1$s</xliff:g> ରେ  ସିଙ୍କ୍‌ କରିବାକୁ ଟାପ୍‌ କରନ୍ତୁ"</string>
     <string name="sync_button_sync_now" msgid="5767643057970371315">"ବର୍ତ୍ତମାନ ସିଙ୍କ କରନ୍ତୁ"</string>
-    <string name="sync_button_sync_cancel" msgid="7739510554513641393">"ସିଙ୍କ୍‌ କ୍ୟାନ୍ସଲ୍‌‌ କରନ୍ତୁ"</string>
+    <string name="sync_button_sync_cancel" msgid="7739510554513641393">"ସିଙ୍କ୍‌ ବାତିଲ୍‌‌ କରନ୍ତୁ"</string>
     <string name="sync_is_failing" msgid="5766255460901806206">"ସମ୍ପ୍ରତି ସିଙ୍କ କରିବାରେ ସମସ୍ୟା ହେଉଛି। ଏହା ଖୁବ୍‌ ଶୀଘ୍ର ଫେରିବ।"</string>
     <string name="privacy_settings_title" msgid="3150145262029229572">"ଗୋପନୀୟତା"</string>
     <string name="security_settings_title" msgid="6955331714774709746">"ସୁରକ୍ଷା"</string>
@@ -543,13 +551,13 @@
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"ପାସୱର୍ଡ"</string>
     <string name="lock_settings_picker_title" msgid="6590330165050361632">"ଏକ ଲକ୍‌ ପ୍ରକାର ବାଛନ୍ତୁ"</string>
-    <string name="screen_lock_options" msgid="8531177937577168185">"ବିକଳ୍ପ ଲକ୍‍ କରନ୍ତୁ"</string>
+    <string name="screen_lock_options" msgid="8531177937577168185">"ଲକ୍ ବିକଳ୍ପଗୁଡ଼ିକ"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"ଆପଣଙ୍କର ପାଟର୍ନ ଆଙ୍କନ୍ତୁ"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"ନିଶ୍ଚିତ"</string>
     <string name="lockpattern_restart_button_text" msgid="9355771277617537">"ପୁନଃଅଙ୍କନ"</string>
     <string name="continue_button_text" msgid="5129979170426836641">"ଜାରି ରଖନ୍ତୁ"</string>
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
-    <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"ଛାଡ଼ିଦିଅନ୍ତୁ"</string>
+    <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"ବାଦ୍ ଦିଅନ୍ତୁ"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"ଏକ ସ୍କ୍ରିନ୍‌ ଲକ୍‌ ସେଟ୍ କରନ୍ତୁ"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"ନିଜ ପିନ୍‌ ନମ୍ବର ବାଛନ୍ତୁ"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"ନିଜ ପାର୍ଟନ୍‌ ବାଛନ୍ତୁ"</string>
@@ -557,7 +565,7 @@
     <string name="current_screen_lock" msgid="637651611145979587">"ବର୍ତ୍ତମାନର ସ୍କ୍ରୀନ୍‌ ଲକ୍‌"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"ସୁରକ୍ଷା ପାଇଁ ଗୋଟିଏ ପାଟର୍ନ ସେଟ୍‌ କରନ୍ତୁ"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"ଖାଲି କରନ୍ତୁ"</string>
-    <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ"</string>
+    <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"ଆପଣଙ୍କର ନୂଆ ଅନ୍‌ଲକ୍‌ ପାଟର୍ନ"</string>
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"ଏକ ଅନଲକ ପାଟର୍ନ ଆଙ୍କନ୍ତୁ"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"ହୋଇଯିବା ପରେ ଆଙ୍ଗୁଠି କାଢ଼ିଦିଅନ୍ତୁ"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ଭୁଲ ପାଟର୍ନ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ଏକ ଅନ୍‌ଲକ୍‌ ପାଟର୍ନ କିପରି ଅଙ୍କାଯିବ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ପାଟର୍ନ ସେଭ୍‌ କରିବାରେ ତ୍ରୁଟି"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ଅନେକଗୁଡ଼ିଏ ଭୁଲ୍ ପ୍ରଚେଷ୍ଟା। <xliff:g id="NUMBER">%d</xliff:g> ସେକେଣ୍ଡରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="okay" msgid="4589873324439764349">"ଓକେ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"ସ୍କ୍ରୀନ ଲକ୍ ରିମୁଭ୍‍ କରିବେ କି?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ଏହା ଯେକୌଣସି ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଆକାଉଣ୍ଟରେ ପ୍ରବେଶ ପାଇଁ ଅନୁମତି ଦେବ"</string>
@@ -584,7 +593,7 @@
     <string name="confirm_your_password_header" msgid="7052891840366724938">"ପାସ୍‌ୱର୍ଡ ପୁନଃ-ପ୍ରବେଶ କରନ୍ତୁ"</string>
     <string name="confirm_passwords_dont_match" msgid="7300229965206501753">"ପାସ୍‌ୱର୍ଡ ମେଳ ଖାଉନାହିଁ"</string>
     <string name="lockpassword_clear_label" msgid="6363680971025188064">"ଖାଲି କରନ୍ତୁ"</string>
-    <string name="lockpassword_cancel_label" msgid="5791237697404166450">"କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ"</string>
+    <string name="lockpassword_cancel_label" msgid="5791237697404166450">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"ନିଶ୍ଚିତ"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"ଅତିକମ୍‌ରେ 4 ଅକ୍ଷର ରହିବା ଦରକାର"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"ଅତିକମ୍‌ରେ <xliff:g id="COUNT">%d</xliff:g> ଅକ୍ଷର ରହିବା ଦରକାର"</string>
@@ -636,9 +645,9 @@
     <string name="disconnect" msgid="6140789953324820336">"ବିଛିନ୍ନ କରନ୍ତୁ"</string>
     <string name="delete_button" msgid="5840500432614610850">"ଡିଲିଟ୍‍"</string>
     <string name="remove_button" msgid="6664656962868194178">"କାଢ଼ିଦିଅନ୍ତୁ"</string>
-    <string name="cancel" msgid="750286395700355455">"କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ"</string>
+    <string name="cancel" msgid="750286395700355455">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="allow" msgid="7519431342750394402">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
-    <string name="deny" msgid="340512788979930804">"ପ୍ରତ୍ୟାଖ୍ୟାନ କରନ୍ତୁ"</string>
+    <string name="deny" msgid="340512788979930804">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
     <string name="backspace_key" msgid="1545590866688979099">"Backspace କୀ"</string>
     <string name="enter_key" msgid="2121394305541579468">"କୀ ଦବାନ୍ତୁ"</string>
     <string name="exit_retail_button_text" msgid="6093240315583384473">"ଡେମୋରୁ ବାହାରିଯା’ନ୍ତୁ"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"ଖାରଜ କରନ୍ତୁ"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ଫିଚର୍ ଉପଲବ୍ଧ ହେବ ନାହିଁ"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"ଗାଡ଼ି ଚଲାଇବା ବେଳେ ଉପଯୋଗକର୍ତ୍ତା ଯୋଗ କରିପାରିବେ ନାହିଁ"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"ସନ୍ଧାନ"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 465fab8..d7ada78 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ਦੀ ਵਾਈ-ਫਾਈ ਨੂੰ ਚਾਲੂ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ਦੀ ਵਾਈ-ਫਾਈ ਨੂੰ ਬੰਦ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ਗੜਬੜ"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ਨਾਲ ਵਰਤਣ ਵਾਲਾ ਡੀਵਾਈਸ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ਕੋਈ ਡੀਵਾਈਸ ਨਹੀਂ ਮਿਲੇ। ਪੱਕਾ ਕਰੋ ਕਿ ਡੀਵਾਈਸ ਚਾਲੂ ਹਨ ਅਤੇ ਕਨੈਕਟ ਹੋਣ ਲਈ ਉਪਲਬਧ ਹਨ।"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"ਕੋਈ ਗੜਬੜ ਹੋ ਗਈ। ਐਪਲੀਕੇਸ਼ਨ ਨੇ ਕਿਸੇ ਡੀਵਾਈਸ ਨੂੰ ਚੁਣਨ ਦੀ ਬੇਨਤੀ ਰੱਦ ਕਰ ਦਿੱਤੀ ਹੈ।"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"ਕਨੈਕਸ਼ਨ ਸਫਲ ਰਿਹਾ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"ਸਭ ਦਿਖਾਓ"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"ਖੋਜ ਰਿਹਾ ਹੈ"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"ਬਲੂਟੁੱਥ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"ਬੇਨਾਮ ਡੀਵਾਈਸ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"ਜੋੜਾਬੱਧ ਕੀਤੇ ਡੀਵਾਈਸ"</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"ਰੀਸੈੱਟ ਕਰੋ"</string>
     <string name="sound_settings" msgid="3072423952331872246">"ਧੁਨੀ"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"ਰਿੰਗ ਵੌਲਿਊਮ"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"ਨੈਵੀਗੇਸ਼ਨ ਵੌਲਿਊਮ"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"ਨੈਵੀਗੇਸ਼ਨ ਦੀ ਅਵਾਜ਼"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"ਰਿੰਗਟੋਨ"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"ਸੂਚਨਾ"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"ਮੀਡੀਆ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ਫ਼ੋਨ ਦੀ ਰਿੰਗਟੋਨ"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੂਚਨਾ ਧੁਨੀ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਅਲਾਰਮ ਧੁਨੀ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="units_settings" msgid="402325305096925886">"ਯੂਨਿਟਾਂਂ"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ਗਤੀ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ਦੂਰੀ"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ਗਲਤ ਪੈਟਰਨ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"ਇੱਕ ਅਣਲਾਕ ਪੈਟਰਨ ਕਿਵੇਂ ਉਲੀਕੀਏ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ਪੈਟਰਨ ਰੱਖਿਅਤ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋਈ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ਬਹੁਤ ਸਾਰੀਆਂ ਗ਼ਲਤ ਕੋਸ਼ਿਸ਼ਾਂ। <xliff:g id="NUMBER">%d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="okay" msgid="4589873324439764349">"ਠੀਕ ਹੈ"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"ਕੀ ਸਕ੍ਰੀਨ ਲਾਕ ਹਟਾਉਣਾ ਹੈ?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ਇਹ ਕਿਸੇ ਨੂੰ ਤੁਹਾਡੇ ਖਾਤੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਵੇਗਾ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c393870..3a8fff3 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -161,6 +161,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> chce włączyć Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> chce wyłączyć Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Błąd"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Urządzenie, na którym chcesz korzystać z aplikacji <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nie znaleziono urządzeń. Upewnij się, że urządzenia są włączone i mogą się połączyć."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Spróbuj ponownie"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Coś się stało. Aplikacja anulowała prośbę o wybór urządzenia."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Mamy połączenie"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Pokaż wszystko"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Wyszukiwanie"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Urządzenie bez nazwy"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Sparowane urządzenia"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Dzwonek telefonu"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Domyślny dźwięk powiadomienia"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Domyślny dźwięk alarmu"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Zapisz"</string>
     <string name="units_settings" msgid="402325305096925886">"Jednostki"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Prędkość"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Odległość"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Nieprawidłowy wzór"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Jak narysować wzór odblokowania"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Błąd podczas zapisywania wzoru"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Zbyt wiele nieudanych prób. Spróbuj ponownie za <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Usunąć blokadę ekranu?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Każdy będzie mógł mieć dostęp do Twojego konta"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index aeab1c6..f4a547d 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"A aplicação <xliff:g id="REQUESTER">%s</xliff:g> pretende ativar o Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"A aplicação <xliff:g id="REQUESTER">%s</xliff:g> pretende desativar o Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Erro"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo a utilizar com a aplicação <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nenhum dispositivo encontrado. Certifique-se de que os dispositivos estão ativados e disponíveis para ligação."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Tentar novamente"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Ocorreu um erro. A aplicação cancelou o pedido de escolha de um dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Ligação estabelecida com êxito"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostrar tudo"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"A pesquisar"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo sem nome"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos sincronizados"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Toque do telemóvel"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Som de notificação predefinido"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Som de alarme predefinido"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Guardar"</string>
     <string name="units_settings" msgid="402325305096925886">"Unidades"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocidade"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distância"</string>
@@ -270,9 +278,9 @@
     <string name="units_unit_name_liter_per_hundred_kilometers" msgid="4867647387452453552">"Litros por cem quilómetros"</string>
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"Apps e notificações"</string>
     <string name="all_applications" msgid="7798210477486822168">"Mostrar todas as aplicações"</string>
-    <string name="default_applications" msgid="1558183275638697087">"Aplicações predefinidas"</string>
+    <string name="default_applications" msgid="1558183275638697087">"Apps predefinidas"</string>
     <string name="app_permissions" msgid="32799922508313948">"Autorizações da app"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Aplicações que utilizam <xliff:g id="APPS">%1$s</xliff:g>"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Apps que utilizam <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Informações da aplicação"</string>
     <string name="force_stop" msgid="2153183697014720520">"Forçar paragem"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Pretende forçar a paragem?"</string>
@@ -312,7 +320,7 @@
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Certifique-se de que confia nesta aplicação&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=O Preenchimento automático do Google&gt;%1$s&lt;/xliff:g&gt; utiliza o que está no ecrã para determinar o que pode ser preenchido automaticamente."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"Adicionar serviço"</string>
     <string name="app_launch_domain_links_title" msgid="774480184927726651">"Abertura de links"</string>
-    <string name="domain_url_section_title" msgid="9070403140947787214">"Aplicações instaladas"</string>
+    <string name="domain_url_section_title" msgid="9070403140947787214">"Apps instaladas"</string>
     <string name="domain_urls_summary_none" msgid="3077803215088293183">"Não abrir links compatíveis"</string>
     <string name="domain_urls_summary_one" msgid="5072257421806034237">"Abrir <xliff:g id="DOMAIN">%s</xliff:g>"</string>
     <string name="domain_urls_summary_some" msgid="5523153458016701725">"Abrir <xliff:g id="DOMAIN">%s</xliff:g> e outros URLs"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Padrão incorreto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Como desenhar um padrão de desbloqueio"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Erro ao guardar o padrão."</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Demasiadas tentativas incorretas. Tente novamente dentro de <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remover o bloqueio de ecrã?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Desta forma, qualquer pessoa pode aceder à sua conta."</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d60bd1e..4040b44 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -105,7 +105,7 @@
     <string name="wifi_frequency" msgid="8951455949682864922">"Frequência"</string>
     <string name="wifi_ip_address" msgid="3128140627890954061">"Endereço IP"</string>
     <string name="show_password" msgid="2074628020371139240">"Exibir senha"</string>
-    <string name="default_network_name_summary" msgid="8148402439232464276">"Digite nome da rede"</string>
+    <string name="default_network_name_summary" msgid="8148402439232464276">"Digite o nome da rede"</string>
     <string name="default_password_summary" msgid="8789594645836902982">"Digite a senha"</string>
     <string name="access_point_tag_key" msgid="1517143378973053337">"access_point_tag_key"</string>
   <string-array name="wifi_signals">
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> quer ativar o Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> quer desativar o Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Erro"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispositivo para usar com <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nenhum dispositivo foi encontrado. Os dispositivos precisam estar ligados e disponíveis para conexão."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Tentar novamente"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Algo deu errado. O aplicativo cancelou a solicitação para selecionar um dispositivo."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Conexão realizada"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Mostrar tudo"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Pesquisar"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispositivo sem nome"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispositivos pareados"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Toque do telefone"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Som de notificação padrão"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Som de alarme padrão"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Salvar"</string>
     <string name="units_settings" msgid="402325305096925886">"Unidades"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Velocidade"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distância"</string>
@@ -413,7 +421,7 @@
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Redefinir apps"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"As preferências do app foram redefinidas"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Limpar todos os dados"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Essa ação limpará todos os dados da unidade principal do seu veículo, incluindo:\n\n"<li>"sua Conta do Google;"</li>\n<li>"dados e configurações do sistema e do app;"</li>\n<li>"apps transferidos."</li></string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Essa ação apagará todos os dados da unidade principal do seu veículo, incluindo:\n\n"<li>"sua Conta do Google;"</li>\n<li>"dados e configurações do sistema e do app;"</li>\n<li>"apps transferidos."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"No momento, as seguintes contas estão conectadas:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Há outros usuários neste veículo."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Redefinir veículo"</string>
@@ -559,14 +567,15 @@
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"Limpar"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"Cancelar"</string>
     <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"Seu novo padrão de desbloqueio"</string>
-    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Desenhar um padrão de desbloqueio"</string>
+    <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Desenhe um padrão de desbloqueio"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Solte o dedo quando terminar."</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Padrão registrado"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Desenhe o padrão novamente p/ confirmar"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Desenhe o padrão de novo para confirmar"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Conecte 4 pontos (mín). Tente novamente."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Padrão incorreto"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Como desenhar um padrão de desbloqueio"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Erro ao salvar o padrão"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Excesso de tentativas incorretas. Tente novamente em <xliff:g id="NUMBER">%d</xliff:g> segundos."</string>
     <string name="okay" msgid="4589873324439764349">"Ok"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Remover bloqueio de tela?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Qualquer pessoa poderá acessar sua conta"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index b82d673..31c7b54 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -38,8 +38,8 @@
     </plurals>
     <string name="mobile_network_active_sim" msgid="1901674954229832811">"Activ/SIM"</string>
     <string name="mobile_network_inactive_sim" msgid="3644984830926224318">"Inactiv/SIM"</string>
-    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Activ/SIM descărcat"</string>
-    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Inactiv/SIM descărcat"</string>
+    <string name="mobile_network_active_esim" msgid="5864100786496761032">"Activ / SIM descărcat"</string>
+    <string name="mobile_network_inactive_esim" msgid="1397332352238119032">"Inactiv / SIM descărcat"</string>
     <string name="mobile_network_list_add_more" msgid="6174294462747070655">"Adăugați mai multe"</string>
     <string name="mobile_network_toggle_title" msgid="3515647310810280063">"Date mobile"</string>
     <string name="mobile_network_toggle_summary" msgid="8698267487987697148">"Accesați datele folosind rețeaua mobilă"</string>
@@ -159,6 +159,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> încearcă să activeze Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> încearcă să dezactiveze Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Eroare"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Dispozitivul care va fi folosit cu <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nu s-au găsit dispozitive. Asigurați-vă că dispozitivele sunt pornite și gata de conectare."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Reîncercați"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"A intervenit ceva. Această aplicație a anulat solicitarea de a alege un dispozitiv."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Conectare reușită"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Afișați-le pe toate"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Se caută dispozitive"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Dispozitiv nedenumit"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Dispozitive asociate"</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ton de sonerie pentru telefon"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Sunet de notificare prestabilit"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Sunet de alarmă prestabilit"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Salvați"</string>
     <string name="units_settings" msgid="402325305096925886">"Unități"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Viteză"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distanță"</string>
@@ -310,7 +318,7 @@
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Intrare vocală"</string>
     <string name="autofill_settings_title" msgid="1188754272680049972">"Serviciu de completare automată"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"Niciuna"</string>
-    <string name="default_app_selected_app" msgid="5289396663745484773">"Bifată"</string>
+    <string name="default_app_selected_app" msgid="5289396663745484773">"Selectat"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"Aplicația asistent va putea să citească informații despre aplicațiile în uz de pe sistem, inclusiv informațiile vizibile pe ecran sau accesibile în aplicații."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Asigurați-vă că aveți încredere în această aplicație&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Completarea automată Google&gt;%1$s&lt;/xliff:g&gt; folosește conținutul de pe ecran pentru a stabili ce se poate completa automat."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"Adăugați un serviciu"</string>
@@ -572,6 +580,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Model greșit"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Desenarea unui model pentru deblocare"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Eroare la salvarea modelului"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Prea multe încercări incorecte. Încercați din nou peste <xliff:g id="NUMBER">%d</xliff:g> secunde."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Eliminați blocarea ecranului?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Acțiunea va permite oricui să vă acceseze contul"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6c9d7f0..dbfc6e7 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -29,7 +29,7 @@
     <string name="keywords_display_auto_brightness" msgid="2700310050333468752">"снижение яркости, сенсорный экран, батарея"</string>
     <string name="keywords_display_night_display" msgid="2922294576679769957">"снижение яркости, ночь, оттенок"</string>
     <string name="night_mode_tile_label" msgid="6603597795502131664">"Ночной режим"</string>
-    <string name="network_and_internet" msgid="4229023630498537530">"Сеть и Интернет"</string>
+    <string name="network_and_internet" msgid="4229023630498537530">"Сеть и интернет"</string>
     <string name="mobile_network_settings" msgid="1708621113321368597">"Мобильная сеть"</string>
     <plurals name="mobile_network_summary_count" formatted="false" msgid="6917348330386831454">
       <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> SIM-карта</item>
@@ -161,14 +161,21 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> запрашивает включение Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> запрашивает отключение Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Ошибка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Устройство для работы с приложением \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Устройства не найдены. Убедитесь, что они включены и доступны для подключения."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Повторить попытку"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Произошла ошибка. Приложение отменило запрос на выбор устройства."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Подключено"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Показать все"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Поиск"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Устройство без названия"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Подключенные устройства"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Подключить новое устройство"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Будет включена функция Bluetooth."</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Будет включена функция Bluetooth"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Отключить устройство?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Автомобиль будет отключен от устройства \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
-    <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Адрес Bluetooth для автомобиля: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
+    <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Адрес Bluetooth автомобиля: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Адрес Bluetooth: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"Название автомобиля"</string>
     <string name="bluetooth_rename_vehicle" msgid="5769424875066563154">"Переименование автомобиля"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Рингтон"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Звук уведомления по умолчанию"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Звук будильника по умолчанию"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Сохранить"</string>
     <string name="units_settings" msgid="402325305096925886">"Единицы"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Скорость"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Расстояние"</string>
@@ -275,7 +283,7 @@
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"Приложения и уведомления"</string>
     <string name="all_applications" msgid="7798210477486822168">"Показать все приложения"</string>
     <string name="default_applications" msgid="1558183275638697087">"Приложения по умолчанию"</string>
-    <string name="app_permissions" msgid="32799922508313948">"Разрешения для приложения"</string>
+    <string name="app_permissions" msgid="32799922508313948">"Разрешения для приложений"</string>
     <string name="app_permissions_summary" msgid="1842858532315056367">"Приложения, которым разрешен доступ (<xliff:g id="APPS">%1$s</xliff:g>)"</string>
     <string name="applications_settings" msgid="794261395191035632">"Сведения о приложениях"</string>
     <string name="force_stop" msgid="2153183697014720520">"Остановить"</string>
@@ -333,7 +341,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Не открывать в этом приложении"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Поддерживаемые ссылки"</string>
     <string name="special_access" msgid="5730278220917123811">"Специальный доступ для приложений"</string>
-    <string name="show_system" msgid="4401355756969485287">"Показать сист. процессы"</string>
+    <string name="show_system" msgid="4401355756969485287">"Показать системные"</string>
     <string name="hide_system" msgid="8845453295584638040">"Скрыть системные процессы"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Изменение системных настроек"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Приложение сможет изменять системные настройки."</string>
@@ -350,7 +358,7 @@
     <string name="wifi_control_title" msgid="5660436566907731929">"Управление сетями Wi-Fi"</string>
     <string name="wifi_control_description" msgid="6021926850423169261">"Эта настройка разрешает приложению сканировать, добавлять и удалять сети Wi-Fi, подключаться к ним, включать и отключать модуль Wi-Fi, а также создавать локальные точки доступа."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Ещё"</string>
-    <string name="location_settings_title" msgid="901334356682423679">"Передача геоданных"</string>
+    <string name="location_settings_title" msgid="901334356682423679">"Геолокация"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Последние запросы местоположения"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"Нет недавних запросов местоположения."</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Разрешения для приложений"</string>
@@ -370,7 +378,7 @@
     <string name="device_status" msgid="267298179806290920">"Статус"</string>
     <string name="device_status_summary" product="tablet" msgid="600543254608862075">"Статус батареи, сети и другая информация"</string>
     <string name="device_status_summary" product="default" msgid="9130360324418117815">"Номер телефона, уровень сигнала…"</string>
-    <string name="about_settings" msgid="4329457966672592345">"О телефоне"</string>
+    <string name="about_settings" msgid="4329457966672592345">"О системе"</string>
     <string name="about_summary" msgid="5374623866267691206">"Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="about_settings_summary" msgid="7975072809083281401">"Просмотр юридической информации, статуса телефона, версии ПО"</string>
     <string name="legal_information" msgid="1838443759229784762">"Юридическая информация"</string>
@@ -420,7 +428,7 @@
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Будут сброшены следующие настройки:\n\n"<li>"Отключенные приложения."</li>\n<li>"Отключенные уведомления приложений."</li>\n<li>"Приложения по умолчанию."</li>\n<li>"Ограничения на передачу данных в фоновом режиме."</li>\n<li>"Все ограничения разрешений."</li>\n\n"Данные приложений удалены не будут."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Сбросить настройки"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Настройки приложений сброшены."</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Удалить все данные (сбросить настройки)"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Стереть все данные (заводские настройки)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Будут удалены все данные из головного устройства автомобиля, в том числе:\n\n"<li>"ваш аккаунт Google;"</li>\n<li>"настройки/данные системы и приложений;"</li>\n<li>"установленные приложения."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Вы вошли в следующие аккаунты:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"В этом автомобиле есть другие пользователи."</string>
@@ -516,10 +524,10 @@
     <string name="storage_unmount_failure" msgid="4591934911541762883">"Не удалось безопасно извлечь устройство \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string>
     <string name="accounts_settings_title" msgid="436190037084293471">"Аккаунты"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Добавить аккаунт"</string>
-    <string name="no_accounts_added" msgid="5148163140691096055">"Аккаунтов нет."</string>
+    <string name="no_accounts_added" msgid="5148163140691096055">"Аккаунтов нет"</string>
     <string name="account_list_title" msgid="7631588514613843065">"Аккаунты пользователя <xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g>"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Автосинхронизация данных"</string>
-    <string name="account_auto_sync_summary" msgid="6963837893148304128">"Данные приложений будут обновляться автоматически."</string>
+    <string name="account_auto_sync_summary" msgid="6963837893148304128">"Данные приложений будут обновляться автоматически"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Включить автосинхронизацию?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"Все изменения в аккаунтах на компьютере будут автоматически копироваться на устройство.\n\nВ некоторых случаях также может выполняться обратная синхронизация (например, для аккаунта Google)."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"Отключить автосинхронизацию?"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Неверный ключ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Как начертить графический ключ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Не удалось сохранить графический ключ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Слишком много неудачных попыток разблокировки. Повторите через <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
     <string name="okay" msgid="4589873324439764349">"ОК"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Отключить блокировку экрана?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Доступ к вашему аккаунту сможет получить кто угодно."</string>
@@ -584,7 +593,7 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Введите пароль"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Для защиты системы создайте PIN-код."</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"Введите PIN-код ещё раз"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN-код должен быть не короче 4 цифр."</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN-код должен состоять как минимум из 4 цифр."</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"Ошибка. PIN-код должен содержать не менее 4 цифр."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"PIN-коды не совпадают"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"Не удалось сохранить PIN-код"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index ad9d950..843bb80 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> හට Wi-Fi සක්‍රීය කිරීමට අවශ්‍යයි"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> හට Wi-Fi අක්‍රිය කිරීමට අවශ්‍ය ය"</string>
     <string name="wifi_error" msgid="3105105447117289410">"දෝෂය"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> සමඟ භාවිත කළ යුතු උපාංගය"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"උපාංග කිසිවක් හමු නොවිය. උපාංග සක්‍රීය කර තිබෙන අතර සම්බන්ධ කිරීමට ලද හැකි බව තහවුරු කර ගන්න."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"නැවත උත්සාහ කරන්න"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"යම් දෙයක් ඇත. යෙදුම උපාංගයක් තේරීමට කළ ඉල්ලීම අවලංගු කර ඇත."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"සම්බන්ධතාව සාර්ථකයි"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"සියල්ල පෙන්වන්න"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"සොයමින්"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"බ්ලූටූත්"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"නම් නොකළ උපාංගය"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"යුගල කළ උපාංග"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"දුරකථන රිගින්ටෝනය"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"පෙරනිමි දැනුම්දීම් හඬ"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"පෙරනිමි එලාම හඬ"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"සුරකින්න"</string>
     <string name="units_settings" msgid="402325305096925886">"ඒකක"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"වේගය"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"දුර"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"වැරදි රටාවකි"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"අඟුළු හැරීමේ රටාවක් අඳින ආකාරය"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"රටාව සුරැකීමේ දෝෂයකි"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"වැරදි උත්සාහයන් ගණන වැඩියි. තත්පර <xliff:g id="NUMBER">%d</xliff:g> කින් නැවත උත්සාහ කරන්න."</string>
     <string name="okay" msgid="4589873324439764349">"හරි"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"තිර අගුල ඉවත් කරන්නද?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"මෙය ඔබගේ ගිණුමට පිවිසීමට ඕනෑම අයෙකුට ඉඩ දෙනු ඇත"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b6365c0..23767a1 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -92,7 +92,7 @@
     <string name="wifi_starting" msgid="473253087503153167">"Zapína sa Wi‑Fi…"</string>
     <string name="wifi_stopping" msgid="3534173972547890148">"Vypína sa Wi‑Fi…"</string>
     <string name="loading_wifi_list" msgid="8584901433195876465">"Načítava sa zoznam sietí Wi‑Fi"</string>
-    <string name="wifi_disabled" msgid="5013262438128749950">"Sieť Wi-Fi je vypnutá"</string>
+    <string name="wifi_disabled" msgid="5013262438128749950">"Rozhranie Wi-Fi je vypnuté"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Sieť sa nepodarilo odstrániť"</string>
     <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Nepodarilo sa pripojiť k sieti"</string>
     <string name="wifi_setup_add_network" msgid="3660498520389954620">"Pridať sieť"</string>
@@ -129,7 +129,7 @@
     <string name="wifi_dns" msgid="1841448353154932801">"DNS"</string>
     <string name="wifi_details_ipv6_address_header" msgid="4707181386646531890">"Adresy IPv6"</string>
     <string name="wifi_gateway" msgid="4975799192860431013">"Brána"</string>
-    <string name="wifi_preferences_title" msgid="772788844257225510">"Predvoľby Wi‑Fi"</string>
+    <string name="wifi_preferences_title" msgid="772788844257225510">"Nastavenia Wi‑Fi"</string>
     <string name="wifi_wakeup" msgid="7451825226044542000">"Zapínať Wi‑Fi automaticky"</string>
     <string name="wifi_wakeup_summary" msgid="7237521683331291414">"Wi‑Fi sa zapne v blízkosti uložených sietí vysokej kvality"</string>
     <string name="wifi_wakeup_summary_no_location" msgid="2821576525488435259">"Nedostupné, pretože určovanie polohy je vypnuté. "<annotation id="link">"Zapnúť"</annotation>"."</string>
@@ -146,7 +146,7 @@
     <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Zabezpečenie"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
     <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Nikdy"</string>
-    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Pásmo pr. bodu"</string>
+    <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Pásmo prístupového bodu"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Výber pásma prístup. bodu"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Automaticky"</string>
     <string name="wifi_ap_choose_2G" msgid="6356913773766753502">"Pásmo 2,4 GHz"</string>
@@ -161,13 +161,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> chce zapnúť Wi‑Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> chce vypnúť Wi‑Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Chyba"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Zariadenie, ktoré sa má používať s aplikáciou <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nenašli sa žiadne zariadenia. Skontrolujte, či sú zariadenia zapnuté a dostupné na pripojenie."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Skúsiť znova"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Vyskytol sa problém. Aplikácia zrušila žiadosť o výber zariadenia."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Pripojenie je úspešné"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Zobraziť všetko"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Vyhľadávanie"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Zariadenie bez názvu"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Spárované zariadenia"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Spárovať nové zariadenie"</string>
-    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Zapne sa Bluetooth s cieľom párovania"</string>
+    <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth sa zapne, aby prebehlo párovanie"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Odpojiť zariadenie?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Vozidlo bolo odpojené od zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Vozidlo bude odpojené od zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Adresa Bluetooth vozidla: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Adresa Bluetooth zariadenia: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"Názov vozidla"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Tón zvonenia telefónu"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Predvolený zvuk upozornenia"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Predvolený zvuk budíka"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Uložiť"</string>
     <string name="units_settings" msgid="402325305096925886">"Jednotky"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Rýchlosť"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Vzdialenosť"</string>
@@ -276,8 +284,8 @@
     <string name="all_applications" msgid="7798210477486822168">"Zobraziť všetky aplikácie"</string>
     <string name="default_applications" msgid="1558183275638697087">"Predvolené aplikácie"</string>
     <string name="app_permissions" msgid="32799922508313948">"Povolenia aplikácie"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Aplikácie používajúce <xliff:g id="APPS">%1$s</xliff:g>"</string>
-    <string name="applications_settings" msgid="794261395191035632">"Informácie o aplikácii"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Aplikácie s povoleniami <xliff:g id="APPS">%1$s</xliff:g>"</string>
+    <string name="applications_settings" msgid="794261395191035632">"Informácie o aplikáciách"</string>
     <string name="force_stop" msgid="2153183697014720520">"Vynútiť zastavenie"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Chcete vynútiť zastavenie?"</string>
     <string name="force_stop_dialog_text" msgid="4354954014318432599">"Ak vynútite zastavenie aplikácie, môže sa správať zvláštne."</string>
@@ -333,7 +341,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Neotvárať v tejto aplikácii"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Podporované odkazy"</string>
     <string name="special_access" msgid="5730278220917123811">"Špeciálny prístup aplikácií"</string>
-    <string name="show_system" msgid="4401355756969485287">"Zobraziť systémové procesy"</string>
+    <string name="show_system" msgid="4401355756969485287">"Zobraziť systémové"</string>
     <string name="hide_system" msgid="8845453295584638040">"Skryť systémové procesy"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Úprava nastavení systému"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Toto povolenie umožňuje aplikácii upravovať nastavenia systému."</string>
@@ -400,10 +408,10 @@
     <string name="show_dev_on" msgid="5339077400040834808">"Teraz ste vývojár!"</string>
     <string name="show_dev_already" msgid="1678087328973865736">"Nie je to potrebné, už ste vývojár."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Pre vývojárov"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"Obnovenie možností"</string>
-    <string name="reset_options_summary" msgid="5508201367420359293">"Obnovenie siete, aplikácií alebo zariadenia"</string>
-    <string name="reset_network_title" msgid="1284233059990797263">"Obnoviť sieť"</string>
-    <string name="reset_network_desc" msgid="602381374544634925">"Týmto obnovíte všetky sieťové nastavenia vrátane:"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"Možnosti resetu"</string>
+    <string name="reset_options_summary" msgid="5508201367420359293">"Reset siete, aplikácií alebo zariadenia"</string>
+    <string name="reset_network_title" msgid="1284233059990797263">"Resetovať sieť"</string>
+    <string name="reset_network_desc" msgid="602381374544634925">"Budú resetované všetky nastavenia sietí vrátane:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi‑Fi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Mobilné dáta"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"Bluetooth"</li></string>
@@ -411,21 +419,21 @@
     <string name="reset_esim_desc" msgid="1437276625485586740">"Vaša tarifa nebude zrušená."</string>
     <string name="reset_esim_error_title" msgid="7245109418130525492">"eSIM karty sa nedajú obnoviť"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"Vyberte sieť"</string>
-    <string name="reset_network_button_text" msgid="8374174455632765033">"Obnoviť nastavenia"</string>
-    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Obnoviť?"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Chcete obnoviť všetky sieťové nastavenia? Toto akciu nie je možné vrátiť späť."</string>
-    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Obnoviť nastavenia"</string>
-    <string name="reset_network_complete_toast" msgid="3804108209431416865">"Sieťové nastavenia boli obnovené"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Obnoviť predvoľby aplikácií"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Táto akcia resetuje predvoľby pre:\n\n"<li>"Zakázané aplikácie"</li>\n<li>"Upozornenia zakázaných aplikácií"</li>\n<li>"Predvolené aplikácie pre akcie"</li>\n<li>"Obmedzenia dát v pozadí pre aplikácie"</li>\n<li>"Akékoľvek obmedzenia povolení"</li>\n\n"Nestratíte žiadne dáta aplikácií."</string>
+    <string name="reset_network_button_text" msgid="8374174455632765033">"Resetovať nastavenia"</string>
+    <string name="reset_network_confirm_title" msgid="5255502723840197663">"Resetovať?"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Chcete resetovať všetky nastavenia sietí? Túto akciu nie je možné vrátiť späť."</string>
+    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Resetovať nastavenia"</string>
+    <string name="reset_network_complete_toast" msgid="3804108209431416865">"Nastavenia sietí boli resetované"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Resetovať nastavenia aplikácií"</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Touto akciou resetujete nasledujúce nastavenia:\n\n "<li>"deaktivované aplikácie,"</li>\n" "<li>"deaktivované upozornenia aplikácií,"</li>\n" "<li>"predvolené aplikácie pre rôzne akcie,"</li>\n" "<li>"obmedzenia dátových prenosov na pozadí pre aplikácie,"</li>\n" "<li>"všetky obmedzenia povolení."</li>\n\n" Neprídete o žiadne dáta aplikácií."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Obnoviť aplikácie"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Predvoľby aplikácií boli obnovené"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Vymazať dáta (obnova výr. nastavení)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Týmto vymažete všetky údaje z autorádia vozidla, napríklad:\n\n"<li>"svoj účet Google,"</li>\n<li>"údaje aj nastavenia systému a aplikácií,"</li>\n<li>"stiahnuté aplikácie."</li></string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Nastavenia aplikácií boli resetované"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Vymazať dáta (obnoviť výrobné nastavenia)"</string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Týmto vymažete z riadiacej jednotky vozidla všetky dáta, napríklad:\n\n"<li>"svoj účet Google,"</li>\n<li>"dáta aj nastavenia systému a aplikácií,"</li>\n<li>"stiahnuté aplikácie."</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Aktuálne ste prihlásený/-á do nasledujúcich účtov:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"V tomto vozidle sú ďalší používatelia."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Resetovať vozidlo"</string>
-    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Chcete resetovať?"</string>
+    <string name="master_clear_confirm_title" msgid="8646455623132887370">"Resetovať?"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"Chcete vymazať všetky osobné údaje a stiahnuté aplikácie? Túto akciu nebude možné vrátiť späť."</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"Vymazať všetko"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"Prebieha vymazávanie"</string>
@@ -460,11 +468,11 @@
     <string name="sms_messaging_permission_title" msgid="6099328509729071243">"SMS cez mobilné dáta auta"</string>
     <string name="install_apps_permission_title" msgid="3099705360827925296">"Inštalácia nových aplikácií"</string>
     <string name="uninstall_apps_permission_title" msgid="8448422340567430659">"Odinštalovanie aplikácií"</string>
-    <string name="user_add_user_menu" msgid="5319151436895941496">"Pridanie používateľa"</string>
+    <string name="user_add_user_menu" msgid="5319151436895941496">"Pridať používateľa"</string>
     <string name="user_new_user_name" msgid="7115771396412339662">"Nový používateľ"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Pridať nového používateľa?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Keď pridáte nového používateľa, musí si nastaviť vlastný priestor."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"Akýkoľvek používateľ môže aktualizovať aplikácie všetkých ostatných používateľov."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"Každý používateľ môže aktualizovať aplikácie pre všetkých ostatných používateľov."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Dosiahnutý limit počtu používateľov"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="few">Môžete vytvoriť až <xliff:g id="COUNT">%d</xliff:g> používateľov.</item>
@@ -473,8 +481,8 @@
       <item quantity="one">Môžete vytvoriť iba jedného používateľa.</item>
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"Vytvorenie nového používateľa zlyhalo"</string>
-    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Odstrániť používateľa?"</string>
-    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Všetky aplikácie a údaje budú odstránené."</string>
+    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Odobrať tohto používateľa?"</string>
+    <string name="delete_user_dialog_message" msgid="4346777604351785057">"Všetky aplikácie a dáta budú odstránené."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"Používateľa sa nepodarilo odstrániť."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"Zavrieť"</string>
     <string name="delete_user_error_retry" msgid="5116434895572670563">"Skúsiť znova"</string>
@@ -552,7 +560,7 @@
     <string name="security_lock_pattern" msgid="1174352995619563104">"Vzor"</string>
     <string name="security_lock_pin" msgid="4891899974369503200">"PIN"</string>
     <string name="security_lock_password" msgid="4420203740048322494">"Heslo"</string>
-    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Voľba typu zámku"</string>
+    <string name="lock_settings_picker_title" msgid="6590330165050361632">"Voľba typu zámky"</string>
     <string name="screen_lock_options" msgid="8531177937577168185">"Možnosti zámky"</string>
     <string name="lock_settings_enter_pattern" msgid="4826034565853171624">"Zadajte vzor"</string>
     <string name="lockpattern_confirm_button_text" msgid="7784925958324484965">"Potvrdiť"</string>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Nesprávny vzor"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Ako kresliť bezpečnostný vzor obrazovky"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Pri ukladaní vzoru sa vyskytla chyba"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Príliš veľa chybných pokusov. Skúste to znova o <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Odstrániť zámku obrazovky?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Ktokoľvek bude mať prístup do vášho účtu"</string>
@@ -667,7 +676,7 @@
     <string name="exit_retail_mode_dialog_title" msgid="7970631760237469168">"Ukončenie ukážkového režimu"</string>
     <string name="exit_retail_mode_dialog_body" msgid="8314316171782527301">"Ukážkový účet bude odstránený a systém sa obnoví do výrobných nastavení. Všetky dáta používateľa budú stratené."</string>
     <string name="exit_retail_mode_dialog_confirmation_button_text" msgid="3147249675355968649">"Ukončiť ukážku"</string>
-    <string name="suggestion_dismiss_button" msgid="4539412646977050641">"ODMIETNUŤ"</string>
+    <string name="suggestion_dismiss_button" msgid="4539412646977050641">"ZAVRIEŤ"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"Funkcia nie je k dispozícii počas jazdy"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"Za jazdy nie je možné pridať používateľa"</string>
     <string name="default_search_query" msgid="3137420627428857068">"Hľadať"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 3938b96..c127db4 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -161,6 +161,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Aplikacija <xliff:g id="REQUESTER">%s</xliff:g> želi vklopiti Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Aplikacija <xliff:g id="REQUESTER">%s</xliff:g> želi izklopiti Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Napaka"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Naprava, ki bo uporabljena skupaj z aplikacijo <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Ni naprav. Preverite, ali so naprave vklopljene in na voljo za vzpostavitev povezave."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Poskusi znova"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Prišlo je do napake. Aplikacija je preklicala zahtevo za izbiro naprave."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Uspešna vzpostavitev povezave"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Pokaži vse"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Iskanje"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Neimenovana naprava"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Seznanjene naprave"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ton zvonjenja telefona"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Privzeti zvok obvestila"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Privzeti zvok alarma"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Shrani"</string>
     <string name="units_settings" msgid="402325305096925886">"Enote"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hitrost"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Razdalja"</string>
@@ -400,7 +408,7 @@
     <string name="show_dev_on" msgid="5339077400040834808">"Zdaj ste razvijalec."</string>
     <string name="show_dev_already" msgid="1678087328973865736">"Ni treba, ker ste že razvijalec."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Možnosti za razvijalce"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"Ponastavitev možnosti"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"Možnosti ponastavitve"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Ponastavitev omrežja, aplikacij ali naprave"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Ponastavi omrežje"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"S tem boste ponastavili vse omrežne nastavitve, med drugim tudi:"</string>
@@ -577,9 +585,10 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Napačen vzorec"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kako narisati vzorec za odklepanje"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Napaka pri shranjevanju vzorca"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Preveč napačnih poskusov. Poskusite znova čez <xliff:g id="NUMBER">%d</xliff:g> s."</string>
     <string name="okay" msgid="4589873324439764349">"V redu"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Želite odstr. zaklep. zaslona?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"S tem bo lahko vsak dostopal do računa"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"S tem bo lahko vsak dostopal do računa."</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Vnesite kodo PIN"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Vnesite geslo"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Zaradi varnosti nastavite kodo PIN"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index c5db5de..f3975df 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> kërkon të aktivizojë Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> kërkon të çaktivizojë Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Gabim"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Pajisja që do të përdoret me <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Nuk u gjet asnjë pajisje. Sigurohu që pajisjet të jenë të ndezura dhe të gatshme për t\'u lidhur."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Provo sërish"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Ndodhi diçka. Aplikacioni ka anuluar kërkesën për të zgjedhur një pajisje."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Lidhja ishte e suksesshme"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Shfaq të gjitha"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Po kërkon"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Pajisje e paemërtuar"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Pajisjet e çiftuara"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Zilja e telefonit"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Tingulli i parazgjedhur i njoftimit"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Tingulli i parazgjedhur i alarmit"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Ruaj"</string>
     <string name="units_settings" msgid="402325305096925886">"Njësitë"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Shpejtësia"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Distanca"</string>
@@ -307,7 +315,7 @@
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Të dhënat zanore"</string>
     <string name="autofill_settings_title" msgid="1188754272680049972">"Shërbimi i plotësimit automatik"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"Asnjë"</string>
-    <string name="default_app_selected_app" msgid="5289396663745484773">"I zgjedhur"</string>
+    <string name="default_app_selected_app" msgid="5289396663745484773">"Zgjedhur"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"Asistenti do të jetë në gjendje të lexojë informacion rreth aplikacioneve në përdorim në sistemin tënd, duke përfshirë informacionin e dukshëm në ekran ose të qasshëm brenda aplikacioneve."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Sigurohu që ke besim te ky aplikacion&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=\"Plotësimi automatik i Google\"&gt;%1$s&lt;/xliff:g&gt; përdor atë që ndodhet në ekranin tënd për të përcaktuar se çfarë mund të plotësohet automatikisht."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"Shto shërbim"</string>
@@ -347,7 +355,7 @@
     <string name="location_settings_title" msgid="901334356682423679">"Vendndodhja"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Kërkesat e vendndodhjeve të fundit"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"Nuk ka kërkesa të vendndodhjeve të fundit"</string>
-    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Autorizimet në nivel aplikacioni"</string>
+    <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Lejet në nivel aplikacioni"</string>
     <string name="location_settings_services_title" msgid="1186133632690970468">"Shërbimet e vendndodhjes"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"Sistemi"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"Përditësimet e sistemit"</string>
@@ -430,7 +438,7 @@
     <string name="zone_auto_summary" msgid="4345856882906981864">"Përdor brezin orar të ofruar nga rrjeti"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"Formati 24 orë"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"Përdor formatin 24 orë"</string>
-    <string name="date_time_set_time_title" msgid="5884883050656937853">"Koha"</string>
+    <string name="date_time_set_time_title" msgid="5884883050656937853">"Ora"</string>
     <string name="date_time_set_time" msgid="6449555153906058248">"Vendos orën"</string>
     <string name="date_time_set_timezone_title" msgid="3001779256157093425">"Brezi orar"</string>
     <string name="date_time_set_timezone" msgid="4759353576185916944">"Brezi orar"</string>
@@ -439,7 +447,7 @@
     <string name="zone_list_menu_sort_alphabetically" msgid="7041628618528523514">"Rendit alfabetikisht"</string>
     <string name="zone_list_menu_sort_by_timezone" msgid="4944880536057914136">"Rendit sipas brezit orar"</string>
     <string name="date_picker_title" msgid="1533614225273770178">"Data"</string>
-    <string name="time_picker_title" msgid="7436045944320504639">"Koha"</string>
+    <string name="time_picker_title" msgid="7436045944320504639">"Ora"</string>
     <string name="user_admin" msgid="1535484812908584809">"Administratori"</string>
     <string name="signed_in_admin_user" msgid="1267225622818673274">"Identifikuar si administrator"</string>
     <string name="grant_admin_permissions_title" msgid="4628430467359951437">"Të gjitha autorizimet e administratorit"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Motiv i gabuar"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Si të vizatosh një motiv shkyçjeje"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Gabim gjatë ruajtjes së motivit"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Shumë tentativa të pasakta. Provo sërish brenda <xliff:g id="NUMBER">%d</xliff:g> sekondash."</string>
     <string name="okay" msgid="4589873324439764349">"Në rregull"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Të hiqet kyçja e ekranit?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Kjo do të lejojë këdo që të ketë qasje në llogarinë tënde"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 652f9e6..f8e2969 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -87,8 +87,8 @@
     <string name="data_usage_limit_editor_title" msgid="133468242379286689">"Подесите ограничење потрошње података"</string>
     <string name="usage_bytes_threshold_picker_positive_button" msgid="4625479840977965519">"Подеси"</string>
     <string name="wifi_settings" msgid="7701477685273103841">"Wi‑Fi"</string>
-    <string name="wifi_starting" msgid="473253087503153167">"Wi-Fi се укључује..."</string>
-    <string name="wifi_stopping" msgid="3534173972547890148">"Wi-Fi се искључује..."</string>
+    <string name="wifi_starting" msgid="473253087503153167">"WiFi се укључује..."</string>
+    <string name="wifi_stopping" msgid="3534173972547890148">"WiFi се искључује..."</string>
     <string name="loading_wifi_list" msgid="8584901433195876465">"Учитава се Wi‑Fi листа"</string>
     <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi је онемогућен"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Брисање мреже није успело"</string>
@@ -131,7 +131,7 @@
     <string name="wifi_wakeup" msgid="7451825226044542000">"Аутоматски укључи Wi‑Fi"</string>
     <string name="wifi_wakeup_summary" msgid="7237521683331291414">"Wi‑Fi ће се поново укључити у близини сачуваних мрежа високог квалитета, као што је кућна мрежа"</string>
     <string name="wifi_wakeup_summary_no_location" msgid="2821576525488435259">"Није доступно јер је локација искључена. Укључите "<annotation id="link">"локацију"</annotation>"."</string>
-    <string name="wifi_settings_scanning_required_title" msgid="2726782203331704928">"Желите ли да укључите Wi-Fi скенирање?"</string>
+    <string name="wifi_settings_scanning_required_title" msgid="2726782203331704928">"Желите ли да укључите WiFi скенирање?"</string>
     <string name="wifi_settings_scanning_required_turn_on" msgid="4464931023377210050">"Укључи"</string>
     <string name="wifi_settings_scanning_required_enabled" msgid="5457372118991438313">"Wi‑Fi скенирање је укључено"</string>
     <string name="wifi_cellular_fallback_title" msgid="8322675436784870862">"Аутоматски пређи на мобилне податке"</string>
@@ -156,9 +156,16 @@
     <string name="tether_settings_title_all" msgid="4663704772599383169">"Хотспот и привезивање"</string>
     <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"Аутоматски искључи хотспот"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"Wi‑Fi хотспот ће се искључити ако ниједан уређај није повезан"</string>
-    <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> жели да укључи Wi-Fi"</string>
-    <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> жели да искључи Wi-Fi"</string>
+    <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> жели да укључи WiFi"</string>
+    <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> жели да искључи WiFi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Грешка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Уређај који ће се користити за <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Није пронађен ниједан уређај Проверите да ли је уређај укључен и доступан за повезивање."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Пробај поново"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Дошло је до неког проблема. Апликација је отказала захтев за избор уређаја."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Повезивање је успело"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Прикажи све"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Претражује се"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Неименовани уређај"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Упарени уређаји"</string>
@@ -222,6 +229,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Мелодија звона телефона"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Подразумевани звук обавештења"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Подразумевани звук аларма"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Сачувај"</string>
     <string name="units_settings" msgid="402325305096925886">"Јединице"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Брзина"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Раздаљина"</string>
@@ -344,8 +352,8 @@
     <string name="premium_sms_access_description" msgid="7119026067677052169">"Премијум SMS-ови могу да коштају и повећаће рачуне код мобилног оператера. Ако омогућите дозволу за неку апликацију, моћи ћете да шаљете премијум SMS-ове помоћу те апликације."</string>
     <string name="usage_access_title" msgid="7153427122072303254">"Приступ коришћењу"</string>
     <string name="usage_access_description" msgid="2413168719257435422">"Приступ коришћењу омогућава апликацији да прати које друге апликације користите и колико често, као и да види мобилног оператера, језичка подешавања и друге податке."</string>
-    <string name="wifi_control_title" msgid="5660436566907731929">"Контрола Wi-Fi мреже"</string>
-    <string name="wifi_control_description" msgid="6021926850423169261">"Контрола Wi-Fi мреже омогућава апликацији да укључи или искључи Wi-Fi, тражи и повезује се на Wi-Fi мреже, додаје или уклања мреже или покреће само локални хотспот."</string>
+    <string name="wifi_control_title" msgid="5660436566907731929">"Контрола WiFi мреже"</string>
+    <string name="wifi_control_description" msgid="6021926850423169261">"Контрола WiFi мреже омогућава апликацији да укључи или искључи WiFi, тражи и повезује се на WiFi мреже, додаје или уклања мреже или покреће само локални хотспот."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Још"</string>
     <string name="location_settings_title" msgid="901334356682423679">"Локација"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Недавни захтеви за локацију"</string>
@@ -400,7 +408,7 @@
     <string name="reset_options_summary" msgid="5508201367420359293">"Ресетовање мреже, апликација или уређаја"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Ресетуј мрежу"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"Овим ресетујете сва подешавања мреже, укључујући:"</string>
-    <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi-Fi"</li></string>
+    <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"WiFi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"Мобилни подаци"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"Bluetooth"</li></string>
     <string name="reset_esim_title" msgid="8132107637911831211">"Избриши све eSIM-ове возила"</string>
@@ -416,7 +424,7 @@
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Овим ћете ресетовати сва подешавања за:\n\n"<li>"Онемогућене апликације"</li>\n<li>"Обавештења о онемогућеним апликацијама"</li>\n<li>"Подразумеване апликације за радње"</li>\n<li>"Ограничења за позадинске податке за апликације"</li>\n<li>"Сва ограничења за дозволе"</li>\n\n"Нећете изгубити никакве податке апликације."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Ресетуј апликације"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Подешавања апликација су ресетована"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Обриши све податке"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Обриши све податке (фабричка подешавања)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Овим бришете све податке из интерне меморије возила, укључујући:\n\n"<li>"Google налог"</li>\n<li>"податке и подешавања система и апликација"</li>\n<li>"преузете апликације"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Тренутно сте пријављени на следеће налоге:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"У овом возилу су присутни и други корисници."</string>
@@ -525,7 +533,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Ограничени профили не могу да додају налоге"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Уклони налог"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Желите да уклоните налог?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Ако уклоните овај налог, избрисаћете све поруке, контакте и друге податке са уређаја!"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Ако уклоните овај налог, избрисаћете све поруке, контакте и друге податке са уређаја."</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Уклањање налога није успело."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Синхронизација налога"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Синхронизација је укључена за одређене ставке (<xliff:g id="ID_1">%1$d</xliff:g> од <xliff:g id="ID_2">%2$d</xliff:g>)"</string>
@@ -567,14 +575,15 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Нацртајте шаблон за откључавање"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Подигните прст када завршите"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Шаблон је снимљен"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Поново нацртајте шаблон ради потврде"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Поново нацртајте шаблон да бисте потврдили"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Повежите бар 4 тачке. Пробајте поново."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Погрешан шаблон"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Како нацртати шаблон за откључавање"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Грешка при чувању шаблона"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Превише нетачних покушаја. Пробајте поново за <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
     <string name="okay" msgid="4589873324439764349">"Потврди"</string>
-    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Желите ли да укл. зак. екрана?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Овим ћете дозволити свима приступ вашем налогу"</string>
+    <string name="remove_screen_lock_title" msgid="1234382338764193387">"Уклонићете закључавање екрана?"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Тада ће свако моћи да приступи вашем налогу"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Унесите PIN"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Унесите лозинку"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Подесите PIN из безбедносних разлога"</string>
@@ -593,7 +602,7 @@
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Потврди"</string>
     <string name="choose_lock_password_hints" msgid="3903696950202491593">"Мора да садржи најмање 4 знака"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Минималан број знакова је <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"Минималан број цифара за PIN је <xliff:g id="COUNT">%d</xliff:g>"</string>
+    <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"PIN мора да садржи бар <xliff:g id="COUNT">%d</xliff:g> циф."</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"Максималан број знакова је <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="lockpassword_pin_too_long" msgid="62957683396974404">"Максималан број цифара је <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="lockpassword_pin_contains_non_digits" msgid="3044526271686839923">"Мора да садржи само цифре 0–9."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index e7ed231..dfaac90 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -157,10 +157,17 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> vill aktivera Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> vill inaktivera Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Fel"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Använd enheten med <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Inga enheter hittades. Kontrollera att enheterna är på och går att ansluta till."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Försök igen"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Något inträffade. Appen har avbrutit förfrågan om att välja enhet."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Anslutningen har upprättats"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Visa alla"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Söker"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Namnlös enhet"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Kopplade enheter"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Koppla en ny enhet"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Parkoppla en ny enhet"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth aktiveras för parkoppling"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Ska enheten kopplas från?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Fordonet kopplas bort från <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -220,7 +227,8 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ringsignal"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standardljud för aviseringar"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standardljud för alarm"</string>
-    <string name="units_settings" msgid="402325305096925886">"Enhet"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Spara"</string>
+    <string name="units_settings" msgid="402325305096925886">"Enheter"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hastighet"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Avstånd"</string>
     <string name="units_fuel_consumption_title" msgid="6415108114453652570">"Bränsleförbrukning"</string>
@@ -275,7 +283,7 @@
     <string name="app_permissions_summary" msgid="1842858532315056367">"Appar som använder <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Appinformation"</string>
     <string name="force_stop" msgid="2153183697014720520">"Tvinga att avsluta"</string>
-    <string name="force_stop_dialog_title" msgid="3342850939200388694">"Vill du tvinga att avsluta?"</string>
+    <string name="force_stop_dialog_title" msgid="3342850939200388694">"Vill du tvinga appen att avsluta?"</string>
     <string name="force_stop_dialog_text" msgid="4354954014318432599">"Om du tvingar appen att avsluta kanske den inte fungerar som den ska."</string>
     <string name="disable_text" msgid="4358165448648990820">"Inaktivera"</string>
     <string name="enable_text" msgid="1794971777861881238">"Aktivera"</string>
@@ -302,7 +310,7 @@
     <string name="assist_app_settings" msgid="9085261410166776497">"Assistentapp"</string>
     <string name="assist_access_context_title" msgid="8034851731390785301">"Använda text från skärmen"</string>
     <string name="assist_access_context_summary" msgid="2374281280599443774">"Tillåt att assistentappen får åtkomst till innehåll på skärmen som text"</string>
-    <string name="assist_access_screenshot_title" msgid="2855956879971465044">"Använda skärmdump"</string>
+    <string name="assist_access_screenshot_title" msgid="2855956879971465044">"Använda skärmbild"</string>
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"Tillåt att assistentappen får åtkomst till en bild på skärmen"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"Röstinmatning"</string>
     <string name="autofill_settings_title" msgid="1188754272680049972">"Tjänsten Autofyll"</string>
@@ -463,12 +471,12 @@
       <item quantity="one">Det går bara att skapa en användare.</item>
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"Det gick inte att skapa en ny användare"</string>
-    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Radera användaren?"</string>
+    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Vill du radera användaren?"</string>
     <string name="delete_user_dialog_message" msgid="4346777604351785057">"Alla appar och all data raderas."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"Det gick inte att radera användaren."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"Stäng"</string>
     <string name="delete_user_error_retry" msgid="5116434895572670563">"Försök igen"</string>
-    <string name="delete_last_user_dialog_title" msgid="3644392025675369680">"Radera sista användaren?"</string>
+    <string name="delete_last_user_dialog_title" msgid="3644392025675369680">"Vill du radera den sista användaren?"</string>
     <string name="delete_last_user_admin_created_message" msgid="1856897729010319054">"Om du raderar den sista användaren för bilen skapas en ny adminanvändare."</string>
     <string name="delete_last_user_system_setup_required_message" msgid="8550730509371697989">"Alla inställningar, appar och all data som är kopplade till användaren raderas. Du måste konfigurera systemet igen."</string>
     <string name="choose_new_admin_title" msgid="1915428454917699587">"Välj en ny administratör"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Fel grafiskt lösenord"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Så här ritar du ett grafiskt lösenord"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Grafiskt lösenord kunde inte sparas"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"För många felaktiga försök. Försök igen om <xliff:g id="NUMBER">%d</xliff:g> sekunder."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Vill du ta bort skärmlåset?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Om du tar bort skärmlåset kan alla få åtkomst till kontot"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 178b9b4..130695a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -157,13 +157,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> inataka kuwasha Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> inataka kuzima Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Hitilafu"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Kifaa kitatumia <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Hakuna vifaa vilivyopatikana. Hakikisha kuwa umewasha vifaa na vinaweza kuunganishwa."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Jaribu tena"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Hitilafu fulani imetokea. Programu imeghairi ombi la kuchagua kifaa."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Imeunganisha"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Onyesha yote"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Inatafuta"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Kifaa kisichokuwa na jina"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Vifaa vilivyooanishwa"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Oanisha kifaa kipya"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"Bluetooth itawaka ili ioanishe"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Ungependa kuondoa kifaa?"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Muunganisho wa gari lako utaondolewa kwenye <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Gari lako litatenganishwa na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"Anwani ya Bluetooth ya gari: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"Anwani ya Bluetooth ya Kifaa chako: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"Jina la gari"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Mlio wa simu"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Sauti chaguomsingi ya arifa"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Sauti chaguomsingi ya kengele"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Hifadhi"</string>
     <string name="units_settings" msgid="402325305096925886">"Vizio"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Kasi"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Umbali"</string>
@@ -298,7 +306,7 @@
       <item quantity="one">Ruhusa <xliff:g id="COUNT_0">%d</xliff:g> ya ziada</item>
     </plurals>
     <string name="direct_boot_unaware_dialog_message_car" msgid="2857599310518724080">"Kumbuka: Baada ya kuwasha tena programu hii, hutaweza kuitumia hadi utakapofungua gari lako."</string>
-    <string name="assist_and_voice_input_settings" msgid="8813195157136637132">"Mratibu na kuweka data kwa kutamka"</string>
+    <string name="assist_and_voice_input_settings" msgid="8813195157136637132">"Maagizo na kuweka data kwa kutamka"</string>
     <string name="assist_app_settings" msgid="9085261410166776497">"Programu ya usaidizi"</string>
     <string name="assist_access_context_title" msgid="8034851731390785301">"Tumia maandishi kutoka kwenye skrini"</string>
     <string name="assist_access_context_summary" msgid="2374281280599443774">"Ruhusu programu ya usaidizi kufikia maudhui ya skrini katika muundo wa maandishi"</string>
@@ -463,7 +471,7 @@
       <item quantity="one">Unaruhusiwa kuongeza mtumiaji mmoja pekee.</item>
     </plurals>
     <string name="add_user_error_title" msgid="3206300411663817038">"Imeshindwa kuongeza mtumiaji mpya"</string>
-    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Ungependa kumtafuta mtumiaji huyu?"</string>
+    <string name="delete_user_dialog_title" msgid="3422867434431562007">"Ungependa kumfuta mtumiaji huyu?"</string>
     <string name="delete_user_dialog_message" msgid="4346777604351785057">"Data na programu zote zitafutwa."</string>
     <string name="delete_user_error_title" msgid="7609819398530124827">"Imeshindwa kumfuta mtumiaji."</string>
     <string name="delete_user_error_dismiss" msgid="429156446763738273">"Ondoa"</string>
@@ -519,8 +527,8 @@
     <string name="add_an_account" msgid="1072285034300995091">"Ongeza akaunti"</string>
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Wasifu zilizodhibitiwa haziwezi kuongeza akaunti"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Ondoa akaunti"</string>
-    <string name="really_remove_account_title" msgid="3555164432587924900">"Unataka kuondoa akaunti?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Kuondoa akaunti hii kutasabibisha kufutwa kwa ujumbe, anwani na data nyingine kwenye kifaa!"</string>
+    <string name="really_remove_account_title" msgid="3555164432587924900">"Ungependa kuondoa akaunti?"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Kuondoa akaunti hii kutasababisha kufutwa kwa ujumbe, anwani na data nyingine kwenye kifaa!"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Imeshindwa kuondoa akaunti."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Usawazishaji wa akaunti"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Umewasha usawazishaji katika vipengee <xliff:g id="ID_1">%1$d</xliff:g> kati ya <xliff:g id="ID_2">%2$d</xliff:g>"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Mchoro si sahihi"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Jinsi ya kuchora mchoro wa kufungua"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Hitilafu ya kuhifadhi mchoro"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Majaribio mengi mno yasiyo sahihi. Jaribu tena baada ya sekunde <xliff:g id="NUMBER">%d</xliff:g>."</string>
     <string name="okay" msgid="4589873324439764349">"Sawa"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Utaondoa mbinu ya kufunga skrini?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Hatua hii itamruhusu mtu yeyote afikie akaunti yako"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 9d71d86..0d60388 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -152,15 +152,22 @@
     <string name="wifi_ap_5G" msgid="4945574428537860279">"5.0 GHz"</string>
     <string name="wifi_ap_band_select_one" msgid="615578175244067396">"ஒன்றைத் தேர்வுசெய்யவும்:"</string>
     <string name="tether_settings_title_all" msgid="4663704772599383169">"ஹாட்ஸ்பாட்டும் இணைப்பு முறையும்"</string>
-    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"ஹாட்ஸ்பாட்டைத் தானாக ஆஃப் செய்தல்"</string>
+    <string name="wifi_hotspot_auto_off_title" msgid="7871858619924599922">"ஹாட்ஸ்பாட்டைத் தானாக ஆஃப் செய்"</string>
     <string name="wifi_hotspot_auto_off_summary" msgid="4830341947541735136">"சாதனங்கள் எவையும் இணைக்கப்படவில்லை எனில் வைஃபை ஹாட்ஸ்பாட் ஆஃப் செய்யப்படும்"</string>
     <string name="wifi_ask_enable" msgid="4452418245680754578">"வைஃபையை ஆன் செய்ய <xliff:g id="REQUESTER">%s</xliff:g> ஆப்ஸ் விரும்புகிறது"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"வைஃபையை ஆஃப் செய்ய <xliff:g id="REQUESTER">%s</xliff:g> ஆப்ஸ் விரும்புகிறது"</string>
     <string name="wifi_error" msgid="3105105447117289410">"பிழை"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> உடன் பயன்படுத்தக்கூடிய சாதனம்"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"சாதனங்கள் எதுவும் இல்லை. சாதனங்கள் ஆன் செய்யப்பட்டு இணைப்பதற்குத் தயாராக உள்ளனவா என்பதை உறுதிப்படுத்தவும்."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"மீண்டும் முயல்க"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"ஏதோ அறிவிப்பு வந்துள்ளது. ஒரு சாதனத்தைத் தேர்வுசெய்வதற்கான கோரிக்கையை இந்த ஆப்ஸ் ரத்துசெய்துள்ளது."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"இணைப்பு வெற்றியடைந்தது"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"அனைத்தையும் காட்டு"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"தேடுகிறது"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"புளூடூத்"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"பெயரிடப்படாத சாதனம்"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"இணைக்கப்பட்ட சாதனங்கள்"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"புதிய சாதனத்தை இணைத்தல்"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"புதிய சாதனத்தை இணை"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"இணைப்பதற்கு புளூடூத் ஆன் செய்யப்படும்"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"சாதன இணைப்பைத் துண்டிக்கவா?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> இலிருந்து உங்கள் வாகனத்தின் புளூடூத் இணைப்பு துண்டிக்கப்படும்."</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"மொபைலுக்கான ரிங்டோன்"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"இயல்புநிலை அறிவிப்பிற்கான ஒலி"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"இயல்புநிலை அலாரத்திற்கான ஒலி"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"சேமி"</string>
     <string name="units_settings" msgid="402325305096925886">"அலகுகள்"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"வேகம்"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"தொலைவு"</string>
@@ -418,16 +426,16 @@
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"இந்தக் காரின் சாதனத்தைப் பிற பயனர்கள் பயன்படுத்துகின்றனர்."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"காரின் சாதனத்தை மீட்டமை"</string>
     <string name="master_clear_confirm_title" msgid="8646455623132887370">"மீட்டமைக்கவா?"</string>
-    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"அனைத்துத் தனிப்பட்ட தகவலையும், பதிவிறக்கிய ஆப்ஸையும் அழிக்கவா? இதைச் செயல்தவிர்க்க இயலாது!"</string>
+    <string name="master_clear_confirm_desc" msgid="8920446291698038558">"உங்களின் தனிப்பட்ட தகவல்கள், பதிவிறக்கிய ஆப்ஸ் போன்ற அனைத்தையும் அழிக்கவா? இதைச் செயல்தவிர்க்க இயலாது!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"அனைத்தையும் அழி"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"அழிக்கிறது"</string>
     <string name="master_clear_progress_text" msgid="3440789441935303176">"காத்திருக்கவும்..."</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"தேதி &amp; நேரம்"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"தேதி, நேரம், நேரமண்டலம் &amp; வடிவங்களை அமை"</string>
     <string name="date_time_auto" msgid="3570339569471779767">"தானியங்கு தேதி &amp; நேரம்"</string>
-    <string name="date_time_auto_summary" msgid="3311706425095342759">"நெட்வொர்க் வழங்கும் நேரத்தைப் பயன்படுத்து"</string>
+    <string name="date_time_auto_summary" msgid="3311706425095342759">"மொபைல் நெட்வொர்க் வழங்கும் நேரத்தைப் பயன்படுத்தும்"</string>
     <string name="zone_auto" msgid="3701878581920206160">"தானியங்கு நேர மண்டலம்"</string>
-    <string name="zone_auto_summary" msgid="4345856882906981864">"நெட்வொர்க் வழங்கும் நேர மண்டலத்தைப் பயன்படுத்து"</string>
+    <string name="zone_auto_summary" msgid="4345856882906981864">"மொபைல் நெட்வொர்க் வழங்கும் நேர மண்டலத்தைப் பயன்படுத்தும்"</string>
     <string name="date_time_24hour_title" msgid="3025576547136168692">"24 மணிநேர வடிவம்"</string>
     <string name="date_time_24hour" msgid="1137618702556486913">"24 மணிநேர வடிவத்தைப் பயன்படுத்து"</string>
     <string name="date_time_set_time_title" msgid="5884883050656937853">"நேரம்"</string>
@@ -508,8 +516,8 @@
     <string name="user_add_account_menu" msgid="6625351983590713721">"கணக்கைச் சேர்"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"கணக்குகள் எதுவும் சேர்க்கப்படவில்லை"</string>
     <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> இன் கணக்குகள்"</string>
-    <string name="account_auto_sync_title" msgid="3238816995364191432">"தானாகத் தரவை ஒத்திசைத்தல்"</string>
-    <string name="account_auto_sync_summary" msgid="6963837893148304128">"தானாகத் தரவை ரெஃப்ரெஷ் செய்ய ஆப்ஸை அனுமதிக்கவும்"</string>
+    <string name="account_auto_sync_title" msgid="3238816995364191432">"தானாகத் தரவை ஒத்திசை"</string>
+    <string name="account_auto_sync_summary" msgid="6963837893148304128">"தானாகத் தரவை ரெஃப்ரெஷ் செய்ய ஆப்ஸை அனுமதிக்கும்"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"தானாக ஒத்திசைப்பதை ஆன் செய்யவா?"</string>
     <string name="data_usage_auto_sync_on_dialog" msgid="2770233931307606956">"இணையத்திலுள்ள கணக்குகளில் நீங்கள் செய்யும் மாற்றங்கள் தானாகவே உங்கள் சாதனத்தில் நகலெடுக்கப்படும்.\n\n மொபைலில் நீங்கள் செய்யும் மாற்றங்களையும் சில கணக்குகள் தானாகவே இணையத்தில் நகலெடுக்கக்கூடும். Google கணக்கு இவ்வாறுதான் செயல்படுகிறது."</string>
     <string name="data_usage_auto_sync_off_dialog_title" msgid="1235955038330202536">"தானாக ஒத்திசைப்பதை ஆஃப் செய்யவா?"</string>
@@ -524,7 +532,7 @@
     <string name="remove_account_error_title" msgid="8368044943174826635">"கணக்கை அகற்ற இயலவில்லை."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"கணக்கு ஒத்திசைவு"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"<xliff:g id="ID_2">%2$d</xliff:g> இல் <xliff:g id="ID_1">%1$d</xliff:g>க்கு ஒத்திசைவு ஆன் செய்யப்பட்டுள்ளது"</string>
-    <string name="account_sync_summary_all_on" msgid="3652264471870312725">"அனைத்துக்கும் ஒத்திசைவை ஆன் செய்"</string>
+    <string name="account_sync_summary_all_on" msgid="3652264471870312725">"அனைத்துக்கும் ஒத்திசைவை இயக்கும்"</string>
     <string name="account_sync_summary_all_off" msgid="6550959714035312414">"அனைத்துக்கும் ஒத்திசைவை ஆஃப் செய்"</string>
     <string name="sync_disabled" msgid="393531064334628258">"ஒத்திசைவு: ஆஃப்"</string>
     <string name="sync_error" msgid="6698021343089247914">"ஒத்திசைவுப் பிழை"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"தவறான பேட்டர்ன்"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"திறப்பதற்கான பேட்டர்னை வரைவது எப்படி?"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"பேட்டர்னைச் சேமிப்பதில் பிழை"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"பலமுறை தவறாக முயன்றுவிட்டீர்கள். <xliff:g id="NUMBER">%d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
     <string name="okay" msgid="4589873324439764349">"சரி"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"திரைப் பூட்டை அகற்றவா?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"திரைப் பூட்டை அகற்றினால், அனைவருக்கும் அணுகல் கிடைக்கும்"</string>
@@ -626,11 +635,11 @@
     <string name="lockpassword_pin_no_sequential_digits" msgid="38813552228809240">"இலக்கங்கள் ஏறுவரிசையில், இறங்குவரிசையில் அல்லது ஒரே இலக்கத்தைத் தொடர்ந்து பயன்படுத்துவது அனுமதிக்கப்படாது."</string>
     <string name="setup_lock_settings_options_button_label" msgid="3337845811029780896">"திரைப் பூட்டு விருப்பங்கள்"</string>
     <string name="build_info_fmt" msgid="5592554123908086426">"<xliff:g id="FINGERPRINT">%1$s</xliff:g>\n<xliff:g id="DATE">%2$s</xliff:g> : <xliff:g id="NUM_DAYS">%3$s</xliff:g> நாட்கள் முன்பு"</string>
-    <string name="credentials_reset" msgid="873900550885788639">"அனுமதிச் சான்றுகளை அழித்தல்"</string>
+    <string name="credentials_reset" msgid="873900550885788639">"அனுமதிச் சான்றுகளை அழி"</string>
     <string name="credentials_reset_summary" msgid="6067911547500459637">"அனைத்து சான்றிதழ்களையும் அகற்றும்"</string>
     <string name="credentials_reset_hint" msgid="3459271621754137661">"அனைத்து உள்ளடக்கத்தையும் அகற்ற வேண்டுமா?"</string>
-    <string name="credentials_erased" msgid="2515915439705550379">"நற்சான்று சேமிப்பகம் அழிக்கப்பட்டது."</string>
-    <string name="credentials_not_erased" msgid="6118567459076742720">"நற்சான்று சேமிப்பகத்தை அழிக்க முடியாது."</string>
+    <string name="credentials_erased" msgid="2515915439705550379">"அனுமதிச் சான்று சேமிப்பகம் அழிக்கப்பட்டது."</string>
+    <string name="credentials_not_erased" msgid="6118567459076742720">"அனுமதிச் சான்று சேமிப்பகத்தை அழிக்க முடியாது."</string>
     <string name="forget" msgid="3971143908183848527">"அகற்று"</string>
     <string name="connect" msgid="5861699594602380150">"இணை"</string>
     <string name="disconnect" msgid="6140789953324820336">"துண்டி"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"நிராகரி"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"வாகனம் ஓட்டும்போது இந்த அம்சத்தைப் பயன்படுத்த இயலாது"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"வாகனம் ஓட்டும்போது பயனரைச் சேர்க்க முடியாது"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"தேடுக"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index df6b330..26cd472 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiని ఆన్ చేయాలనుకుంటుంది"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiని ఆఫ్ చేయాలనుకుంటుంది"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ఎర్రర్"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g>తో ఉపయోగించుకునే పరికరం"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"పరికరాలు ఏవీ కనుగొనబడలేదు. పరికరాలు ఆన్‌లో ఉన్నాయని మరియు కనెక్ట్ చేయడానికి అందుబాటులో ఉన్నాయని నిర్ధారించుకోండి."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"మళ్లీ ప్రయత్నించు"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"ఏదో తప్పు జరిగింది. ఈ అప్లికేషన్ పరికరాన్ని ఎంచుకునే అభ్యర్థనని రద్దు చేసింది."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"విజయవంతంగా కనెక్ట్ చేయబడింది"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"అన్నింటినీ చూపు"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"శోధించడం"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"బ్లూటూత్"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"పేరులేని పరికరం"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"జత చేయబడిన పరికరాలు"</string>
@@ -203,10 +210,10 @@
     <string name="language_picker_list_all_header" msgid="1577387973934368428">"అన్ని భాషలు"</string>
     <string name="keyboard_settings" msgid="1959697870618278081">"కీబోర్డ్"</string>
     <string name="manage_keyboard" msgid="4045394766282200132">"కీబోర్డ్‌లను నిర్వహించండి"</string>
-    <string name="text_to_speech_settings" msgid="811985746199507343">"వచనం నుండి ప్రసంగం అవుట్‌పుట్"</string>
+    <string name="text_to_speech_settings" msgid="811985746199507343">"టెక్స్ట్ టు స్పీచ్ అవుట్‌పుట్"</string>
     <string name="text_to_speech_preferred_engine_settings" msgid="2766782925699132256">"ప్రాధాన్య ఇంజిన్"</string>
     <string name="text_to_speech_current_engine" msgid="8133107484909612597">"ప్రస్తుత ఇంజిన్"</string>
-    <string name="tts_speech_rate" msgid="4512944877291943133">"ప్రసంగం రేట్"</string>
+    <string name="tts_speech_rate" msgid="4512944877291943133">"స్పీచ్ రేట్"</string>
     <string name="tts_pitch" msgid="2389171233852604923">"పిచ్"</string>
     <string name="tts_reset" msgid="6289481549801844709">"రీసెట్ చేయి"</string>
     <string name="sound_settings" msgid="3072423952331872246">"ధ్వని"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"ఫోన్ రింగ్‌టోన్"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"డిఫాల్ట్ నోటిఫికేషన్ ధ్వని"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"డిఫాల్ట్ అలారం ధ్వని"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"సేవ్ చేయి"</string>
     <string name="units_settings" msgid="402325305096925886">"యూనిట్‌లు"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"వేగం"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"దూరం"</string>
@@ -270,13 +278,13 @@
     <string name="units_unit_name_liter_per_hundred_kilometers" msgid="4867647387452453552">"వంద కిలోమీటర్‌లకు లీటర్‌లు"</string>
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"యాప్‌లు &amp; నోటిఫికేషన్‌లు"</string>
     <string name="all_applications" msgid="7798210477486822168">"అన్ని యాప్‌లను చూపండి"</string>
-    <string name="default_applications" msgid="1558183275638697087">"డిఫాల్ట్ యాప్‌లు"</string>
+    <string name="default_applications" msgid="1558183275638697087">"ఆటోమేటిక్ యాప్‌లు"</string>
     <string name="app_permissions" msgid="32799922508313948">"యాప్ అనుమతులు"</string>
     <string name="app_permissions_summary" msgid="1842858532315056367">"<xliff:g id="APPS">%1$s</xliff:g> ఉపయోగిస్తున్న యాప్‌లు"</string>
     <string name="applications_settings" msgid="794261395191035632">"యాప్ సమాచారం"</string>
     <string name="force_stop" msgid="2153183697014720520">"ఫోర్స్ స్టాప్"</string>
-    <string name="force_stop_dialog_title" msgid="3342850939200388694">"హటాత్తుగా ఆపివేయాలా?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"మీరు ఏదైనా యాప్‌ను హటాత్తుగా ఆపివేస్తే, అది సరిగ్గా పని చేయకపోవచ్చు."</string>
+    <string name="force_stop_dialog_title" msgid="3342850939200388694">"ఫోర్స్ స్టాప్ చేయాలా?"</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"మీరు ఏదైనా యాప్‌ను ఫోర్స్ స్టాప్ చేస్తే, అది సరిగ్గా పని చేయకపోవచ్చు."</string>
     <string name="disable_text" msgid="4358165448648990820">"నిలిపివేయి"</string>
     <string name="enable_text" msgid="1794971777861881238">"ప్రారంభించు"</string>
     <string name="uninstall_text" msgid="277907956072833012">"అన్ఇన్‌స్టాల్ చేయి"</string>
@@ -305,7 +313,7 @@
     <string name="assist_access_screenshot_title" msgid="2855956879971465044">"స్క్రీన్‌షాట్‌ను ఉపయోగించండి"</string>
     <string name="assist_access_screenshot_summary" msgid="6246496926635145782">"స్క్రీన్ చిత్రాన్ని యాక్సెస్ చేయడానికి సహాయక యాప్‌ను అనుమతిస్తుంది"</string>
     <string name="voice_input_settings_title" msgid="3238707827815647526">"వాయిస్ ఇన్‌పుట్"</string>
-    <string name="autofill_settings_title" msgid="1188754272680049972">"స్వీయ పూరింపు సేవ"</string>
+    <string name="autofill_settings_title" msgid="1188754272680049972">"ఆటోమేటిక్ ఫిల్ సర్వీస్"</string>
     <string name="app_list_preference_none" msgid="7753357799926715901">"ఏదీ కాదు"</string>
     <string name="default_app_selected_app" msgid="5289396663745484773">"ఎంచుకోబడింది"</string>
     <string name="assistant_security_warning" msgid="1844807956967428012">"అసిస్టెంట్ మీ సిస్టమ్‌లో వినియోగంలో ఉన్న యాప్‌ల గురించిన సమాచారం, అలాగే మీ స్క్రీన్‌పై కనిపించే లేదా యాప్‌లలో యాక్సెస్ చేసే సమాచారాన్ని చదవగలుగుతుంది."</string>
@@ -552,13 +560,13 @@
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"దాటవేయి"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"స్క్రీన్ లాక్‌ను సెట్ చేయండి"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"మీ పిన్ ఎంచుకోండి"</string>
-    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"మీ నమూనాను ఎంచుకోండి"</string>
+    <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"మీ ఆకృతిని ఎంచుకోండి"</string>
     <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"మీ పాస్‌వర్డ్‌ను ఎంచుకోండి"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"ప్రస్తుత స్క్రీన్ లాక్"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"భద్రత కోసం, ఆకృతిని సెట్ చేయండి"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"తీసివేయి"</string>
     <string name="lockpattern_cancel_button_text" msgid="4068764595622381766">"రద్దు చేయి"</string>
-    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"మీ కొత్త అన్‌లాక్ నమూనా"</string>
+    <string name="lockpattern_pattern_confirmed" msgid="5984306638250515385">"మీ కొత్త అన్‌లాక్ ఆకృతి"</string>
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"అన్‌లాక్ నమూనాని గీయండి"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"పూర్తయినప్పుడు వేలును తీసివేయండి"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"ఆకృతి రికార్డ్ చేయబడింది"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"ఆకృతి తప్పు"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"అన్‌లాక్ నమూనాను ఎలా గీయాలి"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"ఆకృతిని సేవ్ చేయడంలో ఎర్రర్ ఏర్పడింది"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"చాలా ఎక్కువ తప్పు ప్రయత్నాలు చేశారు. <xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
     <string name="okay" msgid="4589873324439764349">"సరే"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"స్క్రీన్ లాక్‌ను తీసివేయాలా?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"ఎవరైనా మీ ఖాతాను యాక్సెస్ చేయడానికి ఇది అనుమతిస్తుంది"</string>
@@ -648,5 +657,5 @@
     <string name="suggestion_dismiss_button" msgid="4539412646977050641">"విస్మరించు"</string>
     <string name="restricted_while_driving" msgid="6587569249519274524">"డ్రైవింగ్ చేస్తున్నప్పుడు ఈ ఫీచర్ అందుబాటులో ఉండదు"</string>
     <string name="add_user_restricted_while_driving" msgid="4754946754222453656">"డ్రైవింగ్ చేస్తున్నప్పుడు, యూజర్‌ను జోడించడం సాధ్యం కాదు"</string>
-    <string name="default_search_query" msgid="3137420627428857068">"శోధన"</string>
+    <string name="default_search_query" msgid="3137420627428857068">"Search"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1957078..78c187b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -157,13 +157,20 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> ต้องการเปิด Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> ต้องการปิด Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"ข้อผิดพลาด"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"อุปกรณ์ที่จะใช้กับ <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"ไม่พบอุปกรณ์ ตรวจสอบว่าอุปกรณ์เปิดอยู่และพร้อมเชื่อมต่อ"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"ลองอีกครั้ง"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"เกิดข้อผิดพลาด แอปพลิเคชันยกเลิกคำขอเลือกอุปกรณ์"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"เชื่อมต่อสำเร็จ"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"แสดงทั้งหมด"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"กำลังค้นหา"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"บลูทูธ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"อุปกรณ์ไม่มีชื่อ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"อุปกรณ์ที่จับคู่"</string>
     <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"จับคู่อุปกรณ์ใหม่"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"บลูทูธจะเปิดเพื่อจับคู่อุปกรณ์"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"เลิกเชื่อมต่ออุปกรณ์ไหม"</string>
-    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"พาหนะจะยกเลิกการเชื่อมต่อจาก <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"รถของคุณจะยกเลิกการเชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_vehicle_mac_address" msgid="7069234636525805937">"ที่อยู่บลูทูธของพาหนะ: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_device_mac_address" msgid="3949829271575045069">"ที่อยู่บลูทูธของอุปกรณ์: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
     <string name="bluetooth_name" msgid="2609869978821094114">"ชื่อพาหนะ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"เสียงเรียกเข้าของโทรศัพท์"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"เสียงการแจ้งเตือนเริ่มต้น"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"เสียงปลุกเริ่มต้น"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"บันทึก"</string>
     <string name="units_settings" msgid="402325305096925886">"หน่วย"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"ความเร็ว"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"ระยะทาง"</string>
@@ -353,11 +361,11 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"การอัปเดตระบบ"</string>
     <string name="firmware_version" msgid="8491753744549309333">"เวอร์ชันของ Android"</string>
     <string name="security_patch" msgid="4794276590178386903">"ระดับแพตช์ความปลอดภัยของ Android"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"สื่อและฮาร์ดแวร์"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"รุ่นและฮาร์ดแวร์"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"รุ่น: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"เวอร์ชันเบสแบนด์"</string>
     <string name="kernel_version" msgid="7327212934187011508">"เวอร์ชันเคอร์เนล"</string>
-    <string name="build_number" msgid="3997326631001009102">"หมายเลขบิวด์"</string>
+    <string name="build_number" msgid="3997326631001009102">"หมายเลขบิลด์"</string>
     <string name="bluetooth_mac_address" msgid="7641425947941688072">"ที่อยู่บลูทูธ"</string>
     <string name="device_info_not_available" msgid="2095601973977376655">"ไม่พร้อมให้บริการ"</string>
     <string name="device_status_activity_title" msgid="4083567497305368200">"สถานะ"</string>
@@ -409,10 +417,10 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"รีเซ็ตการตั้งค่า"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"รีเซ็ตการตั้งค่าเครือข่ายแล้ว"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"รีเซ็ตค่ากำหนดของแอป"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"คำสั่งนี้จะรีเซ็ตค่ากำหนดทั้งหมดของ:\n\n"<li>"แอปที่ปิดใช้"</li>\n<li>"การแจ้งเตือนของแอปที่ปิดใช้"</li>\n<li>"แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"</li>\n<li>"ข้อจำกัดข้อมูลในพื้นหลังสำหรับแอป"</li>\n<li>"ข้อจำกัดสิทธิ์ใดๆ"</li>\n\n"ข้อมูลของแอปจะไม่หายไป"</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"คำสั่งนี้จะรีเซ็ตค่ากำหนดทั้งหมดของ\n\n"<li>"แอปที่ปิดใช้"</li>\n<li>"การแจ้งเตือนของแอปที่ปิดใช้"</li>\n<li>"แอปเริ่มต้นที่จะใช้งาน"</li>\n<li>"ข้อจำกัดของอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังเกี่ยวกับการใช้แอป"</li>\n<li>"ข้อจำกัดสิทธิ์ใดๆ"</li>\n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"รีเซ็ตแอป"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"รีเซ็ตค่ากำหนดของแอปแล้ว"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"ลบข้อมูล (รีเซ็ตเป็นค่าเริ่มต้น)"</string>
+    <string name="master_clear_title" msgid="8515335233363214414">"ลบข้อมูลทั้งหมด (รีเซ็ตเป็นค่าเริ่มต้น)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"การดำเนินการนี้จะลบข้อมูลทั้งหมดออกจากระบบเครื่องเสียงในยานพาหนะ โดยรวมถึงสิ่งต่อไปนี้\n\n"<li>"บัญชี Google ของคุณ"</li>\n<li>"ข้อมูลและการตั้งค่าของระบบและแอป"</li>\n<li>"แอปที่ดาวน์โหลด"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"คุณลงชื่อเข้าใช้บัญชีต่อไปนี้อยู่ในขณะนี้"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"มีผู้ใช้รายอื่นอยู่บนยานพาหนะคันนี้"</string>
@@ -520,7 +528,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"โปรไฟล์ที่ถูกจำกัดจะเพิ่มบัญชีไม่ได้"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"นำบัญชีออก"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"นำบัญชีออกใช่ไหม"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"การนำบัญชีนี้ออกจะเป็นการลบข้อความ รายชื่อติดต่อ และข้อมูลอื่นๆ ทั้งหมดออกจากอุปกรณ์!"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"การนำบัญชีนี้ออกจะเป็นการลบข้อความ รายชื่อติดต่อ และข้อมูลอื่นๆ ทั้งหมดออกจากอุปกรณ์"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"นำบัญชีออกไม่สำเร็จ"</string>
     <string name="account_sync_title" msgid="6541844336300236915">"การซิงค์บัญชี"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"การซิงค์เปิดอยู่สำหรับ <xliff:g id="ID_1">%1$d</xliff:g> จาก <xliff:g id="ID_2">%2$d</xliff:g> รายการ"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"รูปแบบไม่ถูกต้อง"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"วิธีวาดรูปแบบการปลดล็อก"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"เกิดข้อผิดพลาดในการบันทึกรูปแบบ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"ดำเนินการไม่ถูกต้องหลายครั้งเกินไป ลองอีกครั้งใน <xliff:g id="NUMBER">%d</xliff:g> วินาที"</string>
     <string name="okay" msgid="4589873324439764349">"ตกลง"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"นำการล็อกหน้าจอออกไหม"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"การดำเนินการนี้จะทำให้ทุกคนเข้าถึงบัญชีของคุณได้"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 8c7f0d7..a4035c8 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Gustong i-on ng <xliff:g id="REQUESTER">%s</xliff:g> ang Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Gustong i-off ng <xliff:g id="REQUESTER">%s</xliff:g> ang Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Error"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Device na gagamitin sa <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Walang nahanap na device. Tiyaking naka-on ang mga device at available para kumonekta."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Subukang muli"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Nagkaproblema. Kinansela ng application ang kahilingang pumili ng device."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Naikonekta"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Ipakita lahat"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Naghahanap"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Walang pangalang device"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Mga nakapares na device"</string>
@@ -218,8 +225,9 @@
     <string name="media_volume_summary" msgid="2961762827637127239">"Magtakda ng volume para sa musika at mga video"</string>
     <string name="alarm_volume_title" msgid="840384014895796587">"Alarm"</string>
     <string name="ringtone_title" msgid="8370531086214517972">"Ringtone ng telepono"</string>
-    <string name="notification_ringtone_title" msgid="8661716239594010288">"Default na notification sound"</string>
+    <string name="notification_ringtone_title" msgid="8661716239594010288">"Default na tunog ng notification"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Default na tunog ng alarm"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"I-save"</string>
     <string name="units_settings" msgid="402325305096925886">"Mga Unit"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Bilis"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Layo"</string>
@@ -551,9 +559,9 @@
     <string name="lockscreen_retry_button_text" msgid="5314212350698701242">"Subukang Muli"</string>
     <string name="lockscreen_skip_button_text" msgid="3755748786396198091">"Laktawan"</string>
     <string name="set_screen_lock" msgid="5239317292691332780">"Magtakda ng lock ng screen"</string>
-    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Piliin ang iyong PIN"</string>
+    <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"Pumili ng iyong PIN"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"Pumili ng iyong pattern"</string>
-    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Piliin ang iyong password"</string>
+    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"Pumili ng iyong password"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"Kasalukuyang lock ng screen"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"Para sa seguridad, magtakda ng pattern"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"I-clear"</string>
@@ -562,11 +570,12 @@
     <string name="lockpattern_recording_intro_header" msgid="7864149726033694408">"Gumawa ng pattern sa pag-unlock"</string>
     <string name="lockpattern_recording_inprogress" msgid="1575019990484725964">"Iangat ang daliri kapag tapos na"</string>
     <string name="lockpattern_pattern_entered" msgid="6103071005285320575">"Na-record na ang pattern"</string>
-    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Iguhit muli ang pattern para kumpirmahin"</string>
+    <string name="lockpattern_need_to_confirm" msgid="4648070076022940382">"Iguhit ulit ang pattern para kumpirmahin"</string>
     <string name="lockpattern_recording_incorrect_too_short" msgid="2417932185815083082">"Magkonekta ng kahit 4 tuldok. Subukan."</string>
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Maling pattern"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Paano gumuhit ng pattern sa pag-unlock"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Nagka-error sa pag-save ng pattern"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Masyadong maraming maling pagsubok. Subukan ulit sa loob ng <xliff:g id="NUMBER">%d</xliff:g> (na) segundo."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Alisin ang lock ng screen?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Papayagan nito ang sinuman na i-access ang iyong content"</string>
@@ -586,7 +595,7 @@
     <string name="lockpassword_clear_label" msgid="6363680971025188064">"I-clear"</string>
     <string name="lockpassword_cancel_label" msgid="5791237697404166450">"Kanselahin"</string>
     <string name="lockpassword_confirm_label" msgid="5918463281546146953">"Kumpirmahin"</string>
-    <string name="choose_lock_password_hints" msgid="3903696950202491593">"Dapat may kahit 4 na character lang"</string>
+    <string name="choose_lock_password_hints" msgid="3903696950202491593">"Dapat ay may hindi bababa sa 4 na character"</string>
     <string name="lockpassword_password_too_short" msgid="6681218025001328405">"Dapat ay may kahit <xliff:g id="COUNT">%d</xliff:g> (na) character"</string>
     <string name="lockpassword_pin_too_short" msgid="6363004004424904218">"Dapat ay may kahit <xliff:g id="COUNT">%d</xliff:g> (na) digit ang PIN"</string>
     <string name="lockpassword_password_too_long" msgid="7530214940279491291">"Dapat ay wala pang <xliff:g id="NUMBER">%d</xliff:g> (na) character"</string>
@@ -595,7 +604,7 @@
     <string name="lockpassword_pin_recently_used" msgid="7901918311213276207">"Hindi pinapayagan ng admin ng device ang paggamit ng kamakailang PIN"</string>
     <string name="lockpassword_pin_blacklisted_by_admin" msgid="7412709707800738442">"Bina-block ng iyong IT admin ang mga pangkaraniwang PIN. Sumubok ng ibang PIN."</string>
     <string name="lockpassword_illegal_character" msgid="1984970060523635618">"Hindi ito maaaring maglaman ng invalid na character."</string>
-    <string name="lockpassword_invalid_password" msgid="1690956113717418430">"Invalid ang password, dapat may kahit 4 na character lang."</string>
+    <string name="lockpassword_invalid_password" msgid="1690956113717418430">"Invalid ang password, dapat ay may hindi bababa sa 4 na character."</string>
     <plurals name="lockpassword_password_requires_letters" formatted="false" msgid="424616259312760303">
       <item quantity="one">Dapat ay may kahit <xliff:g id="COUNT">%d</xliff:g> titik</item>
       <item quantity="other">Dapat ay may kahit <xliff:g id="COUNT">%d</xliff:g> na titik</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 7f69bf4..c78a580 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>, Kablosuz özelliğini açmak istiyor"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>, Kablosuz özelliğini kapatmak istiyor"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Hata"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ile kullanılacak cihaz"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Hiçbir cihaz bulunamadı. Cihazların açık ve bağlanmaya hazır olduğundan emin olun."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Tekrar dene"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Bir sorun oluştu. Uygulama, cihaz seçme isteğini iptal etti."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Bağlantı başarılı"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Tümünü göster"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Arıyor"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Adsız cihaz"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Eşlenen cihazlar"</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"Sıfırla"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Ses"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Zil sesi düzeyi"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Gezinme ses düzeyi"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Navigasyon ses düzeyi"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Zil sesi"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Bildirim"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Medya"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefon zil sesi"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Varsayılan bildirim sesi"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Varsayılan alarm sesi"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Kaydet"</string>
     <string name="units_settings" msgid="402325305096925886">"Birimler"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Hız"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Mesafe"</string>
@@ -279,7 +287,7 @@
     <string name="force_stop_dialog_text" msgid="4354954014318432599">"Uygulama zorla durdurulursa hatalı davranabilir."</string>
     <string name="disable_text" msgid="4358165448648990820">"Devre dışı bırak"</string>
     <string name="enable_text" msgid="1794971777861881238">"Etkinleştir"</string>
-    <string name="uninstall_text" msgid="277907956072833012">"Yüklemeyi kaldır"</string>
+    <string name="uninstall_text" msgid="277907956072833012">"Kaldır"</string>
     <string name="app_disable_dialog_text" msgid="7731155411006654025">"Bu uygulamayı devre dışı bırakırsanız Android ve diğer uygulamalar artık beklendiği gibi çalışmayabilir."</string>
     <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Uygulamayı devre dışı bırak"</string>
     <string name="not_installed" msgid="4218816013370552746">"Bu kullanıcı için yüklü değil"</string>
@@ -327,7 +335,7 @@
     <string name="app_link_open_never" msgid="2173174327831792316">"Bu uygulamada açma"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Desteklenen bağlantılar"</string>
     <string name="special_access" msgid="5730278220917123811">"Özel uygulama erişimi"</string>
-    <string name="show_system" msgid="4401355756969485287">"Sisteme ait olanları göster"</string>
+    <string name="show_system" msgid="4401355756969485287">"Sisteme ait olanlar"</string>
     <string name="hide_system" msgid="8845453295584638040">"Sisteme ait olanları gizle"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Sistem ayarlarını değiştir"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Bu izin, bir uygulamaya sistem ayarlarını değiştirme olanağı tanır."</string>
@@ -507,7 +515,7 @@
     <string name="accounts_settings_title" msgid="436190037084293471">"Hesaplar"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"Hesap ekle"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"Hiçbir hesap eklenmedi"</string>
-    <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> adlı kullanıcının hesapları"</string>
+    <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> kullanıcı hesapları"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"Verileri otomatik olarak senkronize et"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"Uygulamaların verileri otomatik olarak yenilemesine izin ver"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"Otomatik veri senk. açılsın mı?"</string>
@@ -567,9 +575,10 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Yanlış desen"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Kilit açma deseni çizme"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Desen kaydedilirken hata oluştu"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Çok fazla yanlış giriş yapıldı. <xliff:g id="NUMBER">%d</xliff:g> saniye içinde tekrar deneyin."</string>
     <string name="okay" msgid="4589873324439764349">"Tamam"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Ekran kilidi kaldırılsın mı?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Bu, başkalarının hesabınıza erişmesine izin verir"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Bu durumda herkes hesabınıza erişebilecek"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"PIN\'inizi girin"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Şifrenizi girin"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Güvenlik için PIN oluşturun"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 88af344..f770b34 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settings_label" msgid="5147911978211079839">"Налаштування"</string>
     <string name="more_settings_label" msgid="3867559443480110616">"Більше"</string>
-    <string name="display_settings" msgid="5325515247739279185">"Дисплей"</string>
+    <string name="display_settings" msgid="5325515247739279185">"Екран"</string>
     <string name="brightness" msgid="2919605130898772866">"Рівень яскравості"</string>
     <string name="auto_brightness_title" msgid="9124647862844666581">"Адаптивна яскравість"</string>
     <string name="auto_brightness_summary" msgid="4741887033140384352">"Оптимізація рівня яскравості з урахуванням умов освітлення"</string>
@@ -161,6 +161,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"Додаток <xliff:g id="REQUESTER">%s</xliff:g> хоче ввімкнути Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"Додаток <xliff:g id="REQUESTER">%s</xliff:g> хоче вимкнути Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Помилка"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Пристрій для використання з додатком <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Немає пристроїв. Переконайтеся, що пристрої ввімкнені й готові до з’єднання."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Повторити спробу"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Щось трапилося. Додаток скасував запит на вибір пристрою."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Підключено"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Показати всі"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Пошук"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Пристрій без назви"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Пристрої, з якими створено пару"</string>
@@ -224,6 +231,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Сигнал телефонного дзвінка"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Стандартний сигнал сповіщень"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Стандартний сигнал будильника"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Зберегти"</string>
     <string name="units_settings" msgid="402325305096925886">"Одиниці"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Швидкість"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Відстань"</string>
@@ -275,8 +283,8 @@
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"Додатки та сповіщення"</string>
     <string name="all_applications" msgid="7798210477486822168">"Показати всі додатки"</string>
     <string name="default_applications" msgid="1558183275638697087">"Додатки за умовчанням"</string>
-    <string name="app_permissions" msgid="32799922508313948">"Дозволи додатка"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Додатки, які мають доступ (<xliff:g id="APPS">%1$s</xliff:g>)"</string>
+    <string name="app_permissions" msgid="32799922508313948">"Дозволи додатків"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Додатки з доступом таких категорій: <xliff:g id="APPS">%1$s</xliff:g>"</string>
     <string name="applications_settings" msgid="794261395191035632">"Про додаток"</string>
     <string name="force_stop" msgid="2153183697014720520">"Примусово припинити роботу"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Примусово припинити роботу?"</string>
@@ -350,7 +358,7 @@
     <string name="wifi_control_title" msgid="5660436566907731929">"Керування Wi-Fi"</string>
     <string name="wifi_control_description" msgid="6021926850423169261">"Додаток із дозволом на керування Wi-Fi може вмикати й вимикати Wi-Fi, шукати, додавати й вилучати мережі, підключатися до них, а також запускати локальну точку доступу."</string>
     <string name="more_special_access_title" msgid="166115485446645971">"Більше"</string>
-    <string name="location_settings_title" msgid="901334356682423679">"Місце"</string>
+    <string name="location_settings_title" msgid="901334356682423679">"Геодані"</string>
     <string name="location_settings_recent_requests_title" msgid="6345634382240930628">"Останні запити на геодані"</string>
     <string name="location_settings_recent_requests_empty_message" msgid="7789667070033674910">"Немає останніх запитів на геодані"</string>
     <string name="location_settings_app_permissions_title" msgid="6446735313354321564">"Дозволи на рівні додатка"</string>
@@ -400,7 +408,7 @@
     <string name="show_dev_on" msgid="5339077400040834808">"Тепер ви розробник."</string>
     <string name="show_dev_already" msgid="1678087328973865736">"Непотрібно, ви вже розробник."</string>
     <string name="developer_options_settings" msgid="1530739225109118480">"Параметри розробника"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"Скинути параметри"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"Варіанти скидання"</string>
     <string name="reset_options_summary" msgid="5508201367420359293">"Скидання налаштувань мережі, додатків або пристрою"</string>
     <string name="reset_network_title" msgid="1284233059990797263">"Скинути налаштування мережі"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"Буде скинуто налаштування всіх мереж, зокрема:"</string>
@@ -417,7 +425,7 @@
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Скинути налаштування"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Налаштування мереж скинуто"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"Cкинути налаштування додатків"</string>
-    <string name="reset_app_pref_desc" msgid="579392665146962149">"Буде скинуто всі налаштування для:\n\n"<li>"вимкнених додатків;"</li>\n<li>"сповіщень вимкнених додатків;"</li>\n<li>"додатків для виконання дій за умовчанням;"</li>\n<li>"обмежень щодо використання даних додатками у фоновому режимі;"</li>\n<li>"усіх обмежень щодо дозволів."</li>\n\n"Ви не втратите жодних даних додатків."</string>
+    <string name="reset_app_pref_desc" msgid="579392665146962149">"Буде скинуто всі налаштування для:\n\n"<li>"вимкнених додатків"</li>\n<li>"вимкнених сповіщень із додатків"</li>\n<li>"додатків за умовчанням"</li>\n<li>"обмежень щодо передавання даних у фоновому режимі"</li>\n<li>"усіх обмежень щодо дозволів"</li>\n\n"Дані додатків видалено не буде."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Скинути налаштування додатків"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Налаштування додатків скинуто"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Стерти всі дані (скинути налаштування)"</string>
@@ -464,7 +472,7 @@
     <string name="user_new_user_name" msgid="7115771396412339662">"Новий користувач"</string>
     <string name="user_add_user_title" msgid="7458813670614932479">"Додати нового користувача?"</string>
     <string name="user_add_user_message_setup" msgid="6030901156040053106">"Після створення новий профіль потрібно налаштувати."</string>
-    <string name="user_add_user_message_update" msgid="1528170913388932459">"Будь-який користувач може оновлювати додатки для решти людей."</string>
+    <string name="user_add_user_message_update" msgid="1528170913388932459">"Будь-який користувач пристрою може оновлювати додатки для решти користувачів."</string>
     <string name="user_limit_reached_title" msgid="8803355734556061238">"Ви досягли ліміту користувачів"</string>
     <plurals name="user_limit_reached_message" formatted="false" msgid="2651922256448824747">
       <item quantity="one">Можна створити до <xliff:g id="COUNT">%d</xliff:g> користувача.</item>
@@ -577,6 +585,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Неправильний ключ"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Як намалювати ключ розблокування"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Не вдалося зберегти ключ"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Забагато невдалих спроб. Повторіть через <xliff:g id="NUMBER">%d</xliff:g> с."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Вимкнути блокування екрана?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Будь-хто зможе ввійти у ваш обліковий запис"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 39da6e4..29d59c7 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -70,7 +70,7 @@
     <string name="launch_manage_plan_text" msgid="906657488611815787">"پلان دیکھیں"</string>
     <string name="app_data_usage" msgid="3878609885080232877">"ایپ ڈیٹا کا استعمال"</string>
     <string name="data_usage_app_restricted" msgid="4570970078120010951">"ممنوع"</string>
-    <string name="cycle_reset_day_of_month_picker_title" msgid="1374568502823735361">"استعمال کے سائیکل کو دوبارہ ترتیب دینے کی تاریخ"</string>
+    <string name="cycle_reset_day_of_month_picker_title" msgid="1374568502823735361">"استعمال کے سائیکل کو ری سیٹ کرنے کی تاریخ"</string>
     <string name="cycle_reset_day_of_month_picker_subtitle" msgid="5361061448258189846">"ہر مہینے کی تاریخ:"</string>
     <string name="cycle_reset_day_of_month_picker_positive_button" msgid="6919858010423269305">"سیٹ کریں"</string>
     <string name="data_warning_limit_title" msgid="4950868241810828601">"ڈیٹا وارننگ اور حد"</string>
@@ -125,7 +125,7 @@
     <string name="wifi_dns" msgid="1841448353154932801">"DNS"</string>
     <string name="wifi_details_ipv6_address_header" msgid="4707181386646531890">"IPv6 پتے"</string>
     <string name="wifi_gateway" msgid="4975799192860431013">"گیٹ وے"</string>
-    <string name="wifi_preferences_title" msgid="772788844257225510">"Wi‑Fi کی ترجیحات"</string>
+    <string name="wifi_preferences_title" msgid="772788844257225510">"‫Wi‑Fi کی ترجیحات"</string>
     <string name="wifi_wakeup" msgid="7451825226044542000">"خود کار طور پر Wi‑Fi آن کریں"</string>
     <string name="wifi_wakeup_summary" msgid="7237521683331291414">"ہوم نیٹ ورک جیسے اعلی معیاری محفوظ نیٹ ورکس کے قریب ہونے پر Wi‑Fi واپس آن ہو جائے گا"</string>
     <string name="wifi_wakeup_summary_no_location" msgid="2821576525488435259">"مقام آف ہونے کی وجہ سے غیر دستیاب ہے۔ "<annotation id="link">"مقام"</annotation>" آن کریں۔"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi کو آن کرنا چاہتی ہے"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi کو آف کرنا چاہتی ہے"</string>
     <string name="wifi_error" msgid="3105105447117289410">"خرابی"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> کے ساتھ استعمال کیا جانے والا آلہ"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"کوئی آلہ نہیں ملا۔ یقینی بنائیں کہ آلات آن ہیں اور منسلک کرنے کے لیے دستیاب ہیں۔"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"دوبارہ کوشش کریں"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"کچھ غلط ہو گیا۔ ایپلیکیشن نے آلہ کو منتخب کرنے کی درخواست کو منسوخ کر دیا ہے۔"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"کنکشن کامیاب"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"سبھی دکھائیں"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"تلاش کر رہا ہے"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"بلوٹوتھ"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"بے نام آلہ"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"جوڑا بنائے ہوئے آلات"</string>
@@ -188,14 +195,14 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"بلوٹوتھ جوڑا بنانے کا کوڈ"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"PIN میں حروف یا علامات شامل ہیں"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"جوڑا بنانے کا کوڈ ٹائپ کریں پھر Return یا Enter دبائیں"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ جوڑا بنائیں؟"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"‫<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ جوڑا بنائیں؟"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کو اپنے رابطوں اور کال کی سرگزشت تک رسائی کی اجازت دیں"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"آپ کو دوسرے آلہ پر بھی یہ PIN ٹائپ کرنے کی ضرورت پڑ سکتی ہے۔"</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"آپ کو دیگر آلہ پر بھی اس پاس کلید کو ٹائپ کرنے کی ضرورت پڑ سکتی ہے۔"</string>
     <string name="bluetooth_pin_values_hint_16_digits" msgid="418776900816984778">"16 ہندسے ہونے چاہئیں"</string>
     <string name="bluetooth_pin_values_hint" msgid="1561325817559141687">"عام طور پر 0000 یا 1234"</string>
     <string name="bluetooth_notif_title" msgid="8374602799367803335">"جوڑا بنانے کی درخواست"</string>
-    <string name="bluetooth_notif_message" msgid="1060821000510108726">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ جوڑا بنانے کیلئے تھپتھپائیں۔"</string>
+    <string name="bluetooth_notif_message" msgid="1060821000510108726">"‫<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے ساتھ جوڑا بنانے کیلئے تھپتھپائیں۔"</string>
     <string name="bluetooth_device_picker" msgid="673238198452345475">"بلوٹوتھ آلہ منتخب کریں"</string>
     <string name="language_settings" msgid="2079258598337245546">"زبانیں"</string>
     <string name="languages_and_input_settings" msgid="3672322610529408248">"زبانیں اور ان پٹ"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"فون کی رِنگ ٹون"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"اطلاع کی ڈیفالٹ آواز"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"الارم کی ڈیفالٹ آواز"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"محفوظ کریں"</string>
     <string name="units_settings" msgid="402325305096925886">"یونٹس"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"رفتار"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"دوری"</string>
@@ -351,8 +359,8 @@
     <string name="location_settings_services_title" msgid="1186133632690970468">"مقام کی سروسز"</string>
     <string name="system_setting_title" msgid="6864599341809463440">"سسٹم"</string>
     <string name="system_update_settings_title" msgid="8448588267784138855">"سسٹم اپ ڈیٹس"</string>
-    <string name="firmware_version" msgid="8491753744549309333">"Android ورژن"</string>
-    <string name="security_patch" msgid="4794276590178386903">"Android سیکیورٹی پیچ کی سطح"</string>
+    <string name="firmware_version" msgid="8491753744549309333">"‫Android ورژن"</string>
+    <string name="security_patch" msgid="4794276590178386903">"‫Android سیکیورٹی پیچ کا لیول"</string>
     <string name="hardware_info" msgid="3973165746261507658">"ماڈل اور ہارڈ ویئر"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"ماڈل: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"بیس بینڈ ورژن"</string>
@@ -364,7 +372,7 @@
     <string name="device_status" msgid="267298179806290920">"صورتحال"</string>
     <string name="device_status_summary" product="tablet" msgid="600543254608862075">"بیٹری کی حیثیت، نیٹ ورک اور دیگر معلومات"</string>
     <string name="device_status_summary" product="default" msgid="9130360324418117815">"فون نمبر، سگنل وغیرہ"</string>
-    <string name="about_settings" msgid="4329457966672592345">"کے بارے میں"</string>
+    <string name="about_settings" msgid="4329457966672592345">"تعارف"</string>
     <string name="about_summary" msgid="5374623866267691206">"Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="about_settings_summary" msgid="7975072809083281401">"قانونی معلومات، صورتحال، سافٹ ویئر ورژن دیکھیں"</string>
     <string name="legal_information" msgid="1838443759229784762">"قانونی معلومات"</string>
@@ -389,25 +397,25 @@
       <item quantity="other">اب آپ ڈویلپر بننے سے <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> قدم دور ہیں۔</item>
       <item quantity="one">اب آپ ڈویلپر بننے سے <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> قدم دور ہیں۔</item>
     </plurals>
-    <string name="show_dev_on" msgid="5339077400040834808">"اب آپ ایک ڈیولپر ہیں!"</string>
-    <string name="show_dev_already" msgid="1678087328973865736">"کوئی ضرورت نہیں ہے، آپ پہلے سے ہی ایک ڈیولپر ہیں۔"</string>
-    <string name="developer_options_settings" msgid="1530739225109118480">"ڈیولپر کے اختیارات"</string>
-    <string name="reset_options_title" msgid="4388902952861833420">"دوبارہ ترتیب دینے کے اختیارات"</string>
-    <string name="reset_options_summary" msgid="5508201367420359293">"نیٹ ورک، ایپس یا آلہ کو دوبارہ ترتیب دینا"</string>
-    <string name="reset_network_title" msgid="1284233059990797263">"نیٹ ورک کو دوبارہ ترتیب دیں"</string>
+    <string name="show_dev_on" msgid="5339077400040834808">"اب آپ ایک ڈویلپر ہیں!"</string>
+    <string name="show_dev_already" msgid="1678087328973865736">"کوئی ضرورت نہیں ہے، آپ پہلے سے ہی ایک ڈویلپر ہیں۔"</string>
+    <string name="developer_options_settings" msgid="1530739225109118480">"ڈویلپر کے اختیارات"</string>
+    <string name="reset_options_title" msgid="4388902952861833420">"ری سیٹ کے اختیارات"</string>
+    <string name="reset_options_summary" msgid="5508201367420359293">"نیٹ ورک، ایپس یا آلہ کو ری سیٹ کرنا"</string>
+    <string name="reset_network_title" msgid="1284233059990797263">"نیٹ ورک کو ری سیٹ کریں"</string>
     <string name="reset_network_desc" msgid="602381374544634925">"اس سے نیٹ ورک کی تمام ترتیبات ری سیٹ ہو جائیں گی، بشمول:"</string>
     <string name="reset_network_item_wifi" msgid="7569481589699982698"><li>"Wi‑Fi"</li></string>
     <string name="reset_network_item_mobile" msgid="5747282716664480997"><li>"موبائل ڈیٹا"</li></string>
     <string name="reset_network_item_bluetooth" msgid="6035019931106921284"><li>"بلوٹوتھ"</li></string>
     <string name="reset_esim_title" msgid="8132107637911831211">"گاڑی کے سبھی eSIMs کو مٹائیں"</string>
     <string name="reset_esim_desc" msgid="1437276625485586740">"اس سے آپ کا سروس پلان منسوخ نہیں ہوگا۔"</string>
-    <string name="reset_esim_error_title" msgid="7245109418130525492">"eSIMs کو دوبارہ ترتیب نہیں دیا جا سکتا"</string>
+    <string name="reset_esim_error_title" msgid="7245109418130525492">"eSIMs کو ری سیٹ نہیں کیا جا سکتا"</string>
     <string name="reset_network_select" msgid="2433825874868038739">"نیٹ ورک منتخب کریں"</string>
-    <string name="reset_network_button_text" msgid="8374174455632765033">"ترتیبات دوبارہ ترتیب دیں"</string>
-    <string name="reset_network_confirm_title" msgid="5255502723840197663">"دوبارہ ترتیب دیں؟"</string>
-    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"نیٹ ورک کی سبھی ترتیبات کو دوبارہ ترتیب دیں؟ آپ اس کارروائی کو کالعدم نہیں کر سکتے ہیں!"</string>
-    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"ترتیبات دوبارہ ترتیب دیں"</string>
-    <string name="reset_network_complete_toast" msgid="3804108209431416865">"نیٹ ورک کی ترتیبات کو دوبارہ ترتیب دیا گیا ہے"</string>
+    <string name="reset_network_button_text" msgid="8374174455632765033">"ترتیبات ری سیٹ کریں"</string>
+    <string name="reset_network_confirm_title" msgid="5255502723840197663">"ری سیٹ کریں؟"</string>
+    <string name="reset_network_confirm_desc" msgid="7721698076856330212">"نیٹ ورک کی سبھی ترتیبات کو ری سیٹ کریں؟ آپ اس کارروائی کو کالعدم نہیں کر سکتے ہیں!"</string>
+    <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"ترتیبات ری سیٹ کریں"</string>
+    <string name="reset_network_complete_toast" msgid="3804108209431416865">"نیٹ ورک کی ترتیبات کو ری سیٹ کر دیا گیا ہے"</string>
     <string name="reset_app_pref_title" msgid="5855420038951743992">"ایپ کی ترجیحات ری سیٹ کریں"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"اس سے مندرجہ ذیل کیلئے تمام ترجیحات ری سیٹ ہو جائیں گی:\n\n"<li>"غیر فعال کردہ ایپس"</li>\n<li>"غیر فعال کردہ ایپس کی اطلاعات"</li>\n<li>"کارروائیوں کے لیے ڈیفالٹ ایپلیکیشنز"</li>\n<li>"ایپس کے لیے پس منظر کے ڈیٹا کی پابندیاں"</li>\n<li>"کوئی اجازتی پابندیاں"</li>\n\n"آپ کسی ایپ کے ڈیٹا سے محروم نہیں ہوں گے۔"</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"ایپس کو ری سیٹ کریں"</string>
@@ -416,8 +424,8 @@
     <string name="master_clear_desc" msgid="9058719802779893535">"یہ آپ کی گاڑی کے ہیڈ یونٹ سے سبھی ڈیٹا کو صاف کر دے گا، بشمول:\n\n"<li>"آپ کا Google اکاؤنٹ"</li>\n<li>"سسٹم اور ایپ ڈیٹا اور ترتیبات"</li>\n<li>"ڈاؤن لوڈ کردہ ایپس"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"آپ فی الحال مندرجہ ذیل اکاؤنٹس میں سائن ان ہیں:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"اس آلہ پر دیگر صارفین موجود ہیں۔"</string>
-    <string name="master_clear_button_text" msgid="8010754220392741160">"گاڑی کو دوبارہ ترتیب دیں"</string>
-    <string name="master_clear_confirm_title" msgid="8646455623132887370">"دوبارہ ترتیب دیں؟"</string>
+    <string name="master_clear_button_text" msgid="8010754220392741160">"گاڑی کو ری سیٹ کریں"</string>
+    <string name="master_clear_confirm_title" msgid="8646455623132887370">"ری سیٹ کریں؟"</string>
     <string name="master_clear_confirm_desc" msgid="8920446291698038558">"آپ کی سبھی ذاتی معلومات اور ڈاؤن لوڈ کردہ ایپس کو صاف کریں؟ آپ اس کارروائی کو کالعدم نہیں کر سکتے ہیں!"</string>
     <string name="master_clear_confirm_button_text" msgid="7981254968588121786">"ہر چیز صاف کریں"</string>
     <string name="master_clear_progress_title" msgid="7087480656932674774">"صاف ہو رہا ہے"</string>
@@ -507,7 +515,7 @@
     <string name="accounts_settings_title" msgid="436190037084293471">"اکاؤنٹس"</string>
     <string name="user_add_account_menu" msgid="6625351983590713721">"اکاؤنٹ شامل کریں"</string>
     <string name="no_accounts_added" msgid="5148163140691096055">"کوئی اکاؤنٹ شامل نہیں ہے"</string>
-    <string name="account_list_title" msgid="7631588514613843065">"<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> کے لئے اکاؤنٹس"</string>
+    <string name="account_list_title" msgid="7631588514613843065">"‫<xliff:g id="CURRENT_USER_NAME">%1$s</xliff:g> کیلئے اکاؤنٹس"</string>
     <string name="account_auto_sync_title" msgid="3238816995364191432">"خودکار طور پر ڈیٹا سِنک کریں"</string>
     <string name="account_auto_sync_summary" msgid="6963837893148304128">"ایپس کو خودکار طور پر ڈیٹا ریفریش کرنے دیں"</string>
     <string name="data_usage_auto_sync_on_dialog_title" msgid="6027487764261344033">"ڈیٹا آٹو سنک کریں کو آن کریں؟"</string>
@@ -553,7 +561,7 @@
     <string name="set_screen_lock" msgid="5239317292691332780">"اسکرین لاک سیٹ کریں"</string>
     <string name="lockscreen_choose_your_pin" msgid="1645229555410061526">"اپنا PIN منتخب کریں"</string>
     <string name="lockscreen_choose_your_pattern" msgid="6801175111142593404">"اپنا پیٹرن منتخب کریں"</string>
-    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"اپنا پاسورڈ منتخب کریں"</string>
+    <string name="lockscreen_choose_your_password" msgid="4487577710136014069">"اپنا پاس ورڈ منتخب کریں"</string>
     <string name="current_screen_lock" msgid="637651611145979587">"موجودہ اسکرین لاک"</string>
     <string name="choose_lock_pattern_message" msgid="6242765203541309524">"سیکیورٹی کیلئے پیٹرن سیٹ کریں"</string>
     <string name="lockpattern_retry_button_text" msgid="4655398824001857843">"صاف کریں"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"غلط پیٹرن"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"غیر مقفل کرنے کا پیٹرن ڈرا کرنے کا طریقہ"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"پیٹرن کو محفوظ کرنے میں خرابی"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"کافی زیادہ غلط کوششیں کی گئیں۔ <xliff:g id="NUMBER">%d</xliff:g> سیکنڈ بعد دوبارہ کوشش کریں۔"</string>
     <string name="okay" msgid="4589873324439764349">"ٹھیک ہے"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"اسکرین لاک کو ہٹائیں؟"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"اس سے کسی کو بھی آپ کے اکاؤنٹ تک رسائی کی اجازت ہوگی"</string>
@@ -574,8 +583,8 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"اپنا پاس ورڈ درج کریں"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"سیکیورٹی کیلئے PIN سیٹ کریں"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"اپنا PIN دوبارہ درج کریں"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN کا کم از کم 4 ہندسے کا ہونا ضروری ہے"</string>
-    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"PIN غلط ہے، کم از کم 4 ہندسے ہونے چاہئیں۔"</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"‫PIN میں کم از کم 4 ہندسے ہونے چاہئیں"</string>
+    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"‫PIN غلط ہے، کم از کم 4 ہندسے ہوں۔"</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"PINs مماثل نہیں ہیں"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"PIN محفوظ کرنے میں خرابی"</string>
     <string name="lockscreen_wrong_pin" msgid="4922465731473805306">"غلط PIN"</string>
diff --git a/res/values-uz/arrays.xml b/res/values-uz/arrays.xml
index a9d61e3..febd8f3 100644
--- a/res/values-uz/arrays.xml
+++ b/res/values-uz/arrays.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="premium_sms_access_values">
     <item msgid="1035030245423608806">"Soʻrash"</item>
-    <item msgid="933409503308401889">"Hech qachon ruxsat berilmasin"</item>
+    <item msgid="933409503308401889">"Ruxsat berilmasin"</item>
     <item msgid="1154273129608299386">"Har doim ruxsat berilsin"</item>
   </string-array>
 </resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index b7dc9ee..c8d158d 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -88,17 +88,17 @@
     <string name="wifi_starting" msgid="473253087503153167">"Wi‑Fi yoqilmoqda…"</string>
     <string name="wifi_stopping" msgid="3534173972547890148">"Wi‑Fi faolsizlantirilmoqda…"</string>
     <string name="loading_wifi_list" msgid="8584901433195876465">"Wi‑Fi roʻyxati yuklanmoqda"</string>
-    <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi faolsizlantirildi"</string>
+    <string name="wifi_disabled" msgid="5013262438128749950">"Wi‑Fi yoqilmagan"</string>
     <string name="wifi_failed_forget_message" msgid="121732682699377206">"Tarmoqni unutmadi"</string>
     <string name="wifi_failed_connect_message" msgid="4447498225022147324">"Tarmoqqa ulanmadi"</string>
-    <string name="wifi_setup_add_network" msgid="3660498520389954620">"Tarmoq qo‘shish"</string>
+    <string name="wifi_setup_add_network" msgid="3660498520389954620">"Tarmoq kiritish"</string>
     <string name="wifi_setup_connect" msgid="3512399573397979101">"Ulanish"</string>
     <string name="wifi_password" msgid="5565632142720292397">"Parol"</string>
     <string name="wifi_show_password" msgid="8423293211933521097">"Parol berkitilmasin"</string>
     <string name="wifi_no_network_name" msgid="6819604337231313594">"Tarmoq nomini kiriting"</string>
     <string name="wifi_ssid" msgid="488604828159458741">"Tarmoq nomi"</string>
     <string name="wifi_ssid_hint" msgid="3170608752313710099">"Tarmoq nomini (SSID) kiriting"</string>
-    <string name="wifi_security" msgid="158358046038876532">"Xavfsizlik"</string>
+    <string name="wifi_security" msgid="158358046038876532">"Himoya"</string>
     <string name="wifi_signal_strength" msgid="8507318230553042817">"Signal darajasi"</string>
     <string name="wifi_status" msgid="5688013206066543952">"Holati"</string>
     <string name="wifi_speed" msgid="1650692446731850781">"Ulanish tezligi"</string>
@@ -139,9 +139,9 @@
     <string name="wifi_hotspot_name_summary_connecting" msgid="5262510450498600038">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> yoqilmoqda..."</string>
     <string name="wifi_hotspot_name_summary_connected" msgid="7421325340822195506">"Boshqa qurilmalar <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> nomli tarmoqqa ulanishi mumkin"</string>
     <string name="wifi_hotspot_password_title" msgid="4103948315849351988">"Hotspot paroli"</string>
-    <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Xavfsizlik"</string>
+    <string name="wifi_hotspot_security_title" msgid="2299925790743587725">"Himoya"</string>
     <string name="wifi_hotspot_wpa2_personal" msgid="7135181212837798318">"WPA2-Personal"</string>
-    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Yoʻq"</string>
+    <string name="wifi_hotspot_security_none" msgid="2514844105085054386">"Hech qanday"</string>
     <string name="wifi_hotspot_ap_band_title" msgid="7685279281668988593">"Wi-Fi diapazoni"</string>
     <string name="wifi_ap_band_config" msgid="6143905484067008736">"Wi-Fi chastotalari diapazoni"</string>
     <string name="wifi_ap_choose_auto" msgid="3779526909841604566">"Avto"</string>
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi aloqasini yoqmoqchi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fi aloqasini uzmoqchi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Xato"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"<xliff:g id="APPNAME">%1$s</xliff:g> ishlatiladigan qurilma"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Qurilmalar topilmadi. Qurilmalar yoniq va tarmoqda ekanligi tekshiring."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Qaytadan urinish"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Xatolik yuz berdi. Ilova qurilmani tanlash talabini bekor qildi."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Muvaffaqiyatli ulandi!"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Hammasi"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Qidirilmoqda"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Nomsiz qurilma"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Ulangan qurilmalar"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Telefon ringtoni"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Standart bildirishnoma tovushi"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Standart signal"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Saqlash"</string>
     <string name="units_settings" msgid="402325305096925886">"Birliklar"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Tezlik"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Masofa"</string>
@@ -270,9 +278,9 @@
     <string name="units_unit_name_liter_per_hundred_kilometers" msgid="4867647387452453552">"Litr taqsim yuz kilometr"</string>
     <string name="apps_and_notifications_settings" msgid="8704585874333781975">"Ilovalar va bildirishnomalar"</string>
     <string name="all_applications" msgid="7798210477486822168">"Barcha ilovalar"</string>
-    <string name="default_applications" msgid="1558183275638697087">"Standart ilovalar"</string>
-    <string name="app_permissions" msgid="32799922508313948">"Ilova uchun ruxsatlar"</string>
-    <string name="app_permissions_summary" msgid="1842858532315056367">"Ilovalar <xliff:g id="APPS">%1$s</xliff:g> ishlatmoqda"</string>
+    <string name="default_applications" msgid="1558183275638697087">"Birlamchi ilovalar"</string>
+    <string name="app_permissions" msgid="32799922508313948">"Ilovalar uchun ruxsatlar"</string>
+    <string name="app_permissions_summary" msgid="1842858532315056367">"Ruxsat berilgan ilovalar (<xliff:g id="APPS">%1$s</xliff:g>)"</string>
     <string name="applications_settings" msgid="794261395191035632">"Ilova haqida"</string>
     <string name="force_stop" msgid="2153183697014720520">"Majburan to‘xtatish"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Majburan toʻxtatilsinmi?"</string>
@@ -283,7 +291,7 @@
     <string name="app_disable_dialog_text" msgid="7731155411006654025">"Agar bu ilovani faolsizlantirsangiz, Android va boshqa ilovalar bundan buyon kutilganidek ishlamasligi mumkin."</string>
     <string name="app_disable_dialog_positive" msgid="4448684722791563349">"Ilovani faolsizlantirish"</string>
     <string name="not_installed" msgid="4218816013370552746">"Bu foydaluvchi uchun oʻrnatilmagan"</string>
-    <string name="permissions_label" msgid="2701446753515612685">"Ruxsatnomalar"</string>
+    <string name="permissions_label" msgid="2701446753515612685">"Ruxsatlar"</string>
     <string name="notifications_label" msgid="6586089149665170731">"Bildirishnomalar"</string>
     <string name="storage_application_label" msgid="5911779903670978586">"Xotira va kesh"</string>
     <string name="application_version_label" msgid="8556889839783311649">"Versiyasi: %1$s"</string>
@@ -326,12 +334,12 @@
     <string name="app_link_open_ask" msgid="7242075065136237456">"Har safar soʻralsin"</string>
     <string name="app_link_open_never" msgid="2173174327831792316">"Bu ilovada ochilmasin"</string>
     <string name="app_launch_supported_domain_urls_title" msgid="7345116365785981158">"Mos havolalar"</string>
-    <string name="special_access" msgid="5730278220917123811">"Maxsus ilova ruxsatlari"</string>
+    <string name="special_access" msgid="5730278220917123811">"Ilovalar uchun maxsus ruxsatlar"</string>
     <string name="show_system" msgid="4401355756969485287">"Tizimga oid jarayonlar"</string>
     <string name="hide_system" msgid="8845453295584638040">"Tizimga oid jarayonlarni berkitish"</string>
     <string name="modify_system_settings_title" msgid="4596320571562433972">"Tizim sozlamalarini almashtirish"</string>
     <string name="modify_system_settings_description" msgid="5295023124419592452">"Bu ruxsatnoma ilovaga tizim sozlamalarini oʻzgaritish uchun ruxsat beradi."</string>
-    <string name="notification_access_title" msgid="1467340098885813473">"Bildirishnomalarga kirish"</string>
+    <string name="notification_access_title" msgid="1467340098885813473">"Bildirishnomalarga ruxsat"</string>
     <string name="notification_listener_security_warning_title" msgid="2893273335175140895">"<xliff:g id="SERVICE">%1$s</xliff:g> uchun bildirishnomadan foydalanish ruxsati berilsinmi?"</string>
     <string name="notification_listener_security_warning_summary" msgid="7280197998063498125">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> barcha bildirishnomalarni, jumladan, kontakt ismlari va siz qabul qilgan xabarlar matni kabi shaxsiy maʼlumotlarni oʻqiy oladi. Shuningdek, u bildirishnomalarni yopishi yoki ulardagi turli amal tugmalarini ishga tushira oladi.\n\nIlova Bezovta qilinmasin rejimini yoqish va oʻchirish hamda shu bilan bogʻliq sozlamalarni ham oʻzgartirishi mumkin."</string>
     <string name="notification_listener_revoke_warning_summary" msgid="4904973394539125407">"Agar <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> uchun bildirishnomalar ruxsati faolsizlantirilganda, Bezovta qilinmasin ruxsati ham faolsizlantirilishi mumkin."</string>
@@ -353,7 +361,7 @@
     <string name="system_update_settings_title" msgid="8448588267784138855">"Tizimni yangilash"</string>
     <string name="firmware_version" msgid="8491753744549309333">"Android versiyasi"</string>
     <string name="security_patch" msgid="4794276590178386903">"Android tizim xavfsizligi yangilanishi"</string>
-    <string name="hardware_info" msgid="3973165746261507658">"Model va apparat taʼminoti"</string>
+    <string name="hardware_info" msgid="3973165746261507658">"Model va qurilma"</string>
     <string name="hardware_info_summary" msgid="8262576443254075921">"Modeli: <xliff:g id="MODEL">%1$s</xliff:g>"</string>
     <string name="baseband_version" msgid="2370088062235041897">"Aloqa moduli versiyasi"</string>
     <string name="kernel_version" msgid="7327212934187011508">"Yadro versiyasi"</string>
@@ -367,7 +375,7 @@
     <string name="about_settings" msgid="4329457966672592345">"Telefon haqida"</string>
     <string name="about_summary" msgid="5374623866267691206">"Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
     <string name="about_settings_summary" msgid="7975072809083281401">"Huquqiy axborot, qurilma holati, DT versiyasi"</string>
-    <string name="legal_information" msgid="1838443759229784762">"Huquqiy ma’lumotlar"</string>
+    <string name="legal_information" msgid="1838443759229784762">"Huquqiy axborot"</string>
     <string name="contributors_title" msgid="7698463793409916113">"Hissa qo‘shganlar"</string>
     <string name="manual" msgid="4819839169843240804">"Qo‘llanma"</string>
     <string name="regulatory_labels" msgid="3165587388499646779">"Sertifikat yorliqlari"</string>
@@ -408,10 +416,10 @@
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Barcha tarmoq sozlamalari qayta tiklansinmi? Bu amalni ortga qaytarib bo‘lmaydi!"</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Asliga qaytarish"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Tarmoq sozlamalari qayta tiklandi"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Ilova parametrlarini tiklash"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Ilova sozlamalarini asliga qaytarish"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Quyidagi sozlamalar asliga qaytariladi:\n\n "<li>"Faolsizlantirilgan ilovalar"</li>\n" "<li>"Faolsizlantirilgan ilovalarning bildirishnomalari"</li>\n" "<li>"Muayyan amallar uchun birlamchi ilovalar"</li>\n" "<li>"Fonda internetdan foydalanishga nisbatan cheklovlar"</li>\n" "<li>"Ruxsatlar uchun barcha cheklovlar"</li>\n\n"Ilovalarga tegishli ma’lumotlar saqlanib qoladi."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"OK"</string>
-    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Ilova parametrlari tiklandi"</string>
+    <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Ilova sozlamalari asliga qaytarildi"</string>
     <string name="master_clear_title" msgid="8515335233363214414">"Barcha ma’lumotlarni tozalash (zavod sozlamalarini tiklash)"</string>
     <string name="master_clear_desc" msgid="9058719802779893535">"Bunda avtomobilning bosh qurilmasidagi barcha axborot, jumladan, quyidagilar tozalab tashlanadi:\n\n"<li>"Google hisobingiz"</li>\n<li>"Tizim va ilovaga oid axborot hamda sozlamalar"</li>\n<li>"Yuklab olingan ilovalar"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Siz hozir tizimga quyidagi hisoblardan kirgansiz:"</string>
@@ -424,7 +432,7 @@
     <string name="master_clear_progress_text" msgid="3440789441935303176">"Kutib turing..."</string>
     <string name="date_and_time_settings_title" msgid="4058492663544475485">"Sana va vaqt"</string>
     <string name="date_and_time_settings_summary" msgid="7669856855390804666">"Sana, vaqt, vaqt zonasi, &amp; formatlarini o‘rnatish"</string>
-    <string name="date_time_auto" msgid="3570339569471779767">"Avtomatik sana &amp; va"</string>
+    <string name="date_time_auto" msgid="3570339569471779767">"Avtomatik sana va vaqt"</string>
     <string name="date_time_auto_summary" msgid="3311706425095342759">"Tarmoq vaqtidan foydalanish"</string>
     <string name="zone_auto" msgid="3701878581920206160">"Avtomatik vaqt mintaqasi"</string>
     <string name="zone_auto_summary" msgid="4345856882906981864">"Tarmoq vaqt mintaqasidan foydalanish"</string>
@@ -499,7 +507,7 @@
     <string name="storage_total_size_label" msgid="3892138268243791912">"Jami"</string>
     <string name="storage_clear_user_data_text" msgid="8787615136779130680">"Xotirani tozalash"</string>
     <string name="storage_clear_cache_btn_text" msgid="8449547925966775612">"Keshni tozalash"</string>
-    <string name="storage_clear_data_dlg_title" msgid="5863775997588969879">"Ilova maʼlumotlari oʻchirilsinmi?"</string>
+    <string name="storage_clear_data_dlg_title" msgid="5863775997588969879">"Bu ilova maʼlumotlari oʻchirilsinmi?"</string>
     <string name="storage_clear_data_dlg_text" msgid="795055288575727801">"Ushbu ilovaning barcha maʼlumotlari, jumladan, fayllar, maʼlumotlar bazalari, sozlamalar, hisoblar va boshqa narsalar oʻchirib tashlanadi. Keyin ularni qayta tiklab boʻlmaydi."</string>
     <string name="storage_clear_failed_dlg_text" msgid="6710485971686866306">"Xotira tozalanmadi."</string>
     <string name="storage_unmount_success" msgid="1553591517580407021">"<xliff:g id="NAME">%1$s</xliff:g> xavfsiz chiqarib olindi"</string>
@@ -520,7 +528,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Cheklangan profillar hisoblar qo‘sha olmaydilar"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Hisobni olib tashlash"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Hisob olib tashlansinmi?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Ushbu hisob o‘chirilganda unga bog‘liq barcha xabar, kontakt va boshqa ma’lumotlar qurilmadan o‘chib ketadi."</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Bu hisobga tegishli barcha xabarlar, kontaktlar va boshqa maʼlumotlar ushbu qurilmadan oʻchirib tashlanadi!"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Hisob olib tashlanmadi."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Hisobni sinxronlash"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Sinxronizatsiya ayrim elementlar uchun yoniq (<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>)"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Grafik kalit xato"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Grafik kalit qanday chiziladi"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Grafik kalit saqlanmadi"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Juda koʻp notoʻgʻri urinildi! <xliff:g id="NUMBER">%d</xliff:g> soniyadan keyin qayta urining."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Ekran qulfi olib tashlansinmi?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Bu hammaga hisobingizga kirish imkonini beradi"</string>
@@ -574,8 +583,8 @@
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Parolni kiriting"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Xavfsizlik uchun PIN kod o‘rnating"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"PIN kodni qayta kiriting"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN kod kamida 4 ta raqamli bo‘lsin"</string>
-    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"PIN kod yaroqsiz, kamida 5 ta raqamdan iborat bo‘lishi lozim."</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN kod uchun kamida 4 ta raqam kiriting"</string>
+    <string name="lockpin_invalid_pin" msgid="2149191577096327424">"PIN kod yaroqsiz, kamida 4 ta raqam kiriting."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"PIN kodlar bir-biriga mos emas"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"PIN kod saqlanmadi"</string>
     <string name="lockscreen_wrong_pin" msgid="4922465731473805306">"PIN kod xato"</string>
@@ -626,7 +635,7 @@
     <string name="lockpassword_pin_no_sequential_digits" msgid="38813552228809240">"Oshib boruvchi, kamayib boruvchi yoki qaytarilgan ketma-ket raqamlarga ruxsat berilmaydi."</string>
     <string name="setup_lock_settings_options_button_label" msgid="3337845811029780896">"Ekran qulfi parametrlari"</string>
     <string name="build_info_fmt" msgid="5592554123908086426">"<xliff:g id="FINGERPRINT">%1$s</xliff:g>\n<xliff:g id="DATE">%2$s</xliff:g> : <xliff:g id="NUM_DAYS">%3$s</xliff:g> kun oldin"</string>
-    <string name="credentials_reset" msgid="873900550885788639">"Hisob axborotini tozalash"</string>
+    <string name="credentials_reset" msgid="873900550885788639">"Hisobga oid axborotni tozalash"</string>
     <string name="credentials_reset_summary" msgid="6067911547500459637">"Barcha sertifikatlarni olib tashlash"</string>
     <string name="credentials_reset_hint" msgid="3459271621754137661">"Hamma narsa oʻchirib tashlansinmi?"</string>
     <string name="credentials_erased" msgid="2515915439705550379">"Hisob axborotlari ombori tozalandi."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c80d76a..bdde784 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g> muốn bật Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g> muốn tắt Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Lỗi"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Thiết bị sẽ sử dụng với <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Không tìm thấy thiết bị nào. Đảm bảo rằng các thiết bị đang bật và sẵn sàng kết nối."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Thử lại"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Đã xảy ra lỗi. Ứng dụng đã hủy yêu cầu chọn thiết bị."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Kết nối thành công"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Hiển thị tất cả"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Đang tìm kiếm"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Thiết bị chưa có tên"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Thiết bị được ghép nối"</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"Đặt lại"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Âm báo"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Âm lượng chuông"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Âm lượng điều hướng"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Âm lượng khi đi theo chỉ dẫn"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Nhạc chuông"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Thông báo"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Phương tiện"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Nhạc chuông điện thoại"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Âm thanh thông báo mặc định"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Âm thanh báo thức mặc định"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Lưu"</string>
     <string name="units_settings" msgid="402325305096925886">"Đơn vị"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Tốc độ"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Khoảng cách"</string>
@@ -276,7 +284,7 @@
     <string name="applications_settings" msgid="794261395191035632">"Thông tin ứng dụng"</string>
     <string name="force_stop" msgid="2153183697014720520">"Buộc dừng"</string>
     <string name="force_stop_dialog_title" msgid="3342850939200388694">"Buộc dừng?"</string>
-    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Nếu bạn buộc dừng một ứng dụng, thì ứng dụng đó có thể hoạt động sai."</string>
+    <string name="force_stop_dialog_text" msgid="4354954014318432599">"Nếu bạn buộc dừng một ứng dụng, thì ứng dụng đó có thể hoạt động không đúng cách."</string>
     <string name="disable_text" msgid="4358165448648990820">"Tắt"</string>
     <string name="enable_text" msgid="1794971777861881238">"Bật"</string>
     <string name="uninstall_text" msgid="277907956072833012">"Gỡ cài đặt"</string>
@@ -311,7 +319,7 @@
     <string name="assistant_security_warning" msgid="1844807956967428012">"Trợ lý sẽ có thể đọc thông tin về ứng dụng mà bạn đang dùng trên hệ thống, bao gồm cả thông tin hiển thị trên màn hình hoặc thông tin có thể truy cập trong ứng dụng."</string>
     <string name="autofill_confirmation_message" msgid="1832984461556991378">"&lt;b&gt;Hãy đảm bảo bạn tin tưởng ứng dụng này&lt;/b&gt; &lt;br/&gt; &lt;br/&gt; &lt;xliff:g id=app_name example=Google Autofill&gt;%1$s&lt;/xliff:g&gt; sử dụng nội dung trên màn hình của bạn để xác định nội dung nào có thể được tự động điền."</string>
     <string name="autofill_add_service" msgid="6413893366443609951">"Thêm dịch vụ"</string>
-    <string name="app_launch_domain_links_title" msgid="774480184927726651">"Mở đường dẫn liên kết"</string>
+    <string name="app_launch_domain_links_title" msgid="774480184927726651">"Mở đường liên kết"</string>
     <string name="domain_url_section_title" msgid="9070403140947787214">"Ứng dụng đã cài đặt"</string>
     <string name="domain_urls_summary_none" msgid="3077803215088293183">"Không mở các liên kết được hỗ trợ"</string>
     <string name="domain_urls_summary_one" msgid="5072257421806034237">"Mở <xliff:g id="DOMAIN">%s</xliff:g>"</string>
@@ -408,12 +416,12 @@
     <string name="reset_network_confirm_desc" msgid="7721698076856330212">"Bạn có muốn đặt lại tất cả cài đặt mạng không? Bạn không thể hoàn tác hành động này!"</string>
     <string name="reset_network_confirm_button_text" msgid="5246859685069024851">"Đặt lại các tùy chọn cài đặt"</string>
     <string name="reset_network_complete_toast" msgid="3804108209431416865">"Đã đặt lại cài đặt mạng"</string>
-    <string name="reset_app_pref_title" msgid="5855420038951743992">"Đặt lại tùy chọn ứng dụng"</string>
+    <string name="reset_app_pref_title" msgid="5855420038951743992">"Đặt lại các lựa chọn ưu tiên về ứng dụng?"</string>
     <string name="reset_app_pref_desc" msgid="579392665146962149">"Thao tác này sẽ đặt lại tất cả tùy chọn cho:\n\n"<li>"Ứng dụng bị tắt"</li>\n<li>"Thông báo ứng dụng bị tắt"</li>\n<li>"Ứng dụng mặc định cho các thao tác"</li>\n<li>"Giới hạn dữ liệu nền cho ứng dụng"</li>\n<li>"Bất kỳ giới hạn về quyền nào"</li>\n\n"Bạn sẽ không mất bất kỳ dữ liệu ứng dụng nào."</string>
     <string name="reset_app_pref_button_text" msgid="6270820447321231609">"Đặt lại ứng dụng"</string>
     <string name="reset_app_pref_complete_toast" msgid="8709072932243594166">"Đã đặt lại tùy chọn ứng dụng"</string>
-    <string name="master_clear_title" msgid="8515335233363214414">"Xóa mọi dữ liệu (khôi phục cài đặt gốc)"</string>
-    <string name="master_clear_desc" msgid="9058719802779893535">"Tác vụ này sẽ xóa tất cả dữ liệu trong thiết bị đầu trên phương tiện của bạn, bao gồm:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu cùng với tùy chọn cài đặt của ứng dụng và hệ thống"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
+    <string name="master_clear_title" msgid="8515335233363214414">"Xóa mọi dữ liệu (đặt lại về trạng thái ban đầu)"</string>
+    <string name="master_clear_desc" msgid="9058719802779893535">"Thao tác này sẽ xóa tất cả dữ liệu trong hệ thống giải trí trên xe của bạn, bao gồm:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu cùng với các tùy chọn cài đặt của ứng dụng và hệ thống"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
     <string name="master_clear_accounts" msgid="7797522012993567494">"Bạn hiện đã đăng nhập vào các tài khoản sau:"</string>
     <string name="master_clear_other_users_present" msgid="8383376863095743337">"Có người dùng khác trên phương tiện này."</string>
     <string name="master_clear_button_text" msgid="8010754220392741160">"Đặt lại phương tiện"</string>
@@ -520,7 +528,7 @@
     <string name="user_cannot_add_accounts_message" msgid="6775605884544906797">"Các hồ sơ bị hạn chế không thể thêm tài khoản"</string>
     <string name="remove_account_title" msgid="8840386525787836381">"Xóa tài khoản"</string>
     <string name="really_remove_account_title" msgid="3555164432587924900">"Bạn muốn xóa tài khoản?"</string>
-    <string name="really_remove_account_message" msgid="4296769280849579900">"Xóa tài khoản này sẽ xóa tất cả thư, danh bạ và dữ liệu khác khỏi thiết bị!"</string>
+    <string name="really_remove_account_message" msgid="4296769280849579900">"Nếu bạn xóa tài khoản này, tất cả thư, danh bạ và dữ liệu khác có liên quan sẽ bị xóa khỏi thiết bị!"</string>
     <string name="remove_account_error_title" msgid="8368044943174826635">"Không xóa được tài khoản."</string>
     <string name="account_sync_title" msgid="6541844336300236915">"Đồng bộ hóa tài khoản"</string>
     <string name="account_sync_summary_some_on" msgid="4525960296068027182">"Đã bật đồng bộ hóa cho <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> mục"</string>
@@ -567,14 +575,15 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Hình mở khóa không chính xác"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Cách vẽ hình mở khóa"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Lỗi khi lưu mẫu"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Bạn đã nhập sai quá nhiều lần. Hãy thử lại sau <xliff:g id="NUMBER">%d</xliff:g> giây."</string>
     <string name="okay" msgid="4589873324439764349">"OK"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Xóa phương thức khóa màn hình?"</string>
-    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Thao tác này sẽ cho phép bất cứ ai truy cập vào tài khoản của bạn"</string>
+    <string name="remove_screen_lock_message" msgid="6675850371585564965">"Thao tác này sẽ cho phép bất cứ ai cũng có thể truy cập vào tài khoản của bạn"</string>
     <string name="lock_settings_enter_pin" msgid="1669172111244633904">"Nhập mã PIN của bạn"</string>
     <string name="lock_settings_enter_password" msgid="2636669926649496367">"Nhập mật khẩu của bạn"</string>
     <string name="choose_lock_pin_message" msgid="2963792070267774417">"Để bảo mật, hãy đặt mã PIN"</string>
     <string name="confirm_your_pin_header" msgid="9096581288537156102">"Nhập lại mã PIN"</string>
-    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"PIN phải có ít nhất 4 chữ số"</string>
+    <string name="choose_lock_pin_hints" msgid="7362906249992020844">"Mã PIN phải có ít nhất 4 chữ số"</string>
     <string name="lockpin_invalid_pin" msgid="2149191577096327424">"Mã PIN không hợp lệ. Mã này phải có ít nhất 4 chữ số."</string>
     <string name="confirm_pins_dont_match" msgid="4607110139373520720">"Các mã PIN không khớp"</string>
     <string name="error_saving_lockpin" msgid="9011960139736000393">"Lỗi khi lưu mã PIN"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 7caf42c..5944f62 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"<xliff:g id="REQUESTER">%s</xliff:g>请求开启 WLAN"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"<xliff:g id="REQUESTER">%s</xliff:g>请求关闭 WLAN"</string>
     <string name="wifi_error" msgid="3105105447117289410">"错误"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"要与<xliff:g id="APPNAME">%1$s</xliff:g>搭配使用的设备"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"找不到设备。请确保设备已开启并可连接到网络。"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"重试"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"出了点问题。该应用已取消选择设备的请求。"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"连接成功"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"全部显示"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"正在搜索"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"蓝牙"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"未命名的设备"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"已配对的设备"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"手机铃声"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"默认通知提示音"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"默认闹钟提示音"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"保存"</string>
     <string name="units_settings" msgid="402325305096925886">"单位"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"速度"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"距离"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"图案错误"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"如何绘制解锁图案"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"保存图案时出错"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"错误次数过多。请在 <xliff:g id="NUMBER">%d</xliff:g> 秒后重试。"</string>
     <string name="okay" msgid="4589873324439764349">"确定"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"清除屏幕锁定设置"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"这样一来,任何人都能访问您的帐号"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 02fabe6..a150a62 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"「<xliff:g id="REQUESTER">%s</xliff:g>」要求開啟 Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"「<xliff:g id="REQUESTER">%s</xliff:g>」要求關閉 Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"錯誤"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"可配合<xliff:g id="APPNAME">%1$s</xliff:g>使用的裝置"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"找不到任何裝置。請確保裝置已開啟,並可連接網絡。"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"請再試一次"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"發生錯誤。應用程式已取消選擇裝置的要求。"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"連線成功"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"顯示全部"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"正在搜尋..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"藍牙"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"未命名的裝置"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"已配對的裝置"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"手機鈴聲"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"預設通知音效"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"預設鬧鐘音效"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"儲存"</string>
     <string name="units_settings" msgid="402325305096925886">"單位"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"速度"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"距離"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"圖案錯誤"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"如何畫出解鎖圖案"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"儲存鎖定圖案時發生錯誤"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"錯誤次數太多,請於 <xliff:g id="NUMBER">%d</xliff:g> 秒後再試。"</string>
     <string name="okay" msgid="4589873324439764349">"確定"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"要移除螢幕鎖定嗎?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"這樣,任何人都能存取您的帳戶"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b81698f..3d3678a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -157,6 +157,13 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"「<xliff:g id="REQUESTER">%s</xliff:g>」要求開啟 Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"「<xliff:g id="REQUESTER">%s</xliff:g>」要求關閉 Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"發生錯誤"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"搭配「<xliff:g id="APPNAME">%1$s</xliff:g>」使用的裝置"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"找不到裝置。請確認裝置已經開啟並可進行連線。"</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"再試一次"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"網路連線發生錯誤,因此應用程式已取消選擇裝置的要求。"</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"連線成功"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"全部顯示"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"搜尋中"</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"藍牙"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"未命名的裝置"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"已配對的裝置"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"手機鈴聲"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"預設通知音效"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"預設鬧鐘音效"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"儲存"</string>
     <string name="units_settings" msgid="402325305096925886">"單位"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"速度"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"距離"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"圖案錯誤"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"如何畫出解鎖圖案"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"儲存圖案時發生錯誤"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"錯誤次數過多,請於 <xliff:g id="NUMBER">%d</xliff:g> 秒後再試。"</string>
     <string name="okay" msgid="4589873324439764349">"確定"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"要移除螢幕鎖定嗎?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"這樣一來,任何人都能存取你的帳戶"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5c442ea..d171529 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -157,10 +157,17 @@
     <string name="wifi_ask_enable" msgid="4452418245680754578">"I-<xliff:g id="REQUESTER">%s</xliff:g> ifuna ukuvula i-Wi-Fi"</string>
     <string name="wifi_ask_disable" msgid="2949290055916181553">"I-<xliff:g id="REQUESTER">%s</xliff:g> ifuna ukuvala i-Wi-Fi"</string>
     <string name="wifi_error" msgid="3105105447117289410">"Iphutha"</string>
+    <string name="network_connection_request_dialog_title" msgid="8449606155059098762">"Idivayisi ezosetshenziswa ne-<xliff:g id="APPNAME">%1$s</xliff:g>"</string>
+    <string name="network_connection_timeout_dialog_message" msgid="2536299451668687586">"Awekho amadivayisi atholiwe. Yenza isiqinisekiso sokuthi amadivayisi avuliwe futhi ayatholakala ukuze axhumeke."</string>
+    <string name="network_connection_timeout_dialog_ok" msgid="2228662561126434792">"Zama futhi"</string>
+    <string name="network_connection_errorstate_dialog_message" msgid="4268321315241218483">"Okuthile kuvelile. Uhlelo lokusebenza likhansele isicelo sokukhetha idivayisi."</string>
+    <string name="network_connection_connect_successful" msgid="7893957133113302365">"Ukuxhumeka kuphumelele"</string>
+    <string name="network_connection_request_dialog_showall" msgid="776613149566461487">"Bonisa konke"</string>
+    <string name="progress_scanning" msgid="7191583064717479795">"Iyasesha..."</string>
     <string name="bluetooth_settings_title" msgid="3794688574569688649">"I-Bluetooth"</string>
     <string name="bluetooth_device" msgid="3178478829314083240">"Idivayisi engenalo igama"</string>
     <string name="bluetooth_paired_devices" msgid="6463199569164652410">"Amadivaysi abhanqene"</string>
-    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Bhanqa idivayisi entsha"</string>
+    <string name="bluetooth_pair_new_device" msgid="6948753485443263095">"Bhangqa idivayisi entsha"</string>
     <string name="bluetooth_pair_new_device_summary" msgid="2497221247690369031">"I-Bluetooth izovula ukuze ibhanqe"</string>
     <string name="bluetooth_disconnect_title" msgid="7675271355910637528">"Nqamula idivayisi?"</string>
     <string name="bluetooth_disconnect_all_profiles" msgid="2017519733701757244">"Imoto yakho izinqamula kusuka ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -188,7 +195,7 @@
     <string name="bluetooth_pairing_key_msg" msgid="5066825929751599037">"Ikhodi yokumatanisa ye-Bluetooth"</string>
     <string name="bluetooth_enable_alphanumeric_pin" msgid="1636575922217263060">"Iphinikhodi iqukethe amaletha namasimbui"</string>
     <string name="bluetooth_enter_passkey_msg" msgid="5955236916732265593">"Thayipha ikhodi yokumatanisa bese ucindezela ku-Buyela noma ku-Enter"</string>
-    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Bhanqa ne-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+    <string name="bluetooth_pairing_request" msgid="4769675459526556801">"Bhangqa ne-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
     <string name="bluetooth_pairing_shares_phonebook" msgid="2015966932886300630">"Vumela i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ukuthi ifinyelele koxhumana nabo nakumlando wekholi"</string>
     <string name="bluetooth_enter_pin_other_device" msgid="7825091249522704764">"Kungenzeka futhi udinge ukufaka le-PIN kwenye idivaysi."</string>
     <string name="bluetooth_enter_passkey_other_device" msgid="7147248221018865922">"Kungadingeka ufake lokhiye wokudlula kwenye idivayisi."</string>
@@ -211,7 +218,7 @@
     <string name="tts_reset" msgid="6289481549801844709">"Setha kabusha"</string>
     <string name="sound_settings" msgid="3072423952331872246">"Umsindo"</string>
     <string name="ring_volume_title" msgid="3135241004980719442">"Ivolumu yokukhalisa"</string>
-    <string name="navi_volume_title" msgid="946292066759195165">"Ivolomu yokuzula"</string>
+    <string name="navi_volume_title" msgid="946292066759195165">"Ivolomu yohambo"</string>
     <string name="incoming_call_volume_title" msgid="6972117872424656876">"Ithoni yokukhala"</string>
     <string name="notification_volume_title" msgid="6749411263197157876">"Isaziso"</string>
     <string name="media_volume_title" msgid="6697416686272606865">"Imidiya"</string>
@@ -220,6 +227,7 @@
     <string name="ringtone_title" msgid="8370531086214517972">"Ithoni yokukhala yefoni"</string>
     <string name="notification_ringtone_title" msgid="8661716239594010288">"Umsindo wesaziso ozenzakalelayo"</string>
     <string name="alarm_ringtone_title" msgid="3257364170646440908">"Umsindo we-alamu ozenzakalelayo"</string>
+    <string name="ringtone_picker_save_title" msgid="4388137432517227001">"Londoloza"</string>
     <string name="units_settings" msgid="402325305096925886">"Amayunithi"</string>
     <string name="units_speed_title" msgid="7115143916747108160">"Isivinini"</string>
     <string name="units_distance_title" msgid="6257691565990474635">"Ibanga"</string>
@@ -567,6 +575,7 @@
     <string name="lockpattern_pattern_wrong" msgid="929223969555399363">"Iphethini engalungile"</string>
     <string name="lockpattern_settings_help_how_to_record" msgid="4436556875843192284">"Udweba kanjani phathini yokuvula"</string>
     <string name="error_saving_lockpattern" msgid="2933512812768570130">"Iphutha ukulondoloza iphethini"</string>
+    <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="4636307830951251013">"Imizamo eminingi engalungile. Zama futhi kumasekhondi angu-<xliff:g id="NUMBER">%d</xliff:g>."</string>
     <string name="okay" msgid="4589873324439764349">"KULUNGILE"</string>
     <string name="remove_screen_lock_title" msgid="1234382338764193387">"Susa isikrini sokukhiya?"</string>
     <string name="remove_screen_lock_message" msgid="6675850371585564965">"Lokhu kuzovumela wonke umuntu ukufinyelela i-akhawunti yakho"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 5de6cde..df25d0b 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -61,6 +61,8 @@
     <declare-styleable name="Preference">
         <!-- Classname of a PreferenceController corresponding to the preference -->
         <attr name="controller" format="string"/>
+        <!-- Whether or not the preference is searchable, by default it's true. -->
+        <attr name="searchable" format="boolean" />
     </declare-styleable>
 
     <declare-styleable name="ProgressBarPreference">
diff --git a/res/values/config.xml b/res/values/config.xml
index 6be7743..e231476 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -27,7 +27,7 @@
     <!-- Whether Wi-Fi Mac address should be shown or not. -->
     <bool name="config_show_wifi_mac_address">true</bool>
     <!-- Whether to show regulatory info or not. -->
-    <bool name="config_show_regulatory_info">true</bool>
+    <bool name="config_show_regulatory_info">false</bool>
     <!-- Whether premium SMS should be shown or not. -->
     <bool name="config_show_premium_sms">true</bool>
     <!-- Whether exit button in settings' root action bar should be shown or not -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 04838bb..85ba7c4 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -144,4 +144,26 @@
     <dimen name="alert_dialog_password_checkbox_margin_end">@*android:dimen/car_padding_3</dimen>
     <dimen name="alert_dialog_password_checkbox_margin_start">@*android:dimen/car_padding_3</dimen>
     <dimen name="alert_dialog_password_checkbox_margin_top">@*android:dimen/car_padding_1</dimen>
+
+    <!-- Preference access point -->
+    <dimen name="ap_preference_item_padding_start">@*android:dimen/car_keyline_1</dimen>
+    <dimen name="ap_preference_item_padding_end">@*android:dimen/car_keyline_1</dimen>
+    <dimen name="ap_preference_item_icon_margin_end">@*android:dimen/car_padding_2</dimen>
+
+    <!-- Divider Preference -->
+    <dimen name="divider_preference_height">1dp</dimen>
+    <dimen name="divider_preference_margin_top">@*android:dimen/car_padding_2</dimen>
+    <dimen name="divider_preference_margin_bottom">@*android:dimen/car_padding_2</dimen>
+
+    <!-- Entity Header Preference -->
+    <dimen name="entity_header_icon_size">@*android:dimen/car_icon_size</dimen>
+    <dimen name="entity_header_margin_bottom">@*android:dimen/car_padding_1</dimen>
+    <dimen name="entity_header_inner_margin">@*android:dimen/car_padding_1</dimen>
+
+    <!-- Action Buttons Preference -->
+    <dimen name="action_buttons_margin_top">@*android:dimen/car_padding_1</dimen>
+    <dimen name="action_buttons_margin_bottom">@*android:dimen/car_padding_1</dimen>
+    <dimen name="action_buttons_icon_margin_end">@*android:dimen/car_padding_1</dimen>
+    <dimen name="action_buttons_divider_height">@dimen/divider_preference_height</dimen>
+
 </resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index df83ebe..41d1465 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -16,7 +16,10 @@
 -->
 
 <resources>
-    <!-- Ids for toolbar menu items for purposes of selecting items for tests -->
+    <!-- IDs for toolbar menu items for purposes of selecting items for tests -->
     <item type="id" name="toolbar_menu_item_0"/>
     <item type="id" name="toolbar_menu_item_1"/>
+
+    <!-- ID for the selected item in the ringtone picker -->
+    <item type="id" name="ringtone_picker_selected_id"/>
 </resources>
diff --git a/res/values/preference_keys.xml b/res/values/preference_keys.xml
index 2d1fa84..a447c69 100644
--- a/res/values/preference_keys.xml
+++ b/res/values/preference_keys.xml
@@ -136,6 +136,9 @@
 
     <!-- Application Details -->
     <string name="pk_application_details_app" translatable="false">application_details_app</string>
+    <string name="pk_application_details_action_buttons" translatable="false">
+        application_details_action_buttons
+    </string>
     <string name="pk_application_details_notifications" translatable="false">
         application_details_notifications
     </string>
@@ -254,6 +257,9 @@
     </string>
     <string name="pk_storage_application_details" translatable="false">storage_application_details
     </string>
+    <string name="pk_storage_application_action_buttons" translatable="false">
+        storage_application_action_buttons
+    </string>
     <string name="pk_storage_files" translatable="false">storage_files</string>
     <string name="pk_storage_system" translatable="false">storage_system</string>
 
@@ -269,6 +275,7 @@
     <string name="pk_default_notification" translatable="false">default_notification</string>
     <string name="pk_default_alarm" translatable="false">default_alarm</string>
     <string name="pk_sounds_extra_settings" translatable="false">sounds_extra_settings</string>
+    <string name="pk_ringtone_picker" translatable="false">ringtone_picker</string>
 
     <!-- Units Settings -->
     <string name="pk_units_settings_entry" translatable="false">units_settings_entry</string>
diff --git a/res/values/preference_screen_keys.xml b/res/values/preference_screen_keys.xml
index e14d0b5..f80ec02 100644
--- a/res/values/preference_screen_keys.xml
+++ b/res/values/preference_screen_keys.xml
@@ -72,6 +72,7 @@
     <string name="psk_reset_network" translatable="false">reset_network_screen</string>
     <string name="psk_reset_options" translatable="false">reset_options_screen</string>
     <string name="psk_security_settings" translatable="false">security_settings_screen</string>
+    <string name="psk_sound_ringtone_picker" translatable="false">sound_ringtone_picker_screen</string>
     <string name="psk_sound_settings" translatable="false">sound_settings_screen</string>
     <string name="psk_special_access" translatable="false">special_access_screen</string>
     <string name="psk_storage_media_category_detail" translatable="false">storage_media_category_detail_screen</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0d5e040..58df615 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -34,6 +34,8 @@
     <string name="keywords_display_night_display">dim screen, night, tint</string>
     <!-- Label for night mode toggle tile in quick setting [CHAR LIMIT=20] -->
     <string name="night_mode_tile_label">Night mode</string>
+    <!-- Empty placeholder string to be used while waiting for a string to be loaded asynchronously. [CHAR LIMIT=NONE] -->
+    <string name="empty_placeholder" translatable="false">&#160;</string>
 
     <!-- Network and internet settings [CHAR LIMIT=40] -->
     <string name="network_and_internet">Network &amp; internet</string>
@@ -306,6 +308,20 @@
     <string name="wifi_ask_disable"><xliff:g id="requester" example="FancyApp">%s</xliff:g> wants to turn off Wi-Fi</string>
     <!-- Summary text when Wi-Fi has error -->
     <string name="wifi_error">Error</string>
+    <!-- Title for Network connection request Dialog [CHAR LIMIT=60] -->
+    <string name="network_connection_request_dialog_title">Device to use with <xliff:g id="appName" example="ThirdPartyAppName">%1$s</xliff:g></string>
+    <!-- Message for Network connection timeout Dialog [CHAR LIMIT=NONE] -->
+    <string name="network_connection_timeout_dialog_message">No devices found. Make sure devices are turned on and available to connect.</string>
+    <!-- OK button for Network connection timeout Dialog [CHAR LIMIT=30] -->
+    <string name="network_connection_timeout_dialog_ok">Try again</string>
+    <!-- Message for Network connection error state Dialog [CHAR LIMIT=NONE] -->
+    <string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
+    <!-- Toast message when connection is successful [CHAR LIMIT=30] -->
+    <string name="network_connection_connect_successful">Connection successful</string>
+    <!-- Neutral button for Network connection request Dialog [CHAR LIMIT=30] -->
+    <string name="network_connection_request_dialog_showall">Show all</string>
+    <!--Bluetooth settings screen, text that appears in heading bar when scanning for devices -->
+    <string name="progress_scanning">Searching</string>
 
     <!-- Bluetooth settings --><skip/>
     <!-- Title of Bluetooth settings pages. [CHAR LIMIT=30] -->
@@ -439,6 +455,8 @@
     <string name="notification_ringtone_title">Default notification sound</string>
     <!-- Sound settings screen, title for the option defining the default alarm sound. [CHAR LIMIT=30] -->
     <string name="alarm_ringtone_title">Default alarm sound</string>
+    <!-- Ringtone picker save button. [CHAR LIMIT=30] -->
+    <string name="ringtone_picker_save_title">Save</string>
 
     <!-- Units Settings -->
     <!-- Units Settings title [CHAR LIMIT=10] -->
@@ -1221,6 +1239,8 @@
     <string name="lockpattern_settings_help_how_to_record">How to draw an unlock pattern</string>
     <!-- Message shown when error is encountered when saving pattern [CHAR LIMIT=40] -->
     <string name="error_saving_lockpattern">Error saving pattern</string>
+    <!-- Message shown when in pattern unlock screen after too many incorrect attempts [CHAR LIMIT=120]-->
+    <string name="lockpattern_too_many_failed_confirmation_attempts">Too many incorrect attempts. Try again in <xliff:g id="number">%d</xliff:g> seconds.</string>
     <!-- Label for button to confirm picker selection [CHAR_LIMIT=20] -->
     <string name="okay">OK</string>
     <!-- Title of dialog asking the user if they really want to remove the screen lock [CHAR LIMIT=30]-->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 52d42e2..f9c3bf6 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -25,6 +25,10 @@
         <item name="android:textAllCaps">false</item>
     </style>
 
+    <style name="PreferenceButtonIconAppearance">
+        <item name="android:tint">@*android:color/btn_colored_borderless_text_material</item>
+    </style>
+
     <style name="LockPattern">
         <item name="*android:regularColor">@*android:color/car_body1</item>
         <item name="*android:successColor">@*android:color/car_blue_500</item>
@@ -38,7 +42,7 @@
         <item name="android:textColor">@*android:color/car_body3</item>
         <item name="android:tint">@*android:color/car_body3</item>
         <item name="android:clickable">true</item>
-        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
+        <item name="android:background">?android:attr/selectableItemBackground</item>
     </style>
 
     <style name="DataUsageSummaryCarrierInfoTextAppearance"
diff --git a/res/values/themes.xml b/res/values/themes.xml
index b8ddf75..d9d8fbc 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -19,7 +19,7 @@
     <style name="CarSettingTheme" parent="@style/Theme.CarUi.WithToolbar">
         <item name="wifi_signal">@drawable/wifi_signal</item>
         <item name="wifiSignalColor">?android:attr/textColorPrimary</item>
-        <item name="iconColor">?android:attr/textColorPrimary</item>
+        <item name="iconColor">@color/car_ui_text_color_primary</item>
         <item name="dividerColor">@*android:color/car_list_divider</item>
         <item name="userSwitcherBackground">@android:color/transparent</item>
         <item name="userSwitcherCurrentUserColor">?android:attr/colorAccent</item>
diff --git a/res/xml/about_settings_fragment.xml b/res/xml/about_settings_fragment.xml
index 4656315..a67234d 100644
--- a/res/xml/about_settings_fragment.xml
+++ b/res/xml/about_settings_fragment.xml
@@ -48,7 +48,7 @@
     <Preference
         android:key="@string/pk_regulatory_labels"
         android:title="@string/regulatory_labels"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.system.RegulatoryInfoPreferenceController">
         <intent android:action="android.settings.SHOW_REGULATORY_INFO"/>
     </Preference>
     <com.android.car.ui.preference.CarUiPreference
diff --git a/res/xml/account_settings_fragment.xml b/res/xml/account_settings_fragment.xml
index 052cc87..f8b40d1 100644
--- a/res/xml/account_settings_fragment.xml
+++ b/res/xml/account_settings_fragment.xml
@@ -23,7 +23,8 @@
     <PreferenceCategory
         android:key="@string/pk_account_list"
         android:title="@string/account_list_title"
-        settings:controller="com.android.car.settings.accounts.AccountListPreferenceController"/>
+        settings:controller="com.android.car.settings.accounts.AccountListPreferenceController"
+        settings:searchable="false"/>
     <SwitchPreference
         android:key="@string/pk_account_auto_sync"
         android:title="@string/account_auto_sync_title"
diff --git a/res/xml/app_storage_settings_details_fragment.xml b/res/xml/app_storage_settings_details_fragment.xml
index 01e042f..886ab8c 100644
--- a/res/xml/app_storage_settings_details_fragment.xml
+++ b/res/xml/app_storage_settings_details_fragment.xml
@@ -18,10 +18,14 @@
                   xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:title="@string/storage_settings_title"
                   android:key="@string/psk_app_storage_settings_details">
-    <com.android.car.ui.preference.CarUiPreference
+    <com.android.car.settings.common.EntityHeaderPreference
         android:key="@string/pk_storage_application_details"
         settings:controller="com.android.car.settings.storage.StorageApplicationPreferenceController"
-        settings:showChevron="false"/>
+        settings:searchable="false"/>
+    <com.android.car.settings.common.ActionButtonsPreference
+        android:key="@string/pk_storage_application_action_buttons"
+        settings:controller="com.android.car.settings.storage.StorageApplicationActionButtonsPreferenceController"
+        settings:searchable="false"/>
     <com.android.car.settings.storage.StorageAppDetailPreference
         android:key="@string/pk_storage_application_size"
         android:selectable="false"
diff --git a/res/xml/application_details_fragment.xml b/res/xml/application_details_fragment.xml
index 59af245..e44a785 100644
--- a/res/xml/application_details_fragment.xml
+++ b/res/xml/application_details_fragment.xml
@@ -20,11 +20,14 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/applications_settings"
     android:key="@string/psk_application_details">
-    <com.android.car.ui.preference.CarUiPreference
+    <com.android.car.settings.common.EntityHeaderPreference
         android:key="@string/pk_application_details_app"
-        android:selectable="false"
         settings:controller="com.android.car.settings.applications.ApplicationPreferenceController"
-        settings:showChevron="false"/>
+        settings:searchable="false"/>
+    <com.android.car.settings.common.ActionButtonsPreference
+        android:key="@string/pk_application_details_action_buttons"
+        settings:controller="com.android.car.settings.applications.ApplicationActionButtonsPreferenceController"
+        settings:searchable="false"/>
     <SwitchPreference
         android:key="@string/pk_application_details_notifications"
         android:title="@string/notifications_label"
diff --git a/res/xml/data_usage_fragment.xml b/res/xml/data_usage_fragment.xml
index 6dd6778..78f3bb3 100644
--- a/res/xml/data_usage_fragment.xml
+++ b/res/xml/data_usage_fragment.xml
@@ -31,7 +31,8 @@
     <Preference
         android:key="@string/pk_data_warning_and_limit"
         android:title="@string/data_warning_limit_title"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.datausage.DataWarningAndLimitActivity"/>
     </Preference>
diff --git a/res/xml/languages_and_input_fragment.xml b/res/xml/languages_and_input_fragment.xml
index 8650ff5..da5442e 100644
--- a/res/xml/languages_and_input_fragment.xml
+++ b/res/xml/languages_and_input_fragment.xml
@@ -26,21 +26,22 @@
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$LanguagePickerActivity"/>
     </Preference>
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionIconPreference
         android:key="@string/pk_autofill_picker_entry"
         android:summary="@string/app_list_preference_none"
         android:title="@string/autofill_settings_title"
-        android:widgetLayout="@layout/details_preference_widget"
         settings:controller="com.android.car.settings.applications.defaultapps.DefaultAutofillPickerEntryPreferenceController"
-        settings:iconSpaceReserved="true">
+        settings:iconSpaceReserved="true"
+        settings:secondaryActionIcon="@drawable/ic_settings_gear">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$DefaultAutofillPickerActivity"/>
-    </com.android.car.settings.common.ButtonPreference>
+    </com.android.car.ui.preference.CarUiTwoActionIconPreference>
     <Preference
         android:key="@string/pk_keyboard_entry"
         android:title="@string/keyboard_settings"
         settings:controller="com.android.car.settings.inputmethod.KeyboardPreferenceController"
-        settings:iconSpaceReserved="true">
+        settings:iconSpaceReserved="true"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$KeyboardActivity"/>
     </Preference>
@@ -48,7 +49,8 @@
         android:key="@string/pk_tts_settings_entry"
         android:title="@string/text_to_speech_settings"
         settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
-        settings:iconSpaceReserved="true">
+        settings:iconSpaceReserved="true"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$TextToSpeechOutputActivity"/>
     </Preference>
diff --git a/res/xml/manage_assist_fragment.xml b/res/xml/manage_assist_fragment.xml
index b8e58e5..e06c8f0 100644
--- a/res/xml/manage_assist_fragment.xml
+++ b/res/xml/manage_assist_fragment.xml
@@ -20,12 +20,12 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/assist_and_voice_input_settings"
     android:key="@string/psk_manage_assist">
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionIconPreference
         android:key="@string/pk_default_assist"
         android:title="@string/assist_app_settings"
-        android:widgetLayout="@layout/details_preference_widget"
         settings:controller="com.android.car.settings.applications.defaultapps.DefaultAssistantPickerEntryPreferenceController"
-        settings:iconSpaceReserved="true"/>
+        settings:iconSpaceReserved="true"
+        settings:secondaryActionIcon="@drawable/ic_settings_gear"/>
     <SwitchPreference
         android:key="@string/pk_assist_use_text_context"
         android:summary="@string/assist_access_context_summary"
@@ -38,11 +38,11 @@
         android:title="@string/assist_access_screenshot_title"
         settings:controller="com.android.car.settings.applications.assist.ScreenshotContextPreferenceController"
         settings:iconSpaceReserved="true"/>
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionIconPreference
         android:fragment="com.android.car.settings.applications.assist.DefaultVoiceInputPickerFragment"
         android:key="@string/pk_default_voice_input"
         android:title="@string/voice_input_settings_title"
-        android:widgetLayout="@layout/details_preference_widget"
         settings:controller="com.android.car.settings.applications.assist.DefaultVoiceInputPickerEntryPreferenceController"
-        settings:iconSpaceReserved="true"/>
+        settings:iconSpaceReserved="true"
+        settings:secondaryActionIcon="@drawable/ic_settings_gear"/>
 </PreferenceScreen>
diff --git a/res/xml/network_and_internet_fragment.xml b/res/xml/network_and_internet_fragment.xml
index 9e57302..1f07753 100644
--- a/res/xml/network_and_internet_fragment.xml
+++ b/res/xml/network_and_internet_fragment.xml
@@ -20,19 +20,21 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/network_and_internet"
     android:key="@string/psk_network_and_internet">
-    <com.android.car.settings.common.MasterSwitchPreference
+    <com.android.car.ui.preference.CarUiTwoActionSwitchPreference
         android:icon="@drawable/ic_settings_wifi"
         android:key="@string/pk_wifi_settings_entry"
         android:title="@string/wifi_settings"
-        settings:controller="com.android.car.settings.wifi.WifiEntryPreferenceController">
+        settings:controller="com.android.car.settings.wifi.WifiEntryPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$WifiSettingsActivity"/>
-    </com.android.car.settings.common.MasterSwitchPreference>
+    </com.android.car.ui.preference.CarUiTwoActionSwitchPreference>
     <Preference
         android:key="@string/pk_wifi_tether_settings_entry"
         android:title="@string/tether_settings_title_all"
         android:icon="@drawable/ic_wifi_tethering"
-        settings:controller="com.android.car.settings.wifi.WifiTetherPreferenceController">
+        settings:controller="com.android.car.settings.wifi.WifiTetherPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$WifiTetherActivity"/>
     </Preference>
@@ -40,13 +42,15 @@
         android:icon="@drawable/ic_settings_cellular"
         android:key="@string/pk_mobile_network_settings_entry"
         android:title="@string/mobile_network_settings"
-        settings:controller="com.android.car.settings.network.MobileNetworkEntryPreferenceController">
+        settings:controller="com.android.car.settings.network.MobileNetworkEntryPreferenceController"
+        settings:searchable="false">
     </Preference>
     <Preference
         android:icon="@drawable/ic_settings_data_usage"
         android:key="@string/pk_data_usage_settings_entry"
         android:title="@string/data_usage_settings"
-        settings:controller="com.android.car.settings.datausage.DataUsageEntryPreferenceController">
+        settings:controller="com.android.car.settings.datausage.DataUsageEntryPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$DataUsageActivity"/>
     </Preference>
diff --git a/res/xml/reset_network_confirm_fragment.xml b/res/xml/reset_network_confirm_fragment.xml
index 356159d..c45d4fc 100644
--- a/res/xml/reset_network_confirm_fragment.xml
+++ b/res/xml/reset_network_confirm_fragment.xml
@@ -15,9 +15,11 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+                  xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:title="@string/reset_network_confirm_title"
                   android:key="@string/psk_reset_network_confirm">
     <Preference
         android:selectable="false"
-        android:title="@string/reset_network_confirm_desc"/>
+        android:title="@string/reset_network_confirm_desc"
+        settings:singleLineTitle="false"/>
 </PreferenceScreen>
diff --git a/res/xml/ringtone_picker_fragment.xml b/res/xml/ringtone_picker_fragment.xml
new file mode 100644
index 0000000..c616351
--- /dev/null
+++ b/res/xml/ringtone_picker_fragment.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="@string/psk_sound_ringtone_picker">
+    <com.android.car.settings.common.LogicalPreferenceGroup
+        android:key="@string/pk_ringtone_picker"
+        settings:controller="com.android.car.settings.sound.RingtonePickerPreferenceController"/>
+</PreferenceScreen>
diff --git a/res/xml/system_settings_fragment.xml b/res/xml/system_settings_fragment.xml
index fd35933..949a640 100644
--- a/res/xml/system_settings_fragment.xml
+++ b/res/xml/system_settings_fragment.xml
@@ -24,7 +24,8 @@
         android:key="@string/pk_languages_and_input_settings"
         android:icon="@drawable/ic_language"
         android:title="@string/languages_and_input_settings"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$LanguagesAndInputActivity"/>
     </Preference>
@@ -39,7 +40,8 @@
         android:icon="@drawable/ic_settings_about"
         android:key="@string/pk_about_settings_entry"
         android:title="@string/about_settings"
-        settings:controller="com.android.car.settings.system.AboutSettingsEntryPreferenceController">
+        settings:controller="com.android.car.settings.system.AboutSettingsEntryPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$AboutSettingsActivity"/>
     </Preference>
@@ -47,7 +49,8 @@
         android:icon="@drawable/ic_settings_about"
         android:key="@string/pk_legal_information_entry"
         android:title="@string/legal_information"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$LegalInformationActivity"/>
     </Preference>
@@ -56,7 +59,8 @@
         android:key="@string/pk_reset_options_entry"
         android:summary="@string/reset_options_summary"
         android:title="@string/reset_options_title"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$ResetOptionsActivity"/>
     </Preference>
diff --git a/res/xml/text_to_speech_output_fragment.xml b/res/xml/text_to_speech_output_fragment.xml
index a4eba4b..ebf2478 100644
--- a/res/xml/text_to_speech_output_fragment.xml
+++ b/res/xml/text_to_speech_output_fragment.xml
@@ -18,12 +18,12 @@
                   xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:title="@string/text_to_speech_settings"
                   android:key="@string/psk_text_to_speech_output">
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionIconPreference
         android:fragment="com.android.car.settings.tts.PreferredEngineFragment"
         android:key="@string/pk_tts_preferred_engine_entry"
         android:title="@string/text_to_speech_preferred_engine_settings"
-        android:widgetLayout="@layout/details_preference_widget"
-        settings:controller="com.android.car.settings.tts.PreferredEngineEntryPreferenceController"/>
+        settings:controller="com.android.car.settings.tts.PreferredEngineEntryPreferenceController"
+        settings:secondaryActionIcon="@drawable/ic_settings_gear"/>
     <com.android.car.settings.common.LogicalPreferenceGroup
         android:key="@string/pk_tts_playback_group"
         settings:controller="com.android.car.settings.tts.TtsPlaybackPreferenceController">
diff --git a/res/xml/user_details_fragment.xml b/res/xml/user_details_fragment.xml
index 3b4e2ee..d9e8433 100644
--- a/res/xml/user_details_fragment.xml
+++ b/res/xml/user_details_fragment.xml
@@ -17,9 +17,9 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:key="@string/psk_user_details">
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionIconPreference
         android:key="@string/pk_edit_user_name_entry"
         android:selectable="false"
-        android:widgetLayout="@layout/edit_icon_preference_widget"
-        settings:controller="com.android.car.settings.users.EditUserNameEntryPreferenceController"/>
+        settings:controller="com.android.car.settings.users.EditUserNameEntryPreferenceController"
+        settings:secondaryActionIcon="@drawable/ic_edit"/>
 </PreferenceScreen>
diff --git a/res/xml/user_details_permissions_fragment.xml b/res/xml/user_details_permissions_fragment.xml
index 8b2c6bb..360d4b1 100644
--- a/res/xml/user_details_permissions_fragment.xml
+++ b/res/xml/user_details_permissions_fragment.xml
@@ -17,12 +17,13 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   xmlns:settings="http://schemas.android.com/apk/res-auto"
                   android:key="@string/psk_user_details_permissions">
-    <com.android.car.settings.common.ButtonPreference
+    <com.android.car.ui.preference.CarUiTwoActionTextPreference
         android:key="@string/pk_make_user_admin"
         android:selectable="false"
         android:title="@string/grant_admin_permissions_title"
-        android:widgetLayout="@layout/make_admin_preference_widget"
-        settings:controller="com.android.car.settings.users.MakeAdminPreferenceController"/>
+        settings:controller="com.android.car.settings.users.MakeAdminPreferenceController"
+        settings:secondaryActionStyle="borderless"
+        settings:secondaryActionText="@string/grant_admin_permissions_button_text"/>
     <com.android.car.settings.common.LogicalPreferenceGroup
         android:key="@string/pk_user_permissions"
         settings:controller="com.android.car.settings.users.PermissionsPreferenceController"/>
diff --git a/res/xml/wifi_list_fragment.xml b/res/xml/wifi_list_fragment.xml
index 83a8aa8..ab346b6 100644
--- a/res/xml/wifi_list_fragment.xml
+++ b/res/xml/wifi_list_fragment.xml
@@ -36,7 +36,8 @@
     <Preference
         android:key="@string/pk_wifi_preferences"
         android:title="@string/wifi_preferences_title"
-        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
+        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"
+        settings:searchable="false">
         <intent android:targetPackage="com.android.car.settings"
                 android:targetClass="com.android.car.settings.common.CarSettingActivities$WifiPreferencesActivity"/>
     </Preference>
diff --git a/src/com/android/car/settings/FallbackHome.java b/src/com/android/car/settings/FallbackHome.java
index 63e4b9f..559bb18 100644
--- a/src/com/android/car/settings/FallbackHome.java
+++ b/src/com/android/car/settings/FallbackHome.java
@@ -19,6 +19,7 @@
 import static android.car.settings.CarSettings.Global.ENABLE_USER_SWITCH_DEVELOPER_MESSAGE;
 
 import android.app.Activity;
+import android.car.userlib.UserHelper;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -53,6 +54,8 @@
 
     private boolean mProvisioned;
 
+    private boolean mFinished;
+
     private final Runnable mProgressTimeoutRunnable = () -> {
         View v = getLayoutInflater().inflate(
                 R.layout.fallback_home_finishing_boot, /* root= */ null);
@@ -135,6 +138,10 @@
     protected void onDestroy() {
         super.onDestroy();
         unregisterReceiver(mReceiver);
+        if (!mFinished) {
+            LOG.d("User " + getUserId() + " FallbackHome is finished");
+            finishFallbackHome();
+        }
     }
 
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -160,15 +167,25 @@
                         + "one soon?");
                 mHandler.sendEmptyMessageDelayed(0, 500);
             } else {
-                LOG.d("User " + getUserId() + " unlocked and real home ("
-                        + homeInfo.activityInfo.packageName + ") found; let's go!");
-                getSystemService(PowerManager.class).userActivity(
-                        SystemClock.uptimeMillis(), false);
-                finishAndRemoveTask();
+                String homePackageName = homeInfo.activityInfo.packageName;
+                if (UserHelper.isHeadlessSystemUser(getUserId())) {
+                    // This is the transient state in HeadlessSystemMode to boot for user 10+.
+                    LOG.d("User 0 unlocked, but will not launch real home: " + homePackageName);
+                    return;
+                }
+                LOG.d("User " + getUserId() + " unlocked and real home (" + homePackageName
+                        + ") found; let's go!");
+                finishFallbackHome();
             }
         }
     }
 
+    private void finishFallbackHome() {
+        getSystemService(PowerManager.class).userActivity(SystemClock.uptimeMillis(), false);
+        finishAndRemoveTask();
+        mFinished = true;
+    }
+
     private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
diff --git a/src/com/android/car/settings/accounts/AccountSettingsFragment.java b/src/com/android/car/settings/accounts/AccountSettingsFragment.java
index 8aa60b7..6fed44f 100644
--- a/src/com/android/car/settings/accounts/AccountSettingsFragment.java
+++ b/src/com/android/car/settings/accounts/AccountSettingsFragment.java
@@ -31,7 +31,6 @@
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.settingslib.search.SearchIndexable;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -115,12 +114,5 @@
      */
     public static final CarBaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new CarBaseSearchIndexProvider(R.xml.account_settings_fragment,
-                    Settings.ACTION_SYNC_SETTINGS) {
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    List<String> nonIndexableKeys = new ArrayList<>();
-                    nonIndexableKeys.add(context.getString(R.string.pk_account_list));
-                    return nonIndexableKeys;
-                }
-            };
+                    Settings.ACTION_SYNC_SETTINGS);
 }
diff --git a/src/com/android/car/settings/accounts/AddAccountActivity.java b/src/com/android/car/settings/accounts/AddAccountActivity.java
index d562cf9..06897df 100644
--- a/src/com/android/car/settings/accounts/AddAccountActivity.java
+++ b/src/com/android/car/settings/accounts/AddAccountActivity.java
@@ -82,23 +82,34 @@
                 LOG.v("Account manager future is not done.");
                 finish();
             }
+            boolean done = true;
             try {
                 Bundle result = future.getResult();
-
                 Intent intent = result.getParcelable(AccountManager.KEY_INTENT);
-                Bundle addAccountOptions = new Bundle();
-                addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
-                        hasMultipleUsers(AddAccountActivity.this));
-                addAccountOptions.putParcelable(EXTRA_USER, mUserHandle);
-                intent.putExtras(addAccountOptions);
-                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                startActivityForResultAsUser(
-                        intent, ADD_ACCOUNT_REQUEST, mUserHandle);
+                if (intent != null) {
+                    done = false;
+                    Bundle addAccountOptions = new Bundle();
+                    addAccountOptions.putBoolean(EXTRA_HAS_MULTIPLE_USERS,
+                            hasMultipleUsers(AddAccountActivity.this));
+                    addAccountOptions.putParcelable(EXTRA_USER, mUserHandle);
+                    intent.putExtras(addAccountOptions);
+                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    startActivityForResultAsUser(
+                            intent, ADD_ACCOUNT_REQUEST, mUserHandle);
+                } else {
+                    setResult(RESULT_OK);
+                    if (mPendingIntent != null) {
+                        mPendingIntent.cancel();
+                        mPendingIntent = null;
+                    }
+                }
                 LOG.v("account added: " + result);
             } catch (OperationCanceledException | IOException | AuthenticatorException e) {
                 LOG.v("addAccount error: " + e);
             } finally {
-                finish();
+                if (done) {
+                    finish();
+                }
             }
         }
     };
diff --git a/src/com/android/car/settings/accounts/SyncPreference.java b/src/com/android/car/settings/accounts/SyncPreference.java
index 612a739..aca1173 100644
--- a/src/com/android/car/settings/accounts/SyncPreference.java
+++ b/src/com/android/car/settings/accounts/SyncPreference.java
@@ -21,17 +21,17 @@
 import android.widget.TextView;
 
 import androidx.preference.PreferenceViewHolder;
-import androidx.preference.SwitchPreference;
 
 import com.android.car.apps.common.util.Themes;
 import com.android.car.settings.R;
+import com.android.car.ui.preference.CarUiSwitchPreference;
 
 /**
  * A preference that represents the state of a sync adapter.
  *
  * <p>Largely derived from {@link com.android.settings.accounts.SyncStateSwitchPreference}.
  */
-public class SyncPreference extends SwitchPreference {
+public class SyncPreference extends CarUiSwitchPreference {
     private int mUid;
     private String mPackageName;
     private AccountSyncHelper.SyncState mSyncState = AccountSyncHelper.SyncState.NONE;
diff --git a/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceController.java b/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceController.java
new file mode 100644
index 0000000..49c44cb
--- /dev/null
+++ b/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceController.java
@@ -0,0 +1,496 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.applications;
+
+import static android.app.Activity.RESULT_OK;
+
+import static com.android.car.settings.applications.ApplicationsUtils.isKeepEnabledPackage;
+import static com.android.car.settings.applications.ApplicationsUtils.isProfileOrDeviceOwner;
+import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.admin.DevicePolicyManager;
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+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.net.Uri;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.ArraySet;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.ActionButtonInfo;
+import com.android.car.settings.common.ActionButtonsPreference;
+import com.android.car.settings.common.ActivityResultCallback;
+import com.android.car.settings.common.ConfirmationDialogFragment;
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.Logger;
+import com.android.car.settings.common.PreferenceController;
+import com.android.car.settings.users.UserHelper;
+import com.android.settingslib.Utils;
+import com.android.settingslib.applications.ApplicationsState;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Shows actions associated with an application, like uninstall and forceStop.
+ *
+ * <p>To uninstall an app, it must <i>not</i> be:
+ * <ul>
+ * <li>a system bundled app
+ * <li>system signed
+ * <li>managed by an active admin from a device policy
+ * <li>a device or profile owner
+ * <li>the only home app
+ * <li>the default home app
+ * <li>for a user with the {@link UserManager#DISALLOW_APPS_CONTROL} restriction
+ * <li>for a user with the {@link UserManager#DISALLOW_UNINSTALL_APPS} restriction
+ * </ul>
+ *
+ * <p>For apps that cannot be uninstalled, a disable option is shown instead (or enable if the app
+ * is already disabled).
+ */
+public class ApplicationActionButtonsPreferenceController extends
+        PreferenceController<ActionButtonsPreference> implements ActivityResultCallback {
+    private static final Logger LOG = new Logger(
+            ApplicationActionButtonsPreferenceController.class);
+
+    @VisibleForTesting
+    static final String DISABLE_CONFIRM_DIALOG_TAG =
+            "com.android.car.settings.applications.DisableConfirmDialog";
+    @VisibleForTesting
+    static final String FORCE_STOP_CONFIRM_DIALOG_TAG =
+            "com.android.car.settings.applications.ForceStopConfirmDialog";
+    @VisibleForTesting
+    static final int UNINSTALL_REQUEST_CODE = 10;
+
+    private DevicePolicyManager mDpm;
+    private PackageManager mPm;
+    private UserManager mUserManager;
+    private UserHelper mUserHelper;
+    private ApplicationsState.Session mSession;
+
+    private ApplicationsState.AppEntry mAppEntry;
+    private ApplicationsState mApplicationsState;
+    private String mPackageName;
+    private PackageInfo mPackageInfo;
+
+    @VisibleForTesting
+    final ConfirmationDialogFragment.ConfirmListener mForceStopConfirmListener =
+            new ConfirmationDialogFragment.ConfirmListener() {
+                @Override
+                public void onConfirm(@Nullable Bundle arguments) {
+                    LOG.d("Stopping package " + mPackageName);
+                    getContext().getSystemService(ActivityManager.class)
+                            .forceStopPackage(mPackageName);
+                    int userId = UserHandle.getUserId(mAppEntry.info.uid);
+                    mApplicationsState.invalidatePackage(mPackageName, userId);
+                }
+            };
+
+    private final View.OnClickListener mForceStopClickListener = i -> {
+        ConfirmationDialogFragment dialogFragment =
+                new ConfirmationDialogFragment.Builder(getContext())
+                        .setTitle(R.string.force_stop_dialog_title)
+                        .setMessage(R.string.force_stop_dialog_text)
+                        .setPositiveButton(android.R.string.ok,
+                                mForceStopConfirmListener)
+                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
+                        .build();
+        getFragmentController().showDialog(dialogFragment, FORCE_STOP_CONFIRM_DIALOG_TAG);
+    };
+
+    @VisibleForTesting
+    final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            boolean enabled = getResultCode() != Activity.RESULT_CANCELED;
+            LOG.d("Got broadcast response: Restart status for " + mPackageName + " " + enabled);
+            updateForceStopButtonInner(enabled);
+        }
+    };
+
+    @VisibleForTesting
+    final ConfirmationDialogFragment.ConfirmListener mDisableConfirmListener =
+            new ConfirmationDialogFragment.ConfirmListener() {
+                @Override
+                public void onConfirm(@Nullable Bundle arguments) {
+                    mPm.setApplicationEnabledSetting(mPackageName,
+                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, /* flags= */ 0);
+                    updateUninstallButtonInner(false);
+                }
+            };
+
+    private final View.OnClickListener mDisableClickListener = i -> {
+        ConfirmationDialogFragment dialogFragment =
+                new ConfirmationDialogFragment.Builder(getContext())
+                        .setMessage(getContext().getString(R.string.app_disable_dialog_text))
+                        .setPositiveButton(R.string.app_disable_dialog_positive,
+                                mDisableConfirmListener)
+                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
+                        .build();
+        getFragmentController().showDialog(dialogFragment, DISABLE_CONFIRM_DIALOG_TAG);
+    };
+
+    private final View.OnClickListener mEnableClickListener = i -> {
+        mPm.setApplicationEnabledSetting(mPackageName,
+                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, /* flags= */ 0);
+        updateUninstallButtonInner(true);
+    };
+
+    private final View.OnClickListener mUninstallClickListener = i -> {
+        Uri packageUri = Uri.parse("package:" + mPackageName);
+        Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
+        uninstallIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
+        getFragmentController().startActivityForResult(uninstallIntent, UNINSTALL_REQUEST_CODE,
+                /* callback= */ this);
+    };
+
+    private final ApplicationsState.Callbacks mApplicationStateCallbacks =
+            new ApplicationsState.Callbacks() {
+                @Override
+                public void onRunningStateChanged(boolean running) {
+                }
+
+                @Override
+                public void onPackageListChanged() {
+                    refreshUi();
+                }
+
+                @Override
+                public void onRebuildComplete(ArrayList<ApplicationsState.AppEntry> apps) {
+                }
+
+                @Override
+                public void onPackageIconChanged() {
+                }
+
+                @Override
+                public void onPackageSizeChanged(String packageName) {
+                }
+
+                @Override
+                public void onAllSizesComputed() {
+                }
+
+                @Override
+                public void onLauncherInfoChanged() {
+                }
+
+                @Override
+                public void onLoadEntriesCompleted() {
+                }
+            };
+
+    public ApplicationActionButtonsPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+        mDpm = context.getSystemService(DevicePolicyManager.class);
+        mPm = context.getPackageManager();
+        mUserManager = UserManager.get(context);
+        mUserHelper = UserHelper.getInstance(context);
+    }
+
+    @Override
+    protected Class<ActionButtonsPreference> getPreferenceType() {
+        return ActionButtonsPreference.class;
+    }
+
+    /** Sets the {@link ApplicationsState.AppEntry} which is used to load the app name and icon. */
+    public ApplicationActionButtonsPreferenceController setAppEntry(
+            ApplicationsState.AppEntry appEntry) {
+        mAppEntry = appEntry;
+        return this;
+    }
+
+    /** Sets the {@link ApplicationsState} which is used to load the app name and icon. */
+    public ApplicationActionButtonsPreferenceController setAppState(
+            ApplicationsState applicationsState) {
+        mApplicationsState = applicationsState;
+        return this;
+    }
+
+    /**
+     * Set the packageName, which is used to perform actions on a particular package.
+     */
+    public ApplicationActionButtonsPreferenceController setPackageName(String packageName) {
+        mPackageName = packageName;
+        return this;
+    }
+
+    @Override
+    protected void checkInitialized() {
+        if (mAppEntry == null || mApplicationsState == null || mPackageName == null) {
+            throw new IllegalStateException(
+                    "AppEntry, AppState, and PackageName should be set before calling this "
+                            + "function");
+        }
+    }
+
+    @Override
+    protected void onCreateInternal() {
+        ConfirmationDialogFragment.resetListeners(
+                (ConfirmationDialogFragment) getFragmentController().findDialogByTag(
+                        DISABLE_CONFIRM_DIALOG_TAG),
+                mDisableConfirmListener,
+                /* rejectListener= */ null,
+                /* neutralListener= */ null);
+        ConfirmationDialogFragment.resetListeners(
+                (ConfirmationDialogFragment) getFragmentController().findDialogByTag(
+                        FORCE_STOP_CONFIRM_DIALOG_TAG),
+                mForceStopConfirmListener,
+                /* rejectListener= */ null,
+                /* neutralListener= */ null);
+        getPreference().getButton(ActionButtons.BUTTON2)
+                .setText(R.string.force_stop)
+                .setIcon(R.drawable.ic_warning)
+                .setOnClickListener(mForceStopClickListener)
+                .setEnabled(false);
+        mSession = mApplicationsState.newSession(mApplicationStateCallbacks);
+    }
+
+    @Override
+    protected void onStartInternal() {
+        mSession.onResume();
+    }
+
+    @Override
+    protected void onStopInternal() {
+        mSession.onPause();
+    }
+
+    @Override
+    protected void updateState(ActionButtonsPreference preference) {
+        refreshAppEntry();
+        if (mAppEntry == null) {
+            getFragmentController().goBack();
+            return;
+        }
+        updateForceStopButton();
+        updateUninstallButton();
+    }
+
+    private void refreshAppEntry() {
+        mAppEntry = mApplicationsState.getEntry(mPackageName, UserHandle.myUserId());
+        if (mAppEntry != null) {
+            try {
+                mPackageInfo = mPm.getPackageInfo(mPackageName,
+                        PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER
+                                | PackageManager.GET_SIGNATURES | PackageManager.GET_PERMISSIONS);
+            } catch (PackageManager.NameNotFoundException e) {
+                LOG.e("Exception when retrieving package:" + mPackageName, e);
+                mPackageInfo = null;
+            }
+        } else {
+            mPackageInfo = null;
+        }
+    }
+
+    private void updateForceStopButton() {
+        if (mDpm.packageHasActiveAdmins(mPackageName)) {
+            updateForceStopButtonInner(/* enabled= */ false);
+        } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) {
+            // If the app isn't explicitly stopped, then always show the force stop button.
+            updateForceStopButtonInner(/* enabled= */ true);
+        } else {
+            Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
+                    Uri.fromParts("package", mPackageName, /* fragment= */ null));
+            intent.putExtra(Intent.EXTRA_PACKAGES, new String[]{mPackageName});
+            intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
+            intent.putExtra(Intent.EXTRA_USER_HANDLE,
+                    UserHandle.getUserId(mAppEntry.info.uid));
+            LOG.d("Sending broadcast to query restart status for " + mPackageName);
+            getContext().sendOrderedBroadcastAsUser(intent,
+                    UserHandle.CURRENT,
+                    /* receiverPermission= */ null,
+                    mCheckKillProcessesReceiver,
+                    /* scheduler= */ null,
+                    Activity.RESULT_CANCELED,
+                    /* initialData= */ null,
+                    /* initialExtras= */ null);
+        }
+    }
+
+    private void updateForceStopButtonInner(boolean enabled) {
+        getPreference().getButton(ActionButtons.BUTTON2).setEnabled(
+                enabled && !mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL));
+    }
+
+    private void updateUninstallButtonInner(boolean isAppEnabled) {
+        ActionButtonInfo uninstallButton = getPreference().getButton(ActionButtons.BUTTON1);
+        if (isBundledApp()) {
+            if (isAppEnabled) {
+                uninstallButton.setText(R.string.disable_text).setIcon(
+                        R.drawable.ic_block).setOnClickListener(mDisableClickListener);
+            } else {
+                uninstallButton.setText(R.string.enable_text).setIcon(
+                        R.drawable.ic_check_circle).setOnClickListener(mEnableClickListener);
+            }
+        } else {
+            uninstallButton.setText(R.string.uninstall_text).setIcon(
+                    R.drawable.ic_delete).setOnClickListener(mUninstallClickListener);
+        }
+
+        uninstallButton.setEnabled(!shouldDisableUninstallButton());
+    }
+
+    private void updateUninstallButton() {
+        updateUninstallButtonInner(isAppEnabled());
+    }
+
+    private boolean shouldDisableUninstallButton() {
+        if (shouldDisableUninstallForHomeApp()) {
+            LOG.d("Uninstall disabled for home app");
+            return true;
+        }
+
+        if (isAppEnabled() && isKeepEnabledPackage(getContext(), mPackageName)) {
+            LOG.d("Disable button disabled for keep enabled package");
+            return true;
+        }
+
+        if (Utils.isSystemPackage(getContext().getResources(), mPm, mPackageInfo)) {
+            LOG.d("Uninstall disabled for system package");
+            return true;
+        }
+
+        if (mDpm.packageHasActiveAdmins(mPackageName)) {
+            LOG.d("Uninstall disabled because package has active admins");
+            return true;
+        }
+
+        // We don't allow uninstalling profile/device owner on any user because if it's a system
+        // app, "uninstall" is actually "downgrade to the system version + disable", and
+        // "downgrade" will clear data on all users.
+        if (isProfileOrDeviceOwner(mPackageName, mDpm, mUserHelper)) {
+            LOG.d("Uninstall disabled because package is profile or device owner");
+            return true;
+        }
+
+        if (mDpm.isUninstallInQueue(mPackageName)) {
+            LOG.d("Uninstall disabled because intent is already queued");
+            return true;
+        }
+
+        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)) {
+            LOG.d("Uninstall disabled because user has DISALLOW_APPS_CONTROL restriction");
+            return true;
+        }
+
+        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_UNINSTALL_APPS)) {
+            LOG.d("Uninstall disabled because user has DISALLOW_UNINSTALL_APPS restriction");
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns {@code true} if the package is a Home app that should not be uninstalled. We don't
+     * risk downgrading bundled home apps because that can interfere with home-key resolution. We
+     * can't allow removal of the only home app, and we don't want to allow removal of an
+     * explicitly preferred home app. The user can go to Home settings and pick a different app,
+     * after which we'll permit removal of the now-not-default app.
+     */
+    private boolean shouldDisableUninstallForHomeApp() {
+        Set<String> homePackages = new ArraySet<>();
+        // Get list of "home" apps and trace through any meta-data references.
+        List<ResolveInfo> homeActivities = new ArrayList<>();
+        ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
+        for (int i = 0; i < homeActivities.size(); i++) {
+            ResolveInfo ri = homeActivities.get(i);
+            String activityPkg = ri.activityInfo.packageName;
+            homePackages.add(activityPkg);
+
+            // Also make sure to include anything proxying for the home app.
+            Bundle metadata = ri.activityInfo.metaData;
+            if (metadata != null) {
+                String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE);
+                if (signaturesMatch(metaPkg, activityPkg)) {
+                    homePackages.add(metaPkg);
+                }
+            }
+        }
+
+        if (homePackages.contains(mPackageName)) {
+            if (isBundledApp()) {
+                // Don't risk a downgrade.
+                return true;
+            } else if (currentDefaultHome == null) {
+                // No preferred default. Permit uninstall only when there is more than one
+                // candidate.
+                return (homePackages.size() == 1);
+            } else {
+                // Explicit default home app. Forbid uninstall of that one, but permit it for
+                // installed-but-inactive ones.
+                return mPackageName.equals(currentDefaultHome.getPackageName());
+            }
+        } else {
+            // Not a home app.
+            return false;
+        }
+    }
+
+    private boolean signaturesMatch(String pkg1, String pkg2) {
+        if (pkg1 != null && pkg2 != null) {
+            try {
+                int match = mPm.checkSignatures(pkg1, pkg2);
+                if (match >= PackageManager.SIGNATURE_MATCH) {
+                    return true;
+                }
+            } catch (Exception e) {
+                // e.g. package not found during lookup. Possibly bad input.
+                // Just return false as this isn't a reason to crash given the use case.
+            }
+        }
+        return false;
+    }
+
+    private boolean isBundledApp() {
+        return (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+    }
+
+    private boolean isAppEnabled() {
+        return mAppEntry.info.enabled && !(mAppEntry.info.enabledSetting
+                == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED);
+    }
+
+    @Override
+    public void processActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        if (requestCode == UNINSTALL_REQUEST_CODE) {
+            if (resultCode == RESULT_OK) {
+                getFragmentController().goBack();
+            } else {
+                LOG.e("Uninstall failed with result " + resultCode);
+            }
+        }
+    }
+}
diff --git a/src/com/android/car/settings/applications/ApplicationDetailsFragment.java b/src/com/android/car/settings/applications/ApplicationDetailsFragment.java
index b37b44f..d9ff361 100644
--- a/src/com/android/car/settings/applications/ApplicationDetailsFragment.java
+++ b/src/com/android/car/settings/applications/ApplicationDetailsFragment.java
@@ -16,95 +16,33 @@
 
 package com.android.car.settings.applications;
 
-import static android.app.Activity.RESULT_OK;
-
-import static com.android.car.settings.applications.ApplicationsUtils.isKeepEnabledPackage;
-import static com.android.car.settings.applications.ApplicationsUtils.isProfileOrDeviceOwner;
-
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 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.net.Uri;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.os.UserManager;
-import android.util.ArraySet;
 
-import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.ActivityResultCallback;
-import com.android.car.settings.common.ConfirmationDialogFragment;
 import com.android.car.settings.common.Logger;
 import com.android.car.settings.common.SettingsFragment;
-import com.android.car.settings.users.UserHelper;
-import com.android.car.ui.toolbar.MenuItem;
-import com.android.settingslib.Utils;
 import com.android.settingslib.applications.ApplicationsState;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
 /**
- * Shows details about an application and action associated with that application, like uninstall,
- * forceStop.
- *
- * <p>To uninstall an app, it must <i>not</i> be:
- * <ul>
- * <li>a system bundled app
- * <li>system signed
- * <li>managed by an active admin from a device policy
- * <li>a device or profile owner
- * <li>the only home app
- * <li>the default home app
- * <li>for a user with the {@link UserManager#DISALLOW_APPS_CONTROL} restriction
- * <li>for a user with the {@link UserManager#DISALLOW_UNINSTALL_APPS} restriction
- * </ul>
- *
- * <p>For apps that cannot be uninstalled, a disable option is shown instead (or enable if the app
- * is already disabled).
+ * Shows details about an application.
  */
-public class ApplicationDetailsFragment extends SettingsFragment implements ActivityResultCallback {
+public class ApplicationDetailsFragment extends SettingsFragment {
     private static final Logger LOG = new Logger(ApplicationDetailsFragment.class);
     public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
 
-    @VisibleForTesting
-    static final String DISABLE_CONFIRM_DIALOG_TAG =
-            "com.android.car.settings.applications.DisableConfirmDialog";
-    @VisibleForTesting
-    static final String FORCE_STOP_CONFIRM_DIALOG_TAG =
-            "com.android.car.settings.applications.ForceStopConfirmDialog";
-    @VisibleForTesting
-    static final int UNINSTALL_REQUEST_CODE = 10;
-
-    private DevicePolicyManager mDpm;
     private PackageManager mPm;
-    private UserManager mUserManager;
-    private UserHelper mUserHelper;
 
     private String mPackageName;
     private PackageInfo mPackageInfo;
     private ApplicationsState mAppState;
-    private ApplicationsState.Session mSession;
     private ApplicationsState.AppEntry mAppEntry;
 
-    // The function of this button depends on which app is shown and the app's current state.
-    // It is an application enable/disable toggle for apps bundled with the system image.
-    private MenuItem mUninstallButton;
-    private MenuItem mForceStopButton;
-
     /** Creates an instance of this fragment, passing packageName as an argument. */
     public static ApplicationDetailsFragment getInstance(String packageName) {
         ApplicationDetailsFragment applicationDetailFragment = new ApplicationDetailsFragment();
@@ -115,11 +53,6 @@
     }
 
     @Override
-    public List<MenuItem> getToolbarMenuItems() {
-        return Arrays.asList(mUninstallButton, mForceStopButton);
-    }
-
-    @Override
     @XmlRes
     protected int getPreferenceScreenResId() {
         return R.xml.application_details_fragment;
@@ -128,22 +61,21 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
         mPm = context.getPackageManager();
-        mUserManager = UserManager.get(context);
-        mUserHelper = UserHelper.getInstance(context);
 
         // These should be loaded before onCreate() so that the controller operates as expected.
         mPackageName = getArguments().getString(EXTRA_PACKAGE_NAME);
 
         mAppState = ApplicationsState.getInstance(requireActivity().getApplication());
-        mSession = mAppState.newSession(mApplicationStateCallbacks, getLifecycle());
 
         retrieveAppEntry();
 
         use(ApplicationPreferenceController.class,
                 R.string.pk_application_details_app)
                 .setAppEntry(mAppEntry).setAppState(mAppState);
+        use(ApplicationActionButtonsPreferenceController.class,
+                R.string.pk_application_details_action_buttons)
+                .setAppEntry(mAppEntry).setAppState(mAppState).setPackageName(mPackageName);
         use(NotificationsPreferenceController.class,
                 R.string.pk_application_details_notifications).setPackageInfo(mPackageInfo);
         use(PermissionsPreferenceController.class,
@@ -155,53 +87,6 @@
                 R.string.pk_application_details_version).setPackageInfo(mPackageInfo);
     }
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        ConfirmationDialogFragment.resetListeners(
-                (ConfirmationDialogFragment) findDialogByTag(DISABLE_CONFIRM_DIALOG_TAG),
-                mDisableConfirmListener,
-                /* rejectListener= */ null,
-                /* neutralListener= */ null);
-        ConfirmationDialogFragment.resetListeners(
-                (ConfirmationDialogFragment) findDialogByTag(FORCE_STOP_CONFIRM_DIALOG_TAG),
-                mForceStopConfirmListener,
-                /* rejectListener= */ null,
-                /* neutralListener= */ null);
-
-        mUninstallButton = new MenuItem.Builder(getContext()).build();
-        mForceStopButton = new MenuItem.Builder(getContext())
-                .setTitle(R.string.force_stop)
-                .setOnClickListener(mForceStopClickListener)
-                .setEnabled(false)
-                .build();
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        // Resume the session earlier than the lifecycle so that cached information is updated
-        // even if settings is not resumed (for example in multi-display).
-        mSession.onResume();
-        refresh();
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        // Since we resume early in onStart, make sure we clean up even if we don't receive onPause.
-        mSession.onPause();
-    }
-
-    private void refresh() {
-        retrieveAppEntry();
-        if (mAppEntry == null) {
-            goBack();
-        }
-        updateForceStopButton();
-        updateUninstallButton();
-    }
-
     private void retrieveAppEntry() {
         mAppEntry = mAppState.getEntry(mPackageName, UserHandle.myUserId());
         if (mAppEntry != null) {
@@ -217,288 +102,4 @@
             mPackageInfo = null;
         }
     }
-
-    private void updateForceStopButton() {
-        if (mDpm.packageHasActiveAdmins(mPackageName)) {
-            updateForceStopButtonInner(/* enabled= */ false);
-        } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) {
-            // If the app isn't explicitly stopped, then always show the force stop button.
-            updateForceStopButtonInner(/* enabled= */ true);
-        } else {
-            Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
-                    Uri.fromParts("package", mPackageName, /* fragment= */ null));
-            intent.putExtra(Intent.EXTRA_PACKAGES, new String[]{mPackageName});
-            intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
-            intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
-            LOG.d("Sending broadcast to query restart status for " + mPackageName);
-            requireContext().sendOrderedBroadcastAsUser(intent,
-                    UserHandle.CURRENT,
-                    /* receiverPermission= */ null,
-                    mCheckKillProcessesReceiver,
-                    /* scheduler= */ null,
-                    Activity.RESULT_CANCELED,
-                    /* initialData= */ null,
-                    /* initialExtras= */ null);
-        }
-    }
-
-    private void updateForceStopButtonInner(boolean enabled) {
-        mForceStopButton.setEnabled(
-                enabled && !mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL));
-    }
-
-    private void updateUninstallButtonInner(boolean isAppEnabled) {
-        if (isBundledApp()) {
-            if (isAppEnabled) {
-                mUninstallButton.setTitle(R.string.disable_text);
-                mUninstallButton.setOnClickListener(mDisableClickListener);
-            } else {
-                mUninstallButton.setTitle(R.string.enable_text);
-                mUninstallButton.setOnClickListener(mEnableClickListener);
-            }
-        } else {
-            mUninstallButton.setTitle(R.string.uninstall_text);
-            mUninstallButton.setOnClickListener(mUninstallClickListener);
-        }
-
-        mUninstallButton.setEnabled(!shouldDisableUninstallButton());
-    }
-
-    private void updateUninstallButton() {
-        updateUninstallButtonInner(isAppEnabled());
-    }
-
-    private boolean shouldDisableUninstallButton() {
-        if (shouldDisableUninstallForHomeApp()) {
-            LOG.d("Uninstall disabled for home app");
-            return true;
-        }
-
-        if (isAppEnabled() && isKeepEnabledPackage(requireContext(), mPackageName)) {
-            LOG.d("Disable button disabled for keep enabled package");
-            return true;
-        }
-
-        if (Utils.isSystemPackage(getResources(), mPm, mPackageInfo)) {
-            LOG.d("Uninstall disabled for system package");
-            return true;
-        }
-
-        if (mDpm.packageHasActiveAdmins(mPackageName)) {
-            LOG.d("Uninstall disabled because package has active admins");
-            return true;
-        }
-
-        // We don't allow uninstalling profile/device owner on any user because if it's a system
-        // app, "uninstall" is actually "downgrade to the system version + disable", and
-        // "downgrade" will clear data on all users.
-        if (isProfileOrDeviceOwner(mPackageName, mDpm, mUserHelper)) {
-            LOG.d("Uninstall disabled because package is profile or device owner");
-            return true;
-        }
-
-        if (mDpm.isUninstallInQueue(mPackageName)) {
-            LOG.d("Uninstall disabled because intent is already queued");
-            return true;
-        }
-
-        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)) {
-            LOG.d("Uninstall disabled because user has DISALLOW_APPS_CONTROL restriction");
-            return true;
-        }
-
-        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_UNINSTALL_APPS)) {
-            LOG.d("Uninstall disabled because user has DISALLOW_UNINSTALL_APPS restriction");
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns {@code true} if the package is a Home app that should not be uninstalled. We don't
-     * risk downgrading bundled home apps because that can interfere with home-key resolution. We
-     * can't allow removal of the only home app, and we don't want to allow removal of an
-     * explicitly preferred home app. The user can go to Home settings and pick a different app,
-     * after which we'll permit removal of the now-not-default app.
-     */
-    private boolean shouldDisableUninstallForHomeApp() {
-        Set<String> homePackages = new ArraySet<>();
-        // Get list of "home" apps and trace through any meta-data references.
-        List<ResolveInfo> homeActivities = new ArrayList<>();
-        ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
-        for (int i = 0; i < homeActivities.size(); i++) {
-            ResolveInfo ri = homeActivities.get(i);
-            String activityPkg = ri.activityInfo.packageName;
-            homePackages.add(activityPkg);
-
-            // Also make sure to include anything proxying for the home app.
-            Bundle metadata = ri.activityInfo.metaData;
-            if (metadata != null) {
-                String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE);
-                if (signaturesMatch(metaPkg, activityPkg)) {
-                    homePackages.add(metaPkg);
-                }
-            }
-        }
-
-        if (homePackages.contains(mPackageName)) {
-            boolean isBundledApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-            if (isBundledApp) {
-                // Don't risk a downgrade.
-                return true;
-            } else if (currentDefaultHome == null) {
-                // No preferred default. Permit uninstall only when there is more than one
-                // candidate.
-                return (homePackages.size() == 1);
-            } else {
-                // Explicit default home app. Forbid uninstall of that one, but permit it for
-                // installed-but-inactive ones.
-                return mPackageName.equals(currentDefaultHome.getPackageName());
-            }
-        } else {
-            // Not a home app.
-            return false;
-        }
-    }
-
-    private boolean signaturesMatch(String pkg1, String pkg2) {
-        if (pkg1 != null && pkg2 != null) {
-            try {
-                int match = mPm.checkSignatures(pkg1, pkg2);
-                if (match >= PackageManager.SIGNATURE_MATCH) {
-                    return true;
-                }
-            } catch (Exception e) {
-                // e.g. package not found during lookup. Possibly bad input.
-                // Just return false as this isn't a reason to crash given the use case.
-            }
-        }
-        return false;
-    }
-
-    private boolean isBundledApp() {
-        return (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-    }
-
-    private boolean isAppEnabled() {
-        return mAppEntry.info.enabled && !(mAppEntry.info.enabledSetting
-                == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED);
-    }
-
-    @Override
-    public void processActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        if (requestCode == UNINSTALL_REQUEST_CODE) {
-            if (resultCode == RESULT_OK) {
-                goBack();
-            } else {
-                LOG.e("Uninstall failed with result " + resultCode);
-            }
-        }
-    }
-
-    private final ConfirmationDialogFragment.ConfirmListener mForceStopConfirmListener =
-            new ConfirmationDialogFragment.ConfirmListener() {
-                @Override
-                public void onConfirm(@Nullable Bundle arguments) {
-                    ActivityManager am = (ActivityManager) requireContext().getSystemService(
-                            Context.ACTIVITY_SERVICE);
-                    LOG.d("Stopping package " + mPackageName);
-                    am.forceStopPackage(mPackageName);
-                    int userId = UserHandle.getUserId(mAppEntry.info.uid);
-                    mAppState.invalidatePackage(mPackageName, userId);
-                }
-            };
-
-    private final MenuItem.OnClickListener mForceStopClickListener = i -> {
-        ConfirmationDialogFragment dialogFragment =
-                new ConfirmationDialogFragment.Builder(getContext())
-                        .setTitle(R.string.force_stop_dialog_title)
-                        .setMessage(R.string.force_stop_dialog_text)
-                        .setPositiveButton(android.R.string.ok,
-                                mForceStopConfirmListener)
-                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
-                        .build();
-        showDialog(dialogFragment, FORCE_STOP_CONFIRM_DIALOG_TAG);
-    };
-
-    private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            boolean enabled = getResultCode() != Activity.RESULT_CANCELED;
-            LOG.d("Got broadcast response: Restart status for " + mPackageName + " " + enabled);
-            updateForceStopButtonInner(enabled);
-        }
-    };
-
-    private final ConfirmationDialogFragment.ConfirmListener mDisableConfirmListener =
-            new ConfirmationDialogFragment.ConfirmListener() {
-                @Override
-                public void onConfirm(@Nullable Bundle arguments) {
-                    mPm.setApplicationEnabledSetting(mPackageName,
-                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, /* flags= */ 0);
-                    updateUninstallButtonInner(false);
-                }
-            };
-
-    private final MenuItem.OnClickListener mDisableClickListener = i -> {
-        ConfirmationDialogFragment dialogFragment =
-                new ConfirmationDialogFragment.Builder(getContext())
-                        .setMessage(getString(R.string.app_disable_dialog_text))
-                        .setPositiveButton(R.string.app_disable_dialog_positive,
-                                mDisableConfirmListener)
-                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
-                        .build();
-        showDialog(dialogFragment, DISABLE_CONFIRM_DIALOG_TAG);
-    };
-
-    private final MenuItem.OnClickListener mEnableClickListener = i -> {
-        mPm.setApplicationEnabledSetting(mPackageName,
-                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, /* flags= */ 0);
-        updateUninstallButtonInner(true);
-    };
-
-    private final MenuItem.OnClickListener mUninstallClickListener = i -> {
-        Uri packageUri = Uri.parse("package:" + mPackageName);
-        Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
-        uninstallIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
-        startActivityForResult(uninstallIntent, UNINSTALL_REQUEST_CODE, /* callback= */
-                ApplicationDetailsFragment.this);
-    };
-
-    private final ApplicationsState.Callbacks mApplicationStateCallbacks =
-            new ApplicationsState.Callbacks() {
-                @Override
-                public void onRunningStateChanged(boolean running) {
-                }
-
-                @Override
-                public void onPackageListChanged() {
-                    refresh();
-                }
-
-                @Override
-                public void onRebuildComplete(ArrayList<ApplicationsState.AppEntry> apps) {
-                }
-
-                @Override
-                public void onPackageIconChanged() {
-                }
-
-                @Override
-                public void onPackageSizeChanged(String packageName) {
-                }
-
-                @Override
-                public void onAllSizesComputed() {
-                }
-
-                @Override
-                public void onLauncherInfoChanged() {
-                }
-
-                @Override
-                public void onLoadEntriesCompleted() {
-                }
-            };
 }
diff --git a/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceController.java b/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceController.java
index 60bffa8..fda215f 100644
--- a/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceController.java
+++ b/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceController.java
@@ -22,8 +22,8 @@
 
 import androidx.annotation.Nullable;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 /**
@@ -31,7 +31,7 @@
  * an option to navigate to the settings of the selected default app.
  */
 public abstract class DefaultAppsPickerEntryBasePreferenceController extends
-        DefaultAppEntryBasePreferenceController<ButtonPreference> {
+        DefaultAppEntryBasePreferenceController<CarUiTwoActionIconPreference> {
 
     public DefaultAppsPickerEntryBasePreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
@@ -39,30 +39,31 @@
     }
 
     @Override
-    protected Class<ButtonPreference> getPreferenceType() {
-        return ButtonPreference.class;
+    protected Class<CarUiTwoActionIconPreference> getPreferenceType() {
+        return CarUiTwoActionIconPreference.class;
     }
 
     @Override
-    protected void updateState(ButtonPreference preference) {
+    protected void updateState(CarUiTwoActionIconPreference preference) {
         super.updateState(preference);
 
         // If activity does not exist, return. Otherwise allow intenting to the activity.
         Intent intent = getSettingIntent(getCurrentDefaultAppInfo());
         if (intent == null || intent.resolveActivityInfo(
                 getContext().getPackageManager(), intent.getFlags()) == null) {
-            preference.showAction(false);
+            preference.setSecondaryActionVisible(false);
             return;
         }
 
         // Use startActivityForResult because some apps need to check the identity of the caller.
-        preference.setOnButtonClickListener(p -> getContext().startActivityForResult(
-                getContext().getBasePackageName(),
-                intent,
-                /* requestCode= */ 0,
-                /* options= */ null
-        ));
-        preference.showAction(true);
+        preference.setOnSecondaryActionClickListener(() -> {
+            getContext().startActivityForResult(
+                    getContext().getBasePackageName(),
+                    intent,
+                    /* requestCode= */ 0,
+                    /* options= */ null);
+        });
+        preference.setSecondaryActionVisible(true);
     }
 
     /**
diff --git a/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceController.java b/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceController.java
index a754297..f227b20 100644
--- a/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceController.java
+++ b/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceController.java
@@ -29,8 +29,8 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.internal.app.AssistUtils;
 import com.android.settingslib.applications.DefaultAppInfo;
 
@@ -67,7 +67,7 @@
     }
 
     @Override
-    protected boolean handlePreferenceClicked(ButtonPreference preference) {
+    protected boolean handlePreferenceClicked(CarUiTwoActionIconPreference preference) {
         String packageName = getContext().getPackageManager().getPermissionControllerPackageName();
         if (packageName != null) {
             Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
diff --git a/src/com/android/car/settings/applications/specialaccess/AppOpsPreferenceController.java b/src/com/android/car/settings/applications/specialaccess/AppOpsPreferenceController.java
index 043aec9..9f01b98 100644
--- a/src/com/android/car/settings/applications/specialaccess/AppOpsPreferenceController.java
+++ b/src/com/android/car/settings/applications/specialaccess/AppOpsPreferenceController.java
@@ -26,12 +26,12 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
-import androidx.preference.SwitchPreference;
 
 import com.android.car.settings.R;
 import com.android.car.settings.applications.specialaccess.AppStateAppOpsBridge.PermissionState;
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -198,7 +198,7 @@
         return filterObj;
     }
 
-    private static class AppOpPreference extends SwitchPreference {
+    private static class AppOpPreference extends CarUiSwitchPreference {
 
         private final AppEntry mEntry;
 
diff --git a/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java b/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
index fb64c77..e3f024a 100644
--- a/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
+++ b/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
@@ -39,6 +39,7 @@
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.Logger;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
 import com.android.settingslib.applications.ServiceListing;
 
 import java.util.List;
@@ -149,7 +150,7 @@
                 LOG.e("can't find package name", e);
             }
             String summary = service.loadLabel(packageManager).toString();
-            SwitchPreference pref = new SwitchPreference(getContext());
+            SwitchPreference pref = new CarUiSwitchPreference(getContext());
             pref.setPersistent(false);
             pref.setIcon(mIconDrawableFactory.getBadgedIcon(service, service.applicationInfo,
                     UserHandle.getUserId(service.applicationInfo.uid)));
diff --git a/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceController.java b/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceController.java
index ddf8cf9..8a65420 100644
--- a/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceController.java
+++ b/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceController.java
@@ -50,8 +50,8 @@
     @Override
     protected BluetoothDevicePreference createDevicePreference(CachedBluetoothDevice cachedDevice) {
         BluetoothDevicePreference pref = super.createDevicePreference(cachedDevice);
-        pref.setWidgetLayoutResource(R.layout.details_preference_widget);
-        pref.setOnButtonClickListener(preference -> getFragmentController().launchFragment(
+        pref.setSecondaryActionIcon(R.drawable.ic_settings_gear);
+        pref.setOnSecondaryActionClickListener(() -> getFragmentController().launchFragment(
                 BluetoothDeviceDetailsFragment.newInstance(cachedDevice)));
         return pref;
     }
@@ -91,7 +91,8 @@
 
     private void updateActionVisibility(PreferenceGroup group, boolean isActionVisible) {
         for (int i = 0; i < group.getPreferenceCount(); i++) {
-            ((BluetoothDevicePreference) group.getPreference(i)).showAction(isActionVisible);
+            ((BluetoothDevicePreference) group.getPreference(i)).setSecondaryActionVisible(
+                    isActionVisible);
         }
     }
 }
diff --git a/src/com/android/car/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/car/settings/bluetooth/BluetoothDevicePreference.java
index dfba4c6..4b17e27 100644
--- a/src/com/android/car/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/car/settings/bluetooth/BluetoothDevicePreference.java
@@ -26,7 +26,7 @@
 
 import com.android.car.apps.common.util.Themes;
 import com.android.car.settings.R;
-import com.android.car.settings.common.ButtonPreference;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 
 /**
@@ -37,7 +37,7 @@
  * CachedBluetoothDevice#compareTo(CachedBluetoothDevice)}. If two devices are considered equal, the
  * default preference sort ordering is used (see {@link #compareTo(Preference)}.
  */
-public class BluetoothDevicePreference extends ButtonPreference {
+public class BluetoothDevicePreference extends CarUiTwoActionIconPreference {
     private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
             "persist.bluetooth.showdeviceswithoutnames";
 
@@ -51,7 +51,7 @@
         mShowDevicesWithoutNames = SystemProperties.getBoolean(
                 BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
         // Hide action by default.
-        showAction(false);
+        setSecondaryActionVisible(false);
     }
 
     /**
diff --git a/src/com/android/car/settings/bluetooth/BluetoothDeviceProfilePreference.java b/src/com/android/car/settings/bluetooth/BluetoothDeviceProfilePreference.java
index 59f725e..5a396ab 100644
--- a/src/com/android/car/settings/bluetooth/BluetoothDeviceProfilePreference.java
+++ b/src/com/android/car/settings/bluetooth/BluetoothDeviceProfilePreference.java
@@ -20,8 +20,7 @@
 
 import android.content.Context;
 
-import androidx.preference.SwitchPreference;
-
+import com.android.car.ui.preference.CarUiSwitchPreference;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothProfile;
 import com.android.settingslib.bluetooth.PanProfile;
@@ -29,7 +28,7 @@
 /**
  * Preference that represents a {@link LocalBluetoothProfile} for a {@link CachedBluetoothDevice}.
  */
-public class BluetoothDeviceProfilePreference extends SwitchPreference {
+public class BluetoothDeviceProfilePreference extends CarUiSwitchPreference {
 
     private final LocalBluetoothProfile mProfile;
     private final CachedBluetoothDevice mCachedDevice;
diff --git a/src/com/android/car/settings/bluetooth/BluetoothPairingDialog.java b/src/com/android/car/settings/bluetooth/BluetoothPairingDialog.java
index 8098e7d..6af8bd7 100644
--- a/src/com/android/car/settings/bluetooth/BluetoothPairingDialog.java
+++ b/src/com/android/car/settings/bluetooth/BluetoothPairingDialog.java
@@ -16,6 +16,8 @@
 
 package com.android.car.settings.bluetooth;
 
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import android.annotation.Nullable;
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
@@ -64,6 +66,9 @@
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
+        getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+
         Intent intent = getIntent();
         mBluetoothPairingController = new BluetoothPairingController(intent, this);
         // build the dialog fragment
diff --git a/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivity.java b/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivity.java
index 01ef912..51a3646 100644
--- a/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivity.java
+++ b/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.car.settings.bluetooth;
 
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
@@ -89,6 +91,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+
         mRequest = parseIntent();
         if (mRequest == REQUEST_UNKNOWN) {
             finishWithResult(RESULT_CANCELED);
@@ -153,15 +157,21 @@
                          * discovery mode. We still show the dialog and handle this case via the
                          * broadcast receiver.
                          */
-                        mDialog = createRequestEnableBluetoothDialogWithTimeout(mTimeout);
-                        mDialog.show();
+                        if (isSetupWizardDialogBypass()) {
+                            /*
+                             * In some cases, users may get to the setup wizard's bluetooth fragment
+                             * while in this state. We still need to wait until we reach STATE_ON
+                             * before enabling discovery mode but without showing a dialog.
+                             */
+                            enableBluetoothWithWaitingDialog(/* dialogToShowOnWait= */ null);
+                        } else {
+                            mDialog = createRequestEnableBluetoothDialogWithTimeout(mTimeout);
+                            mDialog.show();
+                        }
                         break;
                     case BluetoothAdapter.STATE_ON:
                         // Allow SetupWizard specifically to skip the discoverability dialog.
-                        String callerName = getCallingPackage();
-                        if (mBypassConfirmDialog
-                                && callerName != null
-                                && callerName.equals(getSetupWizardPackageName())) {
+                        if (isSetupWizardDialogBypass()) {
                             proceedAndFinish();
                         } else {
                             mDialog = createDiscoverableConfirmDialog(mTimeout);
@@ -185,6 +195,12 @@
         }
     }
 
+    private boolean isSetupWizardDialogBypass() {
+        String callerName = getCallingPackage();
+        return mBypassConfirmDialog && callerName != null
+            && callerName.equals(getSetupWizardPackageName());
+    }
+
     @Nullable
     private String getSetupWizardPackageName() {
         Intent intent = new Intent(Intent.ACTION_MAIN);
@@ -356,6 +372,18 @@
             return;
         }
 
+        if (mRequest == REQUEST_ENABLE) {
+            enableBluetoothWithWaitingDialog(createWaitingDialog());
+        } else {
+            enableBluetoothWithWaitingDialog(createDiscoverableConfirmDialog(mTimeout));
+        }
+    }
+
+    /*
+     * Ensure bluetooth is enabled and then check if it is in STATE_ON. If it isn't, register
+     * the broadcast receiver to wait for the state to change and show a waiting dialog if provided.
+     */
+    private void enableBluetoothWithWaitingDialog(@Nullable AlertDialog dialogToShowOnWait) {
         mLocalBluetoothAdapter.enable();
 
         int desiredState = BluetoothAdapter.STATE_ON;
@@ -366,13 +394,10 @@
             mReceiver = new StateChangeReceiver(desiredState);
             registerReceiver(mReceiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
 
-            if (mRequest == REQUEST_ENABLE) {
-                // Show dialog while waiting for enabling to complete.
-                mDialog = createWaitingDialog();
-            } else {
-                mDialog = createDiscoverableConfirmDialog(mTimeout);
+            if (dialogToShowOnWait != null) {
+                mDialog = dialogToShowOnWait;
+                mDialog.show();
             }
-            mDialog.show();
         }
     }
 
@@ -422,12 +447,18 @@
         return mDialog;
     }
 
+    @VisibleForTesting
+    StateChangeReceiver getCurrentReceiver() {
+        return mReceiver;
+    }
+
     /**
      * Listens for bluetooth state changes and finishes the activity if changed to the desired
      * state. If the desired bluetooth state is not received in time, the activity is finished with
      * {@link Activity#RESULT_CANCELED}.
      */
-    private final class StateChangeReceiver extends BroadcastReceiver {
+    @VisibleForTesting
+    final class StateChangeReceiver extends BroadcastReceiver {
         private static final long TOGGLE_TIMEOUT_MILLIS = 10000; // 10 sec
         private final int mDesiredState;
 
diff --git a/src/com/android/car/settings/common/ActionButtonInfo.java b/src/com/android/car/settings/common/ActionButtonInfo.java
new file mode 100644
index 0000000..5adb1f2
--- /dev/null
+++ b/src/com/android/car/settings/common/ActionButtonInfo.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.DrawableRes;
+import androidx.annotation.StringRes;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.settings.R;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Class representing a button item for an {@link ActionButtonsPreference}
+ */
+public class ActionButtonInfo {
+    private static final Logger LOG = new Logger(ActionButtonInfo.class);
+    private final Context mContext;
+    private View mButtonView;
+    private ImageView mButtonIconView;
+    private TextView mButtonTextView;
+    private CharSequence mText;
+    private Drawable mIcon;
+    private View.OnClickListener mListener;
+    private boolean mIsPreferenceRestricted = false;
+    private boolean mIsEnabled = true;
+    private boolean mIsVisible = true;
+    private WeakReference<ButtonInfoChangeListener> mButtonInfoChangeListener;
+    private String mMessageToShowWhenUxRestrictedPreferenceClicked;
+
+    ActionButtonInfo(Context context, ButtonInfoChangeListener changeListener) {
+        mContext = context;
+        mButtonInfoChangeListener = new WeakReference<>(changeListener);
+        mMessageToShowWhenUxRestrictedPreferenceClicked = context.getString(
+                R.string.car_ui_restricted_while_driving);
+    }
+
+    /**
+     * Set the visibility state.
+     */
+    public ActionButtonInfo setVisible(boolean isVisible) {
+        if (isVisible != mIsVisible) {
+            mIsVisible = isVisible;
+            update();
+        }
+        return this;
+    }
+
+    /**
+     * Sets the text to be displayed.
+     */
+    public ActionButtonInfo setText(@StringRes int textResId) {
+        final String newText = mContext.getString(textResId);
+        if (!TextUtils.equals(newText, mText)) {
+            mText = newText;
+            update();
+        }
+        return this;
+    }
+
+    /**
+     * Sets the drawable to be displayed above of text.
+     */
+    public ActionButtonInfo setIcon(@DrawableRes int iconResId) {
+        if (iconResId == 0) {
+            return this;
+        }
+
+        final Drawable icon;
+        try {
+            icon = mContext.getDrawable(iconResId);
+            mIcon = icon;
+            update();
+        } catch (Resources.NotFoundException exception) {
+            LOG.e("Resource does not exist: " + iconResId);
+        }
+        return this;
+    }
+
+    /**
+     * Set the enabled state.
+     */
+    public ActionButtonInfo setEnabled(boolean isEnabled) {
+        if (isEnabled != mIsEnabled) {
+            mIsEnabled = isEnabled;
+            update();
+        }
+        return this;
+    }
+
+    /**
+     * Register a callback to be invoked when clicked.
+     */
+    public ActionButtonInfo setOnClickListener(
+            View.OnClickListener listener) {
+        if (listener != mListener) {
+            mListener = listener;
+            update();
+        }
+        return this;
+    }
+
+    ActionButtonInfo setButtonView(View view) {
+        mButtonView = view;
+        return this;
+    }
+
+    ActionButtonInfo setButtonTextView(TextView textView) {
+        mButtonTextView = textView;
+        return this;
+    }
+
+    ActionButtonInfo setButtonIconView(ImageView iconView) {
+        mButtonIconView = iconView;
+        return this;
+    }
+
+    ActionButtonInfo setPreferenceRestricted(boolean isRestricted) {
+        mIsPreferenceRestricted = isRestricted;
+        return this;
+    }
+
+    /**
+     * Get the current button text.
+     */
+    @VisibleForTesting
+    public CharSequence getText() {
+        return mText;
+    }
+
+    /**
+     * Get the current button icon.
+     */
+    @VisibleForTesting
+    public Drawable getIcon() {
+        return mIcon;
+    }
+
+    /**
+     * Get the current button click listener.
+     */
+    @VisibleForTesting
+    public View.OnClickListener getOnClickListener() {
+        return mListener;
+    }
+
+    /**
+     * Get the current button enabled state.
+     */
+    @VisibleForTesting
+    public boolean isEnabled() {
+        return mIsEnabled;
+    }
+
+    /**
+     * Get the current button visibility.
+     */
+    @VisibleForTesting
+    public boolean isVisible() {
+        return shouldBeVisible();
+    }
+
+    void setUpButton() {
+        mButtonTextView.setText(mText);
+        mButtonIconView.setImageDrawable(mIcon);
+        mButtonView.setOnClickListener(this::performClick);
+
+        boolean enabled = isEnabled() || mIsPreferenceRestricted;
+        mButtonView.setEnabled(enabled);
+        mButtonTextView.setEnabled(enabled);
+        mButtonIconView.setEnabled(enabled);
+
+        mButtonIconView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
+
+        if (shouldBeVisible()) {
+            mButtonView.setVisibility(View.VISIBLE);
+        } else {
+            mButtonView.setVisibility(View.GONE);
+        }
+    }
+
+    @VisibleForTesting
+    void performClick(View v) {
+        if (!isEnabled()) {
+            return;
+        }
+        if (mListener == null) {
+            return;
+        }
+        if (mIsPreferenceRestricted) {
+            if (!TextUtils.isEmpty(mMessageToShowWhenUxRestrictedPreferenceClicked)) {
+                Toast.makeText(mContext, mMessageToShowWhenUxRestrictedPreferenceClicked,
+                        Toast.LENGTH_LONG).show();
+            }
+            return;
+        }
+        mListener.onClick(v);
+    }
+
+    /**
+     * By default, four buttons are visible.
+     * However, there are two cases which button should be invisible.
+     *
+     * 1. User set invisible for this button. ex: mIsVisible = false.
+     * 2. User didn't set any title or icon.
+     */
+    private boolean shouldBeVisible() {
+        return mIsVisible && (!TextUtils.isEmpty(mText) || mIcon != null);
+    }
+
+    private void update() {
+        ButtonInfoChangeListener listener = mButtonInfoChangeListener.get();
+        if (listener != null) {
+            listener.onButtonInfoChange(this);
+        }
+    }
+
+    /**
+     * Listener that is notified when a button has been updated.
+     */
+    interface ButtonInfoChangeListener {
+        void onButtonInfoChange(ActionButtonInfo buttonInfo);
+    }
+}
diff --git a/src/com/android/car/settings/common/ActionButtonsPreference.java b/src/com/android/car/settings/common/ActionButtonsPreference.java
new file mode 100644
index 0000000..2ebe68f
--- /dev/null
+++ b/src/com/android/car/settings/common/ActionButtonsPreference.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.car.settings.R;
+import com.android.car.ui.preference.CarUiPreference;
+
+/**
+ * Preference that provides a four button layout.
+ * -----------------------------------------
+ * | button1 | button2 | button3 | button4 |
+ * -----------------------------------------
+ *
+ * Adapted from {@link com.android.settingslib.widget.ActionButtonsPreference} for CarSettings.
+ *
+ * This widget also has custom divider elements above and below, which can be customized with the
+ * Preference_allowDividerAbove and Preference_allowDividerBelow attributes. The dividers are
+ * enabled by default.
+ */
+public class ActionButtonsPreference extends CarUiPreference implements
+        ActionButtonInfo.ButtonInfoChangeListener {
+
+    /**
+     * Identifier enum for the four different action buttons.
+     */
+    public enum ActionButtons {
+        BUTTON1,
+        BUTTON2,
+        BUTTON3,
+        BUTTON4
+    }
+
+    private ActionButtonInfo mButton1Info;
+    private ActionButtonInfo mButton2Info;
+    private ActionButtonInfo mButton3Info;
+    private ActionButtonInfo mButton4Info;
+
+    private boolean mAllowDividerAbove;
+    private boolean mAllowDividerBelow;
+
+    public ActionButtonsPreference(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init(context, attrs);
+    }
+
+    public ActionButtonsPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context, attrs);
+    }
+
+    public ActionButtonsPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context, attrs);
+    }
+
+    public ActionButtonsPreference(Context context) {
+        super(context);
+        init(context, /* attrs= */ null);
+    }
+
+    private void init(Context context, AttributeSet attrs) {
+        setLayoutResource(R.layout.action_buttons_preference);
+        setSelectable(false);
+
+        TypedArray a = context.obtainStyledAttributes(attrs,
+                R.styleable.Preference);
+        mAllowDividerAbove = a.getBoolean(R.styleable.Preference_allowDividerAbove,
+                /* defValue= */ true);
+        mAllowDividerBelow = a.getBoolean(R.styleable.Preference_allowDividerBelow,
+                /* defValue= */ true);
+        mButton1Info = new ActionButtonInfo(context, /* changeListener= */ this);
+        mButton2Info = new ActionButtonInfo(context, /* changeListener= */ this);
+        mButton3Info = new ActionButtonInfo(context, /* changeListener= */ this);
+        mButton4Info = new ActionButtonInfo(context, /* changeListener= */ this);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        holder.findViewById(R.id.topDivider).setVisibility(
+                mAllowDividerAbove ? View.VISIBLE : View.GONE);
+        holder.findViewById(R.id.bottomDivider).setVisibility(
+                mAllowDividerBelow ? View.VISIBLE : View.GONE);
+
+        mButton1Info
+                .setButtonView(holder.findViewById(R.id.button1))
+                .setButtonTextView((TextView) holder.findViewById(R.id.button1Text))
+                .setButtonIconView((ImageView) holder.findViewById(R.id.button1Icon))
+                .setPreferenceRestricted(isUxRestricted());
+
+        mButton2Info
+                .setButtonView(holder.findViewById(R.id.button2))
+                .setButtonTextView((TextView) holder.findViewById(R.id.button2Text))
+                .setButtonIconView((ImageView) holder.findViewById(R.id.button2Icon))
+                .setPreferenceRestricted(isUxRestricted());
+
+        mButton3Info
+                .setButtonView(holder.findViewById(R.id.button3))
+                .setButtonTextView((TextView) holder.findViewById(R.id.button3Text))
+                .setButtonIconView((ImageView) holder.findViewById(R.id.button3Icon))
+                .setPreferenceRestricted(isUxRestricted());
+
+        mButton4Info
+                .setButtonView(holder.findViewById(R.id.button4))
+                .setButtonTextView((TextView) holder.findViewById(R.id.button4Text))
+                .setButtonIconView((ImageView) holder.findViewById(R.id.button4Icon))
+                .setPreferenceRestricted(isUxRestricted());
+
+        mButton1Info.setUpButton();
+        mButton2Info.setUpButton();
+        mButton3Info.setUpButton();
+        mButton4Info.setUpButton();
+    }
+
+    @Override
+    public void onButtonInfoChange(ActionButtonInfo buttonInfo) {
+        notifyChanged();
+    }
+
+    /**
+     * Retrieve the specified ActionButtonInfo based on the ActionButtons enum.
+     */
+    public ActionButtonInfo getButton(ActionButtons button) {
+        switch(button) {
+            case BUTTON1:
+                return mButton1Info;
+            case BUTTON2:
+                return mButton2Info;
+            case BUTTON3:
+                return mButton3Info;
+            case BUTTON4:
+                return mButton4Info;
+            default:
+                throw new IllegalArgumentException("Invalid button requested");
+        }
+    }
+}
diff --git a/src/com/android/car/settings/common/BaseCarSettingsActivity.java b/src/com/android/car/settings/common/BaseCarSettingsActivity.java
index 5cb2e31..ff5b525 100644
--- a/src/com/android/car/settings/common/BaseCarSettingsActivity.java
+++ b/src/com/android/car/settings/common/BaseCarSettingsActivity.java
@@ -16,11 +16,15 @@
 
 package com.android.car.settings.common;
 
+import static android.view.ViewGroup.FOCUS_BEFORE_DESCENDANTS;
+import static android.view.ViewGroup.FOCUS_BLOCK_DESCENDANTS;
+
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener;
 import android.content.Context;
 import android.os.Bundle;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Toast;
 
@@ -45,6 +49,7 @@
     private static final Logger LOG = new Logger(BaseCarSettingsActivity.class);
 
     private CarUxRestrictionsHelper mUxRestrictionsHelper;
+    private ViewGroup mFragmentContainer;
     private View mRestrictedMessage;
     // Default to minimum restriction.
     private CarUxRestrictions mCarUxRestrictions = new CarUxRestrictions.Builder(
@@ -57,6 +62,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.car_setting_activity);
+        mFragmentContainer = findViewById(R.id.fragment_container);
         if (mUxRestrictionsHelper == null) {
             mUxRestrictionsHelper = new CarUxRestrictionsHelper(/* context= */ this, /* listener= */
                     this);
@@ -185,9 +191,15 @@
     }
 
     private void updateBlockingView(@Nullable Fragment currentFragment) {
-        if (currentFragment instanceof BaseFragment) {
-            boolean canBeShown = ((BaseFragment) currentFragment).canBeShown(mCarUxRestrictions);
-            mRestrictedMessage.setVisibility(canBeShown ? View.GONE : View.VISIBLE);
+        if (currentFragment instanceof BaseFragment
+                && !((BaseFragment) currentFragment).canBeShown(mCarUxRestrictions)) {
+            mRestrictedMessage.setVisibility(View.VISIBLE);
+            mFragmentContainer.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
+            mFragmentContainer.clearFocus();
+            hideKeyboard();
+        } else {
+            mRestrictedMessage.setVisibility(View.GONE);
+            mFragmentContainer.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);
         }
     }
 }
diff --git a/src/com/android/car/settings/common/ButtonPreference.java b/src/com/android/car/settings/common/ButtonPreference.java
deleted file mode 100644
index 60682f3..0000000
--- a/src/com/android/car/settings/common/ButtonPreference.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.common;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-
-import androidx.preference.Preference;
-
-import com.android.car.ui.preference.CarUiTwoActionPreference;
-
-/**
- * {@link Preference} with a secondary clickable button on the side.
- * {@link #setLayoutResource(int)} or the {@code widgetLayout} resource may be used to specify
- * the icon to display in the button.
- *
- * <p>Note: the button is enabled even when {@link #isEnabled()} is {@code false}.
- */
-public class ButtonPreference extends CarUiTwoActionPreference {
-
-    /**
-     * Interface definition for a callback to be invoked when the button is clicked.
-     */
-    public interface OnButtonClickListener {
-        /**
-         * Called when a button has been clicked.
-         *
-         * @param preference the preference whose button was clicked.
-         */
-        void onButtonClick(ButtonPreference preference);
-    }
-
-    private OnButtonClickListener mOnButtonClickListener;
-
-    public ButtonPreference(Context context, AttributeSet attrs, int defStyleAttr,
-            int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-    }
-
-    public ButtonPreference(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public ButtonPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public ButtonPreference(Context context) {
-        super(context);
-    }
-
-    /**
-     * Sets an {@link OnButtonClickListener} to be invoked when the button is clicked.
-     */
-    public void setOnButtonClickListener(OnButtonClickListener listener) {
-        mOnButtonClickListener = listener;
-    }
-
-    /** Virtually clicks the button contained inside this preference. */
-    public void performButtonClick() {
-        if (isActionShown()) {
-            if (mOnButtonClickListener != null) {
-                mOnButtonClickListener.onButtonClick(this);
-            }
-        }
-    }
-
-    @Override
-    protected void onBindWidgetFrame(View widgetFrame) {
-        widgetFrame.setOnClickListener(v -> performButtonClick());
-    }
-}
diff --git a/src/com/android/car/settings/common/CarSettingActivities.java b/src/com/android/car/settings/common/CarSettingActivities.java
index 1ba91f4..2ea1ca1 100644
--- a/src/com/android/car/settings/common/CarSettingActivities.java
+++ b/src/com/android/car/settings/common/CarSettingActivities.java
@@ -19,6 +19,7 @@
 import android.annotation.Nullable;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -53,6 +54,7 @@
 import com.android.car.settings.privacy.PrivacySettingsFragment;
 import com.android.car.settings.quicksettings.QuickSettingFragment;
 import com.android.car.settings.security.SecuritySettingsFragment;
+import com.android.car.settings.sound.RingtonePickerFragment;
 import com.android.car.settings.sound.SoundSettingsFragment;
 import com.android.car.settings.storage.StorageSettingsFragment;
 import com.android.car.settings.system.AboutSettingsFragment;
@@ -122,6 +124,20 @@
     }
 
     /**
+     * Ringtone Picker Activity.
+     */
+    public static class RingtonePickerActivity extends BaseCarSettingsActivity {
+        @Nullable
+        @Override
+        protected Fragment getInitialFragment() {
+            Bundle args = getIntent().getExtras().deepCopy();
+            Fragment fragment = new RingtonePickerFragment();
+            fragment.setArguments(args);
+            return fragment;
+        }
+    }
+
+    /**
      * Network and Internet Activity.
      */
     public static class NetworkAndInternetActivity extends BaseCarSettingsActivity {
diff --git a/src/com/android/car/settings/common/EntityHeaderPreference.java b/src/com/android/car/settings/common/EntityHeaderPreference.java
new file mode 100644
index 0000000..55cf48f
--- /dev/null
+++ b/src/com/android/car/settings/common/EntityHeaderPreference.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.IdRes;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.car.settings.R;
+
+/**
+ * {@link Preference} for displaying information in the header of a PreferenceScreen.
+ * Supports displaying an icon, title, and summary (description).
+ */
+public class EntityHeaderPreference extends Preference {
+
+    public EntityHeaderPreference(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init();
+    }
+
+    public EntityHeaderPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    public EntityHeaderPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public EntityHeaderPreference(Context context) {
+        super(context);
+        init();
+    }
+
+    private void init() {
+        setLayoutResource(R.layout.entity_header_preference);
+        setSelectable(false);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        View itemView = holder.itemView;
+        setIconView(itemView, R.id.entity_header_icon, getIcon());
+        setTextView(itemView, R.id.entity_header_title, getTitle());
+        setTextView(itemView, R.id.entity_header_summary, getSummary());
+    }
+
+    private void setTextView(View view, @IdRes int id, CharSequence text) {
+        TextView textView = view.findViewById(id);
+        if (textView != null) {
+            textView.setText(text);
+            textView.setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);
+        }
+    }
+
+    private void setIconView(View view, @IdRes int id, Drawable icon) {
+        ImageView iconView = view.findViewById(id);
+        if (iconView != null) {
+            iconView.setImageDrawable(icon);
+            iconView.setVisibility(icon == null ? View.GONE : View.VISIBLE);
+        }
+    }
+}
diff --git a/src/com/android/car/settings/common/ExtraSettingsLoader.java b/src/com/android/car/settings/common/ExtraSettingsLoader.java
index ef59b3d..fd41521 100644
--- a/src/com/android/car/settings/common/ExtraSettingsLoader.java
+++ b/src/com/android/car/settings/common/ExtraSettingsLoader.java
@@ -18,8 +18,12 @@
 
 import static com.android.settingslib.drawer.CategoryKey.CATEGORY_DEVICE;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
 import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI;
 
 import android.app.ActivityManager;
 import android.content.Context;
@@ -28,10 +32,11 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
-import android.graphics.drawable.Icon;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.text.TextUtils;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
 import com.android.car.apps.common.util.Themes;
@@ -49,14 +54,21 @@
 public class ExtraSettingsLoader {
     private static final Logger LOG = new Logger(ExtraSettingsLoader.class);
     private static final String META_DATA_PREFERENCE_CATEGORY = "com.android.settings.category";
-    private Map<Preference, Bundle> mPreferenceBundleMap;
     private final Context mContext;
+    private Map<Preference, Bundle> mPreferenceBundleMap;
+    private PackageManager mPm;
 
     public ExtraSettingsLoader(Context context) {
         mContext = context;
+        mPm = context.getPackageManager();
         mPreferenceBundleMap = new HashMap<>();
     }
 
+    @VisibleForTesting
+    void setPackageManager(PackageManager pm) {
+        mPm = pm;
+    }
+
     /**
      * Returns a map of {@link Preference} and {@link Bundle} representing settings injected from
      * system apps and their metadata. The given intent must specify the action to use for
@@ -66,8 +78,7 @@
      * @param intent intent specifying the extra settings category to load
      */
     public Map<Preference, Bundle> loadPreferences(Intent intent) {
-        PackageManager pm = mContext.getPackageManager();
-        List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,
+        List<ResolveInfo> results = mPm.queryIntentActivitiesAsUser(intent,
                 PackageManager.GET_META_DATA, ActivityManager.getCurrentUser());
 
         String extraCategory = intent.getStringExtra(META_DATA_PREFERENCE_CATEGORY);
@@ -76,51 +87,44 @@
                 // Do not allow any app to be added to settings, only system ones.
                 continue;
             }
+            String key = null;
             String title = null;
             String summary = null;
             String category = null;
             ActivityInfo activityInfo = resolved.activityInfo;
             Bundle metaData = activityInfo.metaData;
             try {
-                Resources res = pm.getResourcesForApplication(activityInfo.packageName);
-                if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
-                    if (metaData.get(META_DATA_PREFERENCE_TITLE) instanceof Integer) {
-                        title = res.getString(metaData.getInt(META_DATA_PREFERENCE_TITLE));
-                    } else {
-                        title = metaData.getString(META_DATA_PREFERENCE_TITLE);
+                Resources res = mPm.getResourcesForApplication(activityInfo.packageName);
+                if (metaData.containsKey(META_DATA_PREFERENCE_KEYHINT)) {
+                    key = extractMetaDataString(metaData, META_DATA_PREFERENCE_KEYHINT, res);
+                }
+                if (!metaData.containsKey(META_DATA_PREFERENCE_TITLE_URI)) {
+                    title = extractMetaDataString(metaData, META_DATA_PREFERENCE_TITLE, res);
+                    if (TextUtils.isEmpty(title)) {
+                        LOG.d("no title.");
+                        title = activityInfo.loadLabel(mPm).toString();
                     }
                 }
-                if (TextUtils.isEmpty(title)) {
-                    LOG.d("no title.");
-                    title = activityInfo.loadLabel(pm).toString();
-                }
-                if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
-                    if (metaData.get(META_DATA_PREFERENCE_SUMMARY) instanceof Integer) {
-                        summary = res.getString(metaData.getInt(META_DATA_PREFERENCE_SUMMARY));
-                    } else {
-                        summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY);
+                if (!metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+                    summary = extractMetaDataString(metaData, META_DATA_PREFERENCE_SUMMARY, res);
+                    if (TextUtils.isEmpty(summary)) {
+                        LOG.d("no description.");
                     }
-                } else {
-                    LOG.d("no description.");
                 }
-                if (metaData.containsKey(META_DATA_PREFERENCE_CATEGORY)) {
-                    if (metaData.get(META_DATA_PREFERENCE_CATEGORY) instanceof Integer) {
-                        category = res.getString(metaData.getInt(META_DATA_PREFERENCE_CATEGORY));
-                    } else {
-                        category = metaData.getString(META_DATA_PREFERENCE_CATEGORY);
-                    }
-                } else {
+                category = extractMetaDataString(metaData, META_DATA_PREFERENCE_CATEGORY, res);
+                if (TextUtils.isEmpty(category)) {
                     LOG.d("no category.");
                 }
             } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
                 LOG.d("Couldn't find info", e);
             }
-            Icon icon = null;
+            Drawable icon = null;
             if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
                 int iconRes = metaData.getInt(META_DATA_PREFERENCE_ICON);
-                icon = Icon.createWithResource(activityInfo.packageName, iconRes);
-            } else {
-                icon = Icon.createWithResource(mContext, R.drawable.ic_settings_gear);
+                icon = ExtraSettingsUtil.loadDrawableFromPackage(mContext,
+                        activityInfo.packageName, iconRes);
+            } else if (!metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
+                icon = mContext.getDrawable(R.drawable.ic_settings_gear);
                 LOG.d("use default icon.");
             }
             Intent extraSettingIntent =
@@ -136,14 +140,33 @@
             CarUiPreference preference = new CarUiPreference(mContext);
             preference.setTitle(title);
             preference.setSummary(summary);
+            if (key != null) {
+                preference.setKey(key);
+            }
             if (icon != null) {
-                preference.setIcon(icon.loadDrawable(mContext));
-                preference.getIcon().setTintList(
-                        Themes.getAttrColorStateList(mContext, R.attr.iconColor));
+                preference.setIcon(icon);
+                if (ExtraSettingsUtil.isIconTintable(metaData)) {
+                    preference.getIcon().setTintList(
+                            Themes.getAttrColorStateList(mContext, R.attr.iconColor));
+                }
             }
             preference.setIntent(extraSettingIntent);
             mPreferenceBundleMap.put(preference, metaData);
         }
         return mPreferenceBundleMap;
     }
+
+    /**
+     * Extracts the value in the metadata specified by the key.
+     * If it is resource, resolve the string and return. Otherwise, return the string itself.
+     */
+    private String extractMetaDataString(Bundle metaData, String key, Resources res) {
+        if (metaData.containsKey(key)) {
+            if (metaData.get(key) instanceof Integer) {
+                return res.getString(metaData.getInt(key));
+            }
+            return metaData.getString(key);
+        }
+        return null;
+    }
 }
diff --git a/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java b/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
index 1c7e687..2992bc0 100644
--- a/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
+++ b/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
@@ -16,15 +16,42 @@
 
 package com.android.car.settings.common;
 
+import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_SUMMARY;
+import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_TITLE;
+import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_PROVIDER_ICON;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI;
+
 import android.car.drivingstate.CarUxRestrictions;
+import android.content.ContentResolver;
 import android.content.Context;
+import android.content.IContentProvider;
 import android.content.Intent;
+import android.database.ContentObserver;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.Pair;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 
+import com.android.car.apps.common.util.Themes;
+import com.android.car.settings.R;
+import com.android.settingslib.drawer.TileUtils;
+import com.android.settingslib.utils.ThreadUtils;
+
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -50,16 +77,23 @@
  */
 // TODO: investigate using SettingsLib Tiles.
 public class ExtraSettingsPreferenceController extends PreferenceController<PreferenceGroup> {
+    private static final Logger LOG = new Logger(ExtraSettingsPreferenceController.class);
 
     @VisibleForTesting
     static final String META_DATA_DISTRACTION_OPTIMIZED = "distractionOptimized";
 
+    private Context mContext;
+    private ContentResolver mContentResolver;
     private ExtraSettingsLoader mExtraSettingsLoader;
     private boolean mSettingsLoaded;
+    @VisibleForTesting
+    List<DynamicDataObserver> mObservers = new ArrayList<>();
 
     public ExtraSettingsPreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions restrictionInfo) {
         super(context, preferenceKey, fragmentController, restrictionInfo);
+        mContext = context;
+        mContentResolver = context.getContentResolver();
         mExtraSettingsLoader = new ExtraSettingsLoader(context);
     }
 
@@ -75,21 +109,21 @@
 
     @Override
     protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
-        super.onApplyUxRestrictions(uxRestrictions);
-
         // If preference intents into an activity that's not distraction optimized, disable the
         // preference. This will override the UXRE flags config_ignore_ux_restrictions and
         // config_always_ignore_ux_restrictions because navigating to these non distraction
         // optimized activities will cause the blocking activity to come up, which dead ends the
         // user.
         for (int i = 0; i < getPreference().getPreferenceCount(); i++) {
+            boolean restricted = false;
             Preference preference = getPreference().getPreference(i);
             if (uxRestrictions.isRequiresDistractionOptimization()
-                    && !preference.getExtras().getBoolean(META_DATA_DISTRACTION_OPTIMIZED)) {
-                preference.setEnabled(false);
-            } else {
-                preference.setEnabled(getAvailabilityStatus() != AVAILABLE_FOR_VIEWING);
+                    && !preference.getExtras().getBoolean(META_DATA_DISTRACTION_OPTIMIZED)
+                    && getAvailabilityStatus() != AVAILABLE_FOR_VIEWING) {
+                restricted = true;
             }
+            preference.setEnabled(getAvailabilityStatus() != AVAILABLE_FOR_VIEWING);
+            restrictPreference(preference, restricted);
         }
     }
 
@@ -104,6 +138,20 @@
         preference.setVisible(preference.getPreferenceCount() > 0);
     }
 
+    @Override
+    protected void onStartInternal() {
+        mObservers.forEach(observer -> {
+            observer.register(mContentResolver, /* register= */ true);
+        });
+    }
+
+    @Override
+    protected void onStopInternal() {
+        mObservers.forEach(observer -> {
+            observer.register(mContentResolver, /* register= */ false);
+        });
+    }
+
     /**
      * Adds the extra settings from the system based on the intent that is passed in the preference
      * group. All the preferences that resolve these intents will be added in the preference group.
@@ -120,7 +168,149 @@
                         metaData.getBoolean(META_DATA_DISTRACTION_OPTIMIZED);
             }
             setting.getExtras().putBoolean(META_DATA_DISTRACTION_OPTIMIZED, distractionOptimized);
+            setting.getExtras().putBoolean(META_DATA_PREFERENCE_ICON_TINTABLE,
+                    ExtraSettingsUtil.isIconTintable(metaData));
+            getDynamicData(setting, metaData);
             getPreference().addPreference(setting);
         }
     }
+
+    /**
+     * Retrieve dynamic injected preference data and create observers for updates.
+     */
+    protected void getDynamicData(Preference preference, Bundle metaData) {
+        if (metaData.containsKey(META_DATA_PREFERENCE_TITLE_URI)) {
+            // Set a placeholder title before starting to fetch real title to prevent vertical
+            // preference shift.
+            preference.setTitle(R.string.empty_placeholder);
+            Uri uri = ExtraSettingsUtil.getCompleteUri(metaData, META_DATA_PREFERENCE_TITLE_URI,
+                    METHOD_GET_DYNAMIC_TITLE);
+            refreshTitle(uri, preference);
+            mObservers.add(new DynamicDataObserver(METHOD_GET_DYNAMIC_TITLE, uri, preference));
+        }
+        if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+            // Set a placeholder summary before starting to fetch real summary to prevent vertical
+            // preference shift.
+            preference.setSummary(R.string.empty_placeholder);
+            Uri uri = ExtraSettingsUtil.getCompleteUri(metaData, META_DATA_PREFERENCE_SUMMARY_URI,
+                    METHOD_GET_DYNAMIC_SUMMARY);
+            refreshSummary(uri, preference);
+            mObservers.add(new DynamicDataObserver(METHOD_GET_DYNAMIC_SUMMARY, uri, preference));
+        }
+        if (metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
+            // Set a placeholder icon before starting to fetch real icon to prevent horizontal
+            // preference shift.
+            preference.setIcon(R.drawable.ic_placeholder);
+            Uri uri = ExtraSettingsUtil.getCompleteUri(metaData, META_DATA_PREFERENCE_ICON_URI,
+                    METHOD_GET_PROVIDER_ICON);
+            refreshIcon(uri, preference);
+            mObservers.add(new DynamicDataObserver(METHOD_GET_PROVIDER_ICON, uri, preference));
+        }
+    }
+
+    @VisibleForTesting
+    void executeBackgroundTask(Runnable r) {
+        ThreadUtils.postOnBackgroundThread(r);
+    }
+
+    @VisibleForTesting
+    void executeUiTask(Runnable r) {
+        ThreadUtils.postOnMainThread(r);
+    }
+
+    private void refreshTitle(Uri uri, Preference preference) {
+        executeBackgroundTask(() -> {
+            Map<String, IContentProvider> providerMap = new ArrayMap<>();
+            String titleFromUri = TileUtils.getTextFromUri(
+                    mContext, uri, providerMap, META_DATA_PREFERENCE_TITLE);
+            if (!TextUtils.equals(titleFromUri, preference.getTitle())) {
+                executeUiTask(() -> preference.setTitle(titleFromUri));
+            }
+        });
+    }
+
+    private void refreshSummary(Uri uri, Preference preference) {
+        executeBackgroundTask(() -> {
+            Map<String, IContentProvider> providerMap = new ArrayMap<>();
+            String summaryFromUri = TileUtils.getTextFromUri(
+                    mContext, uri, providerMap, META_DATA_PREFERENCE_SUMMARY);
+            if (!TextUtils.equals(summaryFromUri, preference.getSummary())) {
+                executeUiTask(() -> preference.setSummary(summaryFromUri));
+            }
+        });
+    }
+
+    private void refreshIcon(Uri uri, Preference preference) {
+        executeBackgroundTask(() -> {
+            Intent intent = preference.getIntent();
+            String packageName = null;
+            if (!TextUtils.isEmpty(intent.getPackage())) {
+                packageName = intent.getPackage();
+            } else if (intent.getComponent() != null) {
+                packageName = intent.getComponent().getPackageName();
+            }
+            Map<String, IContentProvider> providerMap = new ArrayMap<>();
+            Pair<String, Integer> iconInfo = TileUtils.getIconFromUri(
+                    mContext, packageName, uri, providerMap);
+            Drawable icon;
+            if (iconInfo != null) {
+                icon = ExtraSettingsUtil.loadDrawableFromPackage(mContext,
+                        iconInfo.first, iconInfo.second);
+            } else {
+                LOG.w("Failed to get icon from uri " + uri);
+                icon = mContext.getDrawable(R.drawable.ic_settings_gear);
+                LOG.d("use default icon.");
+            }
+            if (icon != null) {
+                executeUiTask(() -> {
+                    preference.setIcon(icon);
+                    if (preference.getExtras().getBoolean(META_DATA_PREFERENCE_ICON_TINTABLE)) {
+                        preference.getIcon().setTintList(
+                                Themes.getAttrColorStateList(mContext, R.attr.iconColor));
+                    }
+                });
+            }
+        });
+    }
+
+    /**
+     * Observer for updating injected dynamic data.
+     */
+    private class DynamicDataObserver extends ContentObserver {
+        private final String mMethod;
+        private final Uri mUri;
+        private final Preference mPreference;
+
+        DynamicDataObserver(String method, Uri uri, Preference preference) {
+            super(new Handler(Looper.getMainLooper()));
+            mMethod = method;
+            mUri = uri;
+            mPreference = preference;
+        }
+
+        /** Registers or unregisters this observer to the given content resolver. */
+        void register(ContentResolver cr, boolean register) {
+            if (register) {
+                cr.registerContentObserver(mUri, /* notifyForDescendants= */ false,
+                        /* observer= */ this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            switch (mMethod) {
+                case METHOD_GET_DYNAMIC_TITLE:
+                    refreshTitle(mUri, mPreference);
+                    break;
+                case METHOD_GET_DYNAMIC_SUMMARY:
+                    refreshSummary(mUri, mPreference);
+                    break;
+                case METHOD_GET_PROVIDER_ICON:
+                    refreshIcon(mUri, mPreference);
+                    break;
+            }
+        }
+    }
 }
diff --git a/src/com/android/car/settings/common/ExtraSettingsUtil.java b/src/com/android/car/settings/common/ExtraSettingsUtil.java
new file mode 100644
index 0000000..f994847
--- /dev/null
+++ b/src/com/android/car/settings/common/ExtraSettingsUtil.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+
+import java.util.List;
+
+/** Contains utility functions for injected settings. */
+public class ExtraSettingsUtil {
+    private static final Logger LOG = new Logger(ExtraSettingsUtil.class);
+
+    /**
+     * Returns whether or not an icon is tintable given the injected setting metadata.
+     */
+    public static boolean isIconTintable(Bundle metaData) {
+        if (metaData.containsKey(META_DATA_PREFERENCE_ICON_TINTABLE)) {
+            return metaData.getBoolean(META_DATA_PREFERENCE_ICON_TINTABLE);
+        }
+        return false;
+    }
+
+    /**
+     * Returns a drawable from an resource's package context.
+     */
+    public static Drawable loadDrawableFromPackage(Context context, String resPackage, int resId) {
+        try {
+            return context.createPackageContext(resPackage, /* flags= */ 0)
+                    .getDrawable(resId);
+        } catch (PackageManager.NameNotFoundException ex) {
+            LOG.e("loadDrawableFromPackage: package name not found: ", ex);
+        } catch (Resources.NotFoundException ex) {
+            LOG.w("loadDrawableFromPackage: resource not found with id " + resId, ex);
+        }
+        return null;
+    }
+
+    /**
+     * Returns the complete uri from the meta data key of the injected setting metadata.
+     *
+     * A complete uri should contain at least one path segment and be one of the following types:
+     *      content://authority/method
+     *      content://authority/method/key
+     *
+     * If the uri from the tile is not complete, build a uri by the default method and the
+     * preference key.
+     */
+    public static Uri getCompleteUri(Bundle metaData, String metaDataKey, String defaultMethod) {
+        String uriString = metaData.getString(metaDataKey);
+        if (TextUtils.isEmpty(uriString)) {
+            return null;
+        }
+
+        Uri uri = Uri.parse(uriString);
+        List<String> pathSegments = uri.getPathSegments();
+        if (pathSegments != null && !pathSegments.isEmpty()) {
+            return uri;
+        }
+
+        String key = metaData.getString(META_DATA_PREFERENCE_KEYHINT);
+        if (TextUtils.isEmpty(key)) {
+            LOG.w("Please specify the meta-data " + META_DATA_PREFERENCE_KEYHINT
+                    + " in AndroidManifest.xml for " + uriString);
+            return buildUri(uri.getAuthority(), defaultMethod);
+        }
+        return buildUri(uri.getAuthority(), defaultMethod, key);
+    }
+
+    private static Uri buildUri(String authority, String method, String key) {
+        return new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(authority)
+                .appendPath(method)
+                .appendPath(key)
+                .build();
+    }
+
+    private static Uri buildUri(String authority, String method) {
+        return new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(authority)
+                .appendPath(method)
+                .build();
+    }
+}
diff --git a/src/com/android/car/settings/common/MasterSwitchPreference.java b/src/com/android/car/settings/common/MasterSwitchPreference.java
deleted file mode 100644
index d66b03d..0000000
--- a/src/com/android/car/settings/common/MasterSwitchPreference.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.common;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.CompoundButton;
-import android.widget.Switch;
-
-import com.android.car.settings.R;
-import com.android.car.ui.preference.CarUiTwoActionPreference;
-
-/** A preference that can be clicked on one side and toggled on another. */
-public class MasterSwitchPreference extends CarUiTwoActionPreference {
-
-    /**
-     * Interface definition for a callback to be invoked when the switch is toggled.
-     */
-    public interface OnSwitchToggleListener {
-        /**
-         * Called when a switch was toggled.
-         *
-         * @param preference the preference whose switch was toggled.
-         * @param isChecked  the new state of the switch.
-         */
-        void onToggle(MasterSwitchPreference preference, boolean isChecked);
-    }
-
-    private Switch mSwitch;
-    private boolean mIsChecked;
-    private OnSwitchToggleListener mToggleListener;
-
-    private final CompoundButton.OnCheckedChangeListener mCheckedChangeListener =
-            (buttonView, isChecked) -> {
-                if (mToggleListener != null) {
-                    mToggleListener.onToggle(this, isChecked);
-                }
-            };
-
-    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();
-    }
-
-    private void init() {
-        setWidgetLayoutResource(R.layout.master_switch_widget);
-    }
-
-    /** Sets the listener that handles the change in switch state. */
-    public void setSwitchToggleListener(OnSwitchToggleListener listener) {
-        mToggleListener = listener;
-    }
-
-    /** Gets the listener that handles the change in switch state. */
-    public OnSwitchToggleListener getSwitchToggleListener() {
-        return mToggleListener;
-    }
-
-    @Override
-    protected void onBindWidgetFrame(View widgetFrame) {
-        mSwitch = widgetFrame.findViewById(R.id.master_switch);
-        mSwitch.setChecked(mIsChecked);
-        mSwitch.setOnCheckedChangeListener(mCheckedChangeListener);
-        widgetFrame.setOnClickListener(v -> setSwitchChecked(!mIsChecked));
-    }
-
-    /**
-     * Sets the state of the switch. Can be set even when it isn't visible or bound in order to set
-     * the initial state.
-     */
-    public void setSwitchChecked(boolean checked) {
-        mIsChecked = checked;
-        if (!isActionShown()) {
-            return;
-        }
-
-        if (mSwitch != null) {
-            mSwitch.setChecked(checked);
-        }
-    }
-
-    /** Gets the state of the switch. */
-    public boolean isSwitchChecked() {
-        return mIsChecked;
-    }
-}
diff --git a/src/com/android/car/settings/common/PreferenceController.java b/src/com/android/car/settings/common/PreferenceController.java
index c2796f5..21452af 100644
--- a/src/com/android/car/settings/common/PreferenceController.java
+++ b/src/com/android/car/settings/common/PreferenceController.java
@@ -19,14 +19,17 @@
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener;
 import android.content.Context;
+import android.widget.Toast;
 
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.lifecycle.DefaultLifecycleObserver;
 import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
 
 import com.android.car.settings.R;
+import com.android.car.ui.preference.UxRestrictablePreference;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -140,6 +143,7 @@
     private final Context mContext;
     private final String mPreferenceKey;
     private final FragmentController mFragmentController;
+    private final String mRestrictedWhileDrivingMessage;
 
     private CarUxRestrictions mUxRestrictions;
     private V mPreference;
@@ -159,6 +163,8 @@
                 mContext.getResources().getStringArray(R.array.config_ignore_ux_restrictions)));
         mAlwaysIgnoreUxRestrictions =
                 mContext.getResources().getBoolean(R.bool.config_always_ignore_ux_restrictions);
+        mRestrictedWhileDrivingMessage =
+                mContext.getResources().getString(R.string.car_ui_restricted_while_driving);
     }
 
     /**
@@ -446,10 +452,36 @@
      * additional driving restrictions.
      */
     protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
+        boolean restrict = false;
         if (!isUxRestrictionsIgnored(mAlwaysIgnoreUxRestrictions,
                 mPreferencesIgnoringUxRestrictions)
-                && CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
-            mPreference.setEnabled(false);
+                && CarUxRestrictionsHelper.isNoSetup(uxRestrictions)
+                && getAvailabilityStatus() != AVAILABLE_FOR_VIEWING) {
+            restrict = true;
+        }
+        restrictPreference(mPreference, restrict);
+    }
+
+    /**
+     * Updates the UxRestricted state and action for a preference. This will also update all child
+     * preferences with the same state and action when {@param preference} is a PreferenceGroup.
+     *
+     * @param preference the preference to update
+     * @param restrict whether or not the preference should be restricted
+     */
+    protected void restrictPreference(Preference preference, boolean restrict) {
+        if (preference instanceof UxRestrictablePreference) {
+            UxRestrictablePreference restrictablePreference = (UxRestrictablePreference) preference;
+            restrictablePreference.setUxRestricted(restrict);
+            restrictablePreference.setOnClickWhileRestrictedListener(p ->
+                    Toast.makeText(mContext, mRestrictedWhileDrivingMessage,
+                            Toast.LENGTH_LONG).show());
+        }
+        if (preference instanceof PreferenceGroup) {
+            PreferenceGroup preferenceGroup = (PreferenceGroup) preference;
+            for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
+                restrictPreference(preferenceGroup.getPreference(i), restrict);
+            }
         }
     }
 
diff --git a/src/com/android/car/settings/common/PreferenceXmlParser.java b/src/com/android/car/settings/common/PreferenceXmlParser.java
index 740e247..0deeeea 100644
--- a/src/com/android/car/settings/common/PreferenceXmlParser.java
+++ b/src/com/android/car/settings/common/PreferenceXmlParser.java
@@ -59,14 +59,17 @@
      */
     @IntDef(flag = true, value = {
             MetadataFlag.FLAG_NEED_KEY,
-            MetadataFlag.FLAG_NEED_PREF_CONTROLLER})
+            MetadataFlag.FLAG_NEED_PREF_CONTROLLER,
+            MetadataFlag.FLAG_NEED_SEARCHABLE})
     @Retention(RetentionPolicy.SOURCE)
     public @interface MetadataFlag {
         int FLAG_NEED_KEY = 1;
         int FLAG_NEED_PREF_CONTROLLER = 1 << 1;
+        int FLAG_NEED_SEARCHABLE = 1 << 9;
     }
 
     public static final String METADATA_KEY = "key";
+    public static final String METADATA_SEARCHABLE = "searchable";
     static final String METADATA_CONTROLLER = "controller";
 
     /**
@@ -114,6 +117,10 @@
                 preferenceMetadata.putString(METADATA_CONTROLLER,
                         getController(preferenceAttributes));
             }
+            if (hasFlag(flags, MetadataFlag.FLAG_NEED_SEARCHABLE)) {
+                preferenceMetadata.putBoolean(METADATA_SEARCHABLE,
+                        isSearchable(preferenceAttributes));
+            }
             metadata.add(preferenceMetadata);
 
             preferenceAttributes.recycle();
@@ -135,4 +142,8 @@
     private static String getController(TypedArray styledAttributes) {
         return styledAttributes.getString(R.styleable.Preference_controller);
     }
+
+    private static boolean isSearchable(TypedArray styledAttributes) {
+        return styledAttributes.getBoolean(R.styleable.Preference_searchable, true);
+    }
 }
diff --git a/src/com/android/car/settings/common/SeekBarPreference.java b/src/com/android/car/settings/common/SeekBarPreference.java
index 308cbd4..4493771 100644
--- a/src/com/android/car/settings/common/SeekBarPreference.java
+++ b/src/com/android/car/settings/common/SeekBarPreference.java
@@ -23,6 +23,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.SeekBar;
 import android.widget.TextView;
@@ -31,6 +32,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.ui.preference.CarUiPreference;
+import com.android.car.ui.utils.DirectManipulationHelper;
 
 /**
  * Car Setting's own version of SeekBarPreference.
@@ -52,13 +54,14 @@
     private boolean mAdjustable; // whether the seekbar should respond to the left/right keys
     private boolean mShowSeekBarValue; // whether to show the seekbar value TextView next to the bar
     private boolean mContinuousUpdate; // whether scrolling provides continuous calls to listener
+    private boolean mInDirectManipulationMode;
 
     private static final String TAG = "SeekBarPreference";
 
     /**
      * Listener reacting to the SeekBar changing value by the user
      */
-    private SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
+    private final SeekBar.OnSeekBarChangeListener mSeekBarChangeListener =
             new SeekBar.OnSeekBarChangeListener() {
                 @Override
                 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -84,35 +87,85 @@
     /**
      * Listener reacting to the user pressing DPAD left/right keys if {@code
      * adjustable} attribute is set to true; it transfers the key presses to the SeekBar
-     * to be handled accordingly.
+     * to be handled accordingly. Also handles entering and exiting direct manipulation
+     * mode for rotary.
      */
-    private View.OnKeyListener mSeekBarKeyListener = new View.OnKeyListener() {
+    private final View.OnKeyListener mSeekBarKeyListener = new View.OnKeyListener() {
         @Override
         public boolean onKey(View v, int keyCode, KeyEvent event) {
-            if (event.getAction() != KeyEvent.ACTION_DOWN) {
+            // Don't allow events through if there is no SeekBar or we're in non-adjustable mode.
+            if (mSeekBar == null || !mAdjustable) {
                 return false;
             }
 
-            if (!mAdjustable && (keyCode == KeyEvent.KEYCODE_DPAD_LEFT
-                    || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)) {
-                // Right or left keys are pressed when in non-adjustable mode; Skip the keys.
+            // Consume nudge events in direct manipulation mode.
+            if (mInDirectManipulationMode
+                    && (keyCode == KeyEvent.KEYCODE_DPAD_LEFT
+                    || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT
+                    || keyCode == KeyEvent.KEYCODE_DPAD_UP
+                    || keyCode == KeyEvent.KEYCODE_DPAD_DOWN)) {
+                return true;
+            }
+
+            // Handle events to enter or exit direct manipulation mode.
+            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
+                if (event.getAction() == KeyEvent.ACTION_DOWN) {
+                    setInDirectManipulationMode(v, !mInDirectManipulationMode);
+                }
+                return true;
+            }
+            if (keyCode == KeyEvent.KEYCODE_BACK) {
+                if (mInDirectManipulationMode) {
+                    if (event.getAction() == KeyEvent.ACTION_DOWN) {
+                        setInDirectManipulationMode(v, false);
+                    }
+                    return true;
+                }
+            }
+
+            // Don't propagate confirm keys to the SeekBar to prevent a ripple effect on the thumb.
+            if (KeyEvent.isConfirmKey(keyCode)) {
                 return false;
             }
 
-            // We don't want to propagate the click keys down to the seekbar view since it will
-            // create the ripple effect for the thumb.
-            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) {
-                return false;
+            if (event.getAction() == KeyEvent.ACTION_DOWN) {
+                return mSeekBar.onKeyDown(keyCode, event);
+            } else {
+                return mSeekBar.onKeyUp(keyCode, event);
             }
-
-            if (mSeekBar == null) {
-                Log.e(TAG, "SeekBar view is null and hence cannot be adjusted.");
-                return false;
-            }
-            return mSeekBar.onKeyDown(keyCode, event);
         }
     };
 
+    /** Listener to exit rotary direct manipulation mode when the user switches to touch. */
+    private final View.OnFocusChangeListener mSeekBarFocusChangeListener =
+            (v, hasFocus) -> {
+                if (!hasFocus && mInDirectManipulationMode && mSeekBar != null) {
+                    setInDirectManipulationMode(v, false);
+                }
+            };
+
+    /** Listener to handle rotate events from the rotary controller in direct manipulation mode. */
+    private final View.OnGenericMotionListener mSeekBarScrollListener = (v, event) -> {
+        if (!mInDirectManipulationMode || !mAdjustable || mSeekBar == null) {
+            return false;
+        }
+        int adjustment = Math.round(event.getAxisValue(MotionEvent.AXIS_SCROLL));
+        if (adjustment == 0) {
+            return false;
+        }
+        int count = Math.abs(adjustment);
+        int keyCode = adjustment < 0 ? KeyEvent.KEYCODE_DPAD_LEFT : KeyEvent.KEYCODE_DPAD_RIGHT;
+        KeyEvent downEvent = new KeyEvent(event.getDownTime(), event.getEventTime(),
+                KeyEvent.ACTION_DOWN, keyCode, /* repeat= */ 0);
+        KeyEvent upEvent = new KeyEvent(event.getDownTime(), event.getEventTime(),
+                KeyEvent.ACTION_UP, keyCode, /* repeat= */ 0);
+        for (int i = 0; i < count; i++) {
+            mSeekBar.onKeyDown(keyCode, downEvent);
+            mSeekBar.onKeyUp(keyCode, upEvent);
+        }
+        return true;
+    };
+
     public SeekBarPreference(
             Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         super(context, attrs, defStyleAttr, defStyleRes);
@@ -149,6 +202,8 @@
     public void onBindViewHolder(PreferenceViewHolder view) {
         super.onBindViewHolder(view);
         view.itemView.setOnKeyListener(mSeekBarKeyListener);
+        view.itemView.setOnFocusChangeListener(mSeekBarFocusChangeListener);
+        view.itemView.setOnGenericMotionListener(mSeekBarScrollListener);
         mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
         mSeekBarValueTextView = (TextView) view.findViewById(R.id.seekbar_value);
         if (mShowSeekBarValue) {
@@ -314,6 +369,18 @@
         }
     }
 
+    private void setInDirectManipulationMode(View view, boolean enable) {
+        mInDirectManipulationMode = enable;
+        DirectManipulationHelper.enableDirectManipulationMode(mSeekBar, enable);
+        // The preference is highlighted when it's focused with one exception. In direct
+        // manipulation (DM) mode, the SeekBar's thumb is highlighted instead. In DM mode, the
+        // preference and SeekBar are selected. The preference's highlight is drawn when it's
+        // focused but not selected, while the SeekBar's thumb highlight is drawn when the SeekBar
+        // is selected.
+        view.setSelected(enable);
+        mSeekBar.setSelected(enable);
+    }
+
     @Override
     protected Parcelable onSaveInstanceState() {
         final Parcelable superState = super.onSaveInstanceState();
diff --git a/src/com/android/car/settings/common/SettingsFragment.java b/src/com/android/car/settings/common/SettingsFragment.java
index f6f4fcf..a945e95 100644
--- a/src/com/android/car/settings/common/SettingsFragment.java
+++ b/src/com/android/car/settings/common/SettingsFragment.java
@@ -41,11 +41,12 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.car.settings.R;
-import com.android.car.ui.preference.DisabledPreferenceCallback;
 import com.android.car.ui.preference.PreferenceFragment;
+import com.android.car.ui.recyclerview.CarUiRecyclerView;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.car.ui.toolbar.ToolbarController;
+import com.android.car.ui.utils.CarUiUtils;
 import com.android.settingslib.search.Indexable;
 
 import java.util.ArrayList;
@@ -82,7 +83,6 @@
 
     private CarUxRestrictions mUxRestrictions;
     private int mCurrentRequestIndex = 0;
-    private String mRestrictedWhileDrivingMessage;
 
     /**
      * Returns the resource id for the preference XML of this fragment.
@@ -132,6 +132,20 @@
         return null;
     }
 
+    /**
+     * Enables rotary scrolling for the {@link CarUiRecyclerView} in this fragment.
+     * <p>
+     * Rotary scrolling should be enabled for scrolling views which contain content which the user
+     * may want to see but can't interact with, either alone or along with interactive (focusable)
+     * content.
+     */
+    protected void enableRotaryScroll() {
+        CarUiRecyclerView recyclerView = getView().findViewById(R.id.recycler_view);
+        if (recyclerView != null) {
+            CarUiUtils.setRotaryScrollEnabled(recyclerView, /* isVertical= */ true);
+        }
+    }
+
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
@@ -165,8 +179,6 @@
             mPreferenceControllersLookup.computeIfAbsent(controller.getClass(),
                     k -> new ArrayList<>(/* initialCapacity= */ 1)).add(controller);
         });
-
-        mRestrictedWhileDrivingMessage = context.getString(R.string.restricted_while_driving);
     }
 
     @Override
@@ -192,12 +204,6 @@
             Preference pref = screen.findPreference(controller.getPreferenceKey());
 
             controller.setPreference(pref);
-
-            if (pref instanceof DisabledPreferenceCallback && controller.getAvailabilityStatus()
-                    != PreferenceController.AVAILABLE_FOR_VIEWING) {
-                ((DisabledPreferenceCallback) pref).setMessageToShowWhenDisabledPreferenceClicked(
-                        mRestrictedWhileDrivingMessage);
-            }
         }
     }
 
diff --git a/src/com/android/car/settings/common/rotary/DirectManipulationHandler.java b/src/com/android/car/settings/common/rotary/DirectManipulationHandler.java
new file mode 100644
index 0000000..dd6dfb2
--- /dev/null
+++ b/src/com/android/car/settings/common/rotary/DirectManipulationHandler.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.Nullable;
+import androidx.core.util.Preconditions;
+
+/**
+ * A {@link View.OnKeyListener} and {@link View.OnGenericMotionListener} that adds a
+ * "Direct Manipulation" mode to any {@link View} that uses it.
+ * <p>
+ * Direct Manipulation mode in the Rotary context is a mode in which the user can use the
+ * Rotary controls to manipulate and change the UI elements they are interacting with rather
+ * than navigate through the entire UI.
+ * <p>
+ * Treats {@link KeyEvent#KEYCODE_DPAD_CENTER} as the signal to enter Direct Manipulation
+ * mode, and {@link KeyEvent#KEYCODE_BACK} as the signal to exit, and keeps track of which
+ * mode the {@link View} using it is currently in.
+ * <p>
+ * When in Direct Manipulation mode, it delegates to {@code mNudgeDelegate}
+ * for handling nudge behavior, {@code mBackDelegate} for back behavior, and
+ * {@code mRotationDelegate} for rotation behavior. Generally it is expected that in Direct
+ * Manipulation mode, nudges are used for navigation and rotation is used for "manipulating" the
+ * value of the selected {@link View}.
+ * <p>
+ * To reduce boilerplate, this class provides "no op" nudge and rotation behavior if
+ * no {@link View.OnKeyListener} or {@link View.OnGenericMotionListener} are provided as
+ * delegates for tackling the relevant events.
+ * <p>
+ * Allows {@link View}s that are within a {@link ViewGroup} to provide a link to their
+ * ancestor {@link ViewGroup} from which Direct Manipulation mode was first enabled. That way
+ * when the user finally exits Direct Manipulation mode, both objects are restored to their
+ * original state.
+ */
+public class DirectManipulationHandler implements View.OnKeyListener,
+        View.OnGenericMotionListener {
+    private static final String TAG = DirectManipulationHandler.class.getSimpleName();
+
+    /**
+     * Sets the provided {@link DirectManipulationHandler} to the key listener and motion
+     * listener of the provided view.
+     */
+    public static void setDirectManipulationHandler(@Nullable View view,
+            @Nullable DirectManipulationHandler handler) {
+        if (view == null) {
+            return;
+        }
+        view.setOnKeyListener(handler);
+        view.setOnGenericMotionListener(handler);
+    }
+
+    /** A builder for {@link DirectManipulationHandler}. */
+    public static class Builder {
+        private final DirectManipulationState mDmState;
+        private View.OnKeyListener mNudgeDelegate;
+        private EventListener mCenterButtonDelegate;
+        private EventListener mBackDelegate;
+        private View.OnGenericMotionListener mRotationDelegate;
+
+        public Builder(DirectManipulationState dmState) {
+            Preconditions.checkNotNull(dmState);
+            mDmState = dmState;
+        }
+
+        /** Sets a nudge handler. */
+        public Builder setNudgeHandler(View.OnKeyListener nudgeDelegate) {
+            Preconditions.checkNotNull(nudgeDelegate);
+            mNudgeDelegate = nudgeDelegate;
+            return this;
+        }
+
+        /** Sets an enter handler. */
+        public Builder setCenterButtonHandler(EventListener centerButtonDelegate) {
+            Preconditions.checkNotNull(centerButtonDelegate);
+            mCenterButtonDelegate = centerButtonDelegate;
+            return this;
+        }
+
+        /** Sets a back handler. */
+        public Builder setBackHandler(EventListener backDelegate) {
+            Preconditions.checkNotNull(backDelegate);
+            mBackDelegate = backDelegate;
+            return this;
+        }
+
+        /** Sets a rotation handler. */
+        public Builder setRotationHandler(View.OnGenericMotionListener rotationDelegate) {
+            Preconditions.checkNotNull(rotationDelegate);
+            mRotationDelegate = rotationDelegate;
+            return this;
+        }
+
+        /** Constructs a {@link DirectManipulationHandler}. */
+        public DirectManipulationHandler build() {
+            if (mNudgeDelegate == null && mRotationDelegate == null) {
+                throw new IllegalStateException("Nudge and/or rotation delegate must be provided.");
+            }
+            return new DirectManipulationHandler(mDmState, mNudgeDelegate, mCenterButtonDelegate,
+                    mBackDelegate, mRotationDelegate);
+        }
+    }
+
+    private final DirectManipulationState mDirectManipulationMode;
+    private final View.OnKeyListener mNudgeDelegate;
+    private final EventListener mCenterButtonDelegate;
+    private final EventListener mBackDelegate;
+    private final View.OnGenericMotionListener mRotationDelegate;
+
+    private DirectManipulationHandler(DirectManipulationState dmState,
+            @Nullable View.OnKeyListener nudgeDelegate,
+            @Nullable EventListener centerButtonDelegate,
+            @Nullable EventListener backDelegate,
+            @Nullable View.OnGenericMotionListener rotationDelegate) {
+        mDirectManipulationMode = dmState;
+        mNudgeDelegate = nudgeDelegate;
+        mCenterButtonDelegate = centerButtonDelegate;
+        mBackDelegate = backDelegate;
+        mRotationDelegate = rotationDelegate;
+    }
+
+    @Override
+    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
+        boolean isActionUp = keyEvent.getAction() == KeyEvent.ACTION_UP;
+        Log.d(TAG, "View: " + view + " is handling " + KeyEvent.keyCodeToString(keyCode)
+                + " and action " + KeyEvent.actionToString(keyEvent.getAction())
+                + " direct manipulation mode is "
+                + (mDirectManipulationMode.isActive() ? "active" : "inactive"));
+
+        boolean inDirectManipulationMode = mDirectManipulationMode.isActive();
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+                // If not yet in Direct Manipulation mode, switch to that mode. If in Direct
+                // Manipulation mode, exit, and clean up state.
+                if (isActionUp) {
+                    if (inDirectManipulationMode) {
+                        mDirectManipulationMode.disable();
+                    } else {
+                        mDirectManipulationMode.enable(view);
+                    }
+                }
+
+                if (mCenterButtonDelegate == null) {
+                    return true;
+                }
+
+                return mCenterButtonDelegate.onEvent(inDirectManipulationMode);
+            case KeyEvent.KEYCODE_BACK:
+                // If in Direct Manipulation mode, exit, and clean up state.
+                if (inDirectManipulationMode && isActionUp) {
+                    mDirectManipulationMode.disable();
+                }
+                // If no delegate is present, silently consume the events.
+                if (mBackDelegate == null) {
+                    return true;
+                }
+
+                return mBackDelegate.onEvent(inDirectManipulationMode);
+            case KeyEvent.KEYCODE_DPAD_UP:
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+                // This handler is only responsible for nudging behavior during Direct Manipulation
+                // mode. When the mode is disabled, ignore events.
+                if (!inDirectManipulationMode) {
+                    return false;
+                }
+                // If no delegate is present, silently consume the events.
+                if (mNudgeDelegate == null) {
+                    return true;
+                }
+                return mNudgeDelegate.onKey(view, keyCode, keyEvent);
+            default:
+                // Ignore all other key events.
+                return false;
+        }
+    }
+
+    @Override
+    public boolean onGenericMotion(View v, MotionEvent event) {
+        // This handler is only responsible for behavior during Direct Manipulation
+        // mode. When the mode is disabled, ignore events.
+        if (!mDirectManipulationMode.isActive()) {
+            return false;
+        }
+
+        // If no delegate is present, silently consume the events.
+        if (mRotationDelegate == null) {
+            return true;
+        }
+
+        return mRotationDelegate.onGenericMotion(v, event);
+    }
+
+    /** A custom event listener. */
+    public interface EventListener {
+        /**
+         * Handles an event.
+         *
+         * @param inDirectManipulationMode specifies whether we were in direct manipulation mode
+         *                                 before the event is handled
+         */
+        boolean onEvent(boolean inDirectManipulationMode);
+    }
+}
diff --git a/src/com/android/car/settings/common/rotary/DirectManipulationState.java b/src/com/android/car/settings/common/rotary/DirectManipulationState.java
new file mode 100644
index 0000000..9a1c746
--- /dev/null
+++ b/src/com/android/car/settings/common/rotary/DirectManipulationState.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import static android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS;
+
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.ui.utils.DirectManipulationHelper;
+
+/**
+ * Keeps track of the state of "direct manipulation" Rotary mode for this application window by
+ * tracking a reference to the {@link View} from which the user first enters into "direct
+ * manipulation" mode.
+ *
+ * <p>See {@link DirectManipulationHandler} for a definition of "direct manipulation".
+ */
+public class DirectManipulationState {
+    /** Indicates that the descendant focusability has not been set. */
+    @VisibleForTesting
+    static final int UNKNOWN_DESCENDANT_FOCUSABILITY = -1;
+
+    /** The view that is in direct manipulation mode, or null if none. */
+    @Nullable
+    private View mViewInDirectManipulationMode;
+    /** The original background of the view in direct manipulation mode. */
+    @Nullable
+    private Drawable mOriginalBackground;
+    /** The original descendant focusability value of the view in direct manipulation mode. */
+    private int mOriginalDescendantFocusability = UNKNOWN_DESCENDANT_FOCUSABILITY;
+
+    public DirectManipulationState() {
+    }
+
+    /** Returns true if Direct Manipulation mode is active, false otherwise. */
+    public boolean isActive() {
+        return mViewInDirectManipulationMode != null;
+    }
+
+    /**
+     * Enables Direct Manipulation mode, and keeps track of {@code view} as the starting point
+     * of this transition.
+     * <p>
+     * In order to visually indicate that we are in direct manipulation mode, we change the
+     * background color of {@code view}.
+     *
+     * @param view the {@link View} from which we entered into Direct Manipulation mode
+     */
+    public void enable(@NonNull View view) {
+        mViewInDirectManipulationMode = view;
+        if (mViewInDirectManipulationMode instanceof ViewGroup) {
+            ViewGroup viewGroup = (ViewGroup) mViewInDirectManipulationMode;
+            mOriginalDescendantFocusability = viewGroup.getDescendantFocusability();
+            viewGroup.setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
+        }
+        DirectManipulationHelper.enableDirectManipulationMode(view, /* enable= */ true);
+    }
+
+    /**
+     * Disables Direct Manipulation mode and restores any visual indicators for the {@link View}
+     * from which we entered into Direct Manipulation mode.
+     */
+    public void disable() {
+        DirectManipulationHelper.enableDirectManipulationMode(
+                mViewInDirectManipulationMode, /* enable= */ false);
+        // For ViewGroup objects, restore descendant focusability to the previous value.
+        if (mViewInDirectManipulationMode instanceof ViewGroup
+                && mOriginalDescendantFocusability != UNKNOWN_DESCENDANT_FOCUSABILITY) {
+            ViewGroup viewGroup = (ViewGroup) mViewInDirectManipulationMode;
+            viewGroup.setDescendantFocusability(mOriginalDescendantFocusability);
+        }
+
+        mViewInDirectManipulationMode = null;
+        mOriginalDescendantFocusability = UNKNOWN_DESCENDANT_FOCUSABILITY;
+    }
+
+    @VisibleForTesting
+    View getViewInDirectManipulationMode() {
+        return mViewInDirectManipulationMode;
+    }
+
+    @VisibleForTesting
+    int getOriginalDescendantFocusability() {
+        return mOriginalDescendantFocusability;
+    }
+}
diff --git a/src/com/android/car/settings/common/rotary/NumberPickerNudgeHandler.java b/src/com/android/car/settings/common/rotary/NumberPickerNudgeHandler.java
new file mode 100644
index 0000000..2b8d202
--- /dev/null
+++ b/src/com/android/car/settings/common/rotary/NumberPickerNudgeHandler.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.NumberPicker;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A nudge handler to deal with {@link NumberPicker} instances. Ensures that nudging keeps focus
+ * within the parent container of the {@link NumberPicker}.
+ */
+public class NumberPickerNudgeHandler implements View.OnKeyListener {
+
+    private static final Map<Integer, Integer> KEYCODE_TO_DIRECTION_MAP =
+            new HashMap<Integer, Integer>() {{
+                put(KeyEvent.KEYCODE_DPAD_UP, View.FOCUS_UP);
+                put(KeyEvent.KEYCODE_DPAD_DOWN, View.FOCUS_DOWN);
+                put(KeyEvent.KEYCODE_DPAD_LEFT, View.FOCUS_LEFT);
+                put(KeyEvent.KEYCODE_DPAD_RIGHT, View.FOCUS_RIGHT);
+            }};
+
+    @Override
+    public boolean onKey(View view, int keyCode, KeyEvent event) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_UP:
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+                // Disable by consuming the event and not doing anything.
+                return true;
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+                if (event.getAction() == KeyEvent.ACTION_UP) {
+                    int direction = KEYCODE_TO_DIRECTION_MAP.get(keyCode);
+                    View nextView = view.focusSearch(direction);
+                    if (NumberPickerUtils.hasCommonNumberPickerParent(view, nextView)) {
+                        nextView.requestFocus(direction);
+                    }
+                }
+                return true;
+            default:
+                return false;
+        }
+    }
+}
diff --git a/src/com/android/car/settings/common/rotary/NumberPickerRotationHandler.java b/src/com/android/car/settings/common/rotary/NumberPickerRotationHandler.java
new file mode 100644
index 0000000..4ff5b32
--- /dev/null
+++ b/src/com/android/car/settings/common/rotary/NumberPickerRotationHandler.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.NumberPicker;
+
+/** A rotation handler for {@link NumberPicker} instances. */
+public class NumberPickerRotationHandler implements View.OnGenericMotionListener {
+    @Override
+    public boolean onGenericMotion(View v, MotionEvent event) {
+        View focusedView = v.findFocus();
+        if (focusedView instanceof NumberPicker) {
+            NumberPicker numberPicker = (NumberPicker) focusedView;
+            float scroll = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+            numberPicker.setValue(numberPicker.getValue() + Math.round(scroll));
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/car/settings/common/rotary/NumberPickerUtils.java b/src/com/android/car/settings/common/rotary/NumberPickerUtils.java
new file mode 100644
index 0000000..44cc6a0
--- /dev/null
+++ b/src/com/android/car/settings/common/rotary/NumberPickerUtils.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.widget.DatePicker;
+import android.widget.NumberPicker;
+import android.widget.TimePicker;
+
+import androidx.annotation.Nullable;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/** A helper class to deal with containers holding {@link NumberPicker} instances. */
+public final class NumberPickerUtils {
+
+    /** Allowed containers holding {@link NumberPicker} instances. */
+    static final Set<Class> POSSIBLE_PARENT_TYPES = new HashSet<>(
+            Arrays.asList(TimePicker.class, DatePicker.class));
+
+    /** Focuses the first child {@link NumberPicker} if it exists. */
+    public static boolean focusChildNumberPicker(View view) {
+        ViewGroup numberPickerParent = (ViewGroup) view;
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        getNumberPickerDescendants(numberPickers, numberPickerParent);
+        if (numberPickers.isEmpty()) {
+            return false;
+        }
+        numberPickerParent.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
+        numberPickers.get(0).requestFocus();
+        return true;
+    }
+
+    /**
+     * We don't have API access to the inner views of a {@link TimePicker} or {@link DatePicker}.
+     * We do know based on
+     * {@code frameworks/base/core/res/res/layout/time_picker_legacy_material.xml} and
+     * {@code frameworks/base/core/res/res/layout/date_picker_legacy.xml} that a {@link TimePicker}
+     * or {@link DatePicker} that is in spinner mode will be using {@link NumberPicker} instances
+     * internally, and that's what we rely on here.
+     *
+     * @param numberPickers the list to add all the {@link NumberPicker} instances found to
+     * @param view the view to search for {@link NumberPicker} instances
+     */
+    public static void getNumberPickerDescendants(List<NumberPicker> numberPickers,
+            ViewGroup view) {
+        for (int i = 0; i < view.getChildCount(); i++) {
+            View child = view.getChildAt(i);
+            if (child instanceof NumberPicker) {
+                numberPickers.add((NumberPicker) child);
+            } else if (child instanceof ViewGroup) {
+                getNumberPickerDescendants(numberPickers, (ViewGroup) child);
+            }
+        }
+    }
+
+    /**
+     * Determines whether {@code view1} and {@code view2} have a common ancestor of one of the types
+     * defined in {@code POSSIBLE_PARENT_TYPES}.
+     */
+    static boolean hasCommonNumberPickerParent(@Nullable View view1, @Nullable View view2) {
+        if (view1 == null || view2 == null) {
+            return false;
+        }
+        View view1Ancestor = getNumberPickerParent(view1);
+        View view2Ancestor = getNumberPickerParent(view2);
+        if (view1Ancestor == null || view2Ancestor == null) {
+            return false;
+        }
+
+        return view1Ancestor == view2Ancestor;
+    }
+
+    /**
+     * Finds the first parent that is of one of the types defined in {@code POSSIBLE_PARENT_TYPES}.
+     * Returns {@code null} if no such parent exists.
+     */
+    @Nullable
+    static View getNumberPickerParent(@Nullable View view) {
+        if (view == null) {
+            return null;
+        }
+
+        if (POSSIBLE_PARENT_TYPES.contains(view.getClass())) {
+            return view;
+        }
+
+        ViewParent viewParent = view.getParent();
+        if (viewParent instanceof View) {
+            return getNumberPickerParent((View) viewParent);
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/car/settings/datetime/DatePickerFragment.java b/src/com/android/car/settings/datetime/DatePickerFragment.java
index 70f1ee5..1edbff1 100644
--- a/src/com/android/car/settings/datetime/DatePickerFragment.java
+++ b/src/com/android/car/settings/datetime/DatePickerFragment.java
@@ -17,17 +17,26 @@
 
 import android.app.timedetector.ManualTimeSuggestion;
 import android.app.timedetector.TimeDetector;
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Intent;
 import android.os.Bundle;
+import android.view.ViewGroup;
 import android.widget.DatePicker;
+import android.widget.NumberPicker;
 
 import androidx.annotation.LayoutRes;
 import androidx.annotation.StringRes;
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.BaseFragment;
+import com.android.car.settings.common.rotary.DirectManipulationHandler;
+import com.android.car.settings.common.rotary.DirectManipulationState;
+import com.android.car.settings.common.rotary.NumberPickerNudgeHandler;
+import com.android.car.settings.common.rotary.NumberPickerRotationHandler;
+import com.android.car.settings.common.rotary.NumberPickerUtils;
 import com.android.car.ui.toolbar.MenuItem;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.List;
@@ -38,7 +47,9 @@
 public class DatePickerFragment extends BaseFragment {
     private static final int MILLIS_IN_SECOND = 1000;
 
+    private DirectManipulationState mDirectManipulationMode;
     private DatePicker mDatePicker;
+    private List<NumberPicker> mNumberPickers;
     private MenuItem mOkButton;
 
     @Override
@@ -87,6 +98,80 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
+        mDirectManipulationMode = new DirectManipulationState();
         mDatePicker = getView().findViewById(R.id.date_picker);
+        mDatePicker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
+        mNumberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(mNumberPickers, mDatePicker);
+
+        DirectManipulationHandler.setDirectManipulationHandler(mDatePicker,
+                new DirectManipulationHandler.Builder(mDirectManipulationMode)
+                        // Use no-op nudge handler, since we never stay on this view in direct
+                        // manipulation mode.
+                        .setNudgeHandler((v, keyCode, event) -> true)
+                        .setCenterButtonHandler(inDirectManipulationMode -> {
+                            if (inDirectManipulationMode) {
+                                return true;
+                            }
+
+                            NumberPicker picker = mNumberPickers.get(0);
+                            if (picker != null) {
+                                picker.requestFocus();
+                            }
+                            return true;
+                        })
+                        .setBackHandler(inDirectManipulationMode -> {
+                            // Only handle back if we weren't previously in direct manipulation
+                            // mode.
+                            if (!inDirectManipulationMode) {
+                                onBackPressed();
+                            }
+                            return true;
+                        })
+                        .build());
+
+        DirectManipulationHandler numberPickerListener =
+                new DirectManipulationHandler.Builder(mDirectManipulationMode)
+                        .setNudgeHandler(new NumberPickerNudgeHandler())
+                        .setCenterButtonHandler(inDirectManipulationMode -> {
+                            if (!inDirectManipulationMode) {
+                                return true;
+                            }
+
+                            mDatePicker.requestFocus();
+                            return true;
+                        })
+                        .setBackHandler(inDirectManipulationMode -> {
+                            mDatePicker.requestFocus();
+                            return true;
+                        })
+                        .setRotationHandler(new NumberPickerRotationHandler())
+                        .build();
+
+        for (int i = 0; i < mNumberPickers.size(); i++) {
+            DirectManipulationHandler.setDirectManipulationHandler(mNumberPickers.get(i),
+                    numberPickerListener);
+        }
+    }
+
+    @Override
+    public void onUxRestrictionsChanged(CarUxRestrictions restrictionInfo) {
+        if (canBeShown(restrictionInfo)) {
+            return;
+        }
+        if (mDirectManipulationMode != null && mDirectManipulationMode.isActive()) {
+            mDirectManipulationMode.disable();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        DirectManipulationHandler.setDirectManipulationHandler(mDatePicker, /* handler= */ null);
+        for (int i = 0; i < mNumberPickers.size(); i++) {
+            DirectManipulationHandler.setDirectManipulationHandler(mNumberPickers.get(i),
+                    /* handler= */ null);
+        }
+
+        super.onDestroy();
     }
 }
diff --git a/src/com/android/car/settings/datetime/TimePickerFragment.java b/src/com/android/car/settings/datetime/TimePickerFragment.java
index 9f9ed34..94e1651 100644
--- a/src/com/android/car/settings/datetime/TimePickerFragment.java
+++ b/src/com/android/car/settings/datetime/TimePickerFragment.java
@@ -18,9 +18,12 @@
 
 import android.app.timedetector.ManualTimeSuggestion;
 import android.app.timedetector.TimeDetector;
+import android.car.drivingstate.CarUxRestrictions;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.format.DateFormat;
+import android.view.ViewGroup;
+import android.widget.NumberPicker;
 import android.widget.TimePicker;
 
 import androidx.annotation.LayoutRes;
@@ -28,8 +31,14 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.BaseFragment;
+import com.android.car.settings.common.rotary.DirectManipulationHandler;
+import com.android.car.settings.common.rotary.DirectManipulationState;
+import com.android.car.settings.common.rotary.NumberPickerNudgeHandler;
+import com.android.car.settings.common.rotary.NumberPickerRotationHandler;
+import com.android.car.settings.common.rotary.NumberPickerUtils;
 import com.android.car.ui.toolbar.MenuItem;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.List;
@@ -40,7 +49,9 @@
 public class TimePickerFragment extends BaseFragment {
     private static final int MILLIS_IN_SECOND = 1000;
 
+    private DirectManipulationState mDirectManipulationMode;
     private TimePicker mTimePicker;
+    private List<NumberPicker> mNumberPickers;
     private MenuItem mOkButton;
 
     @Override
@@ -90,8 +101,82 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        mTimePicker = (TimePicker) getView().findViewById(R.id.time_picker);
+        mDirectManipulationMode = new DirectManipulationState();
+        mTimePicker = getView().findViewById(R.id.time_picker);
+        mTimePicker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
         mTimePicker.setIs24HourView(is24Hour());
+        mNumberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(mNumberPickers, mTimePicker);
+
+        DirectManipulationHandler.setDirectManipulationHandler(mTimePicker,
+                new DirectManipulationHandler.Builder(mDirectManipulationMode)
+                        // Use no-op nudge handler, since we never stay on this view in direct
+                        // manipulation mode.
+                        .setNudgeHandler((v, keyCode, event) -> true)
+                        .setCenterButtonHandler(inDirectManipulationMode -> {
+                            if (inDirectManipulationMode) {
+                                return true;
+                            }
+
+                            NumberPicker picker = mNumberPickers.get(0);
+                            if (picker != null) {
+                                picker.requestFocus();
+                            }
+                            return true;
+                        })
+                        .setBackHandler(inDirectManipulationMode -> {
+                            // Only handle back if we weren't previously in direct manipulation
+                            // mode.
+                            if (!inDirectManipulationMode) {
+                                onBackPressed();
+                            }
+                            return true;
+                        })
+                        .build());
+
+        DirectManipulationHandler numberPickerListener =
+                new DirectManipulationHandler.Builder(mDirectManipulationMode)
+                        .setNudgeHandler(new NumberPickerNudgeHandler())
+                        .setCenterButtonHandler(inDirectManipulationMode -> {
+                            if (!inDirectManipulationMode) {
+                                return true;
+                            }
+
+                            mTimePicker.requestFocus();
+                            return true;
+                        })
+                        .setBackHandler(inDirectManipulationMode -> {
+                            mTimePicker.requestFocus();
+                            return true;
+                        })
+                        .setRotationHandler(new NumberPickerRotationHandler())
+                        .build();
+
+        for (int i = 0; i < mNumberPickers.size(); i++) {
+            DirectManipulationHandler.setDirectManipulationHandler(mNumberPickers.get(i),
+                    numberPickerListener);
+        }
+    }
+
+    @Override
+    public void onUxRestrictionsChanged(CarUxRestrictions restrictionInfo) {
+        if (canBeShown(restrictionInfo)) {
+            return;
+        }
+        if (mDirectManipulationMode != null && mDirectManipulationMode.isActive()) {
+            mDirectManipulationMode.disable();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        DirectManipulationHandler.setDirectManipulationHandler(mTimePicker, /* handler= */ null);
+        for (int i = 0; i < mNumberPickers.size(); i++) {
+            DirectManipulationHandler.setDirectManipulationHandler(mNumberPickers.get(i),
+                    /* handler= */ null);
+        }
+
+        super.onDestroy();
     }
 
     private boolean is24Hour() {
diff --git a/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceController.java b/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceController.java
index fe1bb2a..dd82ad2 100644
--- a/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceController.java
+++ b/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceController.java
@@ -128,7 +128,13 @@
             try {
                 Intent intent = new Intent(Intent.ACTION_MAIN);
                 String settingsActivity = inputMethodInfo.getSettingsActivity();
+                if (settingsActivity == null) {
+                    LOG.d("IME's Settings Activity not defined.");
+                    return true;
+                }
+
                 intent.setClassName(inputMethodInfo.getPackageName(), settingsActivity);
+
                 // Invoke a settings activity of an input method.
                 getContext().startActivity(intent);
             } catch (final ActivityNotFoundException e) {
diff --git a/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java b/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
index be1001f..6029469 100644
--- a/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
+++ b/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
@@ -31,6 +31,7 @@
 import com.android.car.settings.common.ConfirmationDialogFragment;
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
 
 import java.util.Collections;
 import java.util.Comparator;
@@ -183,7 +184,7 @@
      * @return {@code SwitchPreference} which allows a user to enable/disable an input method.
      */
     private SwitchPreference createSwitchPreference(InputMethodInfo inputMethodInfo) {
-        SwitchPreference switchPreference = new SwitchPreference(getContext());
+        SwitchPreference switchPreference = new CarUiSwitchPreference(getContext());
         switchPreference.setKey(String.valueOf(inputMethodInfo.getId()));
         switchPreference.setIcon(InputMethodUtil.getPackageIcon(mPackageManager, inputMethodInfo));
         switchPreference.setTitle(InputMethodUtil.getPackageLabel(mPackageManager,
diff --git a/src/com/android/car/settings/location/CarLocationSettingsInjector.java b/src/com/android/car/settings/location/CarLocationSettingsInjector.java
new file mode 100644
index 0000000..6627ad3
--- /dev/null
+++ b/src/com/android/car/settings/location/CarLocationSettingsInjector.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.location;
+
+import android.content.Context;
+
+import androidx.preference.Preference;
+
+import com.android.car.ui.preference.CarUiPreference;
+import com.android.settingslib.location.InjectedSetting;
+import com.android.settingslib.location.SettingsInjector;
+
+/**
+ * Car-specific class to use CarUiPreferences for preferences loaded from {@link SettingsInjector}.
+ */
+public class CarLocationSettingsInjector extends SettingsInjector {
+    public CarLocationSettingsInjector(Context context) {
+        super(context);
+    }
+
+    @Override
+    protected Preference createPreference(Context prefContext, InjectedSetting setting) {
+        return new CarUiPreference(prefContext);
+    }
+}
diff --git a/src/com/android/car/settings/location/LocationServicesPreferenceController.java b/src/com/android/car/settings/location/LocationServicesPreferenceController.java
index 1c9b04a..91aca3b 100644
--- a/src/com/android/car/settings/location/LocationServicesPreferenceController.java
+++ b/src/com/android/car/settings/location/LocationServicesPreferenceController.java
@@ -57,7 +57,7 @@
     public LocationServicesPreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
-        mSettingsInjector = new SettingsInjector(context);
+        mSettingsInjector = new CarLocationSettingsInjector(context);
     }
 
     @VisibleForTesting
diff --git a/src/com/android/car/settings/location/LocationSettingsFragment.java b/src/com/android/car/settings/location/LocationSettingsFragment.java
index 0b30138..891fe33 100644
--- a/src/com/android/car/settings/location/LocationSettingsFragment.java
+++ b/src/com/android/car/settings/location/LocationSettingsFragment.java
@@ -25,7 +25,10 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.view.View;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.XmlRes;
 
 import com.android.car.settings.R;
@@ -76,6 +79,12 @@
     }
 
     @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        enableRotaryScroll();
+    }
+
+    @Override
     @XmlRes
     protected int getPreferenceScreenResId() {
         return R.xml.location_settings_fragment;
diff --git a/src/com/android/car/settings/location/RecentLocationRequestsPreferenceController.java b/src/com/android/car/settings/location/RecentLocationRequestsPreferenceController.java
index 6860e7b..69036ef 100644
--- a/src/com/android/car/settings/location/RecentLocationRequestsPreferenceController.java
+++ b/src/com/android/car/settings/location/RecentLocationRequestsPreferenceController.java
@@ -18,9 +18,7 @@
 
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
@@ -41,6 +39,7 @@
  */
 public class RecentLocationRequestsPreferenceController extends
         PreferenceController<PreferenceGroup> {
+    private final PackageManager mPackageManager;
     private RecentLocationApps mRecentLocationApps;
     // This list will always be sorted by most recent first.
     private List<Request> mRecentLocationRequests;
@@ -49,6 +48,7 @@
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
         mRecentLocationApps = new RecentLocationApps(context);
+        mPackageManager = context.getPackageManager();
     }
 
     @VisibleForTesting
@@ -96,18 +96,26 @@
         pref.setSummary(request.contentDescription);
         pref.setIcon(request.icon);
         pref.setTitle(request.label);
-        Intent intent = new Intent();
-        intent.setPackage(request.packageName);
-        ResolveInfo resolveInfo = getContext().getPackageManager().resolveActivity(intent,
-                PackageManager.MATCH_DEFAULT_ONLY);
-        pref.setOnPreferenceClickListener(p -> {
-            getFragmentController().launchFragment(
-                    ApplicationDetailsFragment.getInstance(resolveInfo.activityInfo.packageName));
-            return true;
-        });
+        if (isPackageInstalled(request.packageName)) {
+            pref.setOnPreferenceClickListener(p -> {
+                getFragmentController().launchFragment(
+                        ApplicationDetailsFragment.getInstance(
+                                request.packageName));
+                return true;
+            });
+        }
         return pref;
     }
 
+    private boolean isPackageInstalled(String packageName) {
+        try {
+            mPackageManager.getPackageInfo(packageName, PackageManager.GET_META_DATA);
+        } catch (PackageManager.NameNotFoundException e) {
+            return false;
+        }
+        return true;
+    }
+
     /**
      * Compares two {@link Request} lists by the elements' package names.
      *
diff --git a/src/com/android/car/settings/network/NetworkAndInternetFragment.java b/src/com/android/car/settings/network/NetworkAndInternetFragment.java
index 3bd2abf..bdff8c5 100644
--- a/src/com/android/car/settings/network/NetworkAndInternetFragment.java
+++ b/src/com/android/car/settings/network/NetworkAndInternetFragment.java
@@ -27,7 +27,6 @@
 import com.android.car.settings.search.CarBaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /** Fragment for all wifi/mobile data connectivity preferences. */
@@ -45,16 +44,15 @@
                     Settings.Panel.ACTION_INTERNET_CONNECTIVITY) {
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
+                    List<String> nonIndexableKeys = super.getNonIndexableKeys(context);
                     if (!NetworkUtils.hasMobileNetwork(
                             context.getSystemService(ConnectivityManager.class))) {
-                        List<String> nonIndexableKeys = new ArrayList<>();
                         nonIndexableKeys.add(
                                 context.getString(R.string.pk_mobile_network_settings_entry));
                         nonIndexableKeys.add(
                                 context.getString(R.string.pk_data_usage_settings_entry));
-                        return nonIndexableKeys;
                     }
-                    return null;
+                    return nonIndexableKeys;
                 }
             };
 }
diff --git a/src/com/android/car/settings/search/CarBaseSearchIndexProvider.java b/src/com/android/car/settings/search/CarBaseSearchIndexProvider.java
index 22ca3be..690e3c8 100644
--- a/src/com/android/car/settings/search/CarBaseSearchIndexProvider.java
+++ b/src/com/android/car/settings/search/CarBaseSearchIndexProvider.java
@@ -17,10 +17,13 @@
 package com.android.car.settings.search;
 
 import static com.android.car.settings.common.PreferenceXmlParser.METADATA_KEY;
+import static com.android.car.settings.common.PreferenceXmlParser.METADATA_SEARCHABLE;
 import static com.android.car.settings.common.PreferenceXmlParser.MetadataFlag.FLAG_NEED_KEY;
+import static com.android.car.settings.common.PreferenceXmlParser.MetadataFlag.FLAG_NEED_SEARCHABLE;
 
 import android.annotation.Nullable;
 import android.content.Context;
+import android.os.Bundle;
 import android.provider.SearchIndexableResource;
 
 import androidx.annotation.NonNull;
@@ -34,9 +37,9 @@
 import org.xmlpull.v1.XmlPullParserException;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * A basic SearchIndexProvider.
@@ -82,18 +85,21 @@
 
     @Override
     public List<String> getNonIndexableKeys(Context context) {
-        if (!isPageSearchEnabled(context)) {
-            try {
-                return PreferenceXmlParser.extractMetadata(context, mXmlRes, FLAG_NEED_KEY)
-                        .stream()
-                        .map(bundle -> bundle.getString(METADATA_KEY))
-                        .collect(Collectors.toList());
-            } catch (IOException | XmlPullParserException e) {
-                LOG.w("Error parsing non-indexable XML - " + mXmlRes);
+        boolean searchEnabled = isPageSearchEnabled(context);
+        List<String> keys = new ArrayList<>();
+        try {
+            List<Bundle> metadata = PreferenceXmlParser.extractMetadata(context, mXmlRes,
+                    FLAG_NEED_KEY | FLAG_NEED_SEARCHABLE);
+            for (Bundle bundle : metadata) {
+                if (!searchEnabled || !bundle.getBoolean(METADATA_SEARCHABLE, true)) {
+                    keys.add(bundle.getString(METADATA_KEY));
+                }
             }
+        } catch (IOException | XmlPullParserException e) {
+            LOG.w("Error parsing non-indexable XML - " + mXmlRes);
         }
 
-        return null;
+        return keys;
     }
 
     /**
diff --git a/src/com/android/car/settings/search/CarSettingsSearchIndexablesProvider.java b/src/com/android/car/settings/search/CarSettingsSearchIndexablesProvider.java
index 06ba437..5a63d7a3 100644
--- a/src/com/android/car/settings/search/CarSettingsSearchIndexablesProvider.java
+++ b/src/com/android/car/settings/search/CarSettingsSearchIndexablesProvider.java
@@ -46,6 +46,7 @@
 import android.provider.SearchIndexablesProvider;
 
 import com.android.car.settings.common.Logger;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settingslib.search.SearchIndexableData;
 import com.android.settingslib.search.SearchIndexableRaw;
 import com.android.settingslib.search.SearchIndexableResources;
@@ -97,7 +98,9 @@
                 .map(p -> p.getRawDataToIndex(getContext(), true))
                 .filter(Objects::nonNull)
                 .forEach(list -> list.forEach(
-                        raw -> cursor.addRow(createIndexableRawColumnObjects(raw))));
+                        raw -> {
+                            cursor.addRow(createIndexableRawColumnObjects(raw));
+                        }));
 
         return cursor;
     }
@@ -157,4 +160,9 @@
         }
         return mSearchIndexableResources;
     }
+
+    @VisibleForTesting
+    void setResources(SearchIndexableResources resources) {
+        mSearchIndexableResources = resources;
+    }
 }
diff --git a/src/com/android/car/settings/security/CheckLockActivity.java b/src/com/android/car/settings/security/CheckLockActivity.java
index 16aeac7..f5daba8 100644
--- a/src/com/android/car/settings/security/CheckLockActivity.java
+++ b/src/com/android/car/settings/security/CheckLockActivity.java
@@ -44,4 +44,11 @@
         setResult(RESULT_OK);
         finish();
     }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        PasswordHelper.zeroizeCredentials();
+    }
 }
diff --git a/src/com/android/car/settings/security/CheckLockWorker.java b/src/com/android/car/settings/security/CheckLockWorker.java
index e49e141..cf11491 100644
--- a/src/com/android/car/settings/security/CheckLockWorker.java
+++ b/src/com/android/car/settings/security/CheckLockWorker.java
@@ -38,6 +38,7 @@
 
     private boolean mHasPendingResult;
     private boolean mLockMatched;
+    private int mThrottleTimeoutMs;
     private boolean mCheckInProgress;
     private Listener mListener;
     private LockPatternUtils mLockPatternUtils;
@@ -56,8 +57,9 @@
         if (mListener == null) {
             mHasPendingResult = true;
             mLockMatched = matched;
+            mThrottleTimeoutMs = throttleTimeoutMs;
         } else {
-            mListener.onCheckCompleted(matched);
+            mListener.onCheckCompleted(matched, throttleTimeoutMs);
         }
     }
 
@@ -68,7 +70,7 @@
         mListener = listener;
         if (mListener != null && mHasPendingResult) {
             mHasPendingResult = false;
-            mListener.onCheckCompleted(mLockMatched);
+            mListener.onCheckCompleted(mLockMatched, mThrottleTimeoutMs);
         }
     }
 
@@ -101,6 +103,10 @@
             LOG.w("Check pin/password request issued while one is still running");
             return;
         }
+        if (password == null || password.isNone()) {
+            LOG.w("Empty pin/password LockscreenCredential");
+            return;
+        }
         mCheckInProgress = true;
         LockPatternChecker.checkCredential(mLockPatternUtils, password, userId, this);
     }
@@ -111,8 +117,10 @@
     interface Listener {
         /**
          * @param matched Whether the entered password matches the stored record.
+         * @param timeoutMs The remaining amount of time that the user is locked out from
+         *                  retrying the password challenge.
          */
-        void onCheckCompleted(boolean matched);
+        void onCheckCompleted(boolean matched, int timeoutMs);
     }
 }
 
diff --git a/src/com/android/car/settings/security/ChooseLockPatternFragment.java b/src/com/android/car/settings/security/ChooseLockPatternFragment.java
index 6a516ba..bcf6057 100644
--- a/src/com/android/car/settings/security/ChooseLockPatternFragment.java
+++ b/src/com/android/car/settings/security/ChooseLockPatternFragment.java
@@ -169,6 +169,9 @@
         Bundle args = getArguments();
         if (args != null) {
             mCurrentCredential = args.getParcelable(PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK);
+            if (mCurrentCredential != null) {
+                mCurrentCredential = mCurrentCredential.duplicate();
+            }
         }
 
         if (savedInstanceState != null) {
@@ -232,6 +235,15 @@
         getToolbar().getProgressBar().setVisible(false);
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        mLockPatternView.clearPattern();
+
+        PasswordHelper.zeroizeCredentials(mChosenPattern, mCurrentCredential);
+    }
+
     /**
      * Updates the messages and buttons appropriate to what stage the user
      * is at in choosing a pattern. This doesn't handle clearing out the pattern;
diff --git a/src/com/android/car/settings/security/ChooseLockPinPasswordFragment.java b/src/com/android/car/settings/security/ChooseLockPinPasswordFragment.java
index 3a525b0..4eedd9d 100644
--- a/src/com/android/car/settings/security/ChooseLockPinPasswordFragment.java
+++ b/src/com/android/car/settings/security/ChooseLockPinPasswordFragment.java
@@ -137,6 +137,9 @@
         if (args != null) {
             mIsPin = args.getBoolean(EXTRA_IS_PIN);
             mExistingCredential = args.getParcelable(PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK);
+            if (mExistingCredential != null) {
+                mExistingCredential = mExistingCredential.duplicate();
+            }
         }
 
         mPasswordHelper = new PasswordHelper(mIsPin);
@@ -194,7 +197,9 @@
                     mUiStage = Stage.Introduction;
                 }
                 // Schedule the UI update.
-                mTextChangedHandler.notifyAfterTextChanged();
+                if (isResumed()) {
+                    mTextChangedHandler.notifyAfterTextChanged();
+                }
             }
         });
 
@@ -252,6 +257,14 @@
         mProgressBar.setVisible(false);
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mPasswordField.setText(null);
+
+        PasswordHelper.zeroizeCredentials(mCurrentEntry, mExistingCredential, mFirstEntry);
+    }
+
     /**
      * Append the argument to the end of the password entry field
      */
diff --git a/src/com/android/car/settings/security/ChooseLockTypeFragment.java b/src/com/android/car/settings/security/ChooseLockTypeFragment.java
index 7d67c7f..f0f654f 100644
--- a/src/com/android/car/settings/security/ChooseLockTypeFragment.java
+++ b/src/com/android/car/settings/security/ChooseLockTypeFragment.java
@@ -32,6 +32,8 @@
  */
 public class ChooseLockTypeFragment extends SettingsFragment {
 
+    private LockscreenCredential mLockscreenCredential;
+
     @Override
     @XmlRes
     protected int getPreferenceScreenResId() {
@@ -46,8 +48,7 @@
         super.onCreate(savedInstanceState);
         Bundle args = getArguments();
         if (args != null) {
-            LockscreenCredential currPassword = args.getParcelable(
-                    PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK);
+            mLockscreenCredential = args.getParcelable(PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK);
             int passwordQuality = args.getInt(PasswordHelper.EXTRA_CURRENT_PASSWORD_QUALITY);
 
             PreferenceScreen preferenceScreen = getPreferenceScreen();
@@ -55,10 +56,17 @@
             for (int i = 0; i < preferenceCount; i++) {
                 Preference preference = preferenceScreen.getPreference(i);
                 preference.getExtras().putParcelable(
-                        PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK, currPassword);
+                        PasswordHelper.EXTRA_CURRENT_SCREEN_LOCK, mLockscreenCredential);
                 preference.getExtras().putInt(
                         PasswordHelper.EXTRA_CURRENT_PASSWORD_QUALITY, passwordQuality);
             }
         }
     }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+
+        PasswordHelper.zeroizeCredentials(mLockscreenCredential);
+    }
 }
diff --git a/src/com/android/car/settings/security/ConfirmLockLockoutHelper.java b/src/com/android/car/settings/security/ConfirmLockLockoutHelper.java
new file mode 100644
index 0000000..61d2808
--- /dev/null
+++ b/src/com/android/car/settings/security/ConfirmLockLockoutHelper.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.security;
+
+import android.content.Context;
+import android.os.CountDownTimer;
+import android.os.SystemClock;
+
+import androidx.annotation.Nullable;
+
+import com.android.car.settings.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.widget.LockPatternUtils;
+
+/** Common lockout handling code. */
+public class ConfirmLockLockoutHelper {
+
+    private static ConfirmLockLockoutHelper sInstance;
+
+    private final Context mContext;
+    private final int mUserId;
+    private final LockPatternUtils mLockPatternUtils;
+    private ConfirmLockUIController mUiController;
+    private CountDownTimer mCountDownTimer;
+
+    /** Return an instance of {@link ConfirmLockLockoutHelper}. */
+    public static ConfirmLockLockoutHelper getInstance(Context context, int userId) {
+        if (sInstance == null) {
+            sInstance = new ConfirmLockLockoutHelper(context, userId,
+                    new LockPatternUtils(context));
+        }
+        return sInstance;
+    }
+
+    @VisibleForTesting
+    ConfirmLockLockoutHelper(Context context, int userId,
+            LockPatternUtils lockPatternUtils) {
+        mContext = context;
+        mUserId = userId;
+        mLockPatternUtils = lockPatternUtils;
+    }
+
+    /** Sets the UI controller. */
+    public void setConfirmLockUIController(ConfirmLockUIController uiController) {
+        mUiController = uiController;
+    }
+
+    /** Gets the lock pattern utils used by this helper. */
+    public LockPatternUtils getLockPatternUtils() {
+        return mLockPatternUtils;
+    }
+
+    /** Handles when the lock check is completed but returns a timeout. */
+    public void onCheckCompletedWithTimeout(int timeoutMs) {
+        if (timeoutMs <= 0) {
+            return;
+        }
+
+        long deadline = mLockPatternUtils.setLockoutAttemptDeadline(mUserId, timeoutMs);
+        handleAttemptLockout(deadline);
+    }
+
+    /** To be called when the UI is resumed to reset the timeout countdown if necessary. */
+    public void onResumeUI() {
+        if (isLockedOut()) {
+            handleAttemptLockout(mLockPatternUtils.getLockoutAttemptDeadline(mUserId));
+        } else {
+            mUiController.refreshUI(isLockedOut());
+        }
+    }
+
+    /** To be called when the UI is paused to cancel the ongoing countdown timer. */
+    public void onPauseUI() {
+        if (mCountDownTimer != null) {
+            mCountDownTimer.cancel();
+        }
+    }
+
+    @VisibleForTesting
+    @Nullable
+    CountDownTimer getCountDownTimer() {
+        return mCountDownTimer;
+    }
+
+    private void handleAttemptLockout(long deadline) {
+        long elapsedRealtime = SystemClock.elapsedRealtime();
+        mUiController.refreshUI(isLockedOut());
+        mCountDownTimer = newCountDownTimer(deadline - elapsedRealtime).start();
+    }
+
+    private boolean isLockedOut() {
+        return mLockPatternUtils.getLockoutAttemptDeadline(mUserId) != 0;
+    }
+
+    private CountDownTimer newCountDownTimer(long countDownMillis) {
+        return new CountDownTimer(countDownMillis,
+                LockPatternUtils.FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS) {
+            @Override
+            public void onTick(long millisUntilFinished) {
+                int secondsCountdown = (int) (millisUntilFinished / 1000);
+                mUiController.setErrorText(
+                        mContext.getString(
+                                R.string.lockpattern_too_many_failed_confirmation_attempts,
+                                secondsCountdown));
+            }
+
+            @Override
+            public void onFinish() {
+                mUiController.refreshUI(/* isLockedOut= */ false);
+                mUiController.setErrorText("");
+            }
+        };
+    }
+
+    /** Interface for controlling the associated lock UI. */
+    public interface ConfirmLockUIController {
+        /** Sets the error text with the given string. */
+        void setErrorText(String text);
+        /** Refreshes the UI based on the locked out state. */
+        void refreshUI(boolean isLockedOut);
+    }
+}
diff --git a/src/com/android/car/settings/security/ConfirmLockPatternFragment.java b/src/com/android/car/settings/security/ConfirmLockPatternFragment.java
index 0ccbcc6..9fbbc7d 100644
--- a/src/com/android/car/settings/security/ConfirmLockPatternFragment.java
+++ b/src/com/android/car/settings/security/ConfirmLockPatternFragment.java
@@ -27,7 +27,6 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.BaseFragment;
-import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.LockPatternView;
 import com.android.internal.widget.LockscreenCredential;
 
@@ -45,13 +44,14 @@
     private LockPatternView mLockPatternView;
     private TextView mMsgView;
 
-    private LockPatternUtils mLockPatternUtils;
     private CheckLockWorker mCheckLockWorker;
     private CheckLockListener mCheckLockListener;
 
     private int mUserId;
     private List<LockPatternView.Cell> mPattern;
 
+    private ConfirmLockLockoutHelper mConfirmLockLockoutHelper;
+
     @Override
     @LayoutRes
     protected int getLayoutId() {
@@ -72,13 +72,9 @@
         } else {
             throw new RuntimeException("The activity must implement CheckLockListener");
         }
-    }
 
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mLockPatternUtils = new LockPatternUtils(getContext());
         mUserId = UserHandle.myUserId();
+        mConfirmLockLockoutHelper = ConfirmLockLockoutHelper.getInstance(requireContext(), mUserId);
     }
 
     @Override
@@ -88,8 +84,22 @@
         mMsgView = (TextView) view.findViewById(R.id.message);
         mLockPatternView = (LockPatternView) view.findViewById(R.id.lockPattern);
         mLockPatternView.setFadePattern(false);
-        mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled(mUserId));
+        mLockPatternView.setInStealthMode(
+                !mConfirmLockLockoutHelper.getLockPatternUtils().isVisiblePatternEnabled(mUserId));
         mLockPatternView.setOnPatternListener(mLockPatternListener);
+        mConfirmLockLockoutHelper.setConfirmLockUIController(
+                new ConfirmLockLockoutHelper.ConfirmLockUIController() {
+                    @Override
+                    public void setErrorText(String text) {
+                        mMsgView.setText(text);
+                    }
+
+                    @Override
+                    public void refreshUI(boolean isLockedOut) {
+                        mLockPatternView.setEnabled(!isLockedOut);
+                        mLockPatternView.clearPattern();
+                    }
+                });
 
         if (savedInstanceState != null) {
             mCheckLockWorker = (CheckLockWorker) getFragmentManager().findFragmentByTag(
@@ -106,6 +116,20 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+
+        mConfirmLockLockoutHelper.onResumeUI();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        mConfirmLockLockoutHelper.onPauseUI();
+    }
+
+    @Override
     public void onStop() {
         super.onStop();
         if (mCheckLockWorker != null) {
@@ -114,6 +138,7 @@
     }
 
     private Runnable mClearErrorRunnable = () -> {
+        mLockPatternView.setEnabled(true);
         mLockPatternView.clearPattern();
         mMsgView.setText("");
     };
@@ -152,16 +177,20 @@
                 }
             };
 
-    private void onCheckCompleted(boolean lockMatched) {
+    private void onCheckCompleted(boolean lockMatched, int timeoutMs) {
         if (lockMatched) {
             mCheckLockListener.onLockVerified(LockscreenCredential.createPattern(mPattern));
         } else {
-            mLockPatternView.setEnabled(true);
-            mMsgView.setText(R.string.lockpattern_pattern_wrong);
+            if (timeoutMs > 0) {
+                mConfirmLockLockoutHelper.onCheckCompletedWithTimeout(timeoutMs);
+            } else {
+                mLockPatternView.setEnabled(true);
+                mMsgView.setText(R.string.lockpattern_pattern_wrong);
 
-            // Set timer to clear wrong pattern
-            mLockPatternView.removeCallbacks(mClearErrorRunnable);
-            mLockPatternView.postDelayed(mClearErrorRunnable, CLEAR_WRONG_ATTEMPT_TIMEOUT_MS);
+                // Set timer to clear wrong pattern
+                mLockPatternView.removeCallbacks(mClearErrorRunnable);
+                mLockPatternView.postDelayed(mClearErrorRunnable, CLEAR_WRONG_ATTEMPT_TIMEOUT_MS);
+            }
         }
     }
 }
diff --git a/src/com/android/car/settings/security/ConfirmLockPinPasswordFragment.java b/src/com/android/car/settings/security/ConfirmLockPinPasswordFragment.java
index df39e12..630e72b 100644
--- a/src/com/android/car/settings/security/ConfirmLockPinPasswordFragment.java
+++ b/src/com/android/car/settings/security/ConfirmLockPinPasswordFragment.java
@@ -35,6 +35,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.common.BaseFragment;
 import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.TextViewInputDisabler;
 
 /**
  * Fragment for confirming existing lock PIN or password.  The containing activity must implement
@@ -56,6 +57,11 @@
     private boolean mIsPin;
     private LockscreenCredential mEnteredPassword;
 
+    private ConfirmLockLockoutHelper mConfirmLockLockoutHelper;
+
+    private TextViewInputDisabler mPasswordEntryInputDisabler;
+    private InputMethodManager mImm;
+
     /**
      * Factory method for creating fragment in PIN mode.
      */
@@ -98,12 +104,15 @@
         } else {
             throw new RuntimeException("The activity must implement CheckLockListener");
         }
+
+        mUserId = UserHandle.myUserId();
+        mConfirmLockLockoutHelper = ConfirmLockLockoutHelper.getInstance(requireContext(), mUserId);
+        mImm = requireContext().getSystemService(InputMethodManager.class);
     }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mUserId = UserHandle.myUserId();
         Bundle args = getArguments();
         if (args != null) {
             mIsPin = args.getBoolean(EXTRA_IS_PIN);
@@ -115,7 +124,24 @@
         super.onViewCreated(view, savedInstanceState);
 
         mPasswordField = view.findViewById(R.id.password_entry);
+        mPasswordEntryInputDisabler = new TextViewInputDisabler(mPasswordField);
         mMsgView = view.findViewById(R.id.message);
+        mConfirmLockLockoutHelper.setConfirmLockUIController(
+                new ConfirmLockLockoutHelper.ConfirmLockUIController() {
+                    @Override
+                    public void setErrorText(String text) {
+                        mMsgView.setText(text);
+                    }
+
+                    @Override
+                    public void refreshUI(boolean isLockedOut) {
+                        if (mIsPin) {
+                            updatePinEntry(isLockedOut);
+                        } else {
+                            updatePasswordEntry(isLockedOut);
+                        }
+                    }
+                });
 
         if (mIsPin) {
             initPinView(view);
@@ -138,6 +164,20 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+
+        mConfirmLockLockoutHelper.onResumeUI();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        mConfirmLockLockoutHelper.onPauseUI();
+    }
+
+    @Override
     public void onStop() {
         super.onStop();
         if (mCheckLockWorker != null) {
@@ -145,6 +185,14 @@
         }
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mPasswordField.setText(null);
+
+        PasswordHelper.zeroizeCredentials(mEnteredPassword);
+    }
+
     private void initCheckLockWorker() {
         if (mCheckLockWorker == null) {
             mCheckLockWorker = new CheckLockWorker();
@@ -253,14 +301,19 @@
     }
 
     @VisibleForTesting
-    void onCheckCompleted(boolean lockMatched) {
+    void onCheckCompleted(boolean lockMatched, int timeoutMs) {
         if (lockMatched) {
             mCheckLockListener.onLockVerified(mEnteredPassword);
         } else {
-            mMsgView.setText(
-                    mIsPin ? R.string.lockscreen_wrong_pin : R.string.lockscreen_wrong_password);
-            if (mIsPin) {
-                mPinPad.setEnabled(true);
+            if (timeoutMs > 0) {
+                mConfirmLockLockoutHelper.onCheckCompletedWithTimeout(timeoutMs);
+            } else {
+                mMsgView.setText(
+                        mIsPin ? R.string.lockscreen_wrong_pin
+                                : R.string.lockscreen_wrong_password);
+                if (mIsPin) {
+                    mPinPad.setEnabled(true);
+                }
             }
         }
 
@@ -268,4 +321,27 @@
             hideKeyboard();
         }
     }
+
+    private void updatePasswordEntry(boolean isLockedOut) {
+        mPasswordField.setEnabled(!isLockedOut);
+        mPasswordEntryInputDisabler.setInputEnabled(!isLockedOut);
+        if (isLockedOut) {
+            if (mImm != null) {
+                mImm.hideSoftInputFromWindow(mPasswordField.getWindowToken(), /* flags= */ 0);
+            }
+        } else {
+            mPasswordField.requestFocus();
+        }
+    }
+
+    private void updatePinEntry(boolean isLockedOut) {
+        mPinPad.setEnabled(!isLockedOut);
+        if (isLockedOut) {
+            if (mImm != null) {
+                mImm.hideSoftInputFromWindow(mPinPad.getWindowToken(), /* flags= */ 0);
+            }
+        } else {
+            mPinPad.requestFocus();
+        }
+    }
 }
diff --git a/src/com/android/car/settings/security/CredentialStorageActivity.java b/src/com/android/car/settings/security/CredentialStorageActivity.java
index 072e703..f40fccc 100644
--- a/src/com/android/car/settings/security/CredentialStorageActivity.java
+++ b/src/com/android/car/settings/security/CredentialStorageActivity.java
@@ -17,6 +17,7 @@
 package com.android.car.settings.security;
 
 import android.app.Activity;
+import android.app.ActivityManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -67,15 +68,6 @@
         super.onCreate(savedInstanceState);
         mUserManager = UserManager.get(getApplicationContext());
         mUtils = new LockPatternUtils(this);
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        if (isFinishing()) {
-            return;
-        }
 
         if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) {
             finish();
@@ -186,7 +178,13 @@
 
         int uid = installBundle.getInt(Credentials.EXTRA_INSTALL_AS_UID, KeyStore.UID_SELF);
 
-        if (uid != KeyStore.UID_SELF && !UserHandle.isSameUser(uid, Process.myUid())) {
+        // Checks that the provided uid is none of the following:
+        // 1. KeyStore.UID_SELF
+        // 2. Current uid process
+        // 3. uid running as the system process (if in headless system user mode)
+        if (uid != KeyStore.UID_SELF && !UserHandle.isSameUser(uid, Process.myUid())
+                && !(mUserManager.isHeadlessSystemUserMode()
+                && UserHandle.getUserId(uid) == UserHandle.USER_SYSTEM)) {
             int dstUserId = UserHandle.getUserId(uid);
 
             // Restrict install target to the wifi uid.
@@ -238,10 +236,12 @@
                 return false;
             }
 
-            credentialStorage.mUtils.resetKeyStore(UserHandle.myUserId());
+            UserHandle user = getUserHandleToUse(mCredentialStorage.get().mUserManager);
+            credentialStorage.mUtils.resetKeyStore(user.getIdentifier());
 
             try {
-                KeyChain.KeyChainConnection keyChainConnection = KeyChain.bind(credentialStorage);
+                KeyChain.KeyChainConnection keyChainConnection = KeyChain.bindAsUser(
+                        credentialStorage, user);
                 try {
                     return keyChainConnection.getService().reset();
                 } catch (RemoteException e) {
@@ -296,8 +296,9 @@
 
         @Override
         protected Boolean doInBackground(Void... unused) {
-            try (KeyChain.KeyChainConnection keyChainConnection = KeyChain.bind(
-                    CredentialStorageActivity.this)) {
+            try (KeyChain.KeyChainConnection keyChainConnection = KeyChain.bindAsUser(
+                    CredentialStorageActivity.this,
+                    getUserHandleToUse(CredentialStorageActivity.this.mUserManager))) {
                 return keyChainConnection.getService()
                         .installKeyPair(mKeyData, mCertData, mCaListData, mAlias, mUid);
             } catch (RemoteException e) {
@@ -358,8 +359,8 @@
                     || credentialStorage.isDestroyed()) {
                 return false;
             }
-            try (KeyChain.KeyChainConnection keyChainConnection = KeyChain.bind(
-                    credentialStorage)) {
+            try (KeyChain.KeyChainConnection keyChainConnection = KeyChain.bindAsUser(
+                    credentialStorage, getUserHandleToUse(credentialStorage.mUserManager))) {
                 keyChainConnection.getService().setUserSelectable(mAlias, true);
                 return true;
             } catch (RemoteException e) {
@@ -383,4 +384,9 @@
             credentialStorage.finish();
         }
     }
+
+    private static UserHandle getUserHandleToUse(UserManager userManager) {
+        return userManager.isHeadlessSystemUserMode()
+                ? UserHandle.SYSTEM : UserHandle.of(ActivityManager.getCurrentUser());
+    }
 }
diff --git a/src/com/android/car/settings/security/LockTypeBasePreferenceController.java b/src/com/android/car/settings/security/LockTypeBasePreferenceController.java
index 32e4d21..e1d5247 100644
--- a/src/com/android/car/settings/security/LockTypeBasePreferenceController.java
+++ b/src/com/android/car/settings/security/LockTypeBasePreferenceController.java
@@ -45,7 +45,6 @@
         mUserManager = UserManager.get(context);
     }
 
-
     @Override
     protected Class<Preference> getPreferenceType() {
         return Preference.class;
@@ -79,7 +78,9 @@
         return false;
     }
 
-    /** Sets the current password so it can be provided in the bundle in the fragment. */
+    /**
+     * Sets the current password so it can be provided in the bundle in the fragment. The host
+     * fragment is responsible for zeroizing the credentials in memory. */
     public void setCurrentPassword(LockscreenCredential currentPassword) {
         mCurrentPassword = currentPassword;
     }
diff --git a/src/com/android/car/settings/security/PasswordHelper.java b/src/com/android/car/settings/security/PasswordHelper.java
index 4253a76..0a6e075 100644
--- a/src/com/android/car/settings/security/PasswordHelper.java
+++ b/src/com/android/car/settings/security/PasswordHelper.java
@@ -190,4 +190,22 @@
 
         return messages;
     }
+
+    /**
+     * Zero out credentials and force garbage collection to remove any remnants of user password
+     * shards from memory. Should be used in onDestroy for any LockscreenCredential fields.
+     *
+     * @param credentials the credentials to zero out, can be null
+     **/
+    public static void zeroizeCredentials(LockscreenCredential... credentials) {
+        for (LockscreenCredential credential : credentials) {
+            if (credential != null) {
+                credential.zeroize();
+            }
+        }
+
+        System.gc();
+        System.runFinalization();
+        System.gc();
+    }
 }
diff --git a/src/com/android/car/settings/security/SaveLockWorker.java b/src/com/android/car/settings/security/SaveLockWorker.java
index 322769c..26acb64 100644
--- a/src/com/android/car/settings/security/SaveLockWorker.java
+++ b/src/com/android/car/settings/security/SaveLockWorker.java
@@ -69,6 +69,13 @@
         setRetainInstance(true);
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        PasswordHelper.zeroizeCredentials(mEnteredCredential, mCurrentCredential);
+    }
+
     final void init(int userId) {
         mUtils = new LockPatternUtils(getContext());
         mUserId = userId;
diff --git a/src/com/android/car/settings/security/SettingsScreenLockActivity.java b/src/com/android/car/settings/security/SettingsScreenLockActivity.java
index 6ebf56d..5bcac43 100644
--- a/src/com/android/car/settings/security/SettingsScreenLockActivity.java
+++ b/src/com/android/car/settings/security/SettingsScreenLockActivity.java
@@ -97,4 +97,11 @@
                 .replace(R.id.fragment_container, fragment)
                 .commit();
     }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        PasswordHelper.zeroizeCredentials();
+    }
 }
diff --git a/src/com/android/car/settings/sound/RingtonePickerFragment.java b/src/com/android/car/settings/sound/RingtonePickerFragment.java
new file mode 100644
index 0000000..e2ba2b8
--- /dev/null
+++ b/src/com/android/car/settings/sound/RingtonePickerFragment.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.sound;
+
+import android.content.Context;
+import android.media.RingtoneManager;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewTreeObserver;
+
+import androidx.annotation.XmlRes;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.SettingsFragment;
+import com.android.car.ui.toolbar.MenuItem;
+
+import java.util.Collections;
+import java.util.List;
+
+/** Ringtone picker fragment. */
+public class RingtonePickerFragment extends SettingsFragment {
+
+    private RingtonePickerPreferenceController mPreferenceController;
+    private MenuItem mSaveButton;
+
+    @Override
+    @XmlRes
+    protected int getPreferenceScreenResId() {
+        return R.xml.ringtone_picker_fragment;
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+
+        mPreferenceController = use(RingtonePickerPreferenceController.class,
+                R.string.pk_ringtone_picker);
+        mPreferenceController.setArguments(getArguments());
+        mSaveButton = new MenuItem.Builder(getContext())
+                .setTitle(R.string.ringtone_picker_save_title)
+                .setOnClickListener(item -> {
+                    mPreferenceController.saveRingtone();
+                    goBack();
+                })
+                .build();
+    }
+
+    @Override
+    protected List<MenuItem> getToolbarMenuItems() {
+        return Collections.singletonList(mSaveButton);
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        getToolbar().setTitle(getArguments().getCharSequence(RingtoneManager.EXTRA_RINGTONE_TITLE));
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        // Logic to scroll to the selected item. This needs to be done in a global layout listener
+        // so that it can be triggered after the sound items added dynamically in the
+        // PreferenceScreen.
+        getListView().getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        // This should only be triggered once per resume.
+                        getListView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
+
+                        // There are various methods on the PreferenceFragment and RecyclerView
+                        // that should be able to scroll to the desired preference. However this
+                        // approach is the most reliable with dynamically added preferences.
+                        LinearLayoutManager layoutManager =
+                                (LinearLayoutManager) getListView().getLayoutManager();
+                        layoutManager.scrollToPositionWithOffset(
+                                mPreferenceController.getCurrentlySelectedPreferencePos(),
+                                /* offset= */ 0);
+
+                        // This will only work after the scrolling has completed, since the item
+                        // may not be immediately visible. Setting this item to be selected to allow
+                        // this item to be rotary focused by default if in rotary mode.
+                        getListView().post(() -> {
+                            View itemView = getListView().findViewById(
+                                    R.id.ringtone_picker_selected_id);
+                            itemView = layoutManager.findContainingItemView(itemView);
+                            itemView.setSelected(true);
+                        });
+                    }
+                });
+    }
+}
diff --git a/src/com/android/car/settings/sound/RingtonePickerPreferenceController.java b/src/com/android/car/settings/sound/RingtonePickerPreferenceController.java
new file mode 100644
index 0000000..90d4e99
--- /dev/null
+++ b/src/com/android/car/settings/sound/RingtonePickerPreferenceController.java
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.sound;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.media.AudioAttributes;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.provider.MediaStore;
+import android.util.TypedValue;
+import android.view.View;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.TwoStatePreference;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.Logger;
+import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiRadioButtonPreference;
+
+import java.util.regex.Pattern;
+
+/** A {@link PreferenceController} to help pick a default ringtone. */
+public class RingtonePickerPreferenceController extends PreferenceController<PreferenceGroup> {
+
+    private static final Logger LOG = new Logger(RingtonePickerPreferenceController.class);
+    private static final String SOUND_NAME_RES_PREFIX = "sound_name_";
+
+    @VisibleForTesting
+    static final String COLUMN_LABEL = MediaStore.Audio.Media.TITLE;
+
+    @VisibleForTesting
+    static final int SILENT_ITEM_POS = -1;
+    private static final int UNKNOWN_POS = -2;
+
+    private final Context mUserContext;
+    private RingtoneManager mRingtoneManager;
+    private LocalizedCursor mCursor;
+    private Handler mHandler;
+
+    /** See {@link RingtoneManager} for valid values. */
+    private int mRingtoneType;
+    private boolean mHasSilentItem;
+
+    private int mCurrentlySelectedPos = UNKNOWN_POS;
+    private TwoStatePreference mCurrentlySelectedPreference;
+
+    private Ringtone mCurrentRingtone;
+    private int mAttributesFlags = 0;
+    private Bundle mArgs;
+
+    public RingtonePickerPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+
+        mUserContext = createPackageContextAsUser(getContext(), UserHandle.myUserId());
+        mRingtoneManager = new RingtoneManager(getContext(), /* includeParentRingtones= */ true);
+        mHandler = new Handler(Looper.getMainLooper());
+        mArgs = new Bundle();
+    }
+
+    /** Arguments used to configure this preference controller. */
+    public void setArguments(Bundle args) {
+        mArgs = args;
+    }
+
+    /**
+     * Returns the position of the currently checked preference. Returns 0 if no such element
+     * exists.
+     */
+    public int getCurrentlySelectedPreferencePos() {
+        int count = getPreference().getPreferenceCount();
+        for (int i = 0; i < count; i++) {
+            TwoStatePreference pref = (TwoStatePreference) getPreference().getPreference(i);
+            if (pref.isChecked()) {
+                return i;
+            }
+        }
+        return 0;
+    }
+
+    /** Saves the currently selected ringtone. */
+    public void saveRingtone() {
+        RingtoneManager.setActualDefaultRingtoneUri(mUserContext, mRingtoneType,
+                getCurrentlySelectedRingtoneUri());
+    }
+
+    @Override
+    protected Class<PreferenceGroup> getPreferenceType() {
+        return PreferenceGroup.class;
+    }
+
+    @Override
+    protected void onCreateInternal() {
+        mRingtoneType = mArgs.getInt(RingtoneManager.EXTRA_RINGTONE_TYPE, /* defaultValue= */ -1);
+        mHasSilentItem = mArgs.getBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,
+                /* defaultValue= */ true);
+        mAttributesFlags |= mArgs.getInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                /* defaultValue= */ 0);
+
+        mRingtoneManager.setType(mRingtoneType);
+        mCursor = new LocalizedCursor(mRingtoneManager.getCursor(), getContext().getResources(),
+                COLUMN_LABEL);
+    }
+
+    @Override
+    protected void onStopInternal() {
+        stopAnyPlayingRingtone();
+        clearSelection();
+    }
+
+    @Override
+    protected void updateState(PreferenceGroup preference) {
+        populateRingtones(preference);
+
+        clearSelection();
+        Uri currentRingtoneUri =
+                RingtoneManager.getActualDefaultRingtoneUri(mUserContext, mRingtoneType);
+        initSelection(currentRingtoneUri);
+    }
+
+    private void populateRingtones(PreferenceGroup preference) {
+        preference.removeAll();
+
+        // Keep at the front of the list, if requested.
+        if (mHasSilentItem) {
+            String label = getContext().getResources().getString(
+                    com.android.internal.R.string.ringtone_silent);
+            int pos = SILENT_ITEM_POS;
+            preference.addPreference(createRingtonePreference(label, pos));
+        }
+
+        int pos = 0;
+        mCursor.moveToFirst();
+        while (!mCursor.isAfterLast()) {
+            String label = mCursor.getString(mCursor.getColumnIndex(COLUMN_LABEL));
+            preference.addPreference(createRingtonePreference(label, pos));
+
+            mCursor.moveToNext();
+            pos++;
+        }
+    }
+
+    private TwoStatePreference createRingtonePreference(String title, int key) {
+        CarUiRadioButtonPreference preference = new CarUiRadioButtonPreference(getContext());
+        preference.setTitle(title);
+        preference.setKey(Integer.toString(key));
+        preference.setChecked(false);
+        preference.setViewId(View.NO_ID);
+        preference.setOnPreferenceClickListener(pref -> {
+            updateCurrentSelection((TwoStatePreference) pref);
+            playCurrentlySelectedRingtone();
+            return true;
+        });
+        return preference;
+    }
+
+    private void updateCurrentSelection(TwoStatePreference preference) {
+        int selectedPos = Integer.parseInt(preference.getKey());
+        if (mCurrentlySelectedPos != selectedPos) {
+            if (mCurrentlySelectedPreference != null) {
+                mCurrentlySelectedPreference.setChecked(false);
+                mCurrentlySelectedPreference.setViewId(View.NO_ID);
+            }
+        }
+        mCurrentlySelectedPreference = preference;
+        mCurrentlySelectedPos = selectedPos;
+        mCurrentlySelectedPreference.setChecked(true);
+        mCurrentlySelectedPreference.setViewId(R.id.ringtone_picker_selected_id);
+    }
+
+    private void initSelection(Uri uri) {
+        if (uri == null) {
+            mCurrentlySelectedPos = SILENT_ITEM_POS;
+        } else {
+            mCurrentlySelectedPos = mRingtoneManager.getRingtonePosition(uri);
+        }
+        int count = getPreference().getPreferenceCount();
+        for (int i = 0; i < count; i++) {
+            TwoStatePreference pref = (TwoStatePreference) getPreference().getPreference(i);
+            int pos = Integer.parseInt(pref.getKey());
+            if (mCurrentlySelectedPos == pos) {
+                mCurrentlySelectedPreference = pref;
+                pref.setChecked(true);
+                pref.setViewId(R.id.ringtone_picker_selected_id);
+            }
+        }
+    }
+
+    private void clearSelection() {
+        int count = getPreference().getPreferenceCount();
+        for (int i = 0; i < count; i++) {
+            TwoStatePreference pref = (TwoStatePreference) getPreference().getPreference(i);
+            pref.setChecked(false);
+            pref.setViewId(View.NO_ID);
+        }
+
+        mCurrentlySelectedPreference = null;
+        mCurrentlySelectedPos = UNKNOWN_POS;
+    }
+
+    private void playCurrentlySelectedRingtone() {
+        mHandler.removeCallbacks(this::run);
+        mHandler.post(this::run);
+    }
+
+    private void run() {
+        stopAnyPlayingRingtone();
+        if (mCurrentlySelectedPos == SILENT_ITEM_POS) {
+            return;
+        }
+
+        if (mCurrentlySelectedPos >= 0) {
+            mCurrentRingtone = mRingtoneManager.getRingtone(mCurrentlySelectedPos);
+        }
+
+        if (mCurrentRingtone != null) {
+            if (mAttributesFlags != 0) {
+                mCurrentRingtone.setAudioAttributes(
+                        new AudioAttributes.Builder(mCurrentRingtone.getAudioAttributes())
+                                .setFlags(mAttributesFlags)
+                                .build());
+            }
+            mCurrentRingtone.play();
+        }
+    }
+
+    private void stopAnyPlayingRingtone() {
+        mHandler.removeCallbacks(this::run);
+
+        if (mCurrentRingtone != null && mCurrentRingtone.isPlaying()) {
+            mCurrentRingtone.stop();
+        }
+
+        if (mRingtoneManager != null) {
+            mRingtoneManager.stopPreviousRingtone();
+        }
+    }
+
+    private Uri getCurrentlySelectedRingtoneUri() {
+        if (mCurrentlySelectedPos >= 0) {
+            return mRingtoneManager.getRingtoneUri(mCurrentlySelectedPos);
+        } else if (mCurrentlySelectedPos == SILENT_ITEM_POS) {
+            // Use a null Uri for the 'Silent' item.
+            return null;
+        } else {
+            LOG.e("Requesting ringtone URI for unknown position: " + mCurrentlySelectedPos);
+            return null;
+        }
+    }
+
+    /**
+     * Returns a context created from the given context for the given user, or null if it fails.
+     */
+    private Context createPackageContextAsUser(Context context, int userId) {
+        try {
+            return context.createPackageContextAsUser(
+                    context.getPackageName(), /* flags= */ 0, UserHandle.of(userId));
+        } catch (PackageManager.NameNotFoundException e) {
+            LOG.e("Failed to create user context", e);
+        }
+        return null;
+    }
+
+    /**
+     * A copy of the localized cursor provided in
+     * {@link com.android.soundpicker.RingtonePickerActivity}.
+     */
+    private static class LocalizedCursor extends CursorWrapper {
+
+        final int mTitleIndex;
+        final Resources mResources;
+        final Pattern mSanitizePattern;
+        String mNamePrefix;
+
+        LocalizedCursor(Cursor cursor, Resources resources, String columnLabel) {
+            super(cursor);
+            mTitleIndex = mCursor.getColumnIndex(columnLabel);
+            mResources = resources;
+            mSanitizePattern = Pattern.compile("[^a-zA-Z0-9]");
+            if (mTitleIndex == -1) {
+                LOG.e("No index for column " + columnLabel);
+                mNamePrefix = null;
+            } else {
+                try {
+                    // Build the prefix for the name of the resource to look up.
+                    // Format is: "ResourcePackageName::ResourceTypeName/"
+                    // (The type name is expected to be "string" but let's not hardcode it).
+                    // Here we use an existing resource "ringtone_title" which is
+                    // always expected to be found.
+                    mNamePrefix = String.format("%s:%s/%s",
+                            mResources.getResourcePackageName(R.string.ringtone_title),
+                            mResources.getResourceTypeName(R.string.ringtone_title),
+                            SOUND_NAME_RES_PREFIX);
+                } catch (Resources.NotFoundException e) {
+                    mNamePrefix = null;
+                }
+            }
+        }
+
+        /**
+         * Process resource name to generate a valid resource name.
+         *
+         * @return a non-null String
+         */
+        private String sanitize(String input) {
+            if (input == null) {
+                return "";
+            }
+            return mSanitizePattern.matcher(input).replaceAll("_").toLowerCase();
+        }
+
+        @Override
+        public String getString(int columnIndex) {
+            final String defaultName = mCursor.getString(columnIndex);
+            if ((columnIndex != mTitleIndex) || (mNamePrefix == null)) {
+                return defaultName;
+            }
+            TypedValue value = new TypedValue();
+            try {
+                // The name currently in the database is used to derive a name to match
+                // against resource names in this package.
+                mResources.getValue(mNamePrefix + sanitize(defaultName), value, false);
+            } catch (Resources.NotFoundException e) {
+                // No localized string, use the default string.
+                return defaultName;
+            }
+            if ((value != null) && (value.type == TypedValue.TYPE_STRING)) {
+                LOG.d(String.format("Replacing name %s with %s",
+                        defaultName, value.string.toString()));
+                return value.string.toString();
+            } else {
+                LOG.e("Invalid value when looking up localized name, using " + defaultName);
+                return defaultName;
+            }
+        }
+    }
+
+    @VisibleForTesting
+    void setRingtoneManager(RingtoneManager ringtoneManager) {
+        mRingtoneManager = ringtoneManager;
+    }
+}
diff --git a/src/com/android/car/settings/sound/RingtonePreferenceController.java b/src/com/android/car/settings/sound/RingtonePreferenceController.java
index 4bedf2e..b3529c7 100644
--- a/src/com/android/car/settings/sound/RingtonePreferenceController.java
+++ b/src/com/android/car/settings/sound/RingtonePreferenceController.java
@@ -16,41 +16,33 @@
 
 package com.android.car.settings.sound;
 
-import android.app.Activity;
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.media.AudioAttributes;
 import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
-import android.os.UserHandle;
 
-import androidx.annotation.Nullable;
-import androidx.annotation.VisibleForTesting;
-
-import com.android.car.settings.common.ActivityResultCallback;
+import com.android.car.settings.common.CarSettingActivities;
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.Logger;
 import com.android.car.settings.common.PreferenceController;
 
 /** Business logic for changing the default ringtone. */
-public class RingtonePreferenceController extends
-        PreferenceController<RingtonePreference> implements ActivityResultCallback {
+public class RingtonePreferenceController extends PreferenceController<RingtonePreference> {
 
-    private static final Logger LOG = new Logger(RingtonePreferenceController.class);
-    @VisibleForTesting
-    static final int REQUEST_CODE = 16;
-
-    // We use a user context so that default ringtones can differ per user.
-    private final Context mUserContext;
+    private RingtoneManager mRingtoneManager;
 
     public RingtonePreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController,
             CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
-        mUserContext = createPackageContextAsUser(getContext(), UserHandle.myUserId());
+        mRingtoneManager = new RingtoneManager(context);
+    }
+
+    @Override
+    protected void onCreateInternal() {
+        mRingtoneManager.setType(getPreference().getRingtoneType());
     }
 
     @Override
@@ -62,42 +54,29 @@
     protected void updateState(RingtonePreference preference) {
         Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(getContext(),
                 getPreference().getRingtoneType());
-        preference.setSummary(Ringtone.getTitle(getContext(), ringtoneUri, /* followSettingsUri= */
-                false, /* allowRemote= */ true));
+        // If this URI cannot be found by the ringtone manager, set the URI to be null.
+        if (mRingtoneManager.getRingtonePosition(ringtoneUri) < 0) {
+            ringtoneUri = null;
+        }
+        preference.setSummary(Ringtone.getTitle(getContext(), ringtoneUri,
+                /* followSettingsUri= */ false, /* allowRemote= */ true));
     }
 
     @Override
     protected boolean handlePreferenceClicked(RingtonePreference preference) {
         onPrepareRingtonePickerIntent(preference, preference.getIntent());
-        getFragmentController().startActivityForResult(preference.getIntent(), REQUEST_CODE, this);
+        getContext().startActivity(preference.getIntent());
         return true;
     }
 
-    @Override
-    public void processActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        if (requestCode == REQUEST_CODE) {
-            if (resultCode != Activity.RESULT_OK || data == null) {
-                return;
-            }
-
-            Uri ringtoneUri = data.getParcelableExtra(
-                    RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-            RingtoneManager.setActualDefaultRingtoneUri(mUserContext,
-                    getPreference().getRingtoneType(), ringtoneUri);
-            refreshUi();
-        }
-    }
-
     /**
      * Prepares the intent to launch the ringtone picker. This can be modified
      * to adjust the parameters of the ringtone picker.
      */
     private void onPrepareRingtonePickerIntent(RingtonePreference ringtonePreference,
             Intent ringtonePickerIntent) {
-        Uri currentRingtone = RingtoneManager.getActualDefaultRingtoneUri(mUserContext,
-                ringtonePreference.getRingtoneType());
-        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
-                currentRingtone);
+        ringtonePickerIntent.setClass(getContext(),
+                CarSettingActivities.RingtonePickerActivity.class);
 
         ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,
                 ringtonePreference.getTitle());
@@ -106,23 +85,8 @@
         ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,
                 ringtonePreference.getShowSilent());
 
-        // Since we are picking the default ringtone, no need to show system default.
-        ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
         // Allow playback in external activity.
         ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
                 AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
     }
-
-    /**
-     * Returns a context created from the given context for the given user, or null if it fails.
-     */
-    private Context createPackageContextAsUser(Context context, int userId) {
-        try {
-            return context.createPackageContextAsUser(
-                    context.getPackageName(), /* flags= */ 0, UserHandle.of(userId));
-        } catch (PackageManager.NameNotFoundException e) {
-            LOG.e("Failed to create user context", e);
-        }
-        return null;
-    }
 }
diff --git a/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragment.java b/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragment.java
index 3ad6a52..ecdf070 100644
--- a/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragment.java
+++ b/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragment.java
@@ -16,29 +16,20 @@
 
 package com.android.car.settings.storage;
 
-import android.app.ActivityManager;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageDataObserver;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
 import android.os.UserHandle;
-import android.os.UserManager;
+import android.view.View;
 
-import androidx.annotation.VisibleForTesting;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.XmlRes;
 import androidx.loader.app.LoaderManager;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.ConfirmationDialogFragment;
 import com.android.car.settings.common.Logger;
 import com.android.car.settings.common.SettingsFragment;
-import com.android.car.ui.toolbar.MenuItem;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.applications.StorageStatsSource;
 
@@ -46,37 +37,12 @@
 import java.util.List;
 
 /**
- * Fragment to display the applications storage information. Also provide buttons to clear the
- * applications cache data and user data.
+ * Fragment to display the applications storage information.
  */
-public class AppStorageSettingsDetailsFragment extends SettingsFragment implements
-        AppsStorageStatsManager.Callback {
+public class AppStorageSettingsDetailsFragment extends SettingsFragment {
     private static final Logger LOG = new Logger(AppStorageSettingsDetailsFragment.class);
 
-    @VisibleForTesting
-    static final String CONFIRM_CLEAR_STORAGE_DIALOG_TAG =
-            "com.android.car.settings.storage.ConfirmClearStorageDialog";
-
-    @VisibleForTesting
-    static final String CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG =
-            "com.android.car.settings.storage.ConfirmCannotClearStorageDialog";
-
     public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
-    // Result code identifiers
-    public static final int REQUEST_MANAGE_SPACE = 2;
-
-    // Internal constants used in Handler
-    private static final int OP_SUCCESSFUL = 1;
-    private static final int OP_FAILED = 2;
-
-    // Constant used in handler to determine when the user data is cleared.
-    private static final int MSG_CLEAR_USER_DATA = 1;
-    // Constant used in handler to determine when the cache is cleared.
-    private static final int MSG_CLEAR_CACHE = 2;
-
-    // Keys to save the instance values.
-    private static final String KEY_CACHE_CLEARED = "cache_cleared";
-    private static final String KEY_DATA_CLEARED = "data_cleared";
 
     // Package information
     protected PackageManager mPackageManager;
@@ -85,35 +51,11 @@
     // Application state info
     private ApplicationsState.AppEntry mAppEntry;
     private ApplicationsState mAppState;
-    private ApplicationInfo mInfo;
     private AppsStorageStatsManager mAppsStorageStatsManager;
 
     // User info
     private int mUserId;
 
-    //  An observer callback to get notified when the cache file deletion is complete.
-    private ClearCacheObserver mClearCacheObserver;
-    //  An observer callback to get notified when the user data deletion is complete.
-    private ClearUserDataObserver mClearDataObserver;
-
-    // The restriction enforced by admin.
-    private RestrictedLockUtils.EnforcedAdmin mAppsControlDisallowedAdmin;
-    private boolean mAppsControlDisallowedBySystem;
-
-    // Clear user data and cache buttons and state.
-    private MenuItem mClearStorageButton;
-    private MenuItem mClearCacheButton;
-    private boolean mCanClearData = true;
-    private boolean mCacheCleared;
-    private boolean mDataCleared;
-
-    private final ConfirmationDialogFragment.ConfirmListener mConfirmClearStorageDialog =
-            arguments -> initiateClearUserData();
-
-
-    private final ConfirmationDialogFragment.ConfirmListener mConfirmCannotClearStorageDialog =
-            arguments -> mClearStorageButton.setEnabled(false);
-
     /** Creates an instance of this fragment, passing packageName as an argument. */
     public static AppStorageSettingsDetailsFragment getInstance(String packageName) {
         AppStorageSettingsDetailsFragment applicationDetailFragment =
@@ -148,11 +90,16 @@
             LOG.w("App unexpectedly not found", e);
         }
         mAppsStorageStatsManager = new AppsStorageStatsManager(context);
-        mAppsStorageStatsManager.registerListener(this);
         use(StorageApplicationPreferenceController.class,
                 R.string.pk_storage_application_details)
                 .setAppEntry(mAppEntry)
                 .setAppState(mAppState);
+        use(StorageApplicationActionButtonsPreferenceController.class,
+                R.string.pk_storage_application_action_buttons)
+                .setAppEntry(mAppEntry)
+                .setPackageName(mPackageName)
+                .setAppsStorageStatsManager(mAppsStorageStatsManager)
+                .setLoaderManager(LoaderManager.getInstance(this));
 
         List<? extends StorageSizeBasePreferenceController> preferenceControllers = Arrays.asList(
                 use(StorageApplicationSizePreferenceController.class,
@@ -172,207 +119,8 @@
     }
 
     @Override
-    public List<MenuItem> getToolbarMenuItems() {
-        return Arrays.asList(mClearStorageButton, mClearCacheButton);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putBoolean(KEY_CACHE_CLEARED, mCacheCleared);
-        outState.putBoolean(KEY_DATA_CLEARED, mDataCleared);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (savedInstanceState != null) {
-            mCacheCleared = savedInstanceState.getBoolean(KEY_CACHE_CLEARED, false);
-            mDataCleared = savedInstanceState.getBoolean(KEY_DATA_CLEARED, false);
-            mCacheCleared = mCacheCleared || mDataCleared;
-        }
-        ConfirmationDialogFragment.resetListeners(
-                (ConfirmationDialogFragment) findDialogByTag(CONFIRM_CLEAR_STORAGE_DIALOG_TAG),
-                mConfirmClearStorageDialog,
-                /* rejectListener= */ null,
-                /* neutralListener= */ null);
-        ConfirmationDialogFragment.resetListeners(
-                (ConfirmationDialogFragment) findDialogByTag(
-                        CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG),
-                mConfirmCannotClearStorageDialog,
-                /* rejectListener= */ null,
-                /* neutralListener= */ null);
-
-        mClearStorageButton = new MenuItem.Builder(getContext())
-                .setTitle(R.string.storage_clear_user_data_text)
-                .setOnClickListener(i -> handleClearDataClick())
-                .setEnabled(false)
-                .build();
-        mClearCacheButton = new MenuItem.Builder(getContext())
-                .setTitle(R.string.storage_clear_cache_btn_text)
-                .setOnClickListener(i -> handleClearCacheClick())
-                .setEnabled(false)
-                .build();
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        mAppsControlDisallowedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
-                getActivity(), UserManager.DISALLOW_APPS_CONTROL, mUserId);
-        mAppsControlDisallowedBySystem = RestrictedLockUtilsInternal.hasBaseUserRestriction(
-                getActivity(), UserManager.DISALLOW_APPS_CONTROL, mUserId);
-        updateSize();
-    }
-
-    @Override
-    public void onDataLoaded(StorageStatsSource.AppStorageStats data, boolean cacheCleared,
-            boolean dataCleared) {
-        if (data == null || mAppsControlDisallowedBySystem) {
-            mClearStorageButton.setEnabled(false);
-            mClearCacheButton.setEnabled(false);
-        } else {
-            long cacheSize = data.getCacheBytes();
-            long dataSize = data.getDataBytes() - cacheSize;
-
-            mClearStorageButton.setEnabled(dataSize > 0 && mCanClearData && !mDataCleared);
-            mClearCacheButton.setEnabled(cacheSize > 0 && !mCacheCleared);
-        }
-    }
-
-    private void handleClearCacheClick() {
-        if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
-            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
-                    getActivity(), mAppsControlDisallowedAdmin);
-            return;
-        }
-        // Lazy initialization of observer.
-        if (mClearCacheObserver == null) {
-            mClearCacheObserver = new ClearCacheObserver();
-        }
-        mPackageManager.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver);
-    }
-
-    private void handleClearDataClick() {
-        if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
-            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
-                    getActivity(), mAppsControlDisallowedAdmin);
-        } else if (mAppEntry.info.manageSpaceActivityName != null) {
-            Intent intent = new Intent(Intent.ACTION_DEFAULT);
-            intent.setClassName(mAppEntry.info.packageName,
-                    mAppEntry.info.manageSpaceActivityName);
-            startActivityForResult(intent, REQUEST_MANAGE_SPACE);
-        } else {
-            showClearDataDialog();
-        }
-    }
-
-    /*
-     * Private method to initiate clearing user data when the user clicks the clear data
-     * button for a system package
-     */
-    private void initiateClearUserData() {
-        mClearStorageButton.setEnabled(false);
-        // Invoke uninstall or clear user data based on sysPackage
-        String packageName = mAppEntry.info.packageName;
-        LOG.i("Clearing user data for package : " + packageName);
-        if (mClearDataObserver == null) {
-            mClearDataObserver = new ClearUserDataObserver();
-        }
-        ActivityManager am = (ActivityManager)
-                getActivity().getSystemService(Context.ACTIVITY_SERVICE);
-        boolean res = am.clearApplicationUserData(packageName, mClearDataObserver);
-        if (!res) {
-            // Clearing data failed for some obscure reason. Just log error for now
-            LOG.i("Couldn't clear application user data for package:" + packageName);
-            showCannotClearDataDialog();
-        }
-    }
-
-    /*
-     * Private method to handle clear message notification from observer when
-     * the async operation from PackageManager is complete
-     */
-    private void processClearMsg(Message msg) {
-        int result = msg.arg1;
-        String packageName = mAppEntry.info.packageName;
-        if (result == OP_SUCCESSFUL) {
-            LOG.i("Cleared user data for package : " + packageName);
-            updateSize();
-        } else {
-            mClearStorageButton.setEnabled(true);
-        }
-    }
-
-    private void updateSize() {
-        PackageManager packageManager = getActivity().getPackageManager();
-        try {
-            mInfo = packageManager.getApplicationInfo(mPackageName, 0);
-        } catch (PackageManager.NameNotFoundException e) {
-            LOG.e("Could not find package", e);
-        }
-        if (mInfo == null) {
-            return;
-        }
-        LoaderManager loaderManager = LoaderManager.getInstance(this);
-        mAppsStorageStatsManager.startLoading(loaderManager, mInfo, mUserId, mCacheCleared,
-                mDataCleared);
-    }
-
-    private void showClearDataDialog() {
-        ConfirmationDialogFragment confirmClearStorageDialog =
-                new ConfirmationDialogFragment.Builder(getContext())
-                        .setTitle(R.string.storage_clear_user_data_text)
-                        .setMessage(getString(R.string.storage_clear_data_dlg_text))
-                        .setPositiveButton(R.string.okay, mConfirmClearStorageDialog)
-                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
-                        .build();
-        showDialog(confirmClearStorageDialog, CONFIRM_CLEAR_STORAGE_DIALOG_TAG);
-    }
-
-    private void showCannotClearDataDialog() {
-        ConfirmationDialogFragment dialogFragment =
-                new ConfirmationDialogFragment.Builder(getContext())
-                        .setTitle(R.string.storage_clear_data_dlg_title)
-                        .setMessage(getString(R.string.storage_clear_failed_dlg_text))
-                        .setPositiveButton(R.string.okay, mConfirmCannotClearStorageDialog)
-                        .build();
-        showDialog(dialogFragment, CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG);
-    }
-
-    private final Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            if (getView() == null) {
-                return;
-            }
-            switch (msg.what) {
-                case MSG_CLEAR_USER_DATA:
-                    mDataCleared = true;
-                    mCacheCleared = true;
-                    processClearMsg(msg);
-                    break;
-                case MSG_CLEAR_CACHE:
-                    mCacheCleared = true;
-                    // Refresh size info
-                    updateSize();
-                    break;
-            }
-        }
-    };
-
-    class ClearCacheObserver extends IPackageDataObserver.Stub {
-        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
-            Message msg = mHandler.obtainMessage(MSG_CLEAR_CACHE);
-            msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED;
-            mHandler.sendMessage(msg);
-        }
-    }
-
-    class ClearUserDataObserver extends IPackageDataObserver.Stub {
-        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
-            Message msg = mHandler.obtainMessage(MSG_CLEAR_USER_DATA);
-            msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED;
-            mHandler.sendMessage(msg);
-        }
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        enableRotaryScroll();
     }
 }
diff --git a/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceController.java b/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceController.java
new file mode 100644
index 0000000..8a03758
--- /dev/null
+++ b/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceController.java
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.storage;
+
+import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
+
+import android.app.ActivityManager;
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageDataObserver;
+import android.content.pm.PackageManager;
+import android.os.Handler;
+import android.os.Message;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.loader.app.LoaderManager;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.ActionButtonInfo;
+import com.android.car.settings.common.ActionButtonsPreference;
+import com.android.car.settings.common.ConfirmationDialogFragment;
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.Logger;
+import com.android.car.settings.common.PreferenceController;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.StorageStatsSource;
+
+/**
+ * Displays the action buttons to clear an applications cache and user data.
+ */
+public class StorageApplicationActionButtonsPreferenceController extends
+        PreferenceController<ActionButtonsPreference> implements
+        AppsStorageStatsManager.Callback {
+    private static final Logger LOG = new Logger(
+            StorageApplicationActionButtonsPreferenceController.class);
+
+    @VisibleForTesting
+    static final String CONFIRM_CLEAR_STORAGE_DIALOG_TAG =
+            "com.android.car.settings.storage.ConfirmClearStorageDialog";
+
+    @VisibleForTesting
+    static final String CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG =
+            "com.android.car.settings.storage.ConfirmCannotClearStorageDialog";
+
+    public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
+    // Result code identifiers
+    public static final int REQUEST_MANAGE_SPACE = 2;
+
+    // Internal constants used in Handler
+    private static final int OP_SUCCESSFUL = 1;
+    private static final int OP_FAILED = 2;
+
+    // Constant used in handler to determine when the user data is cleared.
+    private static final int MSG_CLEAR_USER_DATA = 1;
+    // Constant used in handler to determine when the cache is cleared.
+    private static final int MSG_CLEAR_CACHE = 2;
+
+    private ActionButtonInfo mClearStorageButton;
+    private ActionButtonInfo mClearCacheButton;
+
+    private ApplicationsState.AppEntry mAppEntry;
+    private String mPackageName;
+    private ApplicationInfo mInfo;
+    private AppsStorageStatsManager mAppsStorageStatsManager;
+    private LoaderManager mLoaderManager;
+
+    //  An observer callback to get notified when the cache file deletion is complete.
+    private ClearCacheObserver mClearCacheObserver;
+    //  An observer callback to get notified when the user data deletion is complete.
+    private ClearUserDataObserver mClearDataObserver;
+
+    private PackageManager mPackageManager;
+    private RestrictedLockUtils.EnforcedAdmin mAppsControlDisallowedAdmin;
+    private boolean mAppsControlDisallowedBySystem;
+    private int mUserId;
+
+    private boolean mCacheCleared;
+    private boolean mDataCleared;
+
+    private final ConfirmationDialogFragment.ConfirmListener mConfirmClearStorageDialog =
+            arguments -> initiateClearUserData();
+
+    private final ConfirmationDialogFragment.ConfirmListener mConfirmCannotClearStorageDialog =
+            arguments -> mClearStorageButton.setEnabled(false);
+
+    public StorageApplicationActionButtonsPreferenceController(Context context,
+            String preferenceKey, FragmentController fragmentController,
+            CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+        mUserId = UserHandle.myUserId();
+        mPackageManager = context.getPackageManager();
+    }
+
+    @Override
+    protected Class<ActionButtonsPreference> getPreferenceType() {
+        return ActionButtonsPreference.class;
+    }
+
+    /** Sets the {@link ApplicationsState.AppEntry} which is used to load the app name and icon. */
+    public StorageApplicationActionButtonsPreferenceController setAppEntry(
+            ApplicationsState.AppEntry appEntry) {
+        mAppEntry = appEntry;
+        return this;
+    }
+
+    /**
+     * Set the packageName, which is used to perform actions on a particular package.
+     */
+    public StorageApplicationActionButtonsPreferenceController setPackageName(String packageName) {
+        mPackageName = packageName;
+        return this;
+    }
+
+    /**
+     * Sets the {@link AppsStorageStatsManager} which will be used to register the controller to the
+     * Listener {@link AppsStorageStatsManager.Callback}.
+     */
+    public StorageApplicationActionButtonsPreferenceController setAppsStorageStatsManager(
+            AppsStorageStatsManager appsStorageStatsManager) {
+        mAppsStorageStatsManager = appsStorageStatsManager;
+        return this;
+    }
+
+    /**
+     * Sets the {@link LoaderManager} used to load app storage stats.
+     */
+    public StorageApplicationActionButtonsPreferenceController setLoaderManager(
+            LoaderManager loaderManager) {
+        mLoaderManager = loaderManager;
+        return this;
+    }
+
+    @Override
+    protected void checkInitialized() {
+        if (mAppEntry == null || mPackageName == null || mAppsStorageStatsManager == null
+                || mLoaderManager == null) {
+            throw new IllegalStateException(
+                    "AppEntry, PackageName, AppStorageStatsManager, and LoaderManager should be "
+                            + "set before calling this function");
+        }
+    }
+
+    @Override
+    protected void onCreateInternal() {
+        mAppsStorageStatsManager.registerListener(this);
+
+        mClearStorageButton = getPreference().getButton(ActionButtons.BUTTON1);
+        mClearCacheButton = getPreference().getButton(ActionButtons.BUTTON2);
+
+        ConfirmationDialogFragment.resetListeners(
+                (ConfirmationDialogFragment) getFragmentController().findDialogByTag(
+                        CONFIRM_CLEAR_STORAGE_DIALOG_TAG),
+                mConfirmClearStorageDialog,
+                /* rejectListener= */ null,
+                /* neutralListener= */ null);
+        ConfirmationDialogFragment.resetListeners(
+                (ConfirmationDialogFragment) getFragmentController().findDialogByTag(
+                        CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG),
+                mConfirmCannotClearStorageDialog,
+                /* rejectListener= */ null,
+                /* neutralListener= */ null);
+
+        mClearStorageButton
+                .setText(R.string.storage_clear_user_data_text)
+                .setIcon(R.drawable.ic_delete)
+                .setOnClickListener(i -> handleClearDataClick())
+                .setEnabled(false);
+        mClearCacheButton
+                .setText(R.string.storage_clear_cache_btn_text)
+                .setIcon(R.drawable.ic_delete)
+                .setOnClickListener(i -> handleClearCacheClick())
+                .setEnabled(false);
+    }
+
+    @Override
+    protected void onStartInternal() {
+        mAppsControlDisallowedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
+                getContext(), UserManager.DISALLOW_APPS_CONTROL, mUserId);
+        mAppsControlDisallowedBySystem = RestrictedLockUtilsInternal.hasBaseUserRestriction(
+                getContext(), UserManager.DISALLOW_APPS_CONTROL, mUserId);
+    }
+
+    @Override
+    protected void updateState(ActionButtonsPreference preference) {
+        try {
+            mInfo = mPackageManager.getApplicationInfo(mPackageName, 0);
+        } catch (PackageManager.NameNotFoundException e) {
+            LOG.e("Could not find package", e);
+        }
+        if (mInfo == null) {
+            return;
+        }
+        mAppsStorageStatsManager.startLoading(mLoaderManager, mInfo, mUserId, mCacheCleared,
+                mDataCleared);
+    }
+
+    @Override
+    public void onDataLoaded(StorageStatsSource.AppStorageStats data, boolean cacheCleared,
+            boolean dataCleared) {
+        if (data == null || mAppsControlDisallowedBySystem) {
+            mClearStorageButton.setEnabled(false);
+            mClearCacheButton.setEnabled(false);
+        } else {
+            long cacheSize = data.getCacheBytes();
+            long dataSize = data.getDataBytes() - cacheSize;
+
+            mClearStorageButton.setEnabled(dataSize > 0 && !mDataCleared);
+            mClearCacheButton.setEnabled(cacheSize > 0 && !mCacheCleared);
+        }
+    }
+
+    @VisibleForTesting
+    void setPackageManager(PackageManager packageManager) {
+        mPackageManager = packageManager;
+    }
+
+    @VisibleForTesting
+    void setAppsControlDisallowedAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
+        mAppsControlDisallowedAdmin = admin;
+    }
+
+    @VisibleForTesting
+    void setAppsControlDisallowedBySystem(boolean disallowed) {
+        mAppsControlDisallowedBySystem = disallowed;
+    }
+
+    private void handleClearCacheClick() {
+        if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
+            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
+                    getContext(), mAppsControlDisallowedAdmin);
+            return;
+        }
+        // Lazy initialization of observer.
+        if (mClearCacheObserver == null) {
+            mClearCacheObserver = new ClearCacheObserver();
+        }
+        mPackageManager.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver);
+    }
+
+    private void handleClearDataClick() {
+        if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
+            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
+                    getContext(), mAppsControlDisallowedAdmin);
+        } else {
+            Intent intent = new Intent(Intent.ACTION_DEFAULT);
+            boolean isManageSpaceActivityAvailable = false;
+            if (mAppEntry.info.manageSpaceActivityName != null) {
+                intent.setClassName(mAppEntry.info.packageName,
+                        mAppEntry.info.manageSpaceActivityName);
+                isManageSpaceActivityAvailable = mPackageManager.resolveActivity(
+                        intent, /* flags= */ 0) != null;
+            }
+
+            if (isManageSpaceActivityAvailable) {
+                getFragmentController().startActivityForResult(intent,
+                        REQUEST_MANAGE_SPACE, /* callback= */ null);
+            } else {
+                showClearDataDialog();
+            }
+        }
+    }
+
+    /*
+     * Private method to initiate clearing user data when the user clicks the clear data
+     * button for a system package
+     */
+    private void initiateClearUserData() {
+        mClearStorageButton.setEnabled(false);
+        // Invoke uninstall or clear user data based on sysPackage
+        String packageName = mAppEntry.info.packageName;
+        LOG.i("Clearing user data for package : " + packageName);
+        if (mClearDataObserver == null) {
+            mClearDataObserver = new ClearUserDataObserver();
+        }
+        ActivityManager am = (ActivityManager)
+                getContext().getSystemService(Context.ACTIVITY_SERVICE);
+        boolean res = am.clearApplicationUserData(packageName, mClearDataObserver);
+        if (!res) {
+            // Clearing data failed for some obscure reason. Just log error for now
+            LOG.i("Couldn't clear application user data for package:" + packageName);
+            showCannotClearDataDialog();
+        }
+    }
+
+    /*
+     * Private method to handle clear message notification from observer when
+     * the async operation from PackageManager is complete
+     */
+    private void processClearMsg(Message msg) {
+        int result = msg.arg1;
+        String packageName = mAppEntry.info.packageName;
+        if (result == OP_SUCCESSFUL) {
+            LOG.i("Cleared user data for package : " + packageName);
+            refreshUi();
+        } else {
+            mClearStorageButton.setEnabled(true);
+        }
+    }
+
+    private void showClearDataDialog() {
+        ConfirmationDialogFragment confirmClearStorageDialog =
+                new ConfirmationDialogFragment.Builder(getContext())
+                        .setTitle(R.string.storage_clear_user_data_text)
+                        .setMessage(getContext().getString(R.string.storage_clear_data_dlg_text))
+                        .setPositiveButton(R.string.okay, mConfirmClearStorageDialog)
+                        .setNegativeButton(android.R.string.cancel, /* rejectListener= */ null)
+                        .build();
+        getFragmentController().showDialog(confirmClearStorageDialog,
+                CONFIRM_CLEAR_STORAGE_DIALOG_TAG);
+    }
+
+    private void showCannotClearDataDialog() {
+        ConfirmationDialogFragment dialogFragment =
+                new ConfirmationDialogFragment.Builder(getContext())
+                        .setTitle(R.string.storage_clear_data_dlg_title)
+                        .setMessage(getContext().getString(R.string.storage_clear_failed_dlg_text))
+                        .setPositiveButton(R.string.okay, mConfirmCannotClearStorageDialog)
+                        .build();
+        getFragmentController().showDialog(dialogFragment, CONFIRM_CANNOT_CLEAR_STORAGE_DIALOG_TAG);
+    }
+
+    private final Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_CLEAR_USER_DATA:
+                    mDataCleared = true;
+                    mCacheCleared = true;
+                    processClearMsg(msg);
+                    break;
+                case MSG_CLEAR_CACHE:
+                    mCacheCleared = true;
+                    // Refresh info
+                    refreshUi();
+                    break;
+            }
+        }
+    };
+
+    class ClearCacheObserver extends IPackageDataObserver.Stub {
+        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
+            Message msg = mHandler.obtainMessage(MSG_CLEAR_CACHE);
+            msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED;
+            mHandler.sendMessage(msg);
+        }
+    }
+
+    class ClearUserDataObserver extends IPackageDataObserver.Stub {
+        public void onRemoveCompleted(final String packageName, final boolean succeeded) {
+            Message msg = mHandler.obtainMessage(MSG_CLEAR_USER_DATA);
+            msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED;
+            mHandler.sendMessage(msg);
+        }
+    }
+}
diff --git a/src/com/android/car/settings/system/MasterClearAccountsPreferenceController.java b/src/com/android/car/settings/system/MasterClearAccountsPreferenceController.java
index e15baaf..5297a21 100644
--- a/src/com/android/car/settings/system/MasterClearAccountsPreferenceController.java
+++ b/src/com/android/car/settings/system/MasterClearAccountsPreferenceController.java
@@ -138,6 +138,7 @@
         preference.setTitle(title);
         preference.setIcon(icon);
         preference.setSelectable(false);
+        preference.setSingleLineTitle(false);
         return preference;
     }
 }
diff --git a/src/com/android/car/settings/system/RegulatoryInfoPreferenceController.java b/src/com/android/car/settings/system/RegulatoryInfoPreferenceController.java
new file mode 100644
index 0000000..6d3cd75
--- /dev/null
+++ b/src/com/android/car/settings/system/RegulatoryInfoPreferenceController.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.system;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.provider.Settings;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.PreferenceController;
+
+/** Controls the visibility of the regulatory info preference. */
+public class RegulatoryInfoPreferenceController extends PreferenceController<Preference> {
+
+    private static final Intent INTENT_PROBE = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO);
+
+    private PackageManager mPm;
+
+    public RegulatoryInfoPreferenceController(Context context, String preferenceKey,
+            FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+        super(context, preferenceKey, fragmentController, uxRestrictions);
+        mPm = context.getPackageManager();
+    }
+
+    @Override
+    protected Class<Preference> getPreferenceType() {
+        return Preference.class;
+    }
+
+    @Override
+    protected int getAvailabilityStatus() {
+        return mPm.queryIntentActivities(INTENT_PROBE, /* flags= */ 0).isEmpty()
+                ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
+    }
+
+    @VisibleForTesting
+    void setPackageManager(PackageManager pm) {
+        mPm = pm;
+    }
+}
diff --git a/src/com/android/car/settings/system/SystemSettingsFragment.java b/src/com/android/car/settings/system/SystemSettingsFragment.java
index fff637a..4efd9d9 100644
--- a/src/com/android/car/settings/system/SystemSettingsFragment.java
+++ b/src/com/android/car/settings/system/SystemSettingsFragment.java
@@ -26,7 +26,6 @@
 import com.android.car.settings.search.CarBaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -48,12 +47,13 @@
                     SystemSettingsActivity.class) {
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
+                    List<String> nonIndexableKeys = super.getNonIndexableKeys(context);
                     if (!DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(context,
                             UserManager.get(context))) {
-                        return Collections.singletonList(
+                        nonIndexableKeys.add(
                                 context.getString(R.string.pk_developer_options_entry));
                     }
-                    return null;
+                    return nonIndexableKeys;
                 }
             };
 }
diff --git a/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceController.java b/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceController.java
index 2e1919a..83358bf 100644
--- a/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceController.java
+++ b/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceController.java
@@ -22,14 +22,14 @@
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.TtsEngines;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.Logger;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 
 /** Business logic to set the summary for the preferred engine entry setting. */
 public class PreferredEngineEntryPreferenceController extends
-        PreferenceController<ButtonPreference> {
+        PreferenceController<CarUiTwoActionIconPreference> {
 
     private static final Logger LOG = new Logger(PreferredEngineEntryPreferenceController.class);
     private TtsEngines mEnginesHelper;
@@ -41,13 +41,13 @@
     }
 
     @Override
-    protected Class<ButtonPreference> getPreferenceType() {
-        return ButtonPreference.class;
+    protected Class<CarUiTwoActionIconPreference> getPreferenceType() {
+        return CarUiTwoActionIconPreference.class;
     }
 
     @Override
     protected void onCreateInternal() {
-        getPreference().setOnButtonClickListener(preference -> {
+        getPreference().setOnSecondaryActionClickListener(() -> {
             TextToSpeech.EngineInfo info = mEnginesHelper.getEngineInfo(
                     mEnginesHelper.getDefaultEngine());
             Intent subSettingsIntent = mEnginesHelper.getSettingsIntent(info.name);
@@ -60,7 +60,7 @@
     }
 
     @Override
-    protected void updateState(ButtonPreference preference) {
+    protected void updateState(CarUiTwoActionIconPreference preference) {
         TextToSpeech.EngineInfo info = mEnginesHelper.getEngineInfo(
                 mEnginesHelper.getDefaultEngine());
         preference.setSummary(info.label);
diff --git a/src/com/android/car/settings/users/AddNewUserTask.java b/src/com/android/car/settings/users/AddNewUserTask.java
index a109a2d..82ded0c 100644
--- a/src/com/android/car/settings/users/AddNewUserTask.java
+++ b/src/com/android/car/settings/users/AddNewUserTask.java
@@ -17,30 +17,58 @@
 package com.android.car.settings.users;
 
 import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
+import android.car.user.UserCreationResult;
+import android.car.userlib.UserHelper;
+import android.content.Context;
 import android.content.pm.UserInfo;
 import android.os.AsyncTask;
 
+import com.android.car.settings.common.Logger;
+import com.android.internal.infra.AndroidFuture;
+
+import java.util.concurrent.ExecutionException;
+
 /**
  * Task to add a new user to the device
  */
 public class AddNewUserTask extends AsyncTask<String, Void, UserInfo> {
+    private static final Logger LOG = new Logger(AddNewUserTask.class);
+
+    private final Context mContext;
     private final CarUserManager mCarUserManager;
-    private final CarUserManagerHelper mCarUserManagerHelper;
     private final AddNewUserListener mAddNewUserListener;
 
-    // TODO: Completely deprecate the usage of CarUserManagerHelper once all of its functionalities
-    // can be handled by CarUserManager's interfaces.
-    public AddNewUserTask(CarUserManagerHelper carUserManagerHelper, CarUserManager carUserManager,
+    public AddNewUserTask(Context context, CarUserManager carUserManager,
             AddNewUserListener addNewUserListener) {
+        mContext = context;
         mCarUserManager = carUserManager;
-        mCarUserManagerHelper = carUserManagerHelper;
         mAddNewUserListener = addNewUserListener;
     }
 
     @Override
     protected UserInfo doInBackground(String... userNames) {
-        return mCarUserManagerHelper.createNewNonAdminUser(userNames[0]);
+        AndroidFuture<UserCreationResult> future = mCarUserManager.createUser(userNames[0],
+                /* flags= */ 0);
+        try {
+            UserCreationResult result = future.get();
+            if (result.isSuccess()) {
+                UserInfo user = result.getUser();
+                if (user != null) {
+                    UserHelper.setDefaultNonAdminRestrictions(mContext, user, /* enable= */ true);
+                    UserHelper.assignDefaultIcon(mContext, user);
+                } else {
+                    LOG.wtf("Inconsistent state: successful future with null user - "
+                            + result.toString());
+                }
+                return user;
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            if (e instanceof InterruptedException) {
+                Thread.currentThread().interrupt();
+            }
+            LOG.e("Error creating new user: ", e);
+        }
+        return null;
     }
 
     @Override
diff --git a/src/com/android/car/settings/users/EditUserNameEntryPreferenceController.java b/src/com/android/car/settings/users/EditUserNameEntryPreferenceController.java
index d202226..4d00fd9 100644
--- a/src/com/android/car/settings/users/EditUserNameEntryPreferenceController.java
+++ b/src/com/android/car/settings/users/EditUserNameEntryPreferenceController.java
@@ -21,12 +21,12 @@
 import android.graphics.drawable.Drawable;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 
 /** Business logic for the preference which opens the EditUserNameFragment. */
 public class EditUserNameEntryPreferenceController extends
-        UserDetailsBasePreferenceController<ButtonPreference> {
+        UserDetailsBasePreferenceController<CarUiTwoActionIconPreference> {
 
     private final UserHelper mUserHelper;
 
@@ -37,13 +37,13 @@
     }
 
     @Override
-    protected Class<ButtonPreference> getPreferenceType() {
-        return ButtonPreference.class;
+    protected Class<CarUiTwoActionIconPreference> getPreferenceType() {
+        return CarUiTwoActionIconPreference.class;
     }
 
     @Override
-    protected void updateState(ButtonPreference preference) {
-        preference.setOnButtonClickListener(pref -> {
+    protected void updateState(CarUiTwoActionIconPreference preference) {
+        preference.setOnSecondaryActionClickListener(() -> {
             getFragmentController().launchFragment(EditUsernameFragment.newInstance(getUserInfo()));
         });
 
@@ -52,7 +52,7 @@
         preference.setTitle(UserUtils.getUserDisplayName(getContext(), getUserInfo()));
 
         if (!mUserHelper.isCurrentProcessUser(getUserInfo())) {
-            preference.showAction(false);
+            preference.setSecondaryActionVisible(false);
         }
         preference.setSummary(getSummary());
     }
diff --git a/src/com/android/car/settings/users/MakeAdminPreferenceController.java b/src/com/android/car/settings/users/MakeAdminPreferenceController.java
index b80513a..c8027cb 100644
--- a/src/com/android/car/settings/users/MakeAdminPreferenceController.java
+++ b/src/com/android/car/settings/users/MakeAdminPreferenceController.java
@@ -23,13 +23,13 @@
 
 import androidx.annotation.VisibleForTesting;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.ConfirmationDialogFragment;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiTwoActionTextPreference;
 
 /** Business Logic for preference which promotes a regular user to an admin user. */
 public class MakeAdminPreferenceController extends
-        UserDetailsBasePreferenceController<ButtonPreference> {
+        UserDetailsBasePreferenceController<CarUiTwoActionTextPreference> {
 
     @VisibleForTesting
     final ConfirmationDialogFragment.ConfirmListener mConfirmListener =
@@ -46,8 +46,8 @@
     }
 
     @Override
-    protected Class<ButtonPreference> getPreferenceType() {
-        return ButtonPreference.class;
+    protected Class<CarUiTwoActionTextPreference> getPreferenceType() {
+        return CarUiTwoActionTextPreference.class;
     }
 
 
@@ -67,8 +67,8 @@
     }
 
     @Override
-    protected void updateState(ButtonPreference preference) {
-        preference.setOnButtonClickListener(pref -> {
+    protected void updateState(CarUiTwoActionTextPreference preference) {
+        preference.setOnSecondaryActionClickListener(() -> {
 
             ConfirmationDialogFragment dialogFragment =
                     UsersDialogProvider.getConfirmGrantAdminDialogFragment(getContext(),
diff --git a/src/com/android/car/settings/users/PermissionsPreferenceController.java b/src/com/android/car/settings/users/PermissionsPreferenceController.java
index e8800a4..422530c 100644
--- a/src/com/android/car/settings/users/PermissionsPreferenceController.java
+++ b/src/com/android/car/settings/users/PermissionsPreferenceController.java
@@ -28,6 +28,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -86,7 +87,7 @@
         super(context, preferenceKey, fragmentController, uxRestrictions);
 
         for (UserPermission permission : PERMISSIONS_LIST) {
-            SwitchPreference preference = new SwitchPreference(context);
+            SwitchPreference preference = new CarUiSwitchPreference(context);
             preference.setTitle(permission.getPermissionTitle());
             preference.getExtras().putString(PERMISSION_TYPE_KEY, permission.getPermissionKey());
             preference.setOnPreferenceChangeListener((pref, newValue) -> {
diff --git a/src/com/android/car/settings/users/UserDetailsFragment.java b/src/com/android/car/settings/users/UserDetailsFragment.java
index d48288d..3306f22 100644
--- a/src/com/android/car/settings/users/UserDetailsFragment.java
+++ b/src/com/android/car/settings/users/UserDetailsFragment.java
@@ -32,6 +32,8 @@
  */
 public class UserDetailsFragment extends UserDetailsBaseFragment {
 
+    private boolean mIsStarted;
+
     /** Creates instance of UserDetailsFragment. */
     public static UserDetailsFragment newInstance(int userId) {
         return (UserDetailsFragment) UserDetailsBaseFragment.addUserIdToFragmentArguments(
@@ -44,8 +46,10 @@
         public void onReceive(Context context, Intent intent) {
             // Update the user info value, as it may have changed.
             refreshUserInfo();
-            // Update the text in the action bar when there is a user update.
-            getToolbar().setTitle(getTitleText());
+            if (mIsStarted) {
+                // Update the text in the action bar when there is a user update.
+                getToolbar().setTitle(getTitleText());
+            }
         }
     };
 
@@ -69,6 +73,19 @@
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        mIsStarted = true;
+        getToolbar().setTitle(getTitleText());
+    }
+
+    @Override
+    public void onStop() {
+        mIsStarted = false;
+        super.onStop();
+    }
+
+    @Override
     public void onDestroy() {
         unregisterForUserEvents();
         super.onDestroy();
diff --git a/src/com/android/car/settings/users/UserGridRecyclerView.java b/src/com/android/car/settings/users/UserGridRecyclerView.java
index e05147f..dbc6a3e 100644
--- a/src/com/android/car/settings/users/UserGridRecyclerView.java
+++ b/src/com/android/car/settings/users/UserGridRecyclerView.java
@@ -24,7 +24,6 @@
 import android.app.ActivityManager;
 import android.car.Car;
 import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -72,7 +71,6 @@
             "com.android.car.settings.users.ConfirmCreateNewUserDialog";
 
     private UserAdapter mAdapter;
-    private CarUserManagerHelper mCarUserManagerHelper;
     private UserManager mUserManager;
     private Context mContext;
     private BaseFragment mBaseFragment;
@@ -92,7 +90,6 @@
     public UserGridRecyclerView(Context context, AttributeSet attrs) {
         super(context, attrs);
         mContext = context;
-        mCarUserManagerHelper = new CarUserManagerHelper(mContext);
         mUserManager = UserManager.get(mContext);
         mUserIconProvider = new UserIconProvider();
         mEnableAddUserButton = true;
@@ -257,10 +254,10 @@
     public final class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserAdapterViewHolder>
             implements AddNewUserTask.AddNewUserListener {
 
-        private final Context mContext;
         private final Resources mRes;
         private final String mGuestName;
 
+        private Context mContext;
         private List<UserRecord> mUsers;
         private String mNewUserName;
         // View that holds the add user button.  Used to enable/disable the view
@@ -270,7 +267,7 @@
         private boolean mIsAddUserRestricted;
 
         private final ConfirmationDialogFragment.ConfirmListener mConfirmListener = arguments -> {
-            mAddNewUserTask = new AddNewUserTask(mCarUserManagerHelper,
+            mAddNewUserTask = new AddNewUserTask(mContext,
                     mCarUserManager, /* addNewUserListener= */this);
             mAddNewUserTask.execute(mNewUserName);
         };
diff --git a/src/com/android/car/settings/users/UsersListFragment.java b/src/com/android/car/settings/users/UsersListFragment.java
index 2132db2..d7f067f 100644
--- a/src/com/android/car/settings/users/UsersListFragment.java
+++ b/src/com/android/car/settings/users/UsersListFragment.java
@@ -19,7 +19,6 @@
 import android.car.Car;
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.Intent;
 import android.os.AsyncTask;
@@ -62,7 +61,6 @@
 
     private Car mCar;
     private CarUserManager mCarUserManager;
-    private CarUserManagerHelper mCarUserManagerHelper;
     private UserManager mUserManager;
 
     private ProgressBarController mProgressBar;
@@ -74,7 +72,7 @@
 
     @VisibleForTesting
     final ConfirmationDialogFragment.ConfirmListener mConfirmCreateNewUserListener = arguments -> {
-        mAddNewUserTask = new AddNewUserTask(mCarUserManagerHelper,
+        mAddNewUserTask = new AddNewUserTask(getContext(),
                 mCarUserManager, /* addNewUserListener= */ this).execute(
                 getContext().getString(R.string.user_new_user_name));
         mIsBusy = true;
@@ -112,7 +110,6 @@
     public void onAttach(Context context) {
         super.onAttach(context);
         mCar = Car.createCar(context);
-        mCarUserManagerHelper = new CarUserManagerHelper(getContext());
         mCarUserManager = (CarUserManager) mCar.getCarManager(Car.CAR_USER_SERVICE);
         mUserManager = UserManager.get(getContext());
     }
@@ -186,6 +183,11 @@
         ErrorDialog.show(this, R.string.add_user_error_title);
     }
 
+    @VisibleForTesting
+    void setCarUserManager(CarUserManager carUserManager) {
+        mCarUserManager = carUserManager;
+    }
+
     private void updateUi() {
         mAddUserButton.setEnabled(!mIsBusy);
         mProgressBar.setVisible(mIsBusy);
diff --git a/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java b/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
index c7ae2e5..e185915 100644
--- a/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
+++ b/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
@@ -22,6 +22,8 @@
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.car.settings.common.PasswordEditTextPreference;
+import com.android.car.ui.R;
+import com.android.car.ui.utils.CarUiUtils;
 
 /**
  * A {@link PasswordEditTextPreference} which has a second button which can perform another
@@ -60,14 +62,17 @@
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
+        View containerWithoutWidget = CarUiUtils.findViewByRefId(holder.itemView,
+                R.id.car_ui_preference_container_without_widget);
         View actionContainer = getWidgetActionContainer(holder);
         View widgetFrame = holder.findViewById(android.R.id.widget_frame);
-        if (mIsButtonShown) {
-            actionContainer.setVisibility(View.VISIBLE);
-            widgetFrame.setOnClickListener(v -> performButtonClick());
-        } else {
-            actionContainer.setVisibility(View.GONE);
-        }
+        holder.itemView.setFocusable(!mIsButtonShown);
+        containerWithoutWidget.setOnClickListener(mIsButtonShown ? this::performClick : null);
+        containerWithoutWidget.setClickable(mIsButtonShown);
+        containerWithoutWidget.setFocusable(mIsButtonShown);
+        actionContainer.setVisibility(mIsButtonShown ? View.VISIBLE : View.GONE);
+        widgetFrame.setOnClickListener(mIsButtonShown ? v -> performButtonClick() : null);
+        widgetFrame.setFocusable(mIsButtonShown);
     }
 
     /**
diff --git a/src/com/android/car/settings/wifi/WifiEntryPreferenceController.java b/src/com/android/car/settings/wifi/WifiEntryPreferenceController.java
index 0981d6f..5473d3c 100644
--- a/src/com/android/car/settings/wifi/WifiEntryPreferenceController.java
+++ b/src/com/android/car/settings/wifi/WifiEntryPreferenceController.java
@@ -18,16 +18,18 @@
 
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
+import android.net.wifi.WifiManager;
 
 import com.android.car.settings.common.FragmentController;
-import com.android.car.settings.common.MasterSwitchPreference;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiTwoActionSwitchPreference;
 
 /**
  * Controller which determines if the top level entry into Wi-Fi settings should be displayed
  * based on device capabilities.
  */
-public class WifiEntryPreferenceController extends PreferenceController<MasterSwitchPreference>
+public class WifiEntryPreferenceController extends
+        PreferenceController<CarUiTwoActionSwitchPreference>
         implements CarWifiManager.Listener {
 
     private CarWifiManager mCarWifiManager;
@@ -38,14 +40,14 @@
     }
 
     @Override
-    protected Class<MasterSwitchPreference> getPreferenceType() {
-        return MasterSwitchPreference.class;
+    protected Class<CarUiTwoActionSwitchPreference> getPreferenceType() {
+        return CarUiTwoActionSwitchPreference.class;
     }
 
     @Override
     protected void onCreateInternal() {
         mCarWifiManager = new CarWifiManager(getContext());
-        getPreference().setSwitchToggleListener((preference, isChecked) -> {
+        getPreference().setOnSecondaryActionClickListener(isChecked -> {
             if (isChecked != mCarWifiManager.isWifiEnabled()) {
                 mCarWifiManager.setWifiEnabled(isChecked);
             }
@@ -56,7 +58,7 @@
     protected void onStartInternal() {
         mCarWifiManager.addListener(this);
         mCarWifiManager.start();
-        getPreference().setSwitchChecked(mCarWifiManager.isWifiEnabled());
+        getPreference().setSecondaryActionChecked(mCarWifiManager.isWifiEnabled());
     }
 
     @Override
@@ -77,7 +79,8 @@
 
     @Override
     public void onWifiStateChanged(int state) {
-        getPreference().setSwitchChecked(mCarWifiManager.isWifiEnabled());
+        getPreference().setSecondaryActionChecked(state == WifiManager.WIFI_STATE_ENABLED
+                || state == WifiManager.WIFI_STATE_ENABLING);
     }
 
     @Override
diff --git a/src/com/android/car/settings/wifi/WifiSettingsFragment.java b/src/com/android/car/settings/wifi/WifiSettingsFragment.java
index 73ed73f..048cfa4 100644
--- a/src/com/android/car/settings/wifi/WifiSettingsFragment.java
+++ b/src/com/android/car/settings/wifi/WifiSettingsFragment.java
@@ -135,7 +135,8 @@
 
     @Override
     public void onWifiStateChanged(int state) {
-        mWifiSwitch.setChecked(mCarWifiManager.isWifiEnabled());
+        mWifiSwitch.setChecked(state == WifiManager.WIFI_STATE_ENABLED
+                || state == WifiManager.WIFI_STATE_ENABLING);
         switch (state) {
             case WifiManager.WIFI_STATE_ENABLING:
                 mProgressBar.setVisible(true);
diff --git a/src/com/android/car/settings/wifi/WifiUtil.java b/src/com/android/car/settings/wifi/WifiUtil.java
index 41f64fd..5e8e40e 100644
--- a/src/com/android/car/settings/wifi/WifiUtil.java
+++ b/src/com/android/car/settings/wifi/WifiUtil.java
@@ -32,6 +32,7 @@
 import android.text.TextUtils;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
 
 import com.android.car.settings.R;
@@ -180,6 +181,31 @@
         WifiConfiguration wifiConfig = new WifiConfiguration();
         wifiConfig.SSID = String.format("\"%s\"", ssid);
         wifiConfig.hiddenSSID = hidden;
+
+        return finishWifiConfig(wifiConfig, security, password);
+    }
+
+    /** Similar to above, but uses AccessPoint to get additional relevant information. */
+    public static WifiConfiguration getWifiConfig(@NonNull AccessPoint accessPoint,
+            String password) {
+        if (accessPoint == null) {
+            throw new IllegalArgumentException("AccessPoint input is required.");
+        }
+
+        WifiConfiguration wifiConfig = new WifiConfiguration();
+        if (!accessPoint.isSaved()) {
+            wifiConfig.SSID = AccessPoint.convertToQuotedString(
+                    accessPoint.getSsidStr());
+        } else {
+            wifiConfig.networkId = accessPoint.getConfig().networkId;
+            wifiConfig.hiddenSSID = accessPoint.getConfig().hiddenSSID;
+        }
+
+        return finishWifiConfig(wifiConfig, accessPoint.getSecurity(), password);
+    }
+
+    private static WifiConfiguration finishWifiConfig(WifiConfiguration wifiConfig, int security,
+            String password) {
         switch (security) {
             case AccessPoint.SECURITY_NONE:
                 wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
@@ -234,7 +260,6 @@
         return wifiConfig;
     }
 
-
     /** Forget the network specified by {@code accessPoint}. */
     public static void forget(Context context, AccessPoint accessPoint) {
         WifiManager wifiManager = context.getSystemService(WifiManager.class);
diff --git a/src/com/android/car/settings/wifi/details/WifiDetailsFragment.java b/src/com/android/car/settings/wifi/details/WifiDetailsFragment.java
index 3317109..c048818 100644
--- a/src/com/android/car/settings/wifi/details/WifiDetailsFragment.java
+++ b/src/com/android/car/settings/wifi/details/WifiDetailsFragment.java
@@ -25,8 +25,11 @@
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.view.View;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.annotation.XmlRes;
 
@@ -165,6 +168,12 @@
     }
 
     @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        enableRotaryScroll();
+    }
+
+    @Override
     public void onStart() {
         super.onStart();
         mWifiInfoProvider.addListener(this);
diff --git a/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogActivity.java b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogActivity.java
new file mode 100644
index 0000000..4044d5d
--- /dev/null
+++ b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogActivity.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.wifi.networkrequest;
+
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentActivity;
+
+/**
+ * When other applications request to have a wifi connection, framework will bring up this activity
+ * to let user select which wifi ap wanna to connect. This activity is just a door for framework
+ * call, and main functional process is at {@code NetworkRequestDialogFragment}.
+ */
+public class NetworkRequestDialogActivity extends FragmentActivity {
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance();
+        fragment.show(getSupportFragmentManager(),
+                NetworkRequestDialogFragment.class.getSimpleName());
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        finish();
+    }
+}
+
diff --git a/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogFragment.java b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogFragment.java
new file mode 100644
index 0000000..2bf595e
--- /dev/null
+++ b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestDialogFragment.java
@@ -0,0 +1,546 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.wifi.networkrequest;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiManager.NetworkRequestMatchCallback;
+import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerExecutor;
+import android.os.Message;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.settings.R;
+import com.android.car.settings.wifi.WifiUtil;
+import com.android.car.ui.AlertDialogBuilder;
+import com.android.settingslib.Utils;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.ObservableDialogFragment;
+import com.android.settingslib.wifi.AccessPoint;
+import com.android.settingslib.wifi.WifiTracker;
+import com.android.settingslib.wifi.WifiTrackerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The Fragment sets up callback {@link NetworkRequestMatchCallback} with framework. To handle most
+ * behaviors of the callback when requesting wifi network, except for error message. When error
+ * happens, {@link NetworkRequestErrorDialogFragment} will be called to display error message.
+ */
+public class NetworkRequestDialogFragment extends ObservableDialogFragment implements
+        DialogInterface.OnClickListener, NetworkRequestMatchCallback {
+
+    /** Message sent to us to stop scanning wifi and pop up timeout dialog. */
+    private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
+
+    /**
+     * Spec defines there should be 5 wifi ap on the list at most or just show all if {@code
+     * mShowLimitedItem} is false.
+     */
+    private static final int MAX_NUMBER_LIST_ITEM = 5;
+    private boolean mShowLimitedItem = true;
+
+    /** Delayed time to stop scanning wifi. */
+    private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;
+
+    static final String EXTRA_APP_NAME = "com.android.settings.wifi.extra.APP_NAME";
+    static final String EXTRA_IS_SPECIFIED_SSID =
+            "com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";
+
+    private List<AccessPoint> mAccessPointList;
+    private FilterWifiTracker mFilterWifiTracker;
+    private AccessPointAdapter mDialogAdapter;
+    private NetworkRequestUserSelectionCallback mUserSelectionCallback;
+    private boolean mIsSpecifiedSsid;
+    private boolean mWaitingConnectCallback;
+
+    /** Creates Network Request dialog. */
+    public static NetworkRequestDialogFragment newInstance() {
+        NetworkRequestDialogFragment dialogFragment = new NetworkRequestDialogFragment();
+        return dialogFragment;
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        Context context = getContext();
+
+        Intent intent = getActivity().getIntent();
+        if (intent != null) {
+            mIsSpecifiedSsid = intent.getBooleanExtra(EXTRA_IS_SPECIFIED_SSID, false);
+        }
+
+        // Prepares adapter.
+        mDialogAdapter = new AccessPointAdapter(context,
+                R.layout.preference_access_point, getAccessPointList());
+
+        AlertDialogBuilder builder = new AlertDialogBuilder(context)
+                .setTitle(getTitle())
+                .setAdapter(mDialogAdapter, /* listener= */ this)
+                .setNegativeButton(R.string.cancel, (dialog, which) -> onCancel(dialog))
+                // Do nothings, will replace the onClickListener to avoid auto closing dialog.
+                .setNeutralButton(R.string.network_connection_request_dialog_showall,
+                        /* listener= */ null);
+        if (mIsSpecifiedSsid) {
+            builder.setPositiveButton(R.string.wifi_setup_connect, /* listener= */ null);
+        }
+
+        // Clicking list item is to connect wifi ap.
+        AlertDialog dialog = builder.create();
+        dialog.getListView().setOnItemClickListener(
+                (parent, view, position, id) -> this.onClick(dialog, position));
+
+        // Don't dismiss dialog when touching outside. User reports it is easy to touch outside.
+        // This causes dialog to close.
+        setCancelable(false);
+
+        dialog.setOnShowListener((dialogInterface) -> {
+            // Replace NeutralButton onClickListener to avoid closing dialog
+            Button neutralBtn = dialog.getButton(AlertDialog.BUTTON_NEUTRAL);
+            neutralBtn.setVisibility(View.GONE);
+            neutralBtn.setOnClickListener(v -> {
+                mShowLimitedItem = false;
+                renewAccessPointList(/* scanResults= */ null);
+                notifyAdapterRefresh();
+                neutralBtn.setVisibility(View.GONE);
+            });
+
+            // Replace Positive onClickListener to avoid closing dialog
+            if (mIsSpecifiedSsid) {
+                Button positiveBtn = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
+                positiveBtn.setOnClickListener(v -> {
+                    // When clicking connect button, should connect to the first and the only one
+                    // list item.
+                    this.onClick(dialog, /* position= */ 0);
+                });
+                // Disable button in first, and enable it after there are some accesspoints in list.
+                positiveBtn.setEnabled(false);
+            }
+        });
+        return dialog;
+    }
+
+    private String getTitle() {
+        Intent intent = getActivity().getIntent();
+        String appName = "";
+        if (intent != null) {
+            appName = intent.getStringExtra(EXTRA_APP_NAME);
+        }
+
+        return getString(R.string.network_connection_request_dialog_title, appName);
+    }
+
+    @NonNull
+    List<AccessPoint> getAccessPointList() {
+        // Initials list for adapter, in case of display crashing.
+        if (mAccessPointList == null) {
+            mAccessPointList = new ArrayList<>();
+        }
+        return mAccessPointList;
+    }
+
+    private BaseAdapter getDialogAdapter() {
+        return mDialogAdapter;
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        List<AccessPoint> accessPointList = getAccessPointList();
+        if (accessPointList.size() == 0) {
+            return;  // Invalid values.
+        }
+        if (mUserSelectionCallback == null) {
+            return; // Callback is missing or not ready.
+        }
+
+        if (which < accessPointList.size()) {
+            AccessPoint selectedAccessPoint = accessPointList.get(which);
+            WifiConfiguration wifiConfig = selectedAccessPoint.getConfig();
+            if (wifiConfig == null) {
+                if (selectedAccessPoint != null) {
+                    wifiConfig = WifiUtil.getWifiConfig(selectedAccessPoint, /* password= */ null);
+                }
+            }
+
+            if (wifiConfig != null) {
+                mUserSelectionCallback.select(wifiConfig);
+
+                mWaitingConnectCallback = true;
+                updateConnectButton(false);
+            }
+        }
+    }
+
+    @Override
+    public void onCancel(@NonNull DialogInterface dialog) {
+        super.onCancel(dialog);
+        // Finishes the activity when user clicks back key or outside of the dialog.
+        if (getActivity() != null) {
+            getActivity().finish();
+        }
+        if (mUserSelectionCallback != null) {
+            mUserSelectionCallback.reject();
+        }
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+
+        mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
+        WifiManager wifiManager = getContext().getApplicationContext()
+                .getSystemService(WifiManager.class);
+        if (wifiManager != null) {
+            wifiManager.unregisterNetworkRequestMatchCallback(this);
+        }
+
+        if (mFilterWifiTracker != null) {
+            mFilterWifiTracker.onPause();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        if (mFilterWifiTracker != null) {
+            mFilterWifiTracker.onDestroy();
+            mFilterWifiTracker = null;
+        }
+    }
+
+    private void showAllButton() {
+        AlertDialog alertDialog = (AlertDialog) getDialog();
+        if (alertDialog == null) {
+            return;
+        }
+
+        Button neutralBtn = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
+        if (neutralBtn != null) {
+            neutralBtn.setVisibility(View.VISIBLE);
+        }
+    }
+
+    private void updateConnectButton(boolean enabled) {
+        // The button is only showed in single SSID mode.
+        if (!mIsSpecifiedSsid) {
+            return;
+        }
+
+        AlertDialog alertDialog = (AlertDialog) getDialog();
+        if (alertDialog == null) {
+            return;
+        }
+
+        Button positiveBtn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
+        if (positiveBtn != null) {
+            positiveBtn.setEnabled(enabled);
+        }
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        WifiManager wifiManager = getContext().getApplicationContext()
+                .getSystemService(WifiManager.class);
+        if (wifiManager != null) {
+            wifiManager.registerNetworkRequestMatchCallback(new HandlerExecutor(mHandler), this);
+        }
+        // Sets time-out to stop scanning.
+        mHandler.sendEmptyMessageDelayed(MESSAGE_STOP_SCAN_WIFI_LIST, DELAY_TIME_STOP_SCAN_MS);
+
+        if (mFilterWifiTracker == null) {
+            mFilterWifiTracker = new FilterWifiTracker(getActivity(), getSettingsLifecycle());
+        }
+        mFilterWifiTracker.onResume();
+    }
+
+    private final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_STOP_SCAN_WIFI_LIST:
+                    removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
+                    stopScanningAndPopErrorDialog(
+                            NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE.TIME_OUT);
+                    break;
+                default:
+                    // Do nothing.
+                    break;
+            }
+        }
+    };
+
+    protected void stopScanningAndPopErrorDialog(
+            NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE type) {
+        // Dismisses current dialog.
+        Dialog dialog =  getDialog();
+        if (dialog != null && dialog.isShowing()) {
+            dismiss();
+        }
+
+        // Throws error dialog.
+        NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
+                .newInstance();
+        Bundle bundle = new Bundle();
+        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
+        fragment.setArguments(bundle);
+        fragment.show(getActivity().getSupportFragmentManager(),
+                NetworkRequestErrorDialogFragment.class.getSimpleName());
+    }
+
+    private class AccessPointAdapter extends ArrayAdapter<AccessPoint> {
+
+        private final int mResourceId;
+        private final LayoutInflater mInflater;
+
+        AccessPointAdapter(Context context, int resourceId, List<AccessPoint> objects) {
+            super(context, resourceId, objects);
+            mResourceId = resourceId;
+            mInflater = LayoutInflater.from(context);
+        }
+
+        @Override
+        public View getView(int position, View view, ViewGroup parent) {
+            if (view == null) {
+                view = mInflater.inflate(mResourceId, parent, false);
+
+                View divider = view.findViewById(
+                        com.android.settingslib.R.id.two_target_divider);
+                divider.setVisibility(View.GONE);
+            }
+
+            AccessPoint accessPoint = getItem(position);
+
+            TextView titleView = view.findViewById(android.R.id.title);
+            if (titleView != null) {
+                // Shows whole SSID for better UX.
+                titleView.setSingleLine(false);
+                titleView.setText(accessPoint.getTitle());
+            }
+
+            TextView summary = view.findViewById(android.R.id.summary);
+            if (summary != null) {
+                String summaryString = accessPoint.getSettingsSummary();
+                if (TextUtils.isEmpty(summaryString)) {
+                    summary.setVisibility(View.GONE);
+                } else {
+                    summary.setVisibility(View.VISIBLE);
+                    summary.setText(summaryString);
+                }
+            }
+
+            ImageView imageView = view.findViewById(android.R.id.icon);
+            int level = accessPoint.getLevel();
+            if (imageView != null) {
+                Drawable drawable = getContext().getDrawable(
+                        Utils.getWifiIconResource(level));
+                drawable.setTintList(
+                        Utils.getColorAttr(getContext(), android.R.attr.colorControlNormal));
+                imageView.setImageDrawable(drawable);
+            }
+
+            return view;
+        }
+    }
+
+    @Override
+    public void onAbort() {
+        stopScanningAndPopErrorDialog(NetworkRequestErrorDialogFragment.ERROR_DIALOG_TYPE.ABORT);
+    }
+
+    @Override
+    public void onUserSelectionCallbackRegistration(
+            NetworkRequestUserSelectionCallback userSelectionCallback) {
+        mUserSelectionCallback = userSelectionCallback;
+    }
+
+    @Override
+    public void onMatch(List<ScanResult> scanResults) {
+        // Shouldn't need to renew cached list, since input result is empty.
+        if (scanResults != null && scanResults.size() > 0) {
+            mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
+            renewAccessPointList(scanResults);
+
+            notifyAdapterRefresh();
+        }
+    }
+
+    // Updates internal AccessPoint list from WifiTracker. scanResults are used to update key list
+    // of AccessPoint, and could be null if there is no necessary to update key list.
+    private void renewAccessPointList(List<ScanResult> scanResults) {
+        if (mFilterWifiTracker == null) {
+            return;
+        }
+
+        // TODO(b/119846365): Checks if we could escalate the converting effort.
+        // Updates keys of scanResults into FilterWifiTracker for updating matched AccessPoints.
+        if (scanResults != null) {
+            mFilterWifiTracker.updateKeys(scanResults);
+        }
+
+        // Re-gets matched AccessPoints from WifiTracker.
+        List<AccessPoint> list = getAccessPointList();
+        list.clear();
+        list.addAll(mFilterWifiTracker.getAccessPoints());
+    }
+
+    @VisibleForTesting
+    void notifyAdapterRefresh() {
+        if (getDialogAdapter() != null) {
+            getDialogAdapter().notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public void onUserSelectionConnectSuccess(WifiConfiguration wificonfiguration) {
+        Activity activity = getActivity();
+        if (activity != null) {
+            Toast.makeText(activity, R.string.network_connection_connect_successful,
+                    Toast.LENGTH_SHORT).show();
+            activity.finish();
+        }
+    }
+
+    @Override
+    public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
+        // Do nothing when selection is failed, let user could try again easily.
+        mWaitingConnectCallback = false;
+        updateConnectButton(true);
+    }
+
+    private final class FilterWifiTracker {
+        private final List<String> mAccessPointKeys;
+        private final WifiTracker mWifiTracker;
+        private final Context mContext;
+
+        FilterWifiTracker(Context context, Lifecycle lifecycle) {
+            mWifiTracker = WifiTrackerFactory.create(context, mWifiListener,
+                    lifecycle, /* includeSaved= */ true, /* includeScans= */ true);
+            mAccessPointKeys = new ArrayList<>();
+            mContext = context;
+        }
+
+        /**
+         * Updates key list from input. {@code onMatch()} may be called in multi-times according
+         * wifi scanning result, so needs patchwork here.
+         */
+        public void updateKeys(List<ScanResult> scanResults) {
+            for (ScanResult scanResult : scanResults) {
+                String key = AccessPoint.getKey(mContext, scanResult);
+                if (!mAccessPointKeys.contains(key)) {
+                    mAccessPointKeys.add(key);
+                }
+            }
+        }
+
+        /**
+         * Returns only AccessPoints whose key is in {@code mAccessPointKeys}.
+         *
+         * @return List of matched AccessPoints.
+         */
+        public List<AccessPoint> getAccessPoints() {
+            final List<AccessPoint> allAccessPoints = mWifiTracker.getAccessPoints();
+            final List<AccessPoint> result = new ArrayList<>();
+
+            // The order should be kept, because order means wifi score (sorting in WifiTracker).
+            int count = 0;
+            for (AccessPoint accessPoint : allAccessPoints) {
+                String key = accessPoint.getKey();
+                if (mAccessPointKeys.contains(key)) {
+                    result.add(accessPoint);
+
+                    count++;
+                    // Limits how many count of items could show.
+                    if (mShowLimitedItem && count >= MAX_NUMBER_LIST_ITEM) {
+                        break;
+                    }
+                }
+            }
+
+            // Update related UI buttons
+            if (mShowLimitedItem && (count >= MAX_NUMBER_LIST_ITEM)) {
+                showAllButton();
+            }
+            // Enable connect button if there is no pending callback.
+            if (!mWaitingConnectCallback) {
+                updateConnectButton(true);
+            }
+
+            return result;
+        }
+
+        private WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
+
+            @Override
+            public void onWifiStateChanged(int state) {
+                notifyAdapterRefresh();
+            }
+
+            @Override
+            public void onConnectedChanged() {
+                notifyAdapterRefresh();
+            }
+
+            @Override
+            public void onAccessPointsChanged() {
+                notifyAdapterRefresh();
+            }
+        };
+
+        public void onDestroy() {
+            if (mWifiTracker != null) {
+                mWifiTracker.onDestroy();
+            }
+        }
+
+        public void onResume() {
+            if (mWifiTracker != null) {
+                mWifiTracker.onStart();
+            }
+        }
+
+        public void onPause() {
+            if (mWifiTracker != null) {
+                mWifiTracker.onStop();
+            }
+        }
+    }
+}
diff --git a/src/com/android/car/settings/wifi/networkrequest/NetworkRequestErrorDialogFragment.java b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestErrorDialogFragment.java
new file mode 100644
index 0000000..7aa1056
--- /dev/null
+++ b/src/com/android/car/settings/wifi/networkrequest/NetworkRequestErrorDialogFragment.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.wifi.networkrequest;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+
+import com.android.car.settings.R;
+import com.android.car.ui.AlertDialogBuilder;
+
+/**
+ * The dialog shows an error message when requesting network {@link NetworkRequestDialogFragment}.
+ * Contains multi-error types in {@code ERROR_DIALOG_TYPE}.
+ */
+public class NetworkRequestErrorDialogFragment extends DialogFragment {
+
+    public static final String DIALOG_TYPE = "DIALOG_ERROR_TYPE";
+
+    public enum ERROR_DIALOG_TYPE {TIME_OUT, ABORT}
+
+    /** Creates Network Error dialog. */
+    public static NetworkRequestErrorDialogFragment newInstance() {
+        return new NetworkRequestErrorDialogFragment();
+    }
+
+    @Override
+    public void onCancel(@NonNull DialogInterface dialog) {
+        super.onCancel(dialog);
+        // Wants to finish the activity when user clicks back key or outside of the dialog.
+        getActivity().finish();
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Gets error type to construct dialog. Default is TIME_OUT dialog.
+        ERROR_DIALOG_TYPE msgType = ERROR_DIALOG_TYPE.TIME_OUT;
+        if (getArguments() != null) {
+            msgType = (ERROR_DIALOG_TYPE) getArguments().getSerializable(DIALOG_TYPE);
+        }
+
+        AlertDialogBuilder builder = new AlertDialogBuilder(getContext());
+        if (msgType == ERROR_DIALOG_TYPE.TIME_OUT) {
+            builder.setMessage(R.string.network_connection_timeout_dialog_message)
+                    .setPositiveButton(R.string.network_connection_timeout_dialog_ok,
+                            (dialog, which) -> startScanningDialog())
+                    .setNegativeButton(R.string.cancel, (dialog, which) -> getActivity().finish());
+        } else {
+            builder.setMessage(R.string.network_connection_errorstate_dialog_message)
+                    .setPositiveButton(R.string.okay, (dialog, which) -> getActivity().finish());
+        }
+        return builder.create();
+    }
+
+    protected void startScanningDialog() {
+        NetworkRequestDialogFragment fragment = NetworkRequestDialogFragment.newInstance();
+        fragment.show(getActivity().getSupportFragmentManager(),
+                NetworkRequestDialogFragment.class.getSimpleName());
+    }
+}
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
index 638ce4a..f18072b 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
@@ -41,6 +41,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -52,6 +53,7 @@
 /**
  * Tests for the {@link AccountDetailsFragment}.
  */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class, ShadowUserHelper.class})
 public class AccountDetailsFragmentTest {
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsPreferenceControllerTest.java
index 224d264..821d56e 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsPreferenceControllerTest.java
@@ -37,6 +37,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -45,6 +46,7 @@
 import org.robolectric.shadow.api.Shadow;
 
 /** Unit test for {@link AccountDetailsPreferenceController}. */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class,
         ShadowApplicationPackageManager.class})
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsWithSyncStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsWithSyncStatusPreferenceControllerTest.java
index c7c8222..057d648 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsWithSyncStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsWithSyncStatusPreferenceControllerTest.java
@@ -42,6 +42,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -49,6 +50,7 @@
 import org.robolectric.shadow.api.Shadow;
 
 /** Unit test for {@link AccountDetailsWithSyncStatusPreferenceController}. */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class,
         ShadowApplicationPackageManager.class})
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountListPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountListPreferenceControllerTest.java
index c540b3c..546c621 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountListPreferenceControllerTest.java
@@ -43,6 +43,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -52,6 +53,7 @@
 import org.robolectric.shadow.api.Shadow;
 
 /** Unit tests for {@link AccountListPreferenceController}. */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowContentResolver.class, ShadowAccountManager.class, ShadowUserHelper.class})
 public class AccountListPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
index b0f9849..8947f93 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
@@ -44,6 +44,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -58,6 +59,7 @@
 /**
  * Tests for AccountSettingsFragment class.
  */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class, ShadowUserHelper.class})
 public class AccountSettingsFragmentTest {
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
index 6dee823..30e9de2 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
@@ -44,6 +44,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -58,6 +59,7 @@
 /**
  * Tests for the {@link AccountSyncDetailsFragment}.
  */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowContentResolver.class, ShadowAccountManager.class})
 public class AccountSyncDetailsFragmentTest {
diff --git a/tests/robotests/src/com/android/car/settings/accounts/ChooseAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/accounts/ChooseAccountPreferenceControllerTest.java
index ad62e3f..134d5e7 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/ChooseAccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/ChooseAccountPreferenceControllerTest.java
@@ -46,6 +46,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -56,6 +57,7 @@
 import org.robolectric.shadow.api.Shadow;
 
 /** Unit tests for {@link ChooseAccountPreferenceController}. */
+@Ignore
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowUserHelper.class, ShadowContentResolver.class, ShadowAccountManager.class})
 public class ChooseAccountPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
deleted file mode 100644
index 9bcd058..0000000
--- a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.applications;
-
-import static com.android.car.ui.core.CarUi.requireToolbar;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.Signature;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.UserHandle;
-import android.os.UserManager;
-
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.car.settings.R;
-import com.android.car.settings.common.ConfirmationDialogFragment;
-import com.android.car.settings.testutils.BaseTestActivity;
-import com.android.car.settings.testutils.ShadowActivityManager;
-import com.android.car.settings.testutils.ShadowApplicationPackageManager;
-import com.android.car.settings.testutils.ShadowDevicePolicyManager;
-import com.android.car.settings.testutils.ShadowIconDrawableFactory;
-import com.android.car.settings.testutils.ShadowPermissionControllerManager;
-import com.android.car.settings.testutils.ShadowSmsApplication;
-import com.android.car.settings.testutils.ShadowUserManager;
-import com.android.car.settings.testutils.ShadowUtils;
-import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
-import com.android.car.ui.toolbar.MenuItem;
-import com.android.car.ui.toolbar.ToolbarController;
-import com.android.settingslib.Utils;
-import com.android.settingslib.applications.ApplicationsState;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.android.controller.ActivityController;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowAlertDialog;
-import org.robolectric.shadows.ShadowApplication;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-/** Unit test for {@link ApplicationDetailsFragment}. */
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {
-        ShadowActivityManager.class,
-        ShadowApplicationPackageManager.class,
-        ShadowDevicePolicyManager.class,
-        ShadowIconDrawableFactory.class,
-        ShadowPermissionControllerManager.class,
-        ShadowSmsApplication.class,
-        ShadowUserManager.class,
-        ShadowUtils.class})
-public class ApplicationDetailsFragmentTest {
-
-    private static final String PACKAGE_NAME = "com.android.car.settings.test";
-
-    private Context mContext;
-    private TestActivity mActivity;
-    private ActivityController<TestActivity> mController;
-    private ApplicationDetailsFragment mFragment;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        int userId = UserHandle.myUserId();
-
-        mContext = ApplicationProvider.getApplicationContext();
-        getShadowUserManager().addUser(userId, "userName", /* flags= */ 0);
-        getShadowUserManager().addProfile(userId, userId, "profileName", /* profileFlags= */ 0);
-
-        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
-        CarUiInstallerRobolectric.install();
-
-        mActivity = new TestActivity();
-        mController = ActivityController.of(mActivity);
-        mController.create();
-
-        mFragment = ApplicationDetailsFragment.getInstance(PACKAGE_NAME);
-    }
-
-    @After
-    public void tearDown() {
-        // Prevent caching from interfering across tests.
-        ReflectionHelpers.setStaticField(ApplicationsState.class, "sInstance", null);
-        ReflectionHelpers.setStaticField(Utils.class, "sSystemSignature", null);
-        ShadowApplicationPackageManager.reset();
-        ShadowDevicePolicyManager.reset();
-        ShadowSmsApplication.reset();
-        ShadowUserManager.reset();
-        ShadowUtils.reset();
-    }
-
-    @Test
-    public void onStart_packageNotExplicitlyStopped_enablesForceStopButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findForceStopButton(mActivity).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onStart_packageHasActiveAdmins_disablesForceStopButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowDevicePolicyManager().setPackageHasActiveAdmins(
-                PACKAGE_NAME, /* hasActiveAdmins= */ true);
-        mController.start();
-
-        assertThat(findForceStopButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_appsControlUserRestriction_disablesForceStopButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowUserManager().setUserRestriction(
-                UserHandle.of(UserHandle.myUserId()), UserManager.DISALLOW_APPS_CONTROL, true);
-        mController.start();
-
-        assertThat(findForceStopButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_packageExplicitlyStopped_queriesPackageRestart() {
-        int uid = 123;
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.uid = uid;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_STOPPED;
-
-        mController.start();
-
-        Intent broadcast = mActivity.getMostRecentOrderedBroadcastIntent();
-        assertThat(broadcast).isNotNull();
-        assertThat(broadcast.getAction()).isEqualTo(Intent.ACTION_QUERY_PACKAGE_RESTART);
-        assertThat(broadcast.getStringArrayExtra(Intent.EXTRA_PACKAGES)).isEqualTo(
-                new String[]{PACKAGE_NAME});
-        assertThat(broadcast.getIntExtra(Intent.EXTRA_UID, 0)).isEqualTo(uid);
-    }
-
-    @Test
-    public void onStart_packageExplicitlyStopped_success_enablesForceStopButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_STOPPED;
-        mController.start();
-        BroadcastReceiver receiver = mActivity.getMostRecentOrderedBroadcastResultReceiver();
-        receiver.setPendingResult(
-                new BroadcastReceiver.PendingResult(Activity.RESULT_OK,
-                        "resultData",
-                        /* resultExtras= */ null,
-                        BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
-                        /* ordered= */ true,
-                        /* sticky= */ false,
-                        /* token= */ null,
-                        UserHandle.myUserId(),
-                        /* flags= */ 0));
-        receiver.onReceive(mContext, mActivity.getMostRecentOrderedBroadcastIntent());
-
-        assertThat(findForceStopButton(mActivity).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onStart_packageExplicitlyStopped_failure_disablesForceStopButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_STOPPED;
-        mController.start();
-        BroadcastReceiver receiver = mActivity.getMostRecentOrderedBroadcastResultReceiver();
-        receiver.setPendingResult(
-                new BroadcastReceiver.PendingResult(Activity.RESULT_CANCELED,
-                        "resultData",
-                        /* resultExtras= */ null,
-                        BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
-                        /* ordered= */ true,
-                        /* sticky= */ false,
-                        /* token= */ null,
-                        UserHandle.myUserId(),
-                        /* flags= */ 0));
-        receiver.onReceive(mContext, mActivity.getMostRecentOrderedBroadcastIntent());
-
-        assertThat(findForceStopButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_bundledApp_showsDisableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).getTitle()).isEqualTo(
-                mContext.getString(R.string.disable_text));
-    }
-
-    @Test
-    public void onStart_bundledApp_notEnabled_showsEnableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        packageInfo.applicationInfo.enabled = false;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).getTitle()).isEqualTo(
-                mContext.getString(R.string.enable_text));
-    }
-
-    @Test
-    public void onStart_bundledApp_enabled_disableUntilUsed_showsEnableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        packageInfo.applicationInfo.enabledSetting =
-                PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).getTitle()).isEqualTo(
-                mContext.getString(R.string.enable_text));
-    }
-
-    @Test
-    public void onStart_bundledApp_homePackage_disablesDisableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        getShadowPackageManager().addPackage(packageInfo);
-
-        ResolveInfo homeActivity = new ResolveInfo();
-        ActivityInfo activityInfo = new ActivityInfo();
-        activityInfo.packageName = PACKAGE_NAME;
-        homeActivity.activityInfo = activityInfo;
-
-        getShadowPackageManager().setHomeActivities(Collections.singletonList(homeActivity));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_bundledApp_systemPackage_disablesDisableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        Signature[] signatures = new Signature[]{new Signature(PACKAGE_NAME.getBytes())};
-        packageInfo.signatures = signatures;
-        getShadowPackageManager().addPackage(packageInfo);
-
-        PackageInfo systemPackage = createPackageInfoWithApplicationInfo("android");
-        systemPackage.signatures = signatures;
-        getShadowPackageManager().addPackage(systemPackage);
-
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_bundledApp_enabledApp_keepEnabledPackage_disablesDisableButton() {
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-
-        ShadowSmsApplication.setDefaultSmsApplication(new ComponentName(PACKAGE_NAME, "cls"));
-        mController.start();
-
-        assertThat(findDisableButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_appNotBundled_showsUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).getTitle()).isEqualTo(
-                mContext.getString(R.string.uninstall_text));
-    }
-
-    @Test
-    public void onStart_packageHasActiveAdmins_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowDevicePolicyManager().setPackageHasActiveAdmins(
-                PACKAGE_NAME, /* hasActiveAdmins= */ true);
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_deviceProvisioningPackage_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        ShadowUtils.setDeviceProvisioningPackage(PACKAGE_NAME);
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_uninstallQueued_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowDevicePolicyManager().setIsUninstallInQueue(true);
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_noDefaultHome_onlyHomeApp_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-
-        ResolveInfo homeActivity = new ResolveInfo();
-        ActivityInfo activityInfo = new ActivityInfo();
-        activityInfo.packageName = PACKAGE_NAME;
-        homeActivity.activityInfo = activityInfo;
-
-        getShadowPackageManager().setHomeActivities(Collections.singletonList(homeActivity));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_noDefaultHome_multipleHomeApps_enablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-
-        ResolveInfo homeActivity = new ResolveInfo();
-        ActivityInfo activityInfo = new ActivityInfo();
-        activityInfo.packageName = PACKAGE_NAME;
-        homeActivity.activityInfo = activityInfo;
-
-        ResolveInfo altHomeActivity = new ResolveInfo();
-        ActivityInfo altActivityInfo = new ActivityInfo();
-        altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
-        altHomeActivity.activityInfo = altActivityInfo;
-
-        getShadowPackageManager().setHomeActivities(Arrays.asList(homeActivity, altHomeActivity));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onStart_defaultHomeApp_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-
-        ResolveInfo homeActivity = new ResolveInfo();
-        ActivityInfo activityInfo = new ActivityInfo();
-        activityInfo.packageName = PACKAGE_NAME;
-        homeActivity.activityInfo = activityInfo;
-
-        ResolveInfo altHomeActivity = new ResolveInfo();
-        ActivityInfo altActivityInfo = new ActivityInfo();
-        altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
-        altHomeActivity.activityInfo = altActivityInfo;
-
-        getShadowPackageManager().setHomeActivities(Arrays.asList(homeActivity, altHomeActivity));
-        getShadowPackageManager().setDefaultHomeActivity(new ComponentName(PACKAGE_NAME, "cls"));
-        mActivity.launchFragment(mFragment);
-
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_appsControlUserRestriction_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowUserManager().setUserRestriction(
-                UserHandle.of(UserHandle.myUserId()), UserManager.DISALLOW_APPS_CONTROL, true);
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onStart_uninstallAppsRestriction_disablesUninstallButton() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-
-        getShadowUserManager().setUserRestriction(
-                UserHandle.of(UserHandle.myUserId()), UserManager.DISALLOW_UNINSTALL_APPS, true);
-        mController.start();
-
-        assertThat(findUninstallButton(mActivity).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void forceStopClicked_showsDialog() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-        mController.start();
-
-        findForceStopButton(mActivity).performClick();
-
-        assertThat(mFragment.getFragmentManager().findFragmentByTag(
-                ApplicationDetailsFragment.FORCE_STOP_CONFIRM_DIALOG_TAG)).isInstanceOf(
-                ConfirmationDialogFragment.class);
-    }
-
-    @Test
-    public void forceStopDialogConfirmed_forceStopsPackage() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-        mController.start();
-        findForceStopButton(mActivity).performClick();
-        AlertDialog dialog = ShadowAlertDialog.getLatestAlertDialog();
-
-        dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
-
-        assertThat(getShadowActivityManager().getMostRecentlyStoppedPackage()).isEqualTo(
-                PACKAGE_NAME);
-    }
-
-    @Test
-    public void disableClicked_showsDialog() {
-        // Use bundled app to get disable button.
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-        mController.start();
-
-        findDisableButton(mActivity).performClick();
-
-        assertThat(mFragment.getFragmentManager().findFragmentByTag(
-                ApplicationDetailsFragment.DISABLE_CONFIRM_DIALOG_TAG)).isInstanceOf(
-                ConfirmationDialogFragment.class);
-    }
-
-    @Test
-    public void disableDialogConfirmed_disablesPackage() {
-        // Use bundled app to get disable button.
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-        mController.start();
-        findDisableButton(mActivity).performClick();
-        AlertDialog dialog = ShadowAlertDialog.getLatestAlertDialog();
-
-        dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
-        Robolectric.flushForegroundThreadScheduler();
-
-        assertThat(
-                mContext.getPackageManager().getApplicationEnabledSetting(PACKAGE_NAME)).isEqualTo(
-                PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER);
-    }
-
-    @Test
-    public void enableClicked_enablesPackage() {
-        // Use disabled bundled app to get enable button.
-        PackageInfo packageInfo = createPackageInfoWithApplicationInfo(PACKAGE_NAME);
-        packageInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-        packageInfo.applicationInfo.enabled = false;
-        getShadowPackageManager().addPackage(packageInfo);
-        mActivity.launchFragment(mFragment);
-        mController.start();
-
-        findDisableButton(mActivity).performClick();
-        Robolectric.flushForegroundThreadScheduler();
-
-        assertThat(
-                mContext.getPackageManager().getApplicationEnabledSetting(PACKAGE_NAME)).isEqualTo(
-                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
-    }
-
-    @Test
-    public void uninstallClicked_startsUninstallActivity() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-        mController.start();
-
-        findUninstallButton(mActivity).performClick();
-
-        Intent intent = ShadowApplication.getInstance().getNextStartedActivity();
-        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_UNINSTALL_PACKAGE);
-        assertThat(intent.getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)).isTrue();
-        assertThat(intent.getData().toString()).isEqualTo("package:" + PACKAGE_NAME);
-    }
-
-    @Test
-    public void processActivityResult_uninstall_resultOk_goesBack() {
-        getShadowPackageManager().addPackage(createPackageInfoWithApplicationInfo(PACKAGE_NAME));
-        mActivity.launchFragment(mFragment);
-        mController.start();
-        findUninstallButton(mActivity).performClick();
-
-        mFragment.processActivityResult(ApplicationDetailsFragment.UNINSTALL_REQUEST_CODE,
-                Activity.RESULT_OK, /* data= */ null);
-
-        assertThat(mActivity.getOnBackPressedFlag()).isTrue();
-    }
-
-    private MenuItem findForceStopButton(Activity activity) {
-        ToolbarController toolbar = requireToolbar(activity);
-        return toolbar.getMenuItems().get(1);
-    }
-
-    private MenuItem findDisableButton(Activity activity) {
-        // Same button is used with a different handler.  This method is purely for readability.
-        return findUninstallButton(activity);
-    }
-
-    private MenuItem findUninstallButton(Activity activity) {
-        ToolbarController toolbar = requireToolbar(activity);
-        return toolbar.getMenuItems().get(0);
-    }
-
-    private PackageInfo createPackageInfoWithApplicationInfo(String packageName) {
-        PackageInfo packageInfo = new PackageInfo();
-        packageInfo.packageName = packageName;
-        packageInfo.applicationInfo = createApplicationInfo(packageName);
-        return packageInfo;
-    }
-
-    private ApplicationInfo createApplicationInfo(String packageName) {
-        ApplicationInfo applicationInfo = new ApplicationInfo();
-        applicationInfo.packageName = packageName;
-        applicationInfo.sourceDir =
-                RuntimeEnvironment.getTempDirectory()
-                        .createIfNotExists(applicationInfo.packageName + "-sourceDir")
-                        .toAbsolutePath()
-                        .toString();
-        return applicationInfo;
-    }
-
-    private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(UserManager.get(mContext));
-    }
-
-    private ShadowApplicationPackageManager getShadowPackageManager() {
-        return Shadow.extract(mContext.getPackageManager());
-    }
-
-    private ShadowDevicePolicyManager getShadowDevicePolicyManager() {
-        return Shadow.extract(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE));
-    }
-
-    private ShadowActivityManager getShadowActivityManager() {
-        return Shadow.extract(mContext.getSystemService(Context.ACTIVITY_SERVICE));
-    }
-
-    /** We extend the test activity here to add functionality that isn't useful elsewhere. */
-    private static class TestActivity extends BaseTestActivity {
-
-        private Intent mOrderedBroadcastIntent;
-        private BroadcastReceiver mOrderedBroadcastResultReceiver;
-
-        @Override
-        public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
-                String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
-                int initialCode, String initialData, Bundle initialExtras) {
-            mOrderedBroadcastIntent = intent;
-            mOrderedBroadcastResultReceiver = resultReceiver;
-        }
-
-        Intent getMostRecentOrderedBroadcastIntent() {
-            return mOrderedBroadcastIntent;
-        }
-
-        BroadcastReceiver getMostRecentOrderedBroadcastResultReceiver() {
-            return mOrderedBroadcastResultReceiver;
-        }
-    }
-}
diff --git a/tests/robotests/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java
deleted file mode 100644
index afb08b6..0000000
--- a/tests/robotests/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.applications;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.testng.Assert.assertThrows;
-
-import android.content.Context;
-
-import androidx.lifecycle.Lifecycle;
-
-import com.android.car.settings.common.PreferenceControllerTestHelper;
-import com.android.car.ui.preference.CarUiPreference;
-import com.android.settingslib.applications.ApplicationsState;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class ApplicationPreferenceControllerTest {
-    private static final String PACKAGE_NAME = "Test Package Name";
-
-    private CarUiPreference mPreference;
-    private PreferenceControllerTestHelper<ApplicationPreferenceController>
-            mPreferenceControllerHelper;
-    private ApplicationPreferenceController mController;
-    @Mock
-    private ApplicationsState mMockAppState;
-    @Mock
-    private ApplicationsState.AppEntry mMockAppEntry;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        Context context = spy(RuntimeEnvironment.application);
-        mMockAppEntry.label = PACKAGE_NAME;
-
-        mPreference = new CarUiPreference(context);
-        mPreferenceControllerHelper = new PreferenceControllerTestHelper<>(context,
-                ApplicationPreferenceController.class);
-        mController = mPreferenceControllerHelper.getController();
-    }
-
-    @Test
-    public void testCheckInitialized_noAppState_throwException() {
-        mController.setAppEntry(mMockAppEntry);
-        assertThrows(IllegalStateException.class,
-                () -> mPreferenceControllerHelper.setPreference(mPreference));
-    }
-
-    @Test
-    public void testCheckInitialized_noAppEntry_throwException() {
-        mController.setAppState(mMockAppState);
-        assertThrows(IllegalStateException.class,
-                () -> mPreferenceControllerHelper.setPreference(mPreference));
-    }
-
-    @Test
-    public void testRefreshUi_hasResolveInfo_setTitle() {
-        mController.setAppEntry(mMockAppEntry);
-        mController.setAppState(mMockAppState);
-        mPreferenceControllerHelper.setPreference(mPreference);
-        mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        mController.refreshUi();
-        assertThat(mPreference.getTitle()).isEqualTo(PACKAGE_NAME);
-    }
-}
diff --git a/tests/robotests/src/com/android/car/settings/applications/assist/DefaultVoiceInputPickerEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/assist/DefaultVoiceInputPickerEntryPreferenceControllerTest.java
index d084997..b07e350 100644
--- a/tests/robotests/src/com/android/car/settings/applications/assist/DefaultVoiceInputPickerEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/assist/DefaultVoiceInputPickerEntryPreferenceControllerTest.java
@@ -34,11 +34,11 @@
 
 import androidx.lifecycle.Lifecycle;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.PreferenceController;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowSecureSettings;
 import com.android.car.settings.testutils.ShadowVoiceInteractionServiceInfo;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import com.google.common.collect.Iterables;
@@ -78,7 +78,7 @@
         mContext = RuntimeEnvironment.application;
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 DefaultVoiceInputPickerEntryPreferenceController.class,
-                new ButtonPreference(mContext));
+                new CarUiTwoActionIconPreference(mContext));
         mController = mControllerHelper.getController();
     }
 
@@ -173,7 +173,7 @@
         // Create new controller to rerun the constructor with the new shadow package manager.
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 DefaultVoiceInputPickerEntryPreferenceController.class,
-                new ButtonPreference(mContext));
+                new CarUiTwoActionIconPreference(mContext));
         mController = mControllerHelper.getController();
 
         ComponentName voiceService = new ComponentName(TEST_PACKAGE, TEST_VOICE);
diff --git a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceControllerTest.java
index c953a89..42931a2 100644
--- a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAppsPickerEntryBasePreferenceControllerTest.java
@@ -36,9 +36,9 @@
 import androidx.annotation.Nullable;
 import androidx.lifecycle.Lifecycle;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.Before;
@@ -84,7 +84,7 @@
     }
 
     private Context mContext;
-    private ButtonPreference mButtonPreference;
+    private CarUiTwoActionIconPreference mButtonPreference;
     private PreferenceControllerTestHelper<TestDefaultAppsPickerEntryBasePreferenceController>
             mControllerHelper;
     private TestDefaultAppsPickerEntryBasePreferenceController mController;
@@ -92,7 +92,7 @@
     @Before
     public void setUp() {
         mContext = spy(RuntimeEnvironment.application);
-        mButtonPreference = new ButtonPreference(mContext);
+        mButtonPreference = new CarUiTwoActionIconPreference(mContext);
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 TestDefaultAppsPickerEntryBasePreferenceController.class, mButtonPreference);
         mController = mControllerHelper.getController();
@@ -104,7 +104,7 @@
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
         mController.refreshUi();
 
-        assertThat(mButtonPreference.isActionShown()).isFalse();
+        assertThat(mButtonPreference.isSecondaryActionVisible()).isFalse();
     }
 
     @Test
@@ -117,7 +117,7 @@
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
         mController.refreshUi();
 
-        assertThat(mButtonPreference.isActionShown()).isFalse();
+        assertThat(mButtonPreference.isSecondaryActionVisible()).isFalse();
     }
 
     @Test
@@ -132,7 +132,7 @@
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
         mController.refreshUi();
 
-        assertThat(mButtonPreference.isActionShown()).isTrue();
+        assertThat(mButtonPreference.isSecondaryActionVisible()).isTrue();
     }
 
     @Test
@@ -141,7 +141,7 @@
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
         mController.refreshUi();
 
-        assertThat(mButtonPreference.isActionShown()).isTrue();
+        assertThat(mButtonPreference.isSecondaryActionVisible()).isTrue();
     }
 
     @Test
@@ -152,7 +152,7 @@
                 any(String.class), any(Intent.class), eq(0), isNull());
         mController.setSettingIntent(TEST_INTENT);
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        mButtonPreference.performButtonClick();
+        mButtonPreference.performSecondaryActionClick();
 
         verify(mContext).startActivityForResult(
                 "android", TEST_INTENT, 0, null);
diff --git a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceControllerTest.java
index f1a4abc..93f8c85 100644
--- a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAssistantPickerEntryPreferenceControllerTest.java
@@ -27,11 +27,11 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowApplicationPackageManager;
 import com.android.car.settings.testutils.ShadowSecureSettings;
 import com.android.car.settings.testutils.ShadowVoiceInteractionServiceInfo;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import org.junit.After;
@@ -58,7 +58,7 @@
     private final int mUserId = UserHandle.myUserId();
 
     private Context mContext;
-    private ButtonPreference mButtonPreference;
+    private CarUiTwoActionIconPreference mButtonPreference;
     private DefaultAssistantPickerEntryPreferenceController mController;
     private PreferenceControllerTestHelper<DefaultAssistantPickerEntryPreferenceController>
             mControllerHelper;
@@ -68,7 +68,7 @@
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
-        mButtonPreference = new ButtonPreference(mContext);
+        mButtonPreference = new CarUiTwoActionIconPreference(mContext);
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 DefaultAssistantPickerEntryPreferenceController.class, mButtonPreference);
         mController = mControllerHelper.getController();
diff --git a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAutofillPickerEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAutofillPickerEntryPreferenceControllerTest.java
index 0d67255..6ffb40a 100644
--- a/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAutofillPickerEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/defaultapps/DefaultAutofillPickerEntryPreferenceControllerTest.java
@@ -32,10 +32,10 @@
 import android.service.autofill.AutofillService;
 import android.view.autofill.AutofillManager;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowAutofillServiceInfo;
 import com.android.car.settings.testutils.ShadowSecureSettings;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import com.google.android.collect.Lists;
@@ -66,7 +66,7 @@
     private static final int TEST_USER_ID = 10;
 
     private Context mContext;
-    private ButtonPreference mButtonPreference;
+    private CarUiTwoActionIconPreference mButtonPreference;
     private DefaultAutofillPickerEntryPreferenceController mController;
     private PreferenceControllerTestHelper<DefaultAutofillPickerEntryPreferenceController>
             mControllerHelper;
@@ -79,7 +79,7 @@
         Shadows.shadowOf(RuntimeEnvironment.application).setSystemService(
                 Context.AUTOFILL_MANAGER_SERVICE, mAutofillManager);
         mContext = RuntimeEnvironment.application;
-        mButtonPreference = new ButtonPreference(mContext);
+        mButtonPreference = new CarUiTwoActionIconPreference(mContext);
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 DefaultAutofillPickerEntryPreferenceController.class, mButtonPreference);
         mController = mControllerHelper.getController();
@@ -100,7 +100,7 @@
                 Context.AUTOFILL_MANAGER_SERVICE, null);
 
         // Reinitialize so that it uses the system service set in this test.
-        ButtonPreference preference = new ButtonPreference(mContext);
+        CarUiTwoActionIconPreference preference = new CarUiTwoActionIconPreference(mContext);
         PreferenceControllerTestHelper<DefaultAutofillPickerEntryPreferenceController> helper =
                 new PreferenceControllerTestHelper<>(mContext,
                         DefaultAutofillPickerEntryPreferenceController.class, preference);
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceControllerTest.java
index 0d74bb0..25d58ba 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothBondedDevicesPreferenceControllerTest.java
@@ -176,8 +176,8 @@
         BluetoothDevicePreference devicePreference =
                 (BluetoothDevicePreference) mPreferenceGroup.getPreference(0);
 
-        assertThat(devicePreference.isActionShown()).isTrue();
-        devicePreference.performButtonClick();
+        assertThat(devicePreference.isSecondaryActionVisible()).isTrue();
+        devicePreference.performSecondaryActionClick();
 
         verify(mControllerHelper.getMockFragmentController()).launchFragment(
                 any(BluetoothDeviceDetailsFragment.class));
@@ -190,7 +190,7 @@
         BluetoothDevicePreference devicePreference =
                 (BluetoothDevicePreference) mPreferenceGroup.getPreference(0);
 
-        assertThat(devicePreference.isActionShown()).isFalse();
+        assertThat(devicePreference.isSecondaryActionVisible()).isFalse();
     }
 
     @Test
@@ -203,7 +203,7 @@
                 true, CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, 0).build();
         mController.onUxRestrictionsChanged(restrictions);
 
-        assertThat(devicePreference.isActionShown()).isFalse();
+        assertThat(devicePreference.isSecondaryActionVisible()).isFalse();
     }
 
     @Test
@@ -220,7 +220,7 @@
                 true, CarUxRestrictions.UX_RESTRICTIONS_BASELINE, 0).build();
         mController.onUxRestrictionsChanged(noRestrictions);
 
-        assertThat(devicePreference.isActionShown()).isTrue();
+        assertThat(devicePreference.isSecondaryActionVisible()).isTrue();
     }
 
     private ShadowBluetoothAdapter getShadowBluetoothAdapter() {
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePreferenceTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePreferenceTest.java
index 9ede731..1df16a6 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePreferenceTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePreferenceTest.java
@@ -59,7 +59,7 @@
 
     @Test
     public void actionIsHiddenByDefault() {
-        assertThat(mPreference.isActionShown()).isFalse();
+        assertThat(mPreference.isSecondaryActionVisible()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivityTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivityTest.java
index ca069ad..de4713c 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivityTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothRequestPermissionActivityTest.java
@@ -127,18 +127,7 @@
         getShadowLocalBluetoothAdapter().setState(BluetoothAdapter.STATE_ON);
         mAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
 
-        String callerPackageName = "system.suwapp";
-        Intent setupIntent = new Intent(Intent.ACTION_MAIN);
-        setupIntent.addCategory(Intent.CATEGORY_SETUP_WIZARD);
-        ResolveInfo suwInfo =
-                ShadowResolveInfo.newResolveInfo("SetupWizard app", callerPackageName);
-        Shadows.shadowOf(mActivity).setCallingPackage(callerPackageName);
-        suwInfo.activityInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
-
-        getShadowPackageManager().addResolveInfoForIntent(setupIntent, suwInfo);
-
-        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
-        intent.putExtra(BluetoothRequestPermissionActivity.EXTRA_BYPASS_CONFIRM_DIALOG, true);
+        Intent intent = createSetupWizardIntent();
         mActivity.setIntent(intent);
         mActivityController.create();
 
@@ -147,6 +136,48 @@
     }
 
     @Test
+    public void onCreate_requestDiscoverableIntent_bypassforSetup_turningOn_noDialog() {
+        getShadowLocalBluetoothAdapter().setState(BluetoothAdapter.STATE_TURNING_ON);
+        mAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
+
+        Intent intent = createSetupWizardIntent();
+        mActivity.setIntent(intent);
+        mActivityController.create();
+
+        assertThat(mActivity.getCurrentDialog()).isNull();
+    }
+
+    @Test
+    public void onCreate_requestDiscoverableIntent_bypassforSetup_turningOn_receiverRegistered() {
+        getShadowLocalBluetoothAdapter().setState(BluetoothAdapter.STATE_TURNING_ON);
+        mAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
+
+        Intent intent = createSetupWizardIntent();
+        mActivity.setIntent(intent);
+        mActivityController.create();
+
+        assertThat(mActivity.getCurrentReceiver()).isNotNull();
+    }
+
+    @Test
+    public void onCreate_requestDiscoverableIntent_bypassforSetup_turningOn_enableDiscovery() {
+        getShadowLocalBluetoothAdapter().setState(BluetoothAdapter.STATE_TURNING_ON);
+        mAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
+
+        Intent intent = createSetupWizardIntent();
+        mActivity.setIntent(intent);
+        mActivityController.create();
+
+        // Simulate bluetooth callback from STATE_TURNING_ON to STATE_ON
+        Intent stateChangedIntent = new Intent();
+        stateChangedIntent.putExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_ON);
+        mActivity.getCurrentReceiver().onReceive(mContext, stateChangedIntent);
+
+        assertThat(mAdapter.getScanMode()).isEqualTo(
+                BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
+    }
+
+    @Test
     public void onCreate_requestDiscoverableIntent_bypassforGeneric_noScanModeChange() {
         getShadowLocalBluetoothAdapter().setState(BluetoothAdapter.STATE_ON);
         mAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_NONE);
@@ -293,6 +324,22 @@
         assertThat(mAdapter.isEnabled()).isTrue();
     }
 
+    private Intent createSetupWizardIntent() {
+        String callerPackageName = "system.suwapp";
+        Intent setupIntent = new Intent(Intent.ACTION_MAIN);
+        setupIntent.addCategory(Intent.CATEGORY_SETUP_WIZARD);
+        ResolveInfo suwInfo =
+                ShadowResolveInfo.newResolveInfo("SetupWizard app", callerPackageName);
+        Shadows.shadowOf(mActivity).setCallingPackage(callerPackageName);
+        suwInfo.activityInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+
+        getShadowPackageManager().addResolveInfoForIntent(setupIntent, suwInfo);
+
+        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
+        intent.putExtra(BluetoothRequestPermissionActivity.EXTRA_BYPASS_CONFIRM_DIALOG, true);
+        return intent;
+    }
+
     private ShadowLocalBluetoothAdapter getShadowLocalBluetoothAdapter() {
         return (ShadowLocalBluetoothAdapter) Shadow.extract(mAdapter);
     }
diff --git a/tests/robotests/src/com/android/car/settings/common/ButtonPreferenceTest.java b/tests/robotests/src/com/android/car/settings/common/ButtonPreferenceTest.java
deleted file mode 100644
index 8ec3252..0000000
--- a/tests/robotests/src/com/android/car/settings/common/ButtonPreferenceTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.common;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.view.ContextThemeWrapper;
-import android.view.View;
-
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.car.settings.R;
-import com.android.car.settings.common.ButtonPreference.OnButtonClickListener;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class ButtonPreferenceTest {
-
-    private PreferenceViewHolder mViewHolder;
-    private ButtonPreference mButtonPreference;
-
-    @Before
-    public void setUp() {
-        Context context = RuntimeEnvironment.application;
-        Context themedContext = new ContextThemeWrapper(context, R.style.CarSettingTheme);
-
-        mButtonPreference = new ButtonPreference(context);
-        View rootView = View.inflate(themedContext, mButtonPreference.getLayoutResource(), null);
-        mViewHolder = PreferenceViewHolder.createInstanceForTests(rootView);
-    }
-
-    @Test
-    public void buttonClicked_callsListener() {
-        mButtonPreference.onBindViewHolder(mViewHolder);
-        OnButtonClickListener listener = mock(OnButtonClickListener.class);
-        mButtonPreference.setOnButtonClickListener(listener);
-
-        mViewHolder.findViewById(android.R.id.widget_frame).performClick();
-
-        verify(listener).onButtonClick(mButtonPreference);
-    }
-
-    @Test
-    public void performButtonClick_listenerSetAndButtonVisible_listenerFired() {
-        ButtonPreference.OnButtonClickListener listener = mock(
-                ButtonPreference.OnButtonClickListener.class);
-        mButtonPreference.setOnButtonClickListener(listener);
-        mButtonPreference.showAction(true);
-
-        mButtonPreference.performButtonClick();
-        verify(listener).onButtonClick(mButtonPreference);
-    }
-
-    @Test
-    public void performButtonClick_listenerSetAndButtonInvisible_listenerNotFired() {
-        ButtonPreference.OnButtonClickListener listener = mock(
-                ButtonPreference.OnButtonClickListener.class);
-        mButtonPreference.setOnButtonClickListener(listener);
-        mButtonPreference.showAction(false);
-
-        mButtonPreference.performButtonClick();
-        verify(listener, never()).onButtonClick(mButtonPreference);
-    }
-}
diff --git a/tests/robotests/src/com/android/car/settings/common/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/car/settings/common/MasterSwitchPreferenceTest.java
deleted file mode 100644
index 4bb51ff..0000000
--- a/tests/robotests/src/com/android/car/settings/common/MasterSwitchPreferenceTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.common;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.view.View;
-
-import androidx.appcompat.view.ContextThemeWrapper;
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.car.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class MasterSwitchPreferenceTest {
-
-    private PreferenceViewHolder mViewHolder;
-    private MasterSwitchPreference mMasterSwitchPreference;
-    @Mock
-    private MasterSwitchPreference.OnSwitchToggleListener mListener;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        Context context = RuntimeEnvironment.application;
-        Context themedContext = new ContextThemeWrapper(context, R.style.CarSettingTheme);
-
-        mMasterSwitchPreference = new MasterSwitchPreference(context);
-        View rootView = View.inflate(themedContext, mMasterSwitchPreference.getLayoutResource(),
-                null);
-        View.inflate(themedContext, R.layout.master_switch_widget,
-                rootView.findViewById(android.R.id.widget_frame));
-        mViewHolder = PreferenceViewHolder.createInstanceForTests(rootView);
-        mMasterSwitchPreference.onBindViewHolder(mViewHolder);
-        mMasterSwitchPreference.setSwitchChecked(false);
-        mMasterSwitchPreference.setSwitchToggleListener(mListener);
-    }
-
-    @Test
-    public void widgetClicked_callsListener() {
-        mViewHolder.findViewById(android.R.id.widget_frame).performClick();
-
-        verify(mListener).onToggle(mMasterSwitchPreference, true);
-    }
-
-    @Test
-    public void widgetClicked_togglesSwitchState() {
-        mViewHolder.findViewById(android.R.id.widget_frame).performClick();
-
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isTrue();
-    }
-
-    @Test
-    public void setSwitchState_listenerSetAndButtonVisible_oppositeBool_callsListener() {
-        mMasterSwitchPreference.setSwitchChecked(true);
-        verify(mListener).onToggle(mMasterSwitchPreference, true);
-    }
-
-    @Test
-    public void setSwitchState_listenerSetAndButtonVisible_oppositeBool_togglesSwitchState() {
-        mMasterSwitchPreference.setSwitchChecked(true);
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isTrue();
-    }
-
-    @Test
-    public void setSwitchState_listenerSetAndButtonVisible_sameBool_listenerNotCalled() {
-        mMasterSwitchPreference.setSwitchChecked(false);
-        verify(mListener, never()).onToggle(eq(mMasterSwitchPreference), anyBoolean());
-    }
-
-    @Test
-    public void setSwitchState_listenerSetAndButtonInvisible_oppositeBool_listenerNotCalled() {
-        mMasterSwitchPreference.showAction(false);
-
-        mMasterSwitchPreference.setSwitchChecked(true);
-        verify(mListener, never()).onToggle(eq(mMasterSwitchPreference), anyBoolean());
-    }
-}
diff --git a/tests/robotests/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceControllerTest.java
index 69517ae..ebfec1d 100644
--- a/tests/robotests/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/inputmethod/EnabledKeyboardPreferenceControllerTest.java
@@ -194,7 +194,7 @@
     }
 
     @Test
-    public void performClick_noSettingsActivity_noCrash() {
+    public void performClick_missingSettingsActivity_noCrash() {
         // Set to true if you'd like Robolectric to strictly simulate the real Android behavior when
         // calling {@link Context#startActivity(android.content.Intent)}. Real Android throws a
         // {@link android.content.ActivityNotFoundException} if given an {@link Intent} that is not
@@ -214,18 +214,41 @@
         assertThat(intent).isNull();
     }
 
+    @Test
+    public void performClick_noSettingsActivity_noCrash() {
+        ShadowApplication.getInstance().checkActivities(true);
+        getShadowDevicePolicyManager(mContext).setPermittedInputMethodsForCurrentUser(null);
+        List<InputMethodInfo> infos = createInputMethodInfoList(
+                DISALLOWED_PACKAGE_NAME, /* settingsActivity= */ null);
+        getShadowInputMethodManager(mContext).setEnabledInputMethodList(infos);
+
+        mControllerHelper.getController().refreshUi();
+
+        Preference preference = mPreferenceGroup.getPreference(0);
+        preference.performClick();
+
+        Intent intent = ShadowApplication.getInstance().getNextStartedActivity();
+        assertThat(intent).isNull();
+    }
+
     private List<InputMethodInfo> createInputMethodInfoList(String packageName) {
+        return createInputMethodInfoList(packageName, DUMMY_SETTINGS_ACTIVITY);
+    }
+
+    private List<InputMethodInfo> createInputMethodInfoList(String packageName,
+            String settingsName) {
         List<InputMethodInfo> infos = new ArrayList<>();
         PackageManager packageManager = mContext.getPackageManager();
         infos.add(createMockInputMethodInfoWithSubtypes(
-                packageManager, getShadowInputMethodManager(mContext), packageName));
+                packageManager, getShadowInputMethodManager(mContext), packageName, settingsName));
         return infos;
     }
 
     private static InputMethodInfo createMockInputMethodInfoWithSubtypes(
             PackageManager packageManager, ShadowInputMethodManager inputMethodManager,
-            String packageName) {
-        InputMethodInfo mockInfo = createMockInputMethodInfo(packageManager, packageName);
+            String packageName, String settingsName) {
+        InputMethodInfo mockInfo = createMockInputMethodInfo(packageManager, packageName,
+                settingsName);
         List<InputMethodSubtype> subtypes = createSubtypes();
         inputMethodManager.setEnabledInputMethodSubtypeList(subtypes);
 
@@ -233,13 +256,13 @@
     }
 
     private static InputMethodInfo createMockInputMethodInfo(
-            PackageManager packageManager, String packageName) {
+            PackageManager packageManager, String packageName, String settingsName) {
         InputMethodInfo mockInfo = mock(InputMethodInfo.class);
         when(mockInfo.getPackageName()).thenReturn(packageName);
         when(mockInfo.getId()).thenReturn(DUMMY_ID);
         when(mockInfo.loadLabel(packageManager)).thenReturn(DUMMY_LABEL);
         when(mockInfo.getServiceInfo()).thenReturn(new ServiceInfo());
-        when(mockInfo.getSettingsActivity()).thenReturn(DUMMY_SETTINGS_ACTIVITY);
+        when(mockInfo.getSettingsActivity()).thenReturn(settingsName);
         return mockInfo;
     }
 
diff --git a/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java b/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
index b24ca49..3762d9b 100644
--- a/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
@@ -58,7 +58,7 @@
         View enterKey = mPinFragment.getView().findViewById(R.id.key_enter);
         enterKey.setEnabled(false);
 
-        mPinFragment.onCheckCompleted(false);
+        mPinFragment.onCheckCompleted(false, 0);
 
         assertThat(enterKey.isEnabled()).isTrue();
     }
diff --git a/tests/robotests/src/com/android/car/settings/sound/RingtonePreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/sound/RingtonePreferenceControllerTest.java
index 0a0d9a2..60aef0e 100644
--- a/tests/robotests/src/com/android/car/settings/sound/RingtonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/sound/RingtonePreferenceControllerTest.java
@@ -146,30 +146,4 @@
         assertThat(intent.getValue().getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,
                 false)).isTrue();
     }
-
-    @Test
-    public void testProcessActivityResult_wrongResult_defaultRingtoneNotSet() {
-        mController.processActivityResult(RingtonePreferenceController.REQUEST_CODE,
-                ACTIVITY_RESULT_CANCELLED, new Intent());
-        assertThat(ShadowRingtoneManager.getActualDefaultRingtoneUri(mContext,
-                TEST_RINGTONE_TYPE)).isNull();
-    }
-
-    @Test
-    public void testProcessActivityResult_correctResult_nullIntent_defaultRingtoneNotSet() {
-        mController.processActivityResult(RingtonePreferenceController.REQUEST_CODE,
-                ACTIVITY_RESULT_OK, null);
-        assertThat(ShadowRingtoneManager.getActualDefaultRingtoneUri(mContext,
-                TEST_RINGTONE_TYPE)).isNull();
-    }
-
-    @Test
-    public void testProcessActivityResult_correctResult_validIntent_defaultRingtoneSet() {
-        Intent data = new Intent();
-        data.putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, TEST_URI);
-        mController.processActivityResult(RingtonePreferenceController.REQUEST_CODE,
-                ACTIVITY_RESULT_OK, data);
-        assertThat(ShadowRingtoneManager.getActualDefaultRingtoneUri(mContext,
-                TEST_RINGTONE_TYPE)).isEqualTo(TEST_URI);
-    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java
deleted file mode 100644
index d3765b8..0000000
--- a/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.car.settings.storage;
-
-import static com.android.car.settings.storage.AppStorageSettingsDetailsFragment.EXTRA_PACKAGE_NAME;
-import static com.android.car.ui.core.CarUi.requireToolbar;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-import android.app.usage.StorageStats;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-
-import com.android.car.settings.R;
-import com.android.car.settings.testutils.FragmentController;
-import com.android.car.settings.testutils.ShadowActivityManager;
-import com.android.car.settings.testutils.ShadowApplicationPackageManager;
-import com.android.car.settings.testutils.ShadowApplicationsState;
-import com.android.car.settings.testutils.ShadowRestrictedLockUtilsInternal;
-import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
-import com.android.car.ui.toolbar.MenuItem;
-import com.android.car.ui.toolbar.ToolbarController;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.applications.StorageStatsSource;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-/** Unit test for {@link AppStorageSettingsDetailsFragment}. */
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowApplicationsState.class, ShadowRestrictedLockUtilsInternal.class,
-        ShadowApplicationPackageManager.class, ShadowActivityManager.class})
-public class AppStorageSettingsDetailsFragmentTest {
-
-    private static final String PACKAGE_NAME = "com.google.packageName";
-    private static final String SOURCE = "source";
-    private static final int UID = 12;
-    private static final String LABEL = "label";
-    private static final String SIZE_STR = "12.34 MB";
-
-    private Context mContext;
-    private AppStorageSettingsDetailsFragment mFragment;
-    private FragmentController<AppStorageSettingsDetailsFragment> mFragmentController;
-
-    @Mock
-    private ApplicationsState mApplicationsState;
-
-    @Mock
-    private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
-
-    @Mock
-    private PackageManager mPackageManager;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-
-        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
-        CarUiInstallerRobolectric.install();
-
-        mFragment = new AppStorageSettingsDetailsFragment();
-        Bundle bundle = new Bundle();
-        bundle.putString(EXTRA_PACKAGE_NAME, PACKAGE_NAME);
-        mFragment.setArguments(bundle);
-        mFragmentController = FragmentController.of(mFragment);
-
-        ApplicationInfo appInfo = new ApplicationInfo();
-        appInfo.uid = UID;
-        appInfo.sourceDir = SOURCE;
-
-        ApplicationsState.AppEntry appEntry = new ApplicationsState.AppEntry(mContext, appInfo,
-                1234L);
-        appEntry.label = LABEL;
-        appEntry.sizeStr = SIZE_STR;
-        appEntry.icon = mContext.getDrawable(R.drawable.test_icon);
-        appEntry.info.packageName = PACKAGE_NAME;
-        when(mApplicationsState.getEntry(eq(PACKAGE_NAME), anyInt())).thenReturn(appEntry);
-        ShadowApplicationsState.setInstance(mApplicationsState);
-        mFragmentController.setup();
-    }
-
-    @After
-    public void tearDown() {
-        ShadowApplicationsState.reset();
-        ShadowRestrictedLockUtilsInternal.reset();
-        ShadowApplicationPackageManager.reset();
-        ShadowActivityManager.reset();
-    }
-
-    @Test
-    public void onActivityCreated_defaultStatus_shouldShowCacheButtons() {
-        mFragment.onActivityCreated(null);
-
-        assertThat(findClearCacheButton(mFragment.requireActivity())).isNotNull();
-        assertThat(findClearCacheButton(mFragment.requireActivity()).getTitle()).isEqualTo(
-                mContext.getString(R.string.storage_clear_cache_btn_text));
-
-        assertThat(findClearStorageButton(mFragment.requireActivity())).isNotNull();
-        assertThat(findClearStorageButton(mFragment.requireActivity()).getTitle()).isEqualTo(
-                mContext.getString(R.string.storage_clear_user_data_text));
-    }
-
-    @Test
-    public void onActivityCreated_defaultStatus_shouldShowClearStorageButtons() {
-        mFragment.onActivityCreated(null);
-
-        assertThat(findClearStorageButton(mFragment.requireActivity())).isNotNull();
-        assertThat(findClearStorageButton(mFragment.requireActivity()).getTitle()).isEqualTo(
-                mContext.getString(R.string.storage_clear_user_data_text));
-    }
-
-    @Test
-    public void handleClearCacheClick_disallowedBySystem_shouldNotDeleteApplicationCache() {
-        ShadowRestrictedLockUtilsInternal.setEnforcedAdmin(mEnforcedAdmin);
-        ShadowApplicationPackageManager.setPackageManager(mPackageManager);
-
-        doNothing().when(mPackageManager).deleteApplicationCacheFiles(anyString(), any());
-
-        mFragmentController.resume();
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 0;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-        findClearCacheButton(mFragment.requireActivity()).performClick();
-
-        verify(mPackageManager, never()).deleteApplicationCacheFiles(anyString(), any());
-    }
-
-    @Test
-    public void handleClearCacheClick_allowedBySystem_shouldNotDeleteApplicationCache() {
-        ShadowRestrictedLockUtilsInternal.setEnforcedAdmin(mEnforcedAdmin);
-        ShadowRestrictedLockUtilsInternal.setHasBaseUserRestriction(true);
-        ShadowApplicationPackageManager.setPackageManager(mPackageManager);
-
-        doNothing().when(mPackageManager).deleteApplicationCacheFiles(anyString(), any());
-
-        mFragmentController.resume();
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-        findClearCacheButton(mFragment.requireActivity()).performClick();
-
-        verify(mPackageManager).deleteApplicationCacheFiles(anyString(), any());
-    }
-
-    @Test
-    public void handleClearDataClick_disallowedBySystem_shouldNotShowDialogToClear() {
-        ShadowRestrictedLockUtilsInternal.setEnforcedAdmin(mEnforcedAdmin);
-        ShadowApplicationPackageManager.setPackageManager(mPackageManager);
-
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 10;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-
-        assertThat(findClearStorageButton(mFragment.requireActivity()).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void handleClearDataClick_allowedBySystem_shouldShowDialogToClear() {
-        ShadowRestrictedLockUtilsInternal.setEnforcedAdmin(mEnforcedAdmin);
-        ShadowRestrictedLockUtilsInternal.setHasBaseUserRestriction(true);
-        ShadowApplicationPackageManager.setPackageManager(mPackageManager);
-
-        mFragmentController.resume();
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-        findClearStorageButton(mFragment.requireActivity()).performClick();
-
-        assertThat(mFragment.getFragmentManager()).isNotNull();
-    }
-
-    @Test
-    public void onDataLoaded_noResult_buttonsShouldBeDisabled() {
-        mFragment.onActivityCreated(null);
-
-        mFragment.onDataLoaded(null, false, false);
-
-        assertThat(findClearCacheButton(mFragment.requireActivity()).isEnabled()).isFalse();
-        assertThat(findClearStorageButton(mFragment.requireActivity()).isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onDataLoaded_resultLoaded_cacheButtonsShouldBeEnabled() {
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-
-        assertThat(findClearCacheButton(mFragment.requireActivity()).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onDataLoaded_resultLoaded_dataButtonsShouldBeEnabled() {
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-
-        assertThat(findClearStorageButton(mFragment.requireActivity()).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void updateUiWithSize_resultLoaded_cacheButtonDisabledAndDataButtonsEnabled() {
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 50;
-        stats.cacheBytes = 0;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-
-        assertThat(findClearCacheButton(mFragment.requireActivity()).isEnabled()).isFalse();
-        assertThat(findClearStorageButton(mFragment.requireActivity()).isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onDataLoaded_resultLoaded_cacheButtonEnabledAndDataButtonDisabled() {
-        StorageStats stats = new StorageStats();
-        stats.codeBytes = 100;
-        stats.dataBytes = 10;
-        stats.cacheBytes = 10;
-        StorageStatsSource.AppStorageStats storageStats =
-                new StorageStatsSource.AppStorageStatsImpl(stats);
-
-        mFragment.onActivityCreated(null);
-        mFragment.onDataLoaded(storageStats, false, false);
-
-        assertThat(findClearCacheButton(mFragment.requireActivity()).isEnabled()).isTrue();
-        assertThat(findClearStorageButton(mFragment.requireActivity()).isEnabled()).isFalse();
-    }
-
-    private MenuItem findClearCacheButton(Activity activity) {
-        ToolbarController toolbar = requireToolbar(activity);
-        return toolbar.getMenuItems().get(1);
-    }
-
-    private MenuItem findClearStorageButton(Activity activity) {
-        ToolbarController toolbar = requireToolbar(activity);
-        return toolbar.getMenuItems().get(0);
-    }
-}
diff --git a/tests/robotests/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceControllerTest.java
index 022b0ea..ee5ebc2 100644
--- a/tests/robotests/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/tts/PreferredEngineEntryPreferenceControllerTest.java
@@ -27,9 +27,9 @@
 
 import androidx.lifecycle.Lifecycle;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowTtsEngines;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 
 import org.junit.After;
 import org.junit.Before;
@@ -54,7 +54,7 @@
         ENGINE_INFO.name = "com.android.car.settings.tts.test.Engine";
     }
 
-    private ButtonPreference mPreference;
+    private CarUiTwoActionIconPreference mPreference;
     @Mock
     private TtsEngines mEnginesHelper;
 
@@ -64,7 +64,7 @@
         ShadowTtsEngines.setInstance(mEnginesHelper);
         Context context = RuntimeEnvironment.application;
 
-        mPreference = new ButtonPreference(context);
+        mPreference = new CarUiTwoActionIconPreference(context);
         PreferenceControllerTestHelper<PreferredEngineEntryPreferenceController> controllerHelper =
                 new PreferenceControllerTestHelper<>(context,
                         PreferredEngineEntryPreferenceController.class, mPreference);
@@ -85,7 +85,7 @@
 
     @Test
     public void performButtonClick_navigateToNextActivity() {
-        mPreference.performButtonClick();
+        mPreference.performSecondaryActionClick();
 
         Intent actual = ShadowApplication.getInstance().getNextStartedActivity();
         assertThat(actual.getAction()).isEqualTo(INTENT_ACTION);
diff --git a/tests/robotests/src/com/android/car/settings/users/AddNewUserTaskTest.java b/tests/robotests/src/com/android/car/settings/users/AddNewUserTaskTest.java
index 4e66ab5..47981a3 100644
--- a/tests/robotests/src/com/android/car/settings/users/AddNewUserTaskTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/AddNewUserTaskTest.java
@@ -16,12 +16,22 @@
 
 package com.android.car.settings.users;
 
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
+import android.car.user.UserCreationResult;
+import android.content.Context;
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.os.UserManager;
+
+import androidx.annotation.Nullable;
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.infra.AndroidFuture;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -34,34 +44,43 @@
 @RunWith(RobolectricTestRunner.class)
 public class AddNewUserTaskTest {
     @Mock
-    private CarUserManagerHelper mCarUserManagerHelper;
+    private UserManager mUserManager;
     @Mock
     private CarUserManager mCarUserManager;
     @Mock
     private AddNewUserTask.AddNewUserListener mAddNewUserListener;
+    @Mock
+    private Context mContext;
 
     private AddNewUserTask mTask;
 
+    private final Resources mResources = InstrumentationRegistry.getTargetContext().getResources();
+
     @Before
     public void createAsyncTask() {
         MockitoAnnotations.initMocks(this);
-        mTask = new AddNewUserTask(mCarUserManagerHelper, mCarUserManager, mAddNewUserListener);
+        mTask = new AddNewUserTask(mContext, mCarUserManager, mAddNewUserListener);
     }
 
     @Test
-    public void testTaskCallsCreateNewNonAdminUser() {
+    public void testTaskCallsCreateNewUser() {
         String newUserName = "Test name";
+        UserInfo newUser = new UserInfo(10, newUserName, /* flags= */ 0);
+
+        mockCreateUser(newUser, UserCreationResult.STATUS_SUCCESSFUL);
+
         mTask.execute(newUserName);
         Robolectric.flushBackgroundThreadScheduler();
 
-        verify(mCarUserManagerHelper).createNewNonAdminUser(newUserName);
+        verify(mCarUserManager).createUser(newUserName, /* flags= */ 0);
     }
 
     @Test
     public void testSwitchToNewUserIfUserCreated() {
         String newUserName = "Test name";
         UserInfo newUser = new UserInfo(10, newUserName, /* flags= */ 0);
-        when(mCarUserManagerHelper.createNewNonAdminUser(newUserName)).thenReturn(newUser);
+
+        mockCreateUser(newUser, UserCreationResult.STATUS_SUCCESSFUL);
 
         mTask.execute(newUserName);
         Robolectric.flushBackgroundThreadScheduler();
@@ -73,7 +92,8 @@
     public void testOnUserAddedSuccessCalledIfUserCreated() {
         String newUserName = "Test name";
         UserInfo newUser = new UserInfo(10, newUserName, /* flags= */ 0);
-        when(mCarUserManagerHelper.createNewNonAdminUser(newUserName)).thenReturn(newUser);
+
+        mockCreateUser(newUser, UserCreationResult.STATUS_SUCCESSFUL);
 
         mTask.execute(newUserName);
         Robolectric.flushBackgroundThreadScheduler();
@@ -84,11 +104,22 @@
     @Test
     public void testOnUserAddedFailureCalledIfNullReturned() {
         String newUserName = "Test name";
-        when(mCarUserManagerHelper.createNewNonAdminUser(newUserName)).thenReturn(null);
+
+        mockCreateUser(/* user= */ null, UserCreationResult.STATUS_ANDROID_FAILURE);
 
         mTask.execute(newUserName);
         Robolectric.flushBackgroundThreadScheduler();
 
         verify(mAddNewUserListener).onUserAddedFailure();
     }
+
+    private void mockCreateUser(@Nullable UserInfo user, int status) {
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        when(mContext.getResources()).thenReturn(mResources);
+
+        AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
+        future.complete(new UserCreationResult(status,
+                user, /* errorMessage= */ null));
+        when(mCarUserManager.createUser(anyString(), anyInt())).thenReturn(future);
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/users/EditUserNameEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/users/EditUserNameEntryPreferenceControllerTest.java
index 968f7dd..b9dd231 100644
--- a/tests/robotests/src/com/android/car/settings/users/EditUserNameEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/EditUserNameEntryPreferenceControllerTest.java
@@ -32,10 +32,10 @@
 import androidx.lifecycle.Lifecycle;
 
 import com.android.car.settings.R;
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
+import com.android.car.ui.preference.CarUiTwoActionIconPreference;
 
 import org.junit.After;
 import org.junit.Before;
@@ -57,7 +57,7 @@
     private PreferenceControllerTestHelper<EditUserNameEntryPreferenceController>
             mPreferenceControllerHelper;
     private EditUserNameEntryPreferenceController mController;
-    private ButtonPreference mButtonPreference;
+    private CarUiTwoActionIconPreference mButtonPreference;
     @Mock
     private UserHelper mUserHelper;
 
@@ -70,7 +70,7 @@
                 EditUserNameEntryPreferenceController.class);
         mController = mPreferenceControllerHelper.getController();
         mController.setUserInfo(new UserInfo());
-        mButtonPreference = new ButtonPreference(mContext);
+        mButtonPreference = new CarUiTwoActionIconPreference(mContext);
         mButtonPreference.setSelectable(false);
         mPreferenceControllerHelper.setPreference(mButtonPreference);
     }
@@ -86,7 +86,7 @@
         when(mUserHelper.isCurrentProcessUser(userInfo)).thenReturn(true);
         mController.setUserInfo(userInfo);
         mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        mButtonPreference.performButtonClick();
+        mButtonPreference.performSecondaryActionClick();
         verify(mPreferenceControllerHelper.getMockFragmentController()).launchFragment(
                 any(EditUsernameFragment.class));
     }
@@ -97,7 +97,7 @@
         when(mUserHelper.isCurrentProcessUser(userInfo)).thenReturn(false);
         mController.setUserInfo(userInfo);
         mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        mButtonPreference.performButtonClick();
+        mButtonPreference.performSecondaryActionClick();
         verify(mPreferenceControllerHelper.getMockFragmentController(), never()).launchFragment(
                 any(EditUsernameFragment.class));
     }
diff --git a/tests/robotests/src/com/android/car/settings/users/MakeAdminPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/users/MakeAdminPreferenceControllerTest.java
index 55f7a10..85eaf1d 100644
--- a/tests/robotests/src/com/android/car/settings/users/MakeAdminPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/MakeAdminPreferenceControllerTest.java
@@ -30,11 +30,11 @@
 
 import androidx.lifecycle.Lifecycle;
 
-import com.android.car.settings.common.ButtonPreference;
 import com.android.car.settings.common.ConfirmationDialogFragment;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
+import com.android.car.ui.preference.CarUiTwoActionTextPreference;
 
 import org.junit.After;
 import org.junit.Before;
@@ -56,7 +56,7 @@
     private PreferenceControllerTestHelper<MakeAdminPreferenceController>
             mPreferenceControllerHelper;
     private MakeAdminPreferenceController mController;
-    private ButtonPreference mButtonPreference;
+    private CarUiTwoActionTextPreference mButtonPreference;
     private ConfirmationDialogFragment mDialog;
 
     @Mock
@@ -71,7 +71,7 @@
                 MakeAdminPreferenceController.class);
         mController = mPreferenceControllerHelper.getController();
         mController.setUserInfo(TEST_USER);
-        mButtonPreference = new ButtonPreference(context);
+        mButtonPreference = new CarUiTwoActionTextPreference(context);
         mButtonPreference.setSelectable(false);
         mPreferenceControllerHelper.setPreference(mButtonPreference);
         mDialog = new ConfirmationDialogFragment.Builder(context).build();
@@ -94,7 +94,7 @@
     @Test
     public void testOnButtonClick_showsDialog() {
         mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        mButtonPreference.performButtonClick();
+        mButtonPreference.performSecondaryActionClick();
         verify(mPreferenceControllerHelper.getMockFragmentController()).showDialog(
                 any(ConfirmationDialogFragment.class),
                 matches(ConfirmationDialogFragment.TAG));
diff --git a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
index 69e9f4e..365c57a 100644
--- a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
@@ -20,12 +20,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.car.drivingstate.CarUxRestrictions;
-import android.car.userlib.CarUserManagerHelper;
+import android.car.user.CarUserManager;
+import android.car.user.UserCreationResult;
 import android.content.Context;
 import android.content.pm.UserInfo;
 import android.os.UserHandle;
@@ -33,7 +35,6 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.FragmentController;
-import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
 import com.android.car.settings.testutils.ShadowUserManager;
@@ -41,6 +42,7 @@
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.ToolbarController;
 import com.android.car.ui.utils.CarUxRestrictionsUtil;
+import com.android.internal.infra.AndroidFuture;
 
 import org.junit.After;
 import org.junit.Before;
@@ -48,7 +50,6 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
@@ -60,8 +61,7 @@
  * Tests for UserDetailsFragment.
  */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class,
-        ShadowUserHelper.class, ShadowUserManager.class})
+@Config(shadows = {ShadowUserIconProvider.class, ShadowUserHelper.class, ShadowUserManager.class})
 public class UsersListFragmentTest {
 
     private Context mContext;
@@ -70,7 +70,7 @@
     private FragmentController<UsersListFragment> mFragmentController;
 
     @Mock
-    private CarUserManagerHelper mCarUserManagerHelper;
+    private CarUserManager mCarUserManager;
 
     @Mock
     private UserHelper mUserHelper;
@@ -78,7 +78,6 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
         ShadowUserHelper.setInstance(mUserHelper);
         mContext = RuntimeEnvironment.application;
 
@@ -92,7 +91,6 @@
     @After
     public void tearDown() {
         ShadowUserHelper.reset();
-        ShadowCarUserManagerHelper.reset();
         ShadowUserManager.reset();
     }
 
@@ -123,12 +121,18 @@
 
     /* Test that onCreateNewUserConfirmed invokes a creation of a new non-admin. */
     @Test
-    public void testOnCreateNewUserConfirmedInvokesCreateNewNonAdminUser() {
+    public void testOnCreateNewUserConfirmedInvokesCreateNewUser() {
         createUsersListFragment(/* flags= */ 0, /* disallowAddUser= */ false);
+        mFragment.setCarUserManager(mCarUserManager);
+
+        AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
+        future.complete(new UserCreationResult(UserCreationResult.STATUS_SUCCESSFUL,
+                /* user= */ null, /* errorMessage= */ null));
+        when(mCarUserManager.createUser(anyString(), anyInt())).thenReturn(future);
+
         mFragment.mConfirmCreateNewUserListener.onConfirm(/* arguments= */ null);
-        Robolectric.flushBackgroundThreadScheduler();
-        verify(mCarUserManagerHelper)
-                .createNewNonAdminUser(mContext.getString(R.string.user_new_user_name));
+        verify(mCarUserManager).createUser(mContext.getString(R.string.user_new_user_name),
+                /* flags= */ 0);
     }
 
     /* Test that if we're in demo user, click on the button starts exit out of the retail mode. */
@@ -164,7 +168,6 @@
                 testUser.getUserHandle(), UserManager.DISALLOW_ADD_USER, disallowAddUser);
         when(mUserHelper.getCurrentProcessUserInfo()).thenReturn(testUser);
         when(mUserHelper.getAllSwitchableUsers()).thenReturn(new ArrayList<>());
-        when(mCarUserManagerHelper.createNewNonAdminUser(any())).thenReturn(null);
         mFragmentController.setup();
 
         ToolbarController toolbar = (ToolbarController) requireToolbar(mFragment.requireActivity());
diff --git a/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java b/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
index a8d9297..dbf2242 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
@@ -16,6 +16,8 @@
 
 package com.android.car.settings.wifi;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -82,4 +84,40 @@
         mButtonPreference.performButtonClick();
         verify(listener, never()).onButtonClick(mButtonPreference);
     }
+
+    @Test
+    public void onBindViewHolder_buttonShown() {
+        mButtonPreference.showButton(true);
+        View containerWithoutWidget = mViewHolder.findViewById(
+                com.android.car.ui.R.id.car_ui_preference_container_without_widget);
+        View actionContainer = mButtonPreference.getWidgetActionContainer(mViewHolder);
+        View widgetFrame = mViewHolder.findViewById(android.R.id.widget_frame);
+
+        mButtonPreference.onBindViewHolder(mViewHolder);
+
+        assertThat(mViewHolder.itemView.isFocusable()).isFalse();
+        assertThat(containerWithoutWidget.isClickable()).isTrue();
+        assertThat(containerWithoutWidget.isFocusable()).isTrue();
+        assertThat(actionContainer.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(widgetFrame.isClickable()).isTrue();
+        assertThat(widgetFrame.isFocusable()).isTrue();
+    }
+
+    @Test
+    public void onBindViewHolder_buttonNotShown() {
+        mButtonPreference.showButton(false);
+        View containerWithoutWidget = mViewHolder.findViewById(
+                com.android.car.ui.R.id.car_ui_preference_container_without_widget);
+        View actionContainer = mButtonPreference.getWidgetActionContainer(mViewHolder);
+        View widgetFrame = mViewHolder.findViewById(android.R.id.widget_frame);
+
+        mButtonPreference.onBindViewHolder(mViewHolder);
+
+        assertThat(mViewHolder.itemView.isFocusable()).isTrue();
+        assertThat(containerWithoutWidget.isClickable()).isFalse();
+        assertThat(containerWithoutWidget.isFocusable()).isFalse();
+        assertThat(actionContainer.getVisibility()).isEqualTo(View.GONE);
+        assertThat(widgetFrame.hasOnClickListeners()).isFalse();
+        assertThat(widgetFrame.isFocusable()).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/wifi/WifiEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/wifi/WifiEntryPreferenceControllerTest.java
index 911d45a..6ef98c5 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/WifiEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/WifiEntryPreferenceControllerTest.java
@@ -28,10 +28,11 @@
 import android.net.wifi.WifiManager;
 
 import androidx.lifecycle.Lifecycle;
+import androidx.test.core.app.ApplicationProvider;
 
-import com.android.car.settings.common.MasterSwitchPreference;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowCarWifiManager;
+import com.android.car.ui.preference.CarUiTwoActionSwitchPreference;
 
 import org.junit.After;
 import org.junit.Before;
@@ -40,7 +41,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 
@@ -50,7 +50,7 @@
 public class WifiEntryPreferenceControllerTest {
 
     private Context mContext;
-    private MasterSwitchPreference mMasterSwitchPreference;
+    private CarUiTwoActionSwitchPreference mSeparateSwitchPreference;
     private PreferenceControllerTestHelper<WifiEntryPreferenceController> mControllerHelper;
     private WifiEntryPreferenceController mController;
     @Mock
@@ -60,10 +60,10 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         ShadowCarWifiManager.setInstance(mCarWifiManager);
-        mContext = RuntimeEnvironment.application;
-        mMasterSwitchPreference = new MasterSwitchPreference(mContext);
+        mContext = ApplicationProvider.getApplicationContext();
+        mSeparateSwitchPreference = new CarUiTwoActionSwitchPreference(mContext);
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
-                WifiEntryPreferenceController.class, mMasterSwitchPreference);
+                WifiEntryPreferenceController.class, mSeparateSwitchPreference);
         mController = mControllerHelper.getController();
     }
 
@@ -73,25 +73,15 @@
     }
 
     @Test
-    public void onCreate_setsListener() {
-        Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
-                PackageManager.FEATURE_WIFI, /* supported= */ true);
-        assertThat(mMasterSwitchPreference.getSwitchToggleListener()).isNull();
-
-        mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
-        assertThat(mMasterSwitchPreference.getSwitchToggleListener()).isNotNull();
-    }
-
-    @Test
     public void onStart_wifiDisabled_setsSwitchUnchecked() {
         Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
                 PackageManager.FEATURE_WIFI, /* supported= */ true);
         when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
-        mMasterSwitchPreference.setSwitchChecked(true);
+        mSeparateSwitchPreference.setSecondaryActionChecked(true);
 
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_START);
 
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isFalse();
+        assertThat(mSeparateSwitchPreference.isSecondaryActionChecked()).isFalse();
     }
 
     @Test
@@ -99,11 +89,11 @@
         Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
                 PackageManager.FEATURE_WIFI, /* supported= */ true);
         when(mCarWifiManager.isWifiEnabled()).thenReturn(true);
-        mMasterSwitchPreference.setSwitchChecked(false);
+        mSeparateSwitchPreference.setSecondaryActionChecked(false);
 
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_START);
 
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isTrue();
+        assertThat(mSeparateSwitchPreference.isSecondaryActionChecked()).isTrue();
     }
 
     @Test
@@ -116,7 +106,7 @@
         when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
         mController.onWifiStateChanged(WifiManager.WIFI_STATE_DISABLED);
 
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isFalse();
+        assertThat(mSeparateSwitchPreference.isSecondaryActionChecked()).isFalse();
     }
 
     @Test
@@ -129,7 +119,19 @@
         when(mCarWifiManager.isWifiEnabled()).thenReturn(true);
         mController.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
 
-        assertThat(mMasterSwitchPreference.isSwitchChecked()).isTrue();
+        assertThat(mSeparateSwitchPreference.isSecondaryActionChecked()).isTrue();
+    }
+
+    @Test
+    public void onWifiStateChanged_enabling_setsSwitchChecked() {
+        Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
+                PackageManager.FEATURE_WIFI, /* supported= */ true);
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
+        mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_START);
+
+        mController.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLING);
+
+        assertThat(mSeparateSwitchPreference.isSecondaryActionChecked()).isTrue();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/wifi/WifiSettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/wifi/WifiSettingsFragmentTest.java
new file mode 100644
index 0000000..4b1a830
--- /dev/null
+++ b/tests/robotests/src/com/android/car/settings/wifi/WifiSettingsFragmentTest.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.wifi;
+
+import static com.android.car.ui.core.CarUi.requireToolbar;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.net.wifi.WifiManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.car.settings.testutils.FragmentController;
+import com.android.car.settings.testutils.ShadowCarWifiManager;
+import com.android.car.settings.testutils.ShadowWifiManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
+import com.android.car.ui.toolbar.MenuItem;
+import com.android.car.ui.toolbar.ToolbarController;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
+
+/** Unit test for {@link WifiSettingsFragment}. */
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowCarWifiManager.class})
+public class WifiSettingsFragmentTest {
+
+    private Context mContext;
+    private WifiSettingsFragment mFragment;
+    private FragmentController<WifiSettingsFragment> mFragmentController;
+    @Mock
+    private CarWifiManager mCarWifiManager;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        ShadowCarWifiManager.setInstance(mCarWifiManager);
+        mContext = ApplicationProvider.getApplicationContext();
+        mFragment = new WifiSettingsFragment();
+        mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
+    }
+
+    @After
+    public void tearDown() {
+        ShadowWifiManager.reset();
+    }
+
+    @Test
+    public void onWifiStateChanged_disabled_setsSwitchUnchecked() {
+        Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
+                PackageManager.FEATURE_WIFI, /* supported= */ true);
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(true);
+        mFragmentController.setup();
+
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
+        mFragment.onWifiStateChanged(WifiManager.WIFI_STATE_DISABLED);
+
+        assertThat(getWifiSwitch().isChecked()).isFalse();
+    }
+
+    @Test
+    public void onWifiStateChanged_enabled_setsSwitchChecked() {
+        Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
+                PackageManager.FEATURE_WIFI, /* supported= */ true);
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
+        mFragmentController.setup();
+
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(true);
+        mFragment.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
+
+        assertThat(getWifiSwitch().isChecked()).isTrue();
+    }
+
+    @Test
+    public void onWifiStateChanged_enabling_setsSwitchChecked() {
+        Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
+                PackageManager.FEATURE_WIFI, /* supported= */ true);
+        when(mCarWifiManager.isWifiEnabled()).thenReturn(false);
+        mFragmentController.setup();
+
+        mFragment.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLING);
+
+        assertThat(getWifiSwitch().isChecked()).isTrue();
+    }
+
+    private MenuItem getWifiSwitch() {
+        ToolbarController toolbar = requireToolbar(mFragment.requireActivity());
+        return toolbar.getMenuItems().get(0);
+    }
+}
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
new file mode 100644
index 0000000..7013d15
--- /dev/null
+++ b/tests/unit/Android.bp
@@ -0,0 +1,33 @@
+android_test {
+    name: "CarSettingsUnitTests",
+
+    certificate: "platform",
+    privileged: true,
+
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+    ],
+
+    static_libs: [
+        "CarSettingsForUnitTesting",
+        "android.car",
+        "androidx.test.core",
+        "androidx.test.rules",
+        "androidx.test.ext.junit",
+        "androidx.test.ext.truth",
+        "mockito-target-extended-minus-junit4",
+        "platform-test-annotations",
+        "truth-prebuilt",
+        "testng",
+    ],
+
+    jni_libs: ["libdexmakerjvmtiagent", "libstaticjvmtiagent"],
+
+    aaptflags: ["--extra-packages com.android.car.settings"],
+
+    instrumentation_for: "CarSettingsForTesting",
+}
\ No newline at end of file
diff --git a/tests/unit/AndroidManifest.xml b/tests/unit/AndroidManifest.xml
new file mode 100644
index 0000000..9842df1
--- /dev/null
+++ b/tests/unit/AndroidManifest.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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.
+  -->
+
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+    android:sharedUserId="android.uid.system"
+    package="com.android.car.settings.tests.unit">
+
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.BACKUP"/>
+    <uses-permission android:name="android.permission.BLUETOOTH"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
+    <uses-permission android:name="android.permission.CAR_VENDOR_EXTENSION"/>
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
+    <uses-permission android:name="android.permission.CONTROL_DISPLAY_UNITS"/>
+    <uses-permission android:name="android.permission.DELETE_CACHE_FILES"/>
+    <uses-permission android:name="android.permission.DUMP"/>
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
+    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
+    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
+    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+    <uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS"/>
+    <uses-permission android:name="android.permission.MANAGE_USERS"/>
+    <uses-permission android:name="android.permission.MASTER_CLEAR" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
+    <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
+    <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"/>
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <uses-permission android:name="android.permission.READ_DISPLAY_UNITS"/>
+    <uses-permission android:name="android.permission.REBOOT"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+    <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
+    <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"/>
+    <uses-permission android:name="android.permission.START_FOREGROUND"/>
+    <uses-permission android:name="android.permission.STATUS_BAR_SERVICE"/>
+    <uses-permission android:name="android.permission.SUGGEST_MANUAL_TIME_AND_ZONE"/>
+    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+
+        <provider
+            android:name="com.android.car.settings.testutils.TestContentProvider"
+            android:authorities="com.android.car.settings.testutils.TestContentProvider"
+            android:exported="true">
+        </provider>
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="com.android.car.settings.tests.unit"
+                     android:label="Car Settings Unit Tests"/>
+</manifest>
diff --git a/tests/unit/res/drawable/test_icon.xml b/tests/unit/res/drawable/test_icon.xml
new file mode 100644
index 0000000..93ab1a7
--- /dev/null
+++ b/tests/unit/res/drawable/test_icon.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open 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="44dp"
+    android:height="44dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0">
+    <path
+        android:fillColor="#ffffff"
+        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/unit/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceControllerTest.java
new file mode 100644
index 0000000..8303d20
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/applications/ApplicationActionButtonsPreferenceControllerTest.java
@@ -0,0 +1,659 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.applications;
+
+import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.DISABLE_CONFIRM_DIALOG_TAG;
+import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.FORCE_STOP_CONFIRM_DIALOG_TAG;
+import static com.android.car.settings.applications.ApplicationActionButtonsPreferenceController.UNINSTALL_REQUEST_CODE;
+import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.Manifest;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.admin.DevicePolicyManager;
+import android.app.role.RoleManager;
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.Signature;
+import android.content.res.Resources;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.common.ActionButtonInfo;
+import com.android.car.settings.common.ActionButtonsPreference;
+import com.android.car.settings.common.ActivityResultCallback;
+import com.android.car.settings.common.ConfirmationDialogFragment;
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.PreferenceControllerTestUtil;
+import com.android.car.settings.testutils.ResourceTestUtils;
+import com.android.car.settings.testutils.TestLifecycleOwner;
+import com.android.settingslib.applications.ApplicationsState;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class ApplicationActionButtonsPreferenceControllerTest {
+
+    private static final String PACKAGE_NAME = "Test Package Name";
+
+    private Context mContext = spy(ApplicationProvider.getApplicationContext());
+    private LifecycleOwner mLifecycleOwner;
+    private ActionButtonsPreference mActionButtonsPreference;
+    private ApplicationActionButtonsPreferenceController mPreferenceController;
+    private CarUxRestrictions mCarUxRestrictions;
+    private ApplicationInfo mApplicationInfo;
+    private PackageInfo mPackageInfo;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private ApplicationsState mMockAppState;
+    @Mock
+    private ApplicationsState.AppEntry mMockAppEntry;
+    @Mock
+    private DevicePolicyManager mMockDpm;
+    @Mock
+    private PackageManager mMockPm;
+    @Mock
+    private ActivityManager mMockActivityManager;
+    @Mock
+    private UserManager mMockUserManager;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mLifecycleOwner = new TestLifecycleOwner();
+        setMocks();
+
+        mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+        mActionButtonsPreference = new ActionButtonsPreference(mContext);
+        mPreferenceController = new ApplicationActionButtonsPreferenceController(mContext,
+                /* preferenceKey= */ "key", mFragmentController, mCarUxRestrictions);
+    }
+
+    @Test
+    public void testCheckInitialized_noAppState_throwException() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setPackageName(PACKAGE_NAME);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noAppEntry_throwException() {
+        mPreferenceController.setAppState(mMockAppState).setPackageName(PACKAGE_NAME);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noPackageNameEntry_throwException() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setAppState(mMockAppState);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void onCreate_bundledApp_enabled_showDisableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "disable_text"));
+    }
+
+    @Test
+    public void onCreate_bundledApp_disabled_showEnableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ false, /* system= */ true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "enable_text"));
+    }
+
+    @Test
+    public void onCreate_bundledApp_enabled_disableUntilUsed_showsEnableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+        mApplicationInfo.enabledSetting =
+                PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+        mMockAppEntry.info = mApplicationInfo;
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "enable_text"));
+    }
+
+    @Test
+    public void onCreate_bundledApp_homePackage_disablesDisableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+
+        ResolveInfo homeActivity = new ResolveInfo();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = PACKAGE_NAME;
+        homeActivity.activityInfo = activityInfo;
+
+        when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
+            Object[] args = invocation.getArguments();
+            ((List<ResolveInfo>) args[0]).add(homeActivity);
+            return null;
+        });
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_bundledApp_systemPackage_disablesDisableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+        mPackageInfo.signatures = new Signature[]{new Signature(PACKAGE_NAME.getBytes())};
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_bundledApp_enabledApp_keepEnabledPackage_disablesDisableButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+
+        ResolveInfo phoneActivity = new ResolveInfo();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = PACKAGE_NAME;
+        activityInfo.permission = Manifest.permission.BROADCAST_SMS;
+        phoneActivity.activityInfo = activityInfo;
+
+        RoleManager mockRoleManager = mock(RoleManager.class);
+        when(mContext.getSystemService(RoleManager.class)).thenReturn(mockRoleManager);
+        when(mockRoleManager.getRoleHoldersAsUser(eq(RoleManager.ROLE_DIALER),
+                any(UserHandle.class))).thenReturn(Collections.singletonList(PACKAGE_NAME));
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getDisableButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_notSystemApp_showUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "uninstall_text"));
+    }
+
+    @Test
+    public void onCreate_packageHasActiveAdmins_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        when(mMockDpm.packageHasActiveAdmins(PACKAGE_NAME)).thenReturn(true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_deviceProvisioningPackage_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        Resources resources = mock(Resources.class);
+        when(mContext.getResources()).thenReturn(resources);
+        when(resources.getString(com.android.internal.R.string.config_deviceProvisioningPackage))
+                .thenReturn(PACKAGE_NAME);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onStart_uninstallQueued_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        when(mMockDpm.isUninstallInQueue(PACKAGE_NAME)).thenReturn(true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onStart_noDefaultHome_onlyHomeApp_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        ResolveInfo homeActivity = new ResolveInfo();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = PACKAGE_NAME;
+        homeActivity.activityInfo = activityInfo;
+
+        when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
+            Object[] args = invocation.getArguments();
+            ((List<ResolveInfo>) args[0]).add(homeActivity);
+            return null;
+        });
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onStart_noDefaultHome_multipleHomeApps_enablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        ResolveInfo homeActivity = new ResolveInfo();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = PACKAGE_NAME;
+        homeActivity.activityInfo = activityInfo;
+
+        ResolveInfo altHomeActivity = new ResolveInfo();
+        ActivityInfo altActivityInfo = new ActivityInfo();
+        altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
+        altHomeActivity.activityInfo = altActivityInfo;
+
+        when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
+            Object[] args = invocation.getArguments();
+            ((List<ResolveInfo>) args[0]).addAll(Arrays.asList(homeActivity, altHomeActivity));
+            return null;
+        });
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void onStart_defaultHomeApp_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        ResolveInfo homeActivity = new ResolveInfo();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = PACKAGE_NAME;
+        homeActivity.activityInfo = activityInfo;
+
+        ResolveInfo altHomeActivity = new ResolveInfo();
+        ActivityInfo altActivityInfo = new ActivityInfo();
+        altActivityInfo.packageName = PACKAGE_NAME + ".Someotherhome";
+        altHomeActivity.activityInfo = altActivityInfo;
+
+        when(mMockPm.getHomeActivities(anyList())).then(invocation -> {
+            Object[] args = invocation.getArguments();
+            ((List<ResolveInfo>) args[0]).addAll(Arrays.asList(homeActivity, altHomeActivity));
+            return new ComponentName(PACKAGE_NAME, "SomeClass");
+        });
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onStart_appsControlUserRestriction_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)).thenReturn(
+                true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onStart_uninstallAppsRestriction_disablesUninstallButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_UNINSTALL_APPS)).thenReturn(
+                true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getUninstallButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_forceStopButtonInitialized() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getForceStopButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "force_stop"));
+    }
+
+    @Test
+    public void onCreate_notStopped_enablesForceStopButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getForceStopButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void onCreate_stopped_disablesForceStopButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getForceStopButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_packageHasActiveAdmins_disablesForceStopButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+        when(mMockDpm.packageHasActiveAdmins(PACKAGE_NAME)).thenReturn(true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getForceStopButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_appsControlUserRestriction_disablesForceStopButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL)).thenReturn(
+                true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getForceStopButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onCreate_packageExplicitlyStopped_queriesPackageRestart() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mContext).sendOrderedBroadcastAsUser(any(Intent.class),
+                eq(UserHandle.CURRENT),
+                /* receiverPermission= */ isNull(),
+                any(BroadcastReceiver.class),
+                /* scheduler= */ isNull(),
+                eq(Activity.RESULT_CANCELED),
+                /* initialData= */ isNull(),
+                /* initialExtras= */ isNull());
+    }
+
+    @Test
+    public void onCreate_packageExplicitlyStopped_success_enablesForceStopButton() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        mPreferenceController.mCheckKillProcessesReceiver.setPendingResult(
+                new BroadcastReceiver.PendingResult(Activity.RESULT_OK,
+                        "resultData",
+                        /* resultExtras= */ null,
+                        BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
+                        /* ordered= */ true,
+                        /* sticky= */ false,
+                        /* token= */ null,
+                        UserHandle.myUserId(),
+                        /* flags= */ 0));
+
+        mPreferenceController.mCheckKillProcessesReceiver.onReceive(mContext, /* intent= */ null);
+
+        assertThat(getForceStopButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void onCreate_packageExplicitlyStopped_failure_disablesForceStopButton() {
+
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ true, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        mPreferenceController.mCheckKillProcessesReceiver.setPendingResult(
+                new BroadcastReceiver.PendingResult(Activity.RESULT_CANCELED,
+                        "resultData",
+                        /* resultExtras= */ null,
+                        BroadcastReceiver.PendingResult.TYPE_UNREGISTERED,
+                        /* ordered= */ true,
+                        /* sticky= */ false,
+                        /* token= */ null,
+                        UserHandle.myUserId(),
+                        /* flags= */ 0));
+
+        mPreferenceController.mCheckKillProcessesReceiver.onReceive(mContext, /* intent= */ null);
+
+        assertThat(getForceStopButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void forceStopClicked_showsDialog() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        getForceStopButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mFragmentController).showDialog(any(ConfirmationDialogFragment.class),
+                eq(FORCE_STOP_CONFIRM_DIALOG_TAG));
+    }
+
+    @Test
+    public void forceStopDialogConfirmed_forceStopsPackage() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        mPreferenceController.mForceStopConfirmListener.onConfirm(/* arguments= */ null);
+
+        verify(mMockActivityManager).forceStopPackage(PACKAGE_NAME);
+        verify(mMockAppState).invalidatePackage(eq(PACKAGE_NAME), anyInt());
+    }
+
+    @Test
+    public void disableClicked_showsDialog() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        getDisableButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mFragmentController).showDialog(any(ConfirmationDialogFragment.class),
+                eq(DISABLE_CONFIRM_DIALOG_TAG));
+    }
+
+
+    @Test
+    public void disableDialogConfirmed_disablesPackage() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        mPreferenceController.mDisableConfirmListener.onConfirm(/* arguments= */ null);
+
+        verify(mMockPm).setApplicationEnabledSetting(PACKAGE_NAME,
+                PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, /* flags= */ 0);
+    }
+
+    @Test
+    public void enableClicked_enablesPackage() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ false, /* system= */ true);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        getDisableButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mMockPm).setApplicationEnabledSetting(PACKAGE_NAME,
+                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, /* flags= */ 0);
+    }
+
+    @Test
+    public void uninstallClicked_startsUninstallActivity() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        getUninstallButton().getOnClickListener().onClick(/* view= */ null);
+
+        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(
+                Intent.class);
+
+        verify(mFragmentController).startActivityForResult(intentArgumentCaptor.capture(),
+                eq(UNINSTALL_REQUEST_CODE), any(ActivityResultCallback.class));
+
+        Intent intent = intentArgumentCaptor.getValue();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_UNINSTALL_PACKAGE);
+        assertThat(intent.getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)).isTrue();
+        assertThat(intent.getData().toString()).isEqualTo("package:" + PACKAGE_NAME);
+    }
+
+    @Test
+    public void processActivityResult_uninstall_resultOk_goesBack() {
+        setupAndAssignPreference();
+        setApplicationInfo(/* stopped= */ false, /* enabled= */ true, /* system= */ false);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.processActivityResult(UNINSTALL_REQUEST_CODE,
+                Activity.RESULT_OK, /* data= */ null);
+
+        verify(mFragmentController).goBack();
+    }
+
+    private void setMocks() {
+        mPackageInfo = new PackageInfo();
+        mPackageInfo.packageName = PACKAGE_NAME;
+
+        when(mMockAppState.getEntry(eq(PACKAGE_NAME), anyInt())).thenReturn(mMockAppEntry);
+        when(mContext.getPackageManager()).thenReturn(mMockPm);
+        when(mContext.getSystemService(Context.ACTIVITY_SERVICE)).thenReturn(mMockActivityManager);
+        when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(mMockDpm);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mMockUserManager);
+
+        PackageInfo systemPackage = new PackageInfo();
+        systemPackage.packageName = "android";
+        systemPackage.signatures = new Signature[]{new Signature(PACKAGE_NAME.getBytes())};
+        ApplicationInfo systemApplicationInfo = new ApplicationInfo();
+        systemApplicationInfo.packageName = "android";
+        systemPackage.applicationInfo = systemApplicationInfo;
+        try {
+            when(mMockPm.getPackageInfo(eq(PACKAGE_NAME), anyInt())).thenReturn(mPackageInfo);
+            when(mMockPm.getPackageInfo("android", PackageManager.GET_SIGNATURES))
+                    .thenReturn(systemPackage);
+        } catch (PackageManager.NameNotFoundException e) {
+            // no-op - don't catch exception inside test
+        }
+    }
+
+    private void setupAndAssignPreference() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setAppState(mMockAppState).setPackageName(
+                PACKAGE_NAME);
+        PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                mActionButtonsPreference);
+    }
+
+    private void setApplicationInfo(boolean stopped, boolean enabled, boolean system) {
+        mApplicationInfo = new ApplicationInfo();
+        if (stopped) {
+            mApplicationInfo.flags |= ApplicationInfo.FLAG_STOPPED;
+        }
+        if (!enabled) {
+            mApplicationInfo.enabled = false;
+        }
+        if (system) {
+            mApplicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+        }
+        mMockAppEntry.info = mApplicationInfo;
+    }
+
+    private ActionButtonInfo getForceStopButton() {
+        return mActionButtonsPreference.getButton(ActionButtons.BUTTON2);
+    }
+
+    private ActionButtonInfo getDisableButton() {
+        // Same button is used with a different handler. This method is purely for readability.
+        return getUninstallButton();
+    }
+
+    private ActionButtonInfo getUninstallButton() {
+        return mActionButtonsPreference.getButton(ActionButtons.BUTTON1);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java
new file mode 100644
index 0000000..05eeb94
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/applications/ApplicationPreferenceControllerTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.applications;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.os.UserHandle;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.Preference;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.PreferenceControllerTestUtil;
+import com.android.car.settings.testutils.TestLifecycleOwner;
+import com.android.settingslib.applications.ApplicationsState;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class ApplicationPreferenceControllerTest {
+
+    private static final String PACKAGE_NAME = "Test Package Name";
+
+    private Preference mPreference;
+    private CarUxRestrictions mCarUxRestrictions;
+    private ApplicationPreferenceController mController;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private ApplicationsState mMockAppState;
+    @Mock
+    private ApplicationsState.AppEntry mMockAppEntry;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        Context context = ApplicationProvider.getApplicationContext();
+        mMockAppEntry.label = PACKAGE_NAME;
+
+        mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+        mPreference = new Preference(context);
+        mController = new ApplicationPreferenceController(context,
+                /* preferenceKey= */ "key", mFragmentController, mCarUxRestrictions);
+
+        when(mMockAppState.getEntry(PACKAGE_NAME, UserHandle.myUserId())).thenReturn(mMockAppEntry);
+    }
+
+    @Test
+    public void testCheckInitialized_noAppState_throwException() {
+        mController.setAppEntry(mMockAppEntry);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mController, mPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noAppEntry_throwException() {
+        mController.setAppState(mMockAppState);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mController, mPreference));
+    }
+
+    @Test
+    public void testRefreshUi_hasResolveInfo_setTitle() {
+        LifecycleOwner lifecycleOwner = new TestLifecycleOwner();
+        mController.setAppEntry(mMockAppEntry);
+        mController.setAppState(mMockAppState);
+        PreferenceControllerTestUtil.assignPreference(mController, mPreference);
+        mController.onCreate(lifecycleOwner);
+        mController.refreshUi();
+        assertThat(mPreference.getTitle()).isEqualTo(PACKAGE_NAME);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/ActionButtonsPreferenceTest.java b/tests/unit/src/com/android/car/settings/common/ActionButtonsPreferenceTest.java
new file mode 100644
index 0000000..f2ad18b
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/ActionButtonsPreferenceTest.java
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoSession;
+
+@RunWith(AndroidJUnit4.class)
+public class ActionButtonsPreferenceTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private View mRootView;
+    private ActionButtonsPreference mPref;
+    private PreferenceViewHolder mHolder;
+    private MockitoSession mSession;
+
+    @Before
+    public void setUp() {
+        mRootView = View.inflate(mContext, R.layout.action_buttons_preference, /* parent= */ null);
+        mHolder = PreferenceViewHolder.createInstanceForTests(mRootView);
+        mPref = new ActionButtonsPreference(mContext);
+
+        mSession = ExtendedMockito.mockitoSession().mockStatic(Toast.class).startMocking();
+    }
+
+    @After
+    public void tearDown() {
+        if (mSession != null) {
+            mSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void onBindViewHolder_setTitle_shouldShowButtonByDefault() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON2).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON3).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON4).setText(R.string.settings_label);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.VISIBLE);
+    }
+
+    @Test
+    public void onBindViewHolder_setIcon_shouldShowButtonByDefault() {
+        mPref.getButton(ActionButtons.BUTTON1).setIcon(R.drawable.ic_lock);
+        mPref.getButton(ActionButtons.BUTTON2).setIcon(R.drawable.ic_lock);
+        mPref.getButton(ActionButtons.BUTTON3).setIcon(R.drawable.ic_lock);
+        mPref.getButton(ActionButtons.BUTTON4).setIcon(R.drawable.ic_lock);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.VISIBLE);
+    }
+
+    @Test
+    public void onBindViewHolder_notSetTitleOrIcon_shouldNotShowButtonByDefault() {
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_setVisibleIsGoneAndSetTitle_shouldNotShowButton() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON2).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON3).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON4).setText(R.string.settings_label).setVisible(false);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_setVisibleIsGoneAndSetIcon_shouldNotShowButton() {
+        mPref.getButton(ActionButtons.BUTTON1).setIcon(R.drawable.ic_lock).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON2).setIcon(R.drawable.ic_lock).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON3).setIcon(R.drawable.ic_lock).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON4).setIcon(R.drawable.ic_lock).setVisible(false);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_setVisibility_shouldUpdateButtonVisibility() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON2).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON3).setText(R.string.settings_label).setVisible(false);
+        mPref.getButton(ActionButtons.BUTTON4).setText(R.string.settings_label).setVisible(false);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.GONE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.GONE);
+
+        mPref.getButton(ActionButtons.BUTTON1).setVisible(true);
+        mPref.getButton(ActionButtons.BUTTON2).setVisible(true);
+        mPref.getButton(ActionButtons.BUTTON3).setVisible(true);
+        mPref.getButton(ActionButtons.BUTTON4).setVisible(true);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button2).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button3).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(mRootView.findViewById(R.id.button4).getVisibility())
+                .isEqualTo(View.VISIBLE);
+    }
+
+    @Test
+    public void onBindViewHolder_setEnabled_shouldEnableButton() {
+        mPref.getButton(ActionButtons.BUTTON1).setEnabled(true);
+        mPref.getButton(ActionButtons.BUTTON2).setEnabled(false);
+        mPref.getButton(ActionButtons.BUTTON3).setEnabled(true);
+        mPref.getButton(ActionButtons.BUTTON4).setEnabled(false);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.button1).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button1Icon).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button1Text).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button2).isEnabled()).isFalse();
+        assertThat(mRootView.findViewById(R.id.button2Icon).isEnabled()).isFalse();
+        assertThat(mRootView.findViewById(R.id.button2Text).isEnabled()).isFalse();
+        assertThat(mRootView.findViewById(R.id.button3).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button3Icon).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button3Text).isEnabled()).isTrue();
+        assertThat(mRootView.findViewById(R.id.button4).isEnabled()).isFalse();
+        assertThat(mRootView.findViewById(R.id.button4Icon).isEnabled()).isFalse();
+        assertThat(mRootView.findViewById(R.id.button4Text).isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onBindViewHolder_setText_shouldShowSameText() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON2).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON3).setText(R.string.settings_label);
+        mPref.getButton(ActionButtons.BUTTON4).setText(R.string.settings_label);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(((TextView) mRootView.findViewById(R.id.button1Text)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+        assertThat(((TextView) mRootView.findViewById(R.id.button2Text)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+        assertThat(((TextView) mRootView.findViewById(R.id.button3Text)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+        assertThat(((TextView) mRootView.findViewById(R.id.button4Text)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+    }
+
+    @Test
+    public void onBindViewHolder_setButtonIcon_iconMustDisplayAboveText() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label).setIcon(
+                R.drawable.ic_lock);
+
+        mPref.onBindViewHolder(mHolder);
+        Drawable icon = ((ImageView) mRootView.findViewById(R.id.button1Icon)).getDrawable();
+
+        assertThat(icon).isNotNull();
+    }
+
+    @Test
+    public void onButtonClicked_shouldOnlyTriggerListenerIfEnabled() {
+        mPref.getButton(ActionButtons.BUTTON1).setEnabled(true);
+        mPref.getButton(ActionButtons.BUTTON2).setEnabled(false);
+
+        View.OnClickListener enabledListener = mock(View.OnClickListener.class);
+        View.OnClickListener disabledListener = mock(View.OnClickListener.class);
+        mPref.getButton(ActionButtons.BUTTON1).setOnClickListener(enabledListener);
+        mPref.getButton(ActionButtons.BUTTON2).setOnClickListener(disabledListener);
+
+        mPref.onBindViewHolder(mHolder);
+
+        mPref.getButton(ActionButtons.BUTTON1).performClick(null);
+        verify(enabledListener).onClick(any());
+
+        mPref.getButton(ActionButtons.BUTTON2).performClick(null);
+        verify(disabledListener, never()).onClick(any());
+    }
+
+    @Test
+    @UiThreadTest
+    public void onButtonClicked_makesToastIfPreferenceRestricted() {
+        Toast mockToast = mock(Toast.class);
+        ExtendedMockito.when(Toast.makeText(any(), anyString(), anyInt())).thenReturn(mockToast);
+
+        mPref.setUxRestricted(true);
+        mPref.getButton(ActionButtons.BUTTON1).setEnabled(true);
+
+        View.OnClickListener listener = mock(View.OnClickListener.class);
+        mPref.getButton(ActionButtons.BUTTON1).setOnClickListener(listener);
+
+        mPref.onBindViewHolder(mHolder);
+
+        mPref.getButton(ActionButtons.BUTTON1).performClick(null);
+        verify(listener, never()).onClick(any());
+
+        verify(mockToast).show();
+    }
+
+    @Test
+    @UiThreadTest
+    public void onButtonClicked_disabled_uxRestricted_shouldDoNothing() {
+        mPref.setUxRestricted(true);
+        mPref.getButton(ActionButtons.BUTTON1).setEnabled(false);
+
+        View.OnClickListener listener = mock(View.OnClickListener.class);
+        mPref.getButton(ActionButtons.BUTTON1).setOnClickListener(listener);
+
+        mPref.onBindViewHolder(mHolder);
+
+        mPref.getButton(ActionButtons.BUTTON1).performClick(null);
+        verify(listener, never()).onClick(any());
+
+        ExtendedMockito.verify(
+                () -> Toast.makeText(any(), anyString(), anyInt()), never());
+    }
+
+    @Test
+    public void setButtonIcon_iconResourceIdIsZero_shouldNotDisplayIcon() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label).setIcon(0);
+
+        mPref.onBindViewHolder(mHolder);
+        Drawable icon = ((ImageView) mRootView.findViewById(R.id.button1Icon)).getDrawable();
+
+        assertThat(icon).isNull();
+    }
+
+    @Test
+    public void setButtonIcon_iconResourceIdNotExisting_shouldNotDisplayIconAndCrash() {
+        mPref.getButton(ActionButtons.BUTTON1).setText(R.string.settings_label).setIcon(
+                999999999 /* not existing id */);
+        // Should not crash here
+        mPref.onBindViewHolder(mHolder);
+        Drawable icon = ((ImageView) mRootView.findViewById(R.id.button1Icon)).getDrawable();
+
+        assertThat(icon).isNull();
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/EntityHeaderPreferenceTest.java b/tests/unit/src/com/android/car/settings/common/EntityHeaderPreferenceTest.java
new file mode 100644
index 0000000..a85d5dc
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/EntityHeaderPreferenceTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class EntityHeaderPreferenceTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private View mRootView;
+    private EntityHeaderPreference mPref;
+    private PreferenceViewHolder mHolder;
+
+    @Before
+    public void setUp() {
+        mRootView = View.inflate(mContext, R.layout.entity_header_preference, /* parent= */ null);
+        mHolder = PreferenceViewHolder.createInstanceForTests(mRootView);
+        mPref = new EntityHeaderPreference(mContext);
+    }
+
+    @Test
+    public void onBindViewHolder_noSetIcon_shouldNotBeVisible() {
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_icon).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_noSetTitle_shouldNotBeVisible() {
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_title).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_noSetSummary_shouldNotBeVisible() {
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_summary).getVisibility())
+                .isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void onBindViewHolder_setIcon_shouldShowIcon() {
+        mPref.setIcon(R.drawable.ic_lock);
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_icon).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(((ImageView) mRootView.findViewById(R.id.entity_header_icon)).getDrawable())
+                .isNotNull();
+    }
+
+    @Test
+    public void onBindViewHolder_setLabel_shouldShowSameText() {
+        mPref.setTitle(mContext.getText(R.string.settings_label));
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_title).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(((TextView) mRootView.findViewById(R.id.entity_header_title)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+    }
+
+    @Test
+    public void onBindViewHolder_setSummary_shouldShowSameText() {
+        mPref.setSummary(mContext.getText(R.string.settings_label));
+
+        mPref.onBindViewHolder(mHolder);
+
+        assertThat(mRootView.findViewById(R.id.entity_header_summary).getVisibility())
+                .isEqualTo(View.VISIBLE);
+        assertThat(((TextView) mRootView.findViewById(R.id.entity_header_summary)).getText())
+                .isEqualTo(mContext.getText(R.string.settings_label));
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/ExtraSettingsLoaderTest.java b/tests/unit/src/com/android/car/settings/common/ExtraSettingsLoaderTest.java
new file mode 100644
index 0000000..9adb9e6
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/ExtraSettingsLoaderTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+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.os.Bundle;
+
+import androidx.preference.Preference;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Collections;
+import java.util.Map;
+
+@RunWith(AndroidJUnit4.class)
+public class ExtraSettingsLoaderTest {
+    private static final String META_DATA_PREFERENCE_CATEGORY = "com.android.settings.category";
+    private static final String FAKE_CATEGORY = "fake_category";
+    private static final String FAKE_TITLE = "fake_title";
+    private static final String FAKE_SUMMARY = "fake_summary";
+    private static final String TEST_CONTENT_PROVIDER =
+            "content://com.android.car.settings.testutils.TestContentProvider";
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private ExtraSettingsLoader mExtraSettingsLoader;
+
+    @Mock
+    private PackageManager mPm;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mExtraSettingsLoader = new ExtraSettingsLoader(mContext);
+        mExtraSettingsLoader.setPackageManager(mPm);
+    }
+
+    @Test
+    public void testLoadPreference_uriResources_shouldNotLoadStaticResources() {
+        Intent intent = new Intent();
+        intent.putExtra(META_DATA_PREFERENCE_CATEGORY, FAKE_CATEGORY);
+        Bundle bundle = new Bundle();
+        bundle.putString(META_DATA_PREFERENCE_TITLE, FAKE_TITLE);
+        bundle.putString(META_DATA_PREFERENCE_SUMMARY, FAKE_SUMMARY);
+        bundle.putString(META_DATA_PREFERENCE_CATEGORY, FAKE_CATEGORY);
+        bundle.putString(META_DATA_PREFERENCE_TITLE_URI, TEST_CONTENT_PROVIDER);
+        bundle.putString(META_DATA_PREFERENCE_SUMMARY_URI, TEST_CONTENT_PROVIDER);
+        bundle.putString(META_DATA_PREFERENCE_ICON_URI, TEST_CONTENT_PROVIDER);
+
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.metaData = bundle;
+        activityInfo.packageName = "package_name";
+        activityInfo.name = "class_name";
+
+        ResolveInfo resolveInfoSystem = new ResolveInfo();
+        resolveInfoSystem.system = true;
+        resolveInfoSystem.activityInfo = activityInfo;
+
+        when(mPm.queryIntentActivitiesAsUser(eq(intent), eq(PackageManager.GET_META_DATA),
+                anyInt())).thenReturn(Collections.singletonList(resolveInfoSystem));
+        Map<Preference, Bundle> preferenceToBundleMap = mExtraSettingsLoader.loadPreferences(
+                intent);
+
+        assertThat(preferenceToBundleMap).hasSize(1);
+
+        for (Preference p : preferenceToBundleMap.keySet()) {
+            assertThat(p.getTitle()).isNull();
+            assertThat(p.getSummary()).isNull();
+            assertThat(p.getIcon()).isNull();
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java
new file mode 100644
index 0000000..801b846
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static com.android.car.settings.common.ExtraSettingsPreferenceController.META_DATA_DISTRACTION_OPTIMIZED;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+import com.android.car.settings.testutils.ResourceTestUtils;
+import com.android.car.settings.testutils.TestContentProvider;
+import com.android.car.ui.preference.CarUiPreference;
+import com.android.car.ui.preference.UxRestrictablePreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RunWith(AndroidJUnit4.class)
+public class ExtraSettingsPreferenceControllerTest {
+    private static final Intent FAKE_INTENT = new Intent();
+    private static final CarUxRestrictions NO_SETUP_UX_RESTRICTIONS =
+            new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                    CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, /* timestamp= */ 0).build();
+
+    private static final CarUxRestrictions BASELINE_UX_RESTRICTIONS =
+            new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                    CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+    private static final CarUxRestrictions NO_UX_RESTRICTIONS =
+            new CarUxRestrictions.Builder(/* reqOpt= */ false,
+                    CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+    private static final String TEST_PROVIDER =
+            "content://com.android.car.settings.testutils.TestContentProvider";
+
+    private LifecycleOwner mLifecycleOwner;
+    private Lifecycle mLifecycle;
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private PreferenceManager mPreferenceManager;
+    private PreferenceScreen mScreen;
+    private FakeExtraSettingsPreferenceController mPreferenceController;
+    private CarUiPreference mPreference;
+    private Map<Preference, Bundle> mPreferenceBundleMap;
+    private Bundle mMetaData;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private ExtraSettingsLoader mExtraSettingsLoaderMock;
+
+    @Before
+    @UiThreadTest
+    public void setUp() {
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
+
+        MockitoAnnotations.initMocks(this);
+
+        mPreferenceController = new FakeExtraSettingsPreferenceController(mContext,
+                /* preferenceKey= */ "key", mFragmentController,
+                BASELINE_UX_RESTRICTIONS);
+
+        mPreferenceManager = new PreferenceManager(mContext);
+        mScreen = mPreferenceManager.createPreferenceScreen(mContext);
+        mScreen.setIntent(FAKE_INTENT);
+        mPreferenceController.setPreference(mScreen);
+        mPreference = spy(new CarUiPreference(mContext));
+        mPreference.setIntent(new Intent().setPackage("com.android.car.settings"));
+
+        mPreferenceBundleMap = new HashMap<>();
+        mMetaData = new Bundle();
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_restricted_preferenceRestricted() {
+        mMetaData.putBoolean(META_DATA_DISTRACTION_OPTIMIZED, false);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(true);
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_unrestricted_preferenceUnrestricted() {
+        mMetaData.putBoolean(META_DATA_DISTRACTION_OPTIMIZED, false);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(false);
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_restricted_viewOnly_preferenceUnrestricted() {
+        mMetaData.putBoolean(META_DATA_DISTRACTION_OPTIMIZED, false);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.setAvailabilityStatus(PreferenceController.AVAILABLE_FOR_VIEWING);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(false);
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_distractionOptimized_preferenceUnrestricted() {
+        mMetaData.putBoolean(META_DATA_DISTRACTION_OPTIMIZED, true);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(false);
+    }
+
+    @Test
+    public void onCreate_hasDynamicTitleData_placeholderAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_TITLE_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mPreference).setTitle(
+                ResourceTestUtils.getString(mContext, "empty_placeholder"));
+    }
+
+    @Test
+    public void onCreate_hasDynamicSummaryData_placeholderAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_SUMMARY_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mPreference).setSummary(
+                ResourceTestUtils.getString(mContext, "empty_placeholder"));
+    }
+
+    @Test
+    public void onCreate_hasDynamicIconData_placeholderAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_ICON_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mPreference).setIcon(R.drawable.ic_placeholder);
+    }
+
+    @Test
+    public void onCreate_hasDynamicTitleData_TitleSet() {
+        mMetaData.putString(META_DATA_PREFERENCE_TITLE_URI,
+                TEST_PROVIDER + "/getText/textKey");
+
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(mPreference.getTitle()).isEqualTo(TestContentProvider.TEST_TEXT_CONTENT);
+    }
+
+    @Test
+    public void onCreate_hasDynamicSummaryData_summarySet() {
+        mMetaData.putString(META_DATA_PREFERENCE_SUMMARY_URI,
+                TEST_PROVIDER + "/getText/textKey");
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(mPreference.getSummary()).isEqualTo(TestContentProvider.TEST_TEXT_CONTENT);
+    }
+
+    @Test
+    public void onCreate_hasDynamicIconData_iconSet() {
+        mMetaData.putString(META_DATA_PREFERENCE_ICON_URI,
+                TEST_PROVIDER + "/getIcon/iconKey");
+
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        InOrder inOrder = inOrder(mPreference);
+        inOrder.verify(mPreference).setIcon(R.drawable.ic_placeholder);
+        inOrder.verify(mPreference).setIcon(any(Drawable.class));
+    }
+
+    @Test
+    public void onStart_hasDynamicTitleData_observerAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_TITLE_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+
+        assertThat(mPreferenceController.mObservers.size()).isEqualTo(1);
+    }
+
+    @Test
+    public void onStart_hasDynamicSummaryData_observerAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_SUMMARY_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+
+        assertThat(mPreferenceController.mObservers.size()).isEqualTo(1);
+    }
+
+    @Test
+    public void onStart_hasDynamicIconData_observerAdded() {
+        mMetaData.putString(META_DATA_PREFERENCE_ICON_URI, TEST_PROVIDER);
+        mPreferenceBundleMap.put(mPreference, mMetaData);
+        when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+                mPreferenceBundleMap);
+        mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+
+        assertThat(mPreferenceController.mObservers.size()).isEqualTo(1);
+    }
+
+    private static class FakeExtraSettingsPreferenceController extends
+            ExtraSettingsPreferenceController {
+
+        private int mAvailabilityStatus;
+
+        FakeExtraSettingsPreferenceController(Context context, String preferenceKey,
+                FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+            super(context, preferenceKey, fragmentController, uxRestrictions);
+            mAvailabilityStatus = AVAILABLE;
+        }
+
+        @Override
+        void executeBackgroundTask(Runnable r) {
+            // run task immediately on main thread
+            r.run();
+        }
+
+        @Override
+        void executeUiTask(Runnable r) {
+            // run task immediately on main thread
+            r.run();
+        }
+
+        @Override
+        protected int getAvailabilityStatus() {
+            return mAvailabilityStatus;
+        }
+
+        public void setAvailabilityStatus(int availabilityStatus) {
+            mAvailabilityStatus = availabilityStatus;
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java
new file mode 100644
index 0000000..637b6e9
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.ui.preference.CarUiPreference;
+import com.android.car.ui.preference.UxRestrictablePreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class PreferenceControllerTest {
+
+    private static final CarUxRestrictions NO_SETUP_UX_RESTRICTIONS =
+            new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                    CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, /* timestamp= */ 0).build();
+
+    private static final CarUxRestrictions BASELINE_UX_RESTRICTIONS =
+            new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                    CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+    private LifecycleOwner mLifecycleOwner;
+    private Lifecycle mLifecycle;
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private FakePreferenceController mPreferenceController;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private CarUiPreference mPreference;
+
+    @Before
+    @UiThreadTest
+    public void setUp() {
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
+
+        MockitoAnnotations.initMocks(this);
+
+        mPreferenceController = new FakePreferenceController(mContext, /* preferenceKey= */ "key",
+                mFragmentController, BASELINE_UX_RESTRICTIONS);
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_restricted_preferenceRestricted() {
+        mPreferenceController.setPreference(mPreference);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(true);
+    }
+
+    @Test
+    public void onUxRestrictionsChanged_restricted_viewOnly_preferenceUnrestricted() {
+        mPreferenceController.setPreference(mPreference);
+        mPreferenceController.setAvailabilityStatus(PreferenceController.AVAILABLE_FOR_VIEWING);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(mPreference);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(false);
+    }
+
+    @Test
+    @UiThreadTest
+    public void onUxRestrictionsChanged_restricted_preferenceGroup_preferencesRestricted() {
+        PreferenceManager preferenceManager = new PreferenceManager(mContext);
+        PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
+        CarUiPreference preference1 = mock(CarUiPreference.class);
+        CarUiPreference preference2 = mock(CarUiPreference.class);
+        preferenceScreen.addPreference(preference1);
+        preferenceScreen.addPreference(preference2);
+
+        mPreferenceController.setPreference(preferenceScreen);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Mockito.reset(preference1);
+        Mockito.reset(preference2);
+        mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+        verify((UxRestrictablePreference) preference1).setUxRestricted(true);
+        verify((UxRestrictablePreference) preference2).setUxRestricted(true);
+    }
+
+    @Test
+    public void onCreate_unrestricted_disabled_preferenceUnrestricted() {
+        mPreference.setEnabled(false);
+        mPreferenceController.setPreference(mPreference);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify((UxRestrictablePreference) mPreference).setUxRestricted(false);
+    }
+
+    private static class FakePreferenceController extends
+            PreferenceController<Preference> {
+
+        private int mAvailabilityStatus;
+
+        FakePreferenceController(Context context, String preferenceKey,
+                FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
+            super(context, preferenceKey, fragmentController, uxRestrictions);
+            mAvailabilityStatus = AVAILABLE;
+        }
+
+        @Override
+        protected Class<Preference> getPreferenceType() {
+            return Preference.class;
+        }
+
+        @Override
+        protected int getAvailabilityStatus() {
+            return mAvailabilityStatus;
+        }
+
+        public void setAvailabilityStatus(int availabilityStatus) {
+            mAvailabilityStatus = availabilityStatus;
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/PreferenceControllerTestUtil.java b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTestUtil.java
new file mode 100644
index 0000000..9c350c5
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTestUtil.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.common;
+
+import androidx.preference.Preference;
+
+public class PreferenceControllerTestUtil {
+    /**
+     * Associates a PreferenceController with its Preference.
+     */
+    public static void assignPreference(PreferenceController controller, Preference preference) {
+        controller.setPreference(preference);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/common/rotary/DirectManipulationStateTest.java b/tests/unit/src/com/android/car/settings/common/rotary/DirectManipulationStateTest.java
new file mode 100644
index 0000000..f964526
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/rotary/DirectManipulationStateTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import static android.view.ViewGroup.FOCUS_AFTER_DESCENDANTS;
+import static android.view.ViewGroup.FOCUS_BLOCK_DESCENDANTS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.NumberPicker;
+import android.widget.TimePicker;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class DirectManipulationStateTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private DirectManipulationState mDirectManipulationState;
+    private TimePicker mTimePicker;
+    private NumberPicker mNumberPicker;
+
+    @Before
+    public void setUp() {
+        mDirectManipulationState = new DirectManipulationState();
+
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.time_picker, /* root= */ null);
+        mTimePicker = view.findViewById(R.id.time_picker);
+        mTimePicker.setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
+
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(numberPickers, mTimePicker);
+        mNumberPicker = numberPickers.get(0);
+        mNumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
+    }
+
+    @Test
+    public void enable_timePicker_storesDescendantFocusability() {
+        mDirectManipulationState.enable(mTimePicker);
+
+        assertThat(mDirectManipulationState.getOriginalDescendantFocusability())
+                .isEqualTo(FOCUS_AFTER_DESCENDANTS);
+    }
+
+    @Test
+    public void enable_timePicker_storesViewInDirectManipulation() {
+        mDirectManipulationState.enable(mTimePicker);
+
+        assertThat(mDirectManipulationState.getViewInDirectManipulationMode())
+                .isEqualTo(mTimePicker);
+    }
+
+    @Test
+    public void enable_timePickerChild_descendantFocusabilityUpdates() {
+        mDirectManipulationState.enable(mTimePicker);
+        mDirectManipulationState.enable(mNumberPicker);
+
+        assertThat(mDirectManipulationState.getOriginalDescendantFocusability())
+                .isEqualTo(FOCUS_BLOCK_DESCENDANTS);
+    }
+
+    @Test
+    public void enable_timePickerChild_viewInDirectManipulationUpdates() {
+        mDirectManipulationState.enable(mTimePicker);
+        mDirectManipulationState.enable(mNumberPicker);
+
+        assertThat(mDirectManipulationState.getViewInDirectManipulationMode())
+                .isEqualTo(mNumberPicker);
+    }
+
+    @Test
+    public void disable_viewInDirectManipulationReset() {
+        mDirectManipulationState.enable(mTimePicker);
+        mDirectManipulationState.disable();
+
+        assertThat(mDirectManipulationState.getViewInDirectManipulationMode()).isNull();
+    }
+
+    @Test
+    public void disable_descendantFocusabilityReset() {
+        mDirectManipulationState.enable(mTimePicker);
+        mDirectManipulationState.disable();
+
+        assertThat(mDirectManipulationState.getOriginalDescendantFocusability())
+                .isEqualTo(DirectManipulationState.UNKNOWN_DESCENDANT_FOCUSABILITY);
+    }
+}
+
diff --git a/tests/unit/src/com/android/car/settings/common/rotary/NumberPickerUtilsTest.java b/tests/unit/src/com/android/car/settings/common/rotary/NumberPickerUtilsTest.java
new file mode 100644
index 0000000..e4c4287
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/common/rotary/NumberPickerUtilsTest.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.common.rotary;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.DatePicker;
+import android.widget.NumberPicker;
+import android.widget.TimePicker;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class NumberPickerUtilsTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Test
+    public void getNumberPickerDescendants_fromTimePicker_has3NumberPickers() {
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.time_picker, /* root= */ null);
+        TimePicker timePicker = view.findViewById(R.id.time_picker);
+
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(numberPickers, timePicker);
+
+        assertThat(numberPickers).hasSize(3);
+    }
+
+    @Test
+    public void getNumberPickerDescendants_fromDatePicker_has3NumberPickers() {
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.date_picker, /* root= */ null);
+        DatePicker datePicker = view.findViewById(R.id.date_picker);
+
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(numberPickers, datePicker);
+
+        assertThat(numberPickers).hasSize(3);
+    }
+
+    @Test
+    public void hasCommonNumberPickerParent_bothNull_returnsFalse() {
+        boolean result = NumberPickerUtils.hasCommonNumberPickerParent(null, null);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void hasCommonNumberPickerParent_firstNull_returnsFalse() {
+        NumberPicker picker = new NumberPicker(mContext);
+        boolean result = NumberPickerUtils.hasCommonNumberPickerParent(null, picker);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void hasCommonNumberPickerParent_secondNull_returnsFalse() {
+        NumberPicker picker = new NumberPicker(mContext);
+        boolean result = NumberPickerUtils.hasCommonNumberPickerParent(picker, null);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void hasCommonNumberPickerParent_separateNumberPickers_returnsFalse() {
+        NumberPicker picker1 = new NumberPicker(mContext);
+        NumberPicker picker2 = new NumberPicker(mContext);
+        boolean result = NumberPickerUtils.hasCommonNumberPickerParent(picker1, picker2);
+
+        assertThat(result).isFalse();
+    }
+
+    @Test
+    public void hasCommonNumberPickerParent_fromTimePicker_returnsTrue() {
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.time_picker, /* root= */ null);
+        TimePicker timePicker = view.findViewById(R.id.time_picker);
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(numberPickers, timePicker);
+        NumberPicker picker1 = numberPickers.get(0);
+        NumberPicker picker2 = numberPickers.get(1);
+
+        boolean result = NumberPickerUtils.hasCommonNumberPickerParent(picker1, picker2);
+
+        assertThat(result).isTrue();
+    }
+
+    @Test
+    public void getNumberPickerParent_noValidParent_returnsNull() {
+        NumberPicker picker = new NumberPicker(mContext);
+        View result = NumberPickerUtils.getNumberPickerParent(picker);
+
+        assertThat(result).isNull();
+    }
+
+    @Test
+    public void getNumberPickerParent_validParent_returnsNull() {
+        LayoutInflater inflater = LayoutInflater.from(mContext);
+        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.time_picker, /* root= */ null);
+        TimePicker timePicker = view.findViewById(R.id.time_picker);
+        List<NumberPicker> numberPickers = new ArrayList<>();
+        NumberPickerUtils.getNumberPickerDescendants(numberPickers, timePicker);
+        NumberPicker picker = numberPickers.get(0);
+
+        View result = NumberPickerUtils.getNumberPickerParent(picker);
+
+        assertThat(result).isEqualTo(timePicker);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/search/CarSettingsSearchIndexablesProviderTest.java b/tests/unit/src/com/android/car/settings/search/CarSettingsSearchIndexablesProviderTest.java
new file mode 100644
index 0000000..f867376
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/search/CarSettingsSearchIndexablesProviderTest.java
@@ -0,0 +1,405 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.search;
+
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_CLASS_NAME;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_ENTRIES;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_ICON_RESID;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_INTENT_ACTION;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_INTENT_TARGET_CLASS;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_INTENT_TARGET_PACKAGE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_KEY;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_KEYWORDS;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_SCREEN_TITLE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_SUMMARY_OFF;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_SUMMARY_ON;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_TITLE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_RAW_USER_ID;
+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;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RANK;
+import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RESID;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.provider.SearchIndexableResource;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settingslib.search.Indexable;
+import com.android.settingslib.search.SearchIndexableData;
+import com.android.settingslib.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexableResources;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@RunWith(AndroidJUnit4.class)
+public class CarSettingsSearchIndexablesProviderTest {
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+
+    private CarSettingsSearchIndexablesProvider mProvider;
+    private SearchIndexableResources mSearchIndexableResources;
+
+    @Before
+    public void setup() {
+        mSearchIndexableResources = new SearchIndexableResources() {
+            Set<SearchIndexableData> mValues = new HashSet<>();
+
+            @Override
+            public Collection<SearchIndexableData> getProviderValues() {
+                return mValues;
+            }
+
+            @Override
+            public void addIndex(SearchIndexableData indexBundle) {
+                mValues.add(indexBundle);
+            }
+        };
+
+        mProvider = new CarSettingsSearchIndexablesProvider();
+        mProvider.setResources(mSearchIndexableResources);
+    }
+
+    @Test
+    public void queryXmlResources_onEmptyResources_returnsEmptyList() {
+        assertThat(mProvider.queryXmlResources(null).getCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void queryXmlResources_fillsColumns() {
+        SearchIndexableResource res = makeResource(/* seed= */ 50);
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setResources(Collections.singletonList(res));
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        provider));
+
+        Cursor c = mProvider.queryXmlResources(null);
+
+        assertThat(c.getCount()).isEqualTo(1);
+
+        c.moveToFirst();
+
+        assertEqual(c, res);
+    }
+
+    @Test
+    public void queryXmlResources_returnsAllRows() {
+        List<SearchIndexableResource> resources = List.of(makeResource(/* seed= */ 1),
+                makeResource(/* seed= */ 2),
+                makeResource(/* seed= */ 3));
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setResources(resources);
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        provider));
+
+        Cursor c = mProvider.queryXmlResources(null);
+
+        assertThat(c.getCount()).isEqualTo(resources.size());
+
+        int i = 0;
+        while (c.moveToNext()) {
+            assertEqual(c, resources.get(i++));
+        }
+    }
+
+    @Test
+    public void queryXmlResources_onPartiallyFilledFields_returnsPartialRows() {
+        SearchIndexableResource res = makeResource(/* seed= */ 100);
+        res.intentTargetPackage = null;
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setResources(Collections.singletonList(res));
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        provider));
+
+
+        Cursor c = mProvider.queryXmlResources(null);
+
+        assertThat(c.getCount()).isEqualTo(1);
+
+        c.moveToFirst();
+
+        assertEqual(c, res);
+    }
+
+    @Test
+    public void queryXmlResources_onNullResources_returnsEmptyList() {
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        new TestSearchIndexProvider()));
+
+        assertThat(mProvider.queryXmlResources(null).getCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void queryRawData_fillsColumns() {
+        SearchIndexableRaw rawData = makeRawData(/* seed= */ 99);
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setRawData(Collections.singletonList(rawData));
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class, provider));
+
+        Cursor c = mProvider.queryRawData(null);
+
+        assertThat(c.getCount()).isEqualTo(1);
+
+        c.moveToFirst();
+
+        assertEqual(c, rawData);
+    }
+
+    @Test
+    public void queryRawData_returnsAllRows() {
+        List<SearchIndexableRaw> rawData = List.of(makeRawData(/* seed= */ 1),
+                makeRawData(/* seed= */ 2), makeRawData(/* seed= */ 3));
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setRawData(rawData);
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class, provider));
+
+        Cursor c = mProvider.queryRawData(null);
+
+        assertThat(c.getCount()).isEqualTo(rawData.size());
+        int i = 0;
+
+        while (c.moveToNext()) {
+            assertEqual(c, rawData.get(i++));
+        }
+    }
+
+    @Test
+    public void queryRawData_onPartiallyFilledFields_returnsPartialRows() {
+        SearchIndexableRaw rawData = makeRawData(/* seed= */ 99);
+        rawData.className = null;
+        rawData.keywords = null;
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setRawData(Collections.singletonList(rawData));
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class, provider));
+
+        Cursor c = mProvider.queryRawData(null);
+
+        assertThat(c.getCount()).isEqualTo(1);
+
+        c.moveToFirst();
+
+        assertEqual(c, rawData);
+    }
+
+    @Test
+    public void queryRawData_onEmptyResources_returnsEmpty() {
+        assertThat(mProvider.queryRawData(null).getCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void queryRawData_onNullRawDataList_returnsEmptyList() {
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        new TestSearchIndexProvider()));
+
+        assertThat(mProvider.queryRawData(null).getCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void queryNonIndexableKeys_fillsColumns() {
+        String key = "key1";
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setNonIndexableKeys(Collections.singletonList(key));
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class, provider));
+
+        Cursor c = mProvider.queryNonIndexableKeys(null);
+
+        assertThat(c.getCount()).isEqualTo(1);
+
+        c.moveToFirst();
+
+        assertThat(c.getString(COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE)).isEqualTo(key);
+    }
+
+    @Test
+    public void queryNonIndexableKeys_returnsAllRows() {
+        List<String> keys = List.of("key1", "key2", "key3");
+
+        TestSearchIndexProvider provider = new TestSearchIndexProvider();
+        provider.setNonIndexableKeys(keys);
+
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class, provider));
+
+        Cursor c = mProvider.queryNonIndexableKeys(null);
+
+        assertThat(c.getCount()).isEqualTo(keys.size());
+        int i = 0;
+
+        while (c.moveToNext()) {
+            assertThat(c.getString(COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE)).isEqualTo(
+                    keys.get(i++));
+        }
+    }
+
+    @Test
+    public void queryNonIndexableKeys_onEmptyResources_returnsEmpty() {
+        assertThat(mProvider.queryNonIndexableKeys(null).getCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void queryNonIndexableKeys_onNullNonIndexableKeysList_returnsEmptyList() {
+        mSearchIndexableResources.addIndex(
+                new SearchIndexableData(TestSearchIndexProvider.class,
+                        new TestSearchIndexProvider()));
+
+        assertThat(mProvider.queryNonIndexableKeys(null).getCount()).isEqualTo(0);
+    }
+
+    private SearchIndexableResource makeResource(int seed) {
+        int rank = seed;
+        int resId = seed + 1;
+        String className = seed + "className";
+        int iconResId = seed + 2;
+        String action = seed + "action";
+        String intentPackage = seed + "package";
+        String intentClass = seed + "class";
+
+        SearchIndexableResource resource = new SearchIndexableResource(rank, resId, className,
+                iconResId);
+        resource.intentAction = action;
+        resource.intentTargetPackage = intentPackage;
+        resource.intentTargetClass = intentClass;
+
+        return resource;
+    }
+
+    private void assertEqual(Cursor c, SearchIndexableResource res) {
+        assertThat(c.getInt(COLUMN_INDEX_XML_RES_RANK)).isEqualTo(res.rank);
+        assertThat(c.getInt(COLUMN_INDEX_XML_RES_RESID)).isEqualTo(res.xmlResId);
+        assertThat(c.getString(COLUMN_INDEX_XML_RES_CLASS_NAME)).isEqualTo(res.className);
+        assertThat(c.getInt(COLUMN_INDEX_XML_RES_ICON_RESID)).isEqualTo(res.iconResId);
+        assertThat(c.getString(COLUMN_INDEX_XML_RES_INTENT_ACTION)).isEqualTo(res.intentAction);
+        assertThat(c.getString(COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE)).isEqualTo(
+                res.intentTargetPackage);
+        assertThat(c.getString(COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS)).isEqualTo(
+                res.intentTargetClass);
+    }
+
+    private SearchIndexableRaw makeRawData(int seed) {
+        SearchIndexableRaw rawData = new SearchIndexableRaw(mContext);
+        rawData.title = seed + "title";
+        rawData.summaryOn = seed + "summaryOn";
+        rawData.summaryOff = seed + "summaryOff";
+        rawData.entries = seed + "entries";
+        rawData.keywords = seed + "keywords";
+        rawData.screenTitle = seed + "screenTitle";
+        rawData.className = seed + "className";
+        rawData.iconResId = seed;
+        rawData.intentAction = seed + "intentAction";
+        rawData.intentTargetPackage = seed + "intentTargetPackage";
+        rawData.intentTargetClass = seed + "intentTargetClass";
+        rawData.key = seed + "key";
+        rawData.userId = seed + 1;
+        return rawData;
+    }
+
+    private void assertEqual(Cursor c, SearchIndexableRaw raw) {
+        assertThat(c.getString(COLUMN_INDEX_RAW_TITLE)).isEqualTo(raw.title);
+        assertThat(c.getString(COLUMN_INDEX_RAW_SUMMARY_ON)).isEqualTo(raw.summaryOn);
+        assertThat(c.getString(COLUMN_INDEX_RAW_SUMMARY_OFF)).isEqualTo(raw.summaryOff);
+        assertThat(c.getString(COLUMN_INDEX_RAW_ENTRIES)).isEqualTo(raw.entries);
+        assertThat(c.getString(COLUMN_INDEX_RAW_KEYWORDS)).isEqualTo(raw.keywords);
+        assertThat(c.getString(COLUMN_INDEX_RAW_SCREEN_TITLE)).isEqualTo(raw.screenTitle);
+        assertThat(c.getString(COLUMN_INDEX_RAW_CLASS_NAME)).isEqualTo(raw.className);
+        assertThat(c.getInt(COLUMN_INDEX_RAW_ICON_RESID)).isEqualTo(raw.iconResId);
+        assertThat(c.getString(COLUMN_INDEX_RAW_INTENT_ACTION)).isEqualTo(raw.intentAction);
+        assertThat(c.getString(COLUMN_INDEX_RAW_INTENT_TARGET_PACKAGE)).isEqualTo(
+                raw.intentTargetPackage);
+        assertThat(c.getString(COLUMN_INDEX_RAW_INTENT_TARGET_CLASS)).isEqualTo(
+                raw.intentTargetClass);
+        assertThat(c.getString(COLUMN_INDEX_RAW_KEY)).isEqualTo(raw.key);
+        assertThat(c.getInt(COLUMN_INDEX_RAW_USER_ID)).isEqualTo(raw.userId);
+    }
+
+    private static class TestSearchIndexProvider implements Indexable.SearchIndexProvider {
+        private List<SearchIndexableResource> mResources;
+        private List<SearchIndexableRaw> mRawData;
+        private List<String> mNonIndexableKeys;
+
+        TestSearchIndexProvider() {
+        }
+
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                boolean enabled) {
+            return mResources;
+        }
+
+        @Override
+        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+            return mRawData;
+        }
+
+        @Override
+        public List<SearchIndexableRaw> getDynamicRawDataToIndex(Context context, boolean enabled) {
+            return mRawData;
+        }
+
+        @Override
+        public List<String> getNonIndexableKeys(Context context) {
+            return mNonIndexableKeys;
+        }
+
+        void setResources(List<SearchIndexableResource> resources) {
+            mResources = resources;
+        }
+
+        void setRawData(List<SearchIndexableRaw> rawData) {
+            mRawData = rawData;
+        }
+
+        void setNonIndexableKeys(List<String> nonIndexableKeys) {
+            mNonIndexableKeys = nonIndexableKeys;
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/security/ConfirmLockLockoutHelperTest.java b/tests/unit/src/com/android/car/settings/security/ConfirmLockLockoutHelperTest.java
new file mode 100644
index 0000000..0ca7390
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/security/ConfirmLockLockoutHelperTest.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.security;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.contains;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.CountDownTimer;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.internal.runner.junit4.statement.UiThreadStatement;
+
+import com.android.internal.widget.LockPatternUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class ConfirmLockLockoutHelperTest {
+    private static final int TEST_USER = 100;
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    private ConfirmLockLockoutHelper mConfirmLockLockoutHelper;
+
+    @Mock
+    private LockPatternUtils mLockPatternUtils;
+    @Mock
+    private ConfirmLockLockoutHelper.ConfirmLockUIController mUIController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mConfirmLockLockoutHelper = new ConfirmLockLockoutHelper(mContext, TEST_USER,
+                mLockPatternUtils);
+        mConfirmLockLockoutHelper.setConfirmLockUIController(mUIController);
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsZero_doesNothing() {
+        runOnCheckCompletedWithTimeout(0);
+
+        verify(mLockPatternUtils, never()).setLockoutAttemptDeadline(TEST_USER, 0);
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsZero_noTimer() {
+        runOnCheckCompletedWithTimeout(0);
+
+        assertThat(mConfirmLockLockoutHelper.getCountDownTimer()).isNull();
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_setsLockoutDeadline() {
+        runOnCheckCompletedWithTimeout(1000);
+
+        verify(mLockPatternUtils).setLockoutAttemptDeadline(TEST_USER, 1000);
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_refreshesUILocked() {
+        when(mLockPatternUtils.getLockoutAttemptDeadline(TEST_USER)).thenReturn(1000L);
+        runOnCheckCompletedWithTimeout(1000);
+
+        verify(mUIController).refreshUI(true);
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_createsTimer() {
+        runOnCheckCompletedWithTimeout(1000);
+
+        assertThat(mConfirmLockLockoutHelper.getCountDownTimer()).isNotNull();
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_timerTickUpdatesErrorText() {
+        runOnCheckCompletedWithTimeout(1000);
+
+        reset(mUIController);
+        CountDownTimer timer = mConfirmLockLockoutHelper.getCountDownTimer();
+        timer.onTick(1000);
+
+        verify(mUIController).setErrorText(contains("1"));
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_onFinishUpdatesErrorText() {
+        runOnCheckCompletedWithTimeout(1000);
+
+        reset(mUIController);
+        CountDownTimer timer = mConfirmLockLockoutHelper.getCountDownTimer();
+        timer.onFinish();
+
+        verify(mUIController).setErrorText("");
+    }
+
+    @Test
+    public void onCheckCompletedWithTimeout_timeoutIsPositive_onFinishUpdatesUINotLocked() {
+        runOnCheckCompletedWithTimeout(1000);
+
+        reset(mUIController);
+        CountDownTimer timer = mConfirmLockLockoutHelper.getCountDownTimer();
+        timer.onFinish();
+
+        verify(mUIController).refreshUI(false);
+    }
+
+    private void runOnCheckCompletedWithTimeout(int timeout) {
+        try {
+            // Needs to be called on the UI thread due to the CountDownTimer.
+            UiThreadStatement.runOnUiThread(() -> {
+                mConfirmLockLockoutHelper.onCheckCompletedWithTimeout(timeout);
+            });
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
+        }
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/sound/RingtonePickerPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/sound/RingtonePickerPreferenceControllerTest.java
new file mode 100644
index 0000000..947c695
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/sound/RingtonePickerPreferenceControllerTest.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.sound;
+
+import static com.android.car.settings.sound.RingtonePickerPreferenceController.COLUMN_LABEL;
+import static com.android.car.settings.sound.RingtonePickerPreferenceController.SILENT_ITEM_POS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.database.Cursor;
+import android.media.AudioAttributes;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+
+import androidx.lifecycle.LifecycleOwner;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.LogicalPreferenceGroup;
+import com.android.car.settings.common.PreferenceControllerTestUtil;
+import com.android.car.settings.testutils.TestLifecycleOwner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class RingtonePickerPreferenceControllerTest {
+
+    private static final int TEST_IDX = 10;
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private LifecycleOwner mLifecycleOwner;
+    private PreferenceManager mPreferenceManager;
+    private PreferenceScreen mScreen;
+
+    private PreferenceGroup mPreferenceGroup;
+    private RingtonePickerPreferenceController mPreferenceController;
+    private CarUxRestrictions mCarUxRestrictions;
+
+    private List<String> mTestValues;
+    private int mCurrIdx;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private RingtoneManager mRingtoneManager;
+    @Mock
+    private Cursor mCursor;
+
+    @Before
+    @UiThreadTest
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mLifecycleOwner = new TestLifecycleOwner();
+
+        mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+        mPreferenceManager = new PreferenceManager(mContext);
+        mScreen = mPreferenceManager.createPreferenceScreen(mContext);
+        mPreferenceGroup = new LogicalPreferenceGroup(mContext);
+        mScreen.addPreference(mPreferenceGroup);
+
+        mPreferenceController = new RingtonePickerPreferenceController(mContext,
+                "key", mFragmentController, mCarUxRestrictions);
+        mPreferenceController.setRingtoneManager(mRingtoneManager);
+        PreferenceControllerTestUtil.assignPreference(mPreferenceController, mPreferenceGroup);
+
+        // Default list of ringtones.
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        ringtoneTitles.add("Test Ringtone 3");
+        setUpCursor(ringtoneTitles);
+    }
+
+    @Test
+    public void onCreate_noArgsSet_invalidRingtoneTypeSet() {
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mRingtoneManager).setType(eq(-1));
+    }
+
+    @Test
+    public void onCreate_setArgs_validRingtoneTypeSet() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        verify(mRingtoneManager).setType(eq(RingtoneManager.TYPE_RINGTONE));
+    }
+
+    @Test
+    public void onCreate_doesNotShowSilent_noExtraPreference() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        // Add 2 ringtones.
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
+    }
+
+    @Test
+    public void onCreate_showSilent_hasExtraPreference() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        // Add 2 ringtones.
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        // Has 2 ringtones + silent option.
+        assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(3);
+    }
+
+    @Test
+    public void onCreate_showSilent_firstPreferenceIsSilent() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        Preference preference = mPreferenceGroup.getPreference(0);
+        int posKey = Integer.parseInt(preference.getKey());
+        assertThat(posKey).isEqualTo(SILENT_ITEM_POS);
+    }
+
+    @Test
+    public void onCreate_hasSilent_defaultRingtoneSelected() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        // Set the default ringtone to be the first ringtone (not counting 'silent').
+        Settings.System.putStringForUser(mContext.getContentResolver(), Settings.System.RINGTONE,
+                createUri(ringtoneTitles.get(0)).toString(), mContext.getUserId());
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        // Currently selected ringtone is the first ringtone in the list. However, since we also
+        // have the "silent" item, it is the second item in the overall list.
+        assertThat(mPreferenceController.getCurrentlySelectedPreferencePos()).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceClick_clickCurrentlySelectedItem_nothingChanges() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        // Set the default ringtone to be the first ringtone (not counting 'silent').
+        Settings.System.putStringForUser(mContext.getContentResolver(), Settings.System.RINGTONE,
+                createUri(ringtoneTitles.get(0)).toString(), mContext.getUserId());
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceGroup.getPreference(1).performClick();
+
+        // Currently selected ringtone is the first ringtone in the list. However, since we also
+        // have the "silent" item, it is the second item in the overall list.
+        assertThat(mPreferenceController.getCurrentlySelectedPreferencePos()).isEqualTo(1);
+    }
+
+    @Test
+    public void onPreferenceClick_clickDifferentItem_selectionChanges() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        // Set the default ringtone to be the first ringtone (not counting 'silent').
+        Settings.System.putStringForUser(mContext.getContentResolver(), Settings.System.RINGTONE,
+                createUri(ringtoneTitles.get(0)).toString(), mContext.getUserId());
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceGroup.getPreference(2).performClick();
+
+        assertThat(mPreferenceController.getCurrentlySelectedPreferencePos()).isEqualTo(2);
+    }
+
+    @Test
+    public void onStop_stopRingtone() {
+        Bundle args = new Bundle();
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+        args.putBoolean(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+        args.putInt(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+
+        List<String> ringtoneTitles = new ArrayList<>();
+        ringtoneTitles.add("Test Ringtone 1");
+        ringtoneTitles.add("Test Ringtone 2");
+        setUpCursor(ringtoneTitles);
+
+        // Set the default ringtone to be the first ringtone (not counting 'silent').
+        Settings.System.putStringForUser(mContext.getContentResolver(), Settings.System.RINGTONE,
+                createUri(ringtoneTitles.get(0)).toString(), mContext.getUserId());
+
+        mPreferenceController.setArguments(args);
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceGroup.getPreference(2).performClick();
+        mPreferenceController.onStop(mLifecycleOwner);
+
+        verify(mRingtoneManager, atLeastOnce()).stopPreviousRingtone();
+    }
+
+    // Set up the mock cursor to retrieve the values provided by {@code ringtoneTitles}.
+    private void setUpCursor(List<String> ringtoneTitles) {
+        mTestValues = new ArrayList<>(ringtoneTitles);
+
+        for (int i = 0; i < mTestValues.size(); i++) {
+            String value = mTestValues.get(i);
+            when(mRingtoneManager.getRingtonePosition(eq(createUri(value)))).thenReturn(i);
+        }
+
+        when(mRingtoneManager.getCursor()).thenReturn(mCursor);
+        when(mCursor.getColumnIndex(eq(COLUMN_LABEL))).thenReturn(TEST_IDX);
+        when(mCursor.moveToFirst()).then(invocation -> {
+            mCurrIdx = 0;
+            return null;
+        });
+        when(mCursor.moveToNext()).then(invocation -> {
+            if (mCurrIdx < mTestValues.size()) {
+                mCurrIdx += 1;
+            }
+            return null;
+        });
+        when(mCursor.getString(eq(TEST_IDX))).thenReturn(mTestValues.get(mCurrIdx));
+        when(mCursor.isAfterLast()).then(invocation -> mCurrIdx >= mTestValues.size());
+    }
+
+    private Uri createUri(String ringtoneTitle) {
+        return new Uri.Builder()
+                .scheme("test")
+                .authority("test")
+                .appendPath(ringtoneTitle)
+                .build();
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceControllerTest.java
new file mode 100644
index 0000000..7b54187
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/storage/StorageApplicationActionButtonsPreferenceControllerTest.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.storage;
+
+import static com.android.car.settings.common.ActionButtonsPreference.ActionButtons;
+import static com.android.car.settings.storage.StorageApplicationActionButtonsPreferenceController.CONFIRM_CLEAR_STORAGE_DIALOG_TAG;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.app.usage.StorageStats;
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.loader.app.LoaderManager;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.ActionButtonInfo;
+import com.android.car.settings.common.ActionButtonsPreference;
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.PreferenceControllerTestUtil;
+import com.android.car.settings.testutils.ResourceTestUtils;
+import com.android.car.settings.testutils.TestLifecycleOwner;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.StorageStatsSource;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class StorageApplicationActionButtonsPreferenceControllerTest {
+
+    private static final String PACKAGE_NAME = "Test Package Name";
+    private static final String TEST_MANAGE_STORAGE_ACTIVITY = "TestActivity";
+    private static final String SOURCE = "source";
+    private static final int UID = 12;
+    private static final String LABEL = "label";
+    private static final String SIZE_STR = "12.34 MB";
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private LifecycleOwner mLifecycleOwner;
+    private ActionButtonsPreference mActionButtonsPreference;
+    private StorageApplicationActionButtonsPreferenceController mPreferenceController;
+    private CarUxRestrictions mCarUxRestrictions;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private ApplicationsState.AppEntry mMockAppEntry;
+    @Mock
+    private AppsStorageStatsManager mMockAppsStorageStatsManager;
+    @Mock
+    private LoaderManager mMockLoaderManager;
+    @Mock
+    private PackageManager mMockPm;
+    @Mock
+    private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
+
+    @Before
+    @UiThreadTest // required because controller uses a handler
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mLifecycleOwner = new TestLifecycleOwner();
+
+        ApplicationInfo appInfo = new ApplicationInfo();
+        appInfo.uid = UID;
+        appInfo.sourceDir = SOURCE;
+        appInfo.packageName = PACKAGE_NAME;
+        appInfo.manageSpaceActivityName = TEST_MANAGE_STORAGE_ACTIVITY;
+
+        ApplicationsState.AppEntry appEntry = new ApplicationsState.AppEntry(mContext, appInfo,
+                1234L);
+        appEntry.label = LABEL;
+        appEntry.sizeStr = SIZE_STR;
+        appEntry.icon = mContext.getDrawable(R.drawable.test_icon);
+        appEntry.info.packageName = PACKAGE_NAME;
+
+        mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+        mActionButtonsPreference = new ActionButtonsPreference(mContext);
+        mPreferenceController = new StorageApplicationActionButtonsPreferenceController(mContext,
+                /* preferenceKey= */ "key", mFragmentController, mCarUxRestrictions);
+
+        mPreferenceController.setPackageManager(mMockPm);
+    }
+
+    @Test
+    public void testCheckInitialized_noAppEntry_throwException() {
+        mPreferenceController.setPackageName(PACKAGE_NAME).setAppsStorageStatsManager(
+                mMockAppsStorageStatsManager).setLoaderManager(mMockLoaderManager);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noPackageNameEntry_throwException() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setAppsStorageStatsManager(
+                mMockAppsStorageStatsManager).setLoaderManager(mMockLoaderManager);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noAppsStorageStatsManagerEntry_throwException() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setPackageName(
+                PACKAGE_NAME).setLoaderManager(mMockLoaderManager);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void testCheckInitialized_noLoaderManager_throwException() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setPackageName(
+                PACKAGE_NAME).setAppsStorageStatsManager(mMockAppsStorageStatsManager);
+        assertThrows(IllegalStateException.class,
+                () -> PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                        mActionButtonsPreference));
+    }
+
+    @Test
+    public void onCreate_defaultStatus_shouldShowCacheButtons() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getClearCacheButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "storage_clear_cache_btn_text"));
+    }
+
+    @Test
+    public void onCreate_defaultStatus_shouldShowClearStorageButtons() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        assertThat(getClearStorageButton().getText()).isEqualTo(
+                ResourceTestUtils.getString(mContext, "storage_clear_user_data_text"));
+    }
+
+    @Test
+    public void handleClearCacheClick_disallowedBySystem_shouldNotDeleteApplicationCache() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(false);
+
+        doNothing().when(mMockPm).deleteApplicationCacheFiles(anyString(), any());
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 0;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+        getClearCacheButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mMockPm, never()).deleteApplicationCacheFiles(anyString(), any());
+    }
+
+    @Test
+    public void handleClearCacheClick_allowedBySystem_shouldNotDeleteApplicationCache() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(true);
+
+        doNothing().when(mMockPm).deleteApplicationCacheFiles(anyString(), any());
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 0;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+        getClearCacheButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mMockPm).deleteApplicationCacheFiles(anyString(), any());
+    }
+
+    @Test
+    public void handleClearDataClick_disallowedBySystem_shouldNotShowDialogToClear() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(false);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 10;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+
+        assertThat(getClearStorageButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void handleClearDataClick_allowedBySystem_shouldShowDialogToClear() {
+        mMockAppEntry.info = new ApplicationInfo();
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(true);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+        getClearStorageButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mFragmentController).showDialog(any(DialogFragment.class),
+                eq(CONFIRM_CLEAR_STORAGE_DIALOG_TAG));
+    }
+
+    @Test
+    public void handleClearDataClick_hasValidManageSpaceActivity_shouldNotShowDialogToClear() {
+        ApplicationInfo info = new ApplicationInfo();
+        info.packageName = PACKAGE_NAME;
+        info.manageSpaceActivityName = TEST_MANAGE_STORAGE_ACTIVITY;
+        mMockAppEntry.info = info;
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(true);
+
+        when(mMockPm.resolveActivity(any(Intent.class), eq(0))).thenReturn(new ResolveInfo());
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+        getClearStorageButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mFragmentController, never()).showDialog(any(DialogFragment.class),
+                eq(CONFIRM_CLEAR_STORAGE_DIALOG_TAG));
+    }
+
+    @Test
+    public void handleClearDataClick_hasInvalidManageSpaceActivity_shouldShowDialogToClear() {
+        ApplicationInfo info = new ApplicationInfo();
+        info.packageName = PACKAGE_NAME;
+        info.manageSpaceActivityName = TEST_MANAGE_STORAGE_ACTIVITY;
+        mMockAppEntry.info = info;
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+        mPreferenceController.onStart(mLifecycleOwner);
+        mPreferenceController.setAppsControlDisallowedAdmin(mEnforcedAdmin);
+        mPreferenceController.setAppsControlDisallowedBySystem(true);
+
+        when(mMockPm.resolveActivity(any(Intent.class), eq(0))).thenReturn(null);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+        getClearStorageButton().getOnClickListener().onClick(/* view= */ null);
+
+        verify(mFragmentController).showDialog(any(DialogFragment.class),
+                eq(CONFIRM_CLEAR_STORAGE_DIALOG_TAG));
+    }
+
+    @Test
+    public void onDataLoaded_noResult_buttonsShouldBeDisabled() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        mPreferenceController.onDataLoaded(null, false, false);
+
+        assertThat(getClearCacheButton().isEnabled()).isFalse();
+        assertThat(getClearStorageButton().isEnabled()).isFalse();
+    }
+
+    @Test
+    public void onDataLoaded_resultLoaded_cacheButtonsShouldBeEnabled() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+
+        assertThat(getClearCacheButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void onDataLoaded_resultLoaded_dataButtonsShouldBeEnabled() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+
+        assertThat(getClearStorageButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void updateUiWithSize_resultLoaded_cacheButtonDisabledAndDataButtonsEnabled() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 50;
+        stats.cacheBytes = 0;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+
+        assertThat(getClearCacheButton().isEnabled()).isFalse();
+        assertThat(getClearStorageButton().isEnabled()).isTrue();
+    }
+
+    @Test
+    public void onDataLoaded_resultLoaded_cacheButtonEnabledAndDataButtonDisabled() {
+        setupAndAssignPreference();
+
+        mPreferenceController.onCreate(mLifecycleOwner);
+
+        StorageStats stats = new StorageStats();
+        stats.codeBytes = 100;
+        stats.dataBytes = 10;
+        stats.cacheBytes = 10;
+        StorageStatsSource.AppStorageStats storageStats =
+                new StorageStatsSource.AppStorageStatsImpl(stats);
+
+        mPreferenceController.onDataLoaded(storageStats, false, false);
+
+        assertThat(getClearCacheButton().isEnabled()).isTrue();
+        assertThat(getClearStorageButton().isEnabled()).isFalse();
+    }
+
+    private void setupAndAssignPreference() {
+        mPreferenceController.setAppEntry(mMockAppEntry).setPackageName(
+                PACKAGE_NAME).setAppsStorageStatsManager(mMockAppsStorageStatsManager)
+                .setLoaderManager(mMockLoaderManager);
+        PreferenceControllerTestUtil.assignPreference(mPreferenceController,
+                mActionButtonsPreference);
+    }
+
+    private ActionButtonInfo getClearCacheButton() {
+        return mActionButtonsPreference.getButton(ActionButtons.BUTTON2);
+    }
+
+    private ActionButtonInfo getClearStorageButton() {
+        return mActionButtonsPreference.getButton(ActionButtons.BUTTON1);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/system/RegulatoryInfoPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/system/RegulatoryInfoPreferenceControllerTest.java
new file mode 100644
index 0000000..ed15c44
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/system/RegulatoryInfoPreferenceControllerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.system;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.settings.common.FragmentController;
+import com.android.car.settings.common.PreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class RegulatoryInfoPreferenceControllerTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+    private RegulatoryInfoPreferenceController mPreferenceController;
+    private CarUxRestrictions mCarUxRestrictions;
+
+    @Mock
+    private FragmentController mFragmentController;
+    @Mock
+    private PackageManager mPm;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mCarUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, /* timestamp= */ 0).build();
+
+        mPreferenceController = new RegulatoryInfoPreferenceController(mContext,
+                /* preferenceKey= */ "key", mFragmentController, mCarUxRestrictions);
+        mPreferenceController.setPackageManager(mPm);
+    }
+
+    @Test
+    public void hasIntent_isAvailable() {
+        List<ResolveInfo> activities = new ArrayList<>();
+        activities.add(new ResolveInfo());
+        when(mPm.queryIntentActivities(any(Intent.class), eq(0)))
+                .thenReturn(activities);
+
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                PreferenceController.AVAILABLE);
+    }
+
+    @Test
+    public void hasNoIntent_isNotAvailable() {
+        List<ResolveInfo> activities = new ArrayList<>();
+        when(mPm.queryIntentActivities(any(Intent.class), eq(0)))
+                .thenReturn(activities);
+
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                PreferenceController.UNSUPPORTED_ON_DEVICE);
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/testutils/ResourceTestUtils.java b/tests/unit/src/com/android/car/settings/testutils/ResourceTestUtils.java
new file mode 100644
index 0000000..864d683
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/testutils/ResourceTestUtils.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.testutils;
+
+import android.content.Context;
+
+public class ResourceTestUtils {
+    /**
+     * Retrieve a resource string from the current package based on a name identifier.
+     */
+    public static String getString(Context context, String name) {
+        return context.getResources().getString(context.getResources().getIdentifier(
+                name, /* type= */ "string", context.getPackageName()));
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/testutils/TestContentProvider.java b/tests/unit/src/com/android/car/settings/testutils/TestContentProvider.java
new file mode 100644
index 0000000..0e7f994
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/testutils/TestContentProvider.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2020 The Android Open 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.car.settings.testutils;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+
+import java.util.List;
+
+/**
+ * A simple content provider for tests.  This provider runs in the same process as the test.
+ */
+public class TestContentProvider extends ContentProvider {
+
+    public static final String TEST_TEXT_CONTENT = "TestContentProviderText";
+
+    private static final String SCHEME = "content";
+    private static final String AUTHORITY =
+            "com.android.car.settings.testutils.TestContentProvider";
+    private static final String METHOD_GET_TEXT = "getText";
+    private static final String METHOD_GET_ICON = "getIcon";
+    private static final String KEY_PREFERENCE_TITLE = "com.android.settings.title";
+    private static final String KEY_PREFERENCE_SUMMARY = "com.android.settings.summary";
+    private static final String KEY_PREFERENCE_ICON = "com.android.settings.icon";
+    private static final String KEY_PREFERENCE_ICON_PACKAGE = "com.android.settings.icon_package";
+    private static final String TEXT_KEY = "textKey";
+    private static final String ICON_KEY = "iconKey";
+
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        return null;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    @Override
+    public Bundle call(String methodName, String uriString, Bundle extras) {
+        if (TextUtils.isEmpty(methodName)) {
+            return null;
+        }
+        if (TextUtils.isEmpty(uriString)) {
+            return null;
+        }
+        Uri uri = Uri.parse(uriString);
+        if (uri == null) {
+            return null;
+        }
+        // Only process URIs with valid scheme, authority, and no assigned port.
+        if (!(SCHEME.equals(uri.getScheme())
+                && AUTHORITY.equals(uri.getAuthority())
+                && (uri.getPort() == -1))) {
+            return null;
+        }
+        List<String> pathSegments = uri.getPathSegments();
+        // Path segments should consist of the method name and the argument. If the number of path
+        // segments is not exactly two, the content provider is not being called as intended.
+        if ((pathSegments == null) || (pathSegments.size() != 2)) {
+            return null;
+        }
+        // The first path segment needs to match the methodName.
+        if (!methodName.equals(pathSegments.get(0))) {
+            return null;
+        }
+        String key = pathSegments.get(1);
+        if (METHOD_GET_TEXT.equals(methodName)) {
+            if (TEXT_KEY.equals(key)) {
+                Bundle bundle = new Bundle();
+                bundle.putString(KEY_PREFERENCE_TITLE, TEST_TEXT_CONTENT);
+                bundle.putString(KEY_PREFERENCE_SUMMARY, TEST_TEXT_CONTENT);
+                return bundle;
+            }
+        } else if (METHOD_GET_ICON.equals(methodName)) {
+            if (ICON_KEY.equals(key)) {
+                try {
+                    String packageName = getContext().getPackageName();
+                    PackageManager manager = getContext().getPackageManager();
+                    Resources resources = manager.getResourcesForApplication(packageName);
+                    int iconRes = resources.getIdentifier("test_icon", "drawable",
+                            packageName);
+                    if (iconRes == 0) {
+                        return null;
+                    }
+
+                    Bundle bundle = new Bundle();
+                    bundle.putInt(KEY_PREFERENCE_ICON, iconRes);
+                    bundle.putString(KEY_PREFERENCE_ICON_PACKAGE, packageName);
+                    return bundle;
+
+                } catch (PackageManager.NameNotFoundException e) {
+                    return null;
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/tests/unit/src/com/android/car/settings/testutils/TestLifecycleOwner.java b/tests/unit/src/com/android/car/settings/testutils/TestLifecycleOwner.java
new file mode 100644
index 0000000..9baced2
--- /dev/null
+++ b/tests/unit/src/com/android/car/settings/testutils/TestLifecycleOwner.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 The Android Open 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.car.settings.testutils;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LifecycleRegistry;
+
+/**
+ * A LifecycleOwner implementation that can be used for testing.
+ */
+public class TestLifecycleOwner implements LifecycleOwner {
+
+    private final LifecycleRegistry mRegistry = new LifecycleRegistry(this);
+
+    @NonNull
+    @Override
+    public Lifecycle getLifecycle() {
+        return mRegistry;
+    }
+}