Merge "Fix flicker for Device admin apps." into tm-dev am: e7b38f27a3

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/17252814

Change-Id: I64262a2b9e224a0f3a3b939ec15ab336eca57605
diff --git a/Android.bp b/Android.bp
index 0940b0b..dd26dda 100644
--- a/Android.bp
+++ b/Android.bp
@@ -66,6 +66,7 @@
         "net-utils-framework-common",
         "settings-contextual-card-protos-lite",
         "settings-log-bridge-protos-lite",
+        "settings-telephony-protos-lite",
         "contextualcards",
         "settings-logtags",
         "statslog-settings",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9986e34..e930399 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -131,7 +131,8 @@
             android:usesCleartextTraffic="true"
             android:defaultToDeviceProtectedStorage="true"
             android:directBootAware="true"
-            android:appComponentFactory="androidx.core.app.CoreComponentFactory">
+            android:appComponentFactory="androidx.core.app.CoreComponentFactory"
+            android:gwpAsanMode="always">
 
         <uses-library android:name="org.apache.http.legacy" />
 
@@ -721,7 +722,7 @@
             android:name="Settings$WifiTetherSettingsActivity"
             android:label="@string/wifi_hotspot_checkbox_text"
             android:exported="true"
-            android:icon="@drawable/ic_wifi_tethering">
+            android:icon="@drawable/ic_homepage_wifi_tethering">
             <intent-filter>
                 <action android:name="com.android.settings.WIFI_TETHER_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -766,7 +767,7 @@
             android:name="Settings$VpnSettingsActivity"
             android:label="@string/vpn_settings_title"
             android:exported="true"
-            android:icon="@drawable/ic_settings_wireless">
+            android:icon="@drawable/ic_homepage_vpn">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.VPN_SETTINGS" />
                 <action android:name="android.net.vpn.SETTINGS" />
@@ -851,7 +852,7 @@
         </activity>
 
         <activity
-            android:name=".Settings$AppLocalePickerActivity"
+            android:name=".localepicker.AppLocalePickerActivity"
             android:label="@string/app_locale_picker_title"
             android:exported="true" >
             <intent-filter>
@@ -859,8 +860,6 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="package" />
             </intent-filter>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
         </activity>
 
         <activity
@@ -2910,7 +2909,7 @@
             android:name="Settings$DataUsageSummaryActivity"
             android:label="@string/data_usage_summary_title"
             android:exported="true"
-            android:icon="@drawable/ic_settings_data_usage">
+            android:icon="@drawable/ic_homepage_data_usage">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.DATA_USAGE_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -4294,6 +4293,7 @@
             android:name=".sim.ChooseSimActivity"
             android:theme="@style/GlifV3Theme.DayNight.NoActionBar"
             android:launchMode="singleInstance"
+            android:excludeFromRecents="true"
             android:exported="false"/>
 
         <activity
diff --git a/protos/Android.bp b/protos/Android.bp
index e09b941..fbcf645 100644
--- a/protos/Android.bp
+++ b/protos/Android.bp
@@ -24,3 +24,12 @@
     },
     srcs: ["settings_log_bridge.proto"],
 }
+
+java_library_static {
+    name: "settings-telephony-protos-lite",
+    host_supported: true,
+    proto: {
+        type: "lite",
+    },
+    srcs: ["network_mode_choices.proto"],
+}
diff --git a/protos/network_mode_choices.proto b/protos/network_mode_choices.proto
new file mode 100644
index 0000000..8c3ec93
--- /dev/null
+++ b/protos/network_mode_choices.proto
@@ -0,0 +1,112 @@
+syntax = "proto2";
+
+package com.android.settings.intelligence;
+option java_multiple_files = false;
+option java_package = "com.android.settings.network.telephony";
+option java_outer_classname = "NetworkModeChoicesProto";
+
+// EnabledNetworks is a list which tries to categorized the entries of popup menu
+// based on carrier network types available to the end user.
+
+// Next tag: 13
+enum EnabledNetworks {
+    // No EnabledNetworks specified.
+    ENABLED_NETWORKS_UNSPECIFIED = 0;
+
+    // For the case where either unsupported or unable to categorized properly.
+    ENABLED_NETWORKS_UNKNOWN = 1;
+
+    // For the case where CDMA is supported and LTE is not prioritized over
+    // CDMA.
+    ENABLED_NETWORKS_CDMA_CHOICES = 2;
+
+    // For the case where CDMA is supported and LTE is not available.
+    ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES = 3;
+
+    // For the case where CDMA is supported and LTE is available.
+    ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES = 4;
+
+    // For the case where TDSCDMA is primary network type.
+    ENABLED_NETWORKS_TDSCDMA_CHOICES = 5;
+
+    // For the case where GSM and LTE options are removed from the menu.
+    ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES = 6;
+
+    // For the case where GSM and 4G options are removed from the menu.
+    ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES = 7;
+
+    // For the case where GSM is removed from the menu, and both 4G/LTE are not an
+    // option.
+    ENABLED_NETWORKS_EXCEPT_GSM_CHOICES = 8;
+
+    // For the case where LTE is disabled.
+    ENABLED_NETWORKS_EXCEPT_LTE_CHOICES = 9;
+
+    // For the case where GSM related carrier with 4G/LTE supported.
+    ENABLED_NETWORKS_4G_CHOICES = 10;
+
+    // For the case where GSM related carrier without 4G/LTE supported.
+    ENABLED_NETWORKS_CHOICES = 11;
+
+    // For the case where world mode is enabled.
+    PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE = 12;
+}
+
+// A request for popup menu.
+
+// Next tag: 4
+message UiOptions {
+    // Mapping to popup menu categories.
+    required EnabledNetworks type = 1;
+
+    // Resource which provides a list of network type values for this popup menu.
+    required int32 choices = 2;
+
+    // Presentation format of a continuous popop menu entries.
+    // Each format may contains any numbers of popop menu entries.
+
+    // Next tag: 12
+    enum PresentFormat {
+
+        // No PresentFormat specified.
+        PRESENT_FORMAT_UNSPECIFIED = 0;
+
+        // Append a CDMA 1x network option into popup menu.
+        add1xEntry = 1;
+
+        // Append a 2G network option into popup menu.
+        add2gEntry = 2;
+
+        // Append a 3G network option into popup menu.
+        add3gEntry = 3;
+
+        // Append a global mode option into popup menu.
+        addGlobalEntry = 4;
+
+        // Append a CDMA/LTE global mode option into popup menu.
+        addWorldModeCdmaEntry = 5;
+
+        // Append a GSM/LTE global mode option into popup menu.
+        addWorldModeGsmEntry = 6;
+
+        // Append a 4G network option into popup menu.
+        add4gEntry = 7;
+
+        // Append a LTE network option into popup menu.
+        addLteEntry = 8;
+
+        // Append a 5G network option into popup menu.
+        add5gEntry = 9;
+
+        // Append both 5G and 4G network options into popup menu.
+        add5gAnd4gEntry = 10;
+
+        // Append both 5G and LTE network options into popup menu.
+        add5gAndLteEntry = 11;
+    }
+
+    // Format of popup menu entries.
+    // The length of this entry need to be less than the network type values
+    // referenced from "choices" field.
+    repeated PresentFormat format = 3;
+}
diff --git a/res/drawable/ic_homepage_data_usage.xml b/res/drawable/ic_homepage_data_usage.xml
new file mode 100644
index 0000000..6d1227b
--- /dev/null
+++ b/res/drawable/ic_homepage_data_usage.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item>
+        <com.android.settingslib.widget.AdaptiveIconShapeDrawable
+            android:width="@dimen/dashboard_tile_image_size"
+            android:height="@dimen/dashboard_tile_image_size"
+            android:color="@color/homepage_network_background" />
+    </item>
+
+    <item
+        android:width="@dimen/dashboard_tile_foreground_image_size"
+        android:height="@dimen/dashboard_tile_foreground_image_size"
+        android:start="@dimen/dashboard_tile_foreground_image_inset"
+        android:top="@dimen/dashboard_tile_foreground_image_inset"
+        android:drawable="@drawable/ic_settings_data_usage" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_vpn.xml b/res/drawable/ic_homepage_vpn.xml
new file mode 100644
index 0000000..d1fba0e
--- /dev/null
+++ b/res/drawable/ic_homepage_vpn.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item>
+        <com.android.settingslib.widget.AdaptiveIconShapeDrawable
+            android:width="@dimen/dashboard_tile_image_size"
+            android:height="@dimen/dashboard_tile_image_size"
+            android:color="@color/homepage_network_background" />
+    </item>
+
+    <item
+        android:width="@dimen/dashboard_tile_foreground_image_size"
+        android:height="@dimen/dashboard_tile_foreground_image_size"
+        android:start="@dimen/dashboard_tile_foreground_image_inset"
+        android:top="@dimen/dashboard_tile_foreground_image_inset"
+        android:drawable="@drawable/ic_settings_wireless" />
+</layer-list>
diff --git a/res/drawable/ic_homepage_wifi_tethering.xml b/res/drawable/ic_homepage_wifi_tethering.xml
new file mode 100644
index 0000000..fd4c051
--- /dev/null
+++ b/res/drawable/ic_homepage_wifi_tethering.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item>
+        <com.android.settingslib.widget.AdaptiveIconShapeDrawable
+            android:width="@dimen/dashboard_tile_image_size"
+            android:height="@dimen/dashboard_tile_image_size"
+            android:color="@color/homepage_network_background" />
+    </item>
+
+    <item
+        android:width="@dimen/dashboard_tile_foreground_image_size"
+        android:height="@dimen/dashboard_tile_foreground_image_size"
+        android:start="@dimen/dashboard_tile_foreground_image_inset"
+        android:top="@dimen/dashboard_tile_foreground_image_inset"
+        android:drawable="@drawable/ic_wifi_tethering" />
+</layer-list>
diff --git a/res/layout/app_locale_picker.xml b/res/layout/app_locale_picker.xml
new file mode 100644
index 0000000..51e35ef
--- /dev/null
+++ b/res/layout/app_locale_picker.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT 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:id="@+id/app_locale_detail_container"
+    android:orientation="vertical">
+
+    <FrameLayout
+        android:id="@+id/app_locale_detail"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+    <FrameLayout
+        android:id="@+id/app_locale_picker_with_region"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index bb2ce21..5e52e39 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Aanskakel-klanke"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Kitsopskrif"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Gee outomaties mediaopskrifte"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Foonluidspreker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Draadoorfone"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Ruimtelike Oudio skep meesleurende klank wat klink of dit van reg rondom jou kom. Dit werk net met sommige media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Af"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aan/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Aan/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> en <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Geen}=1{1 skedule gestel}other{# skedules gestel}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Moenie Steur Nie"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Word net deur belangrike mense en programme in kennis gestel"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 05230a1..b5dfc5a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ድምፆችን ያብሩ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"የቀጥታ ስርጭት መግለጫ ጽሑፍ"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ራስሰር የሥዕል መግለጫ ጽሑፍን ሚዲያ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"የስልክ ድምጽ ማጉያ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ባለገመድ የጆሮ ማዳመጫ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Spatial ኦዲዮ ከአካባቢዎ የሚመጣ የሚመስል መሳጭ ድምጽ ይፈጥራል። ከአንዳንድ ሚዲያዎች ጋር ብቻ ይሰራል።"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"አጥፋ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"በርቷል / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"በርቷል / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> እና <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ምንም}=1{1 መርሐግብር ተቀናብሯል}one{# መርሐግብሮች ተቀናብረዋል}other{# መርሐግብሮች ተቀናብረዋል}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"አይረብሹ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"በአስፈላጊ ሰዎች እና መተግበሪያዎች ብቻ ማሳወቂያን ያግኙ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index e574717..5aaae5d 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -3902,6 +3902,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"أصوات تشغيل الجهاز"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"النسخ النصي التلقائي"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"شرح تلقائي للوسائط"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"مكبّر صوت الهاتف"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"سماعات رأس سلكية"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"يصدر عن ميزة \"الصوت المكاني\" صوتًا غامرًا يجعلك تشعر وكأنه يأتي من كل مكان حولك. هذه الميزة غير متوافقة مع بعض الوسائط."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"إيقاف"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"مفعّلة / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"مفعّلة / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> و<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ما من جداول زمنية.}=1{تم ضبط جدول زمني واحد.}two{تم ضبط جدولين زمنيين.}few{تم ضبط # جداول زمنية.}many{تم ضبط # جدولاً زمنيًا.}other{تم ضبط # جدول زمني.}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"وضع \"عدم الإزعاج\""</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"عدم الحصول على إشعار إلا من الأشخاص المهمين والتطبيقات المهمة"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index ced8f79..3796fc3 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"পাৱাৰ অনৰ ধ্বনিসমূহ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"লাইভ কেপশ্বন"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"স্বয়ংক্ৰিয় কেপশ্বন মিডিয়া"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ফ’নৰ স্পীকাৰ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"তাঁৰযুক্ত হেডফ’ন"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"স্থান সম্বন্ধীয় অডিঅ’ই ইমাৰ্ছিভ শব্দ সৃষ্টি কৰে যিটো আপোনাৰ চাৰিওফালৰ পৰা আহি থকা যেন লাগে। কেৱল কিছুমান মিডিয়াৰ সৈতে কাম কৰে।"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"অফ আছে"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"অন আছে / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"অন আছে / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> আৰু <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{এটাও নাই}=1{1 খন সময়সূচী ছেট কৰা হৈছে}one{# খন সময়সূচী ছেট কৰা হৈছে}other{# খন সময়সূচী ছেট কৰা হৈছে}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"অসুবিধা নিদিব"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"কেৱল গুৰুত্বপূর্ণ লোক আৰু এপ্‌সমূহৰ পৰা জাননী পাওক"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index a0c8ec8..5829f5d 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Səsləri aktiv edin"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Avtomatik subtitrlər"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Avtomatik başlıq mediası"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefon dinamiki"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Simli qulaqlıq"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Sinematik Audio ətrafınızdan gəlmiş kimi görünən immersiv səs yaradır. Yalnız bəzi medialar ilə işləyir."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Deaktiv"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aktiv / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Aktiv / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> və <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Heç biri}=1{1 cədvəl ayarlanıb}other{# cədvəl ayarlanıb}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Narahat etməyin"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Yalnız vacib şəxs və tətbiqlərdən bildiriş alın."</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 5a7ded3..ac61944 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -3754,6 +3754,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Zvukovi pri uključivanju"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Titl uživo"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatski titl za medije"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Zvučnik telefona"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Žičane slušalice"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Prostorni zvuk pruža doživljaj zvuka koji vas okružuje i deluje kao da dolazi sa svih strana. Ovo radi samo sa određenim medijskim sadržajem."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Isključeno"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Uključeno/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Uključeno/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> i <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nijedan}=1{1 raspored je podešen}one{# raspored je podešen}few{# rasporeda su podešena}other{# rasporeda je podešeno}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne uznemiravaj"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Dobijajte obaveštenja samo od važnih osoba i aplikacija"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 1dc29d7..823e116 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -3814,6 +3814,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Гукі пры ўключэнні"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Імгненныя субцітры"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Аўтаматычна дадаваць субцітры"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Дынамік тэлефона"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Правадныя навушнікі"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Прасторавае гучанне стварае імерсіўны гук, які ідзе з усіх бакоў. Працуе толькі з пэўным мультымедыйным змесцівам."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Выключана"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Уключана / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Уключана / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> і <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ніводнага}=1{Зададзены 1 расклад}one{Зададзены # расклад}few{Зададзена # расклады}many{Зададзена # раскладаў}other{Зададзена # раскладу}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не турбаваць"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Атрымліваць апавяшчэнні толькі ад важных людзей і праграм"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 50007ef..33bdfcf 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Звуци при включване"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Надписи в реално време"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Мултимедия с автоматични надписи"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Високоговорител на телефона"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Слушалки с кабел"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Функцията „Пространствено аудио“ създава всеобхватно аудио, при което звукът сякаш идва отвсякъде около вас. Не работи с всяко мултимедийно съдържание."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Изкл."</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Вкл./<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Вкл./<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> и <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Нито един}=1{Зададен е 1 график}other{Зададени са # графика}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не безпокойте"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Получаване на известия само от важни хора и приложения"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index dbb187a..10812a9 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ধ্বনিগুলিতে শক্তি"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"লাইভ ক্যাপশন"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"মিডিয়া অটোমেটিক ক্যাপশন করুন"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ফোনের স্পিকার"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"তারযুক্ত হেডফোন"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"স্পেশিয়ল অডিও ইমারসিভ সাউন্ড তৈরি করে, এমন মনে হয় যেন তা আপনার আশপাশ থেকে আসছে। এটি কয়েকটি মিডিয়াতে কাজ করে।"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"বন্ধ আছে"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"চালু আছে / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"চালু আছে / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> এবং <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{একটিও নেই}=1{১টি শিডিউল সেট করা হয়েছে}one{#টি শিডিউল সেট করা হয়েছে}other{#টি শিডিউল সেট করা হয়েছে}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"বিরক্ত করবে না"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"শুধু গুরুত্বপূর্ণ লোকজন এবং অ্যাপ থেকে বিজ্ঞপ্তি পান"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 487cbce..ad0973c 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -3754,6 +3754,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Uključivanje zvukova"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Automatski titlovi"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatski titlovi za medije"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Zvučnik telefona"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Žičane slušalice"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Prostorni zvuk kreira fokusirani zvuk te će vam se činiti da dolazi sa svih strana. Funkcionira samo s određenim medijima."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Isključeno"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Uključeno / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Uključeno / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> i <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nema}=1{Postavljen je 1 raspored}one{Postavljen je # raspored}few{Postavljena su # rasporeda}other{Postavljeno je # rasporeda}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne ometaj"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Primajte obavještenja samo od važnih osoba i aplikacija"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index cd5ea0f..9b772ab 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sons d\'inici"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtítols instantanis"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Subtitula el contingut multimèdia automàticament"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altaveu del telèfon"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Auriculars amb cable"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"La funció Àudio espacial crea un so immersiu: et donarà la sensació que el so arriba per totes bandes. Només funciona amb alguns continguts multimèdia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desactivat"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Activat / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Activat / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> i <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Cap}=1{S\'ha definit 1 programació}other{S\'han definit # programacions}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"No molestis"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Rep notificacions només de persones i aplicacions importants"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 4ff6202..60de879 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -3812,6 +3812,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Zvuky při spouštění"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Živý přepis"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatické přepisy médií"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Reproduktor telefonu"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Sluchátka s kabelem"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Funkce Prostorový zvuk vytváří zvuk vyvolávající dojem, že vychází ze všech stran kolem vás. Funguje jen s některými médii."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Vypnuto"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Zapnuto / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Zapnuto / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> a <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Žádný}=1{Nastaven 1 plán}few{Nastaveny # plány}many{Nastaveno # plánu}other{Nastaveno # plánů}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Nerušit"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Přijímat pouze oznámení od důležitých lidí a z důležitých aplikací"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 43baa85..d8c9830 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Aktivér lyde"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Livetekstning"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Undertekster til medier"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefonens højttaler"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Høretelefoner med ledning"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Rumlig lyd giver en fantastisk lydoplevelse, der giver et indtryk af, at lyden kommer fra alle vinkler. Fungerer kun sammen med nogle former for medier."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Fra"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Til/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Til/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> og <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ingen}=1{1 tidsplan er angivet}one{# tidsplan er angivet}other{# tidsplaner er angivet}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Forstyr ikke"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Få kun notifikationer om vigtige personer og apps"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4ea1ea7..cd7cc05 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -3712,6 +3712,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Töne beim Hochfahren"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Automatische Untertitel"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Medien automatisch untertiteln"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Smartphone-Lautsprecher"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Kabelgebundene Kopfhörer"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Die Funktion „Raumklang“ erzeugt einen vollen Ton, der das Gefühl vermittelt, aus allen Richtungen zu kommen. Funktioniert nicht mit allen Medieninhalten."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Aus"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"An / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"An / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> und <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Keine}=1{1 Zeitplan festgelegt}other{# Zeitpläne festgelegt}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Bitte nicht stören"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Benachrichtigungen nur von wichtigen Personen und Apps"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index f8a06f7..651b80c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ήχοι ενεργοποίησης"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Ζωντανοί υπότιτλοι"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Αυτόματοι υπότιτλοι στο μέσο"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Ηχείο τηλεφώνου"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Ενσύρματα ακουστικά"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Η λειτουργία Χωρικός ήχος δημιουργεί καθηλωτικό ήχο που δίνει την αίσθηση ότι προέρχεται από όλες τις κατευθύνσεις. Λειτουργεί μόνο με ορισμένο περιεχόμενο μέσων."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Ανενεργή"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Ενεργή / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Ενεργή / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> και <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Κανένα}=1{Ορίστηκε ένα χρονοδιάγραμμα.}other{Ορίστηκαν # χρονοδιαγράμματα.}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Μην ενοχλείτε"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Λήψη ειδοποιήσεων μόνο από σημαντικά άτομα και εφαρμογές"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index abd5e8e..26115fd 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -3702,6 +3702,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Power on sounds"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatically caption media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Phone speaker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Wired headphones"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"On/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> and <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{None}=1{1 schedule set}other{# schedules set}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Do Not Disturb"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Only get notified by important people and apps"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 3c352ee..6aa6a7d 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -3702,6 +3702,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Power on sounds"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatically caption media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Phone speaker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Wired headphones"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"On/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> and <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{None}=1{1 schedule set}other{# schedules set}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Do Not Disturb"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Only get notified by important people and apps"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5f48e07..57f66d8 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -3702,6 +3702,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Power on sounds"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatically caption media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Phone speaker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Wired headphones"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"On/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> and <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{None}=1{1 schedule set}other{# schedules set}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Do Not Disturb"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Only get notified by important people and apps"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index df37bca..5a77eba 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -3702,6 +3702,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Power on sounds"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatically caption media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Phone speaker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Wired headphones"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"On/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> and <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{None}=1{1 schedule set}other{# schedules set}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Do Not Disturb"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Only get notified by important people and apps"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 4cf543f..0c402e0 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -3702,6 +3702,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎Power on sounds‎‏‎‎‏‎"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎Live Caption‎‏‎‎‏‎"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎Automatically caption media‎‏‎‎‏‎"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎Phone speaker‎‏‎‎‏‎"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎Wired headphones‎‏‎‎‏‎"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media.‎‏‎‎‏‎"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎Off‎‏‎‎‏‎"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎On / ‎‏‎‎‏‏‎<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎On / ‎‏‎‎‏‏‎<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and ‎‏‎‎‏‏‎<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎None‎‏‎‎‏‎}=1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎1 schedule set‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎# schedules set‎‏‎‎‏‎}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎Do Not Disturb‎‏‎‎‏‎"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎Only get notified by important people and apps‎‏‎‎‏‎"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 98bf495..6a6f36e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Activar los sonidos"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtitulado instantáneo"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Subtitular automáticamente"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altavoz del teléfono"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Auriculares con cable"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio espacial crea sonido envolvente para que sientas que viene de todo tu alrededor. Solo funciona con ciertos tipos de contenido multimedia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"No"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Sí (<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>)"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Sí (<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> y <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>)"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ninguno}=1{Se estableció 1 programa}other{Se establecieron # programas}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"No interrumpir"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Solo recibe notificaciones de las personas y apps que más te interesan"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index c5e5d67..d8bbf6e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sonidos de encendido"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtítulos automáticos"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Subtitula automáticamente el contenido multimedia"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altavoz del teléfono"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Auriculares con cable"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio espacial crea un sonido inmersivo que parece proceder desde cualquier punto de tu entorno. Solo funciona con algunos contenidos multimedia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desactivado"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Activado/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Activado/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> y <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ninguno}=1{1 programación creada}other{# programaciones creadas}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"No molestar"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Recibe notificaciones solo de personas y aplicaciones importantes"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 844a7e5..e1b23b3 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sisselülitamise helid"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Reaalajas subtiitrid"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Meediasisu automaatsed subtiitrid"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefoni kõlar"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Juhtmega kõrvaklapid"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Ruumiline heli loob kaasahaarava helikogemuse, mis kõlab, nagu ümbritseks see teid täielikult. Toimib ainult teatud meediasisu puhul."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Väljas"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Sees / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Sees / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> + <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Puudub}=1{1 ajakava on määratud}other{# ajakava on määratud}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Mitte segada"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Ainult oluliste inimeste ja rakendustega seotud märguanded"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 1ec2bd5..7759c9b 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Pizteko soinuak"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Istanteko azpitituluak"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Ezarri azpitituluak automatikoki"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefonoaren bozgorailua"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Entzungailu kabledunak"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio espazialarekin, bazter guztietatik datorrela dirudien soinu murgiltzailea sortzen da. Multimedia-eduki batzuetan bakarrik funtzionatzen du."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desaktibatuta"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aktibatuta / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Aktibatuta / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> eta <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Bat ere ez}=1{1 programazio ezarri da}other{# programazio ezarri dira}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ez molestatzeko modua"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Jaso jende eta aplikazio garrantzitsuen jakinarazpenak soilik"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 2e73003..7c95720 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"صدای راه‌اندازی"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"زیرنویس زنده"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"رسانه زیرنویس خودکار"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"بلندگوی تلفن"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"هدفون سیمی"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"«صدای فضایی» صدایی فراگیر تولید می‌کند که به‌نظر می‌رسد از همه جهات شنیده می‌شود. فقط با بعضی رسانه‌ها سازگار است."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"خاموش"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"روشن / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"روشن / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> و <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{هیچ‌کدام}=1{۱ زمان‌بندی تنظیم شد}one{# زمان‌بندی تنظیم شده است}other{# زمان‌بندی تنظیم شده است}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"مزاحم نشوید"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"فقط در ارتباط با افراد و برنامه‌های مهم اعلان دریافت کنید"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index d274746..c4ab920 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Käynnistysäänet"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live-tekstitys"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Tekstitä media automaattisesti"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Puhelimen kaiutin"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Langalliset kuulokkeet"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Tila-audio luo immersiivisen äänen, joka vaikuttaa kuuluvan joka puolelta. Ei toimi kaiken median kanssa."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Poissa päältä"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Päällä / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Päällä / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ja <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ei yhtään}=1{1 aikataulu luotu}other{# aikataulua luotu}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Älä häiritse"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Salli ilmoitukset vain tärkeiltä ihmisiltä ja sovelluksilta"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 667e11c..33bef35 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Activation par les sons"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Transcription instantanée"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Ajouter automatiquement des sous-titres aux contenus multimédias"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Haut-parleur du téléphone"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Casque d\'écoute filaire"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Le son spatial crée un son immersif qui semble émaner tout autour de vous. Fonctionne uniquement avec certains contenus multimédias."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Désactivé"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Activé : <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Activé : <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> et <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Aucun}=1{1 horaire programmé}one{# horaire programmé}other{# horaires programmés}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne pas déranger"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Recevez uniquement les notifications des personnes et des applications importantes"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index b0095bf..27e70a6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sons de mise en route"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Sous-titres instantanés"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Sous-titres automatiques"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Haut-parleur du téléphone"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Casque filaire"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"La fonctionnalité Son spatial, disponible qu\'avec certains contenus multimédias, crée un son immersif qui semble provenir de tout autour de vous."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Désactivé"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Activé - <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Activé - <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> et <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Aucun}=1{1 programme défini}one{# programme défini}other{# programmes définis}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne pas déranger"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Recevez uniquement les notifications des personnes et applications importantes"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 4cca2b3..94150d6 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sons de acendido"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtítulos instantáneos"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Crea subtítulos automáticos"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altofalante do teléfono"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Auriculares con cable"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"A función de audio espacial crea un son envolvente que parece que chega do teu arredor. Só é compatible con algún contido multimedia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Opción desactivada"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Opción activada (<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>)"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Opción activada (<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> e <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>)"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ningunha planificación}=1{Definiuse 1 planificación}other{Definíronse # planificacións}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Non molestar"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Só se reciben notificacións de aplicacións e persoas importantes"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index ec803f3..3902bbf 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ચાલુ થવા પર વાગનાર ધ્વનિ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"લાઇવ કૅપ્શન"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"મીડિયામાં કૅપ્શન ઑટોમૅટિક રીતે ઉમેરો"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ફોન સ્પીકર"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"વાયરવાળા હૅડફોન"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"સ્પેશલ ઑડિયોની સુવિધાને કારણે ઇમર્સિવ સાઉન્ડ તૈયાર થાય છે, જેથી તે જાણે તમારી ચારે તરફથી સંભળાતો હોય એવું લાગે છે. માત્ર અમુક મીડિયા કન્ટેન્ટ સાથે જ કામ કરે છે."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"બંધ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ચાલુ / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ચાલુ / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> અને <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{એકપણ નહીં}=1{એક શેડ્યૂલ સેટ કરવામાં આવ્યું}one{# શેડ્યૂલ સેટ કરવામાં આવ્યું}other{# શેડ્યૂલ સેટ કરવામાં આવ્યા}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ખલેલ પાડશો નહીં"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ફક્ત મહત્ત્વપૂર્ણ લોકો અને ઍપ દ્વારા નોટિફિકેશન મેળવો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index caeebfe..675559d 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"चालू होने की ध्वनि"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"लाइव कैप्शन"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ऑडियो-वीडियो पहचानकर अपने-आप कैप्शन बनना"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"फ़ोन का स्पीकर"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"तार वाले हेडफ़ोन"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"स्पेशल ऑडियो की सुविधा से आवाज़ बेहतरीन बनती है. इसे सुनकर ऐसा लगता है कि आवाज़ आपके आस-पास से आ रही है. यह सुविधा, कुछ मीडिया के साथ ही काम करती है."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"बंद है"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"चालू है / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"चालू है / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> और <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{कोई शेड्यूल सेट नहीं है}=1{1 शेड्यूल सेट है}one{# शेड्यूल सेट है}other{# शेड्यूल सेट हैं}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"परेशान न करें"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"सिर्फ़ ज़रूरी लोगों और ऐप्लिकेशन की सूचनाएं पाएं"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index f122992..583dba3 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -3756,6 +3756,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Uključi zvukove"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Automatski titlovi"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatski titlovi za medije"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Zvučnik telefona"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Žičane slušalice"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Prostorni zvuk stvara dojam da vas zvuk potpuno okružuje. Ta značajka funkcionira samo s određenim medijskim sadržajima."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Isključeno"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Uključeno/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Uključeno / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> i <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nijedan}=1{Postavljen je jedan raspored}one{Postavljen je # raspored}few{Postavljena su # rasporeda}other{Postavljeno je # rasporeda}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne uznemiravaj"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Primajte obavijesti samo od važnih osoba i aplikacija"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 4ffae5c..e9400b8 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Indítási hangok"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Élő feliratozás"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatikus feliratozás"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefon hangszórója"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Vezetékes fejhallgató"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"A Térbeli hangzás olyan térhatású hangot hoz létre, amely úgy hangzik, mintha egy Önt teljesen körülvevő forrásból eredne. Csak bizonyos médiatartalmak esetében működik."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Ki"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Bekapcsolva / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Bekapcsolva / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> és <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nincs}=1{1 ütemezés beállítva}other{# ütemezés beállítva}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne zavarjanak"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Értesítés fogadása csak fontos személyektől és alkalmazásoktól"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 5c57611..bbcb95c 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Միացման ձայներ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Կենդանի ենթագրեր"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Ավտոմատ ավելացնել ենթագրեր"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Հեռախոսի բարձրախոս"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Լարով ականջակալներ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Տարածական հնչողությունն այնպիսի տպավորություն է ստեղծում, որ ձայնը կարծես թե ձեր շուրջ է հնչում։ Այն աջակցվում է ոչ բոլոր մեդիա ծառայությունների կողմից։"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Անջատված է"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Միացված է/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Միացված է/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> և <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ոչ մի ժամանակացույց}=1{Սահմանված է 1 ժամանակացույց}one{Սահմանված է # ժամանակացույց}other{Սահմանված է # ժամանակացույց}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Չանհանգստացնել"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Ծանուցում ստանալ միայն կարևոր մարդկանցից և հավելվածներից"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4f98cf3..cf3ab7c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Aktifkan suara"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Teks Otomatis"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Otomatis tambahkan teks ke media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Speaker ponsel"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Headphone berkabel"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio Spasial membuat suara imersif yang seolah-olah berasal dari sekitar Anda. Hanya berfungsi di beberapa media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Nonaktif"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aktif/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> dan <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Tidak ada}=1{1 jadwal disetel}other{# jadwal disetel}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Jangan Ganggu"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Hanya dapatkan notifikasi dari aplikasi dan orang yang penting"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 9b1b0dd..c52396c 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ræsingarhljóð"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Skjátextar í rauntíma"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Setja sjálfkrafa skjátexta við efni"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Símahátalari"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Heyrnartól með snúru"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Rýmishljóð skapar víðóma hljóm sem virðist vera allt umlykjandi. Virkar aðeins með tilteknu efni."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Slökkt"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Kveikt / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Kveikt / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> og <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Engin}=1{1 áætlun stillt}one{# áætlun stillt}other{# áætlanir stilltar}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ónáðið ekki"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Fáðu aðeins tilkynningar frá mikilvægum einstaklingum og forritum"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 1446e82..d03829c 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Attiva suoni"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Sottotitoli in tempo reale"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Sottotitoli automatici"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altoparlante telefono"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Cuffie con cavo"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"La funzionalità Audio spaziale crea un suono immersivo che sembra provenire dall\'ambiente intorno a te. È supportato soltanto con alcuni contenuti multimediali."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"On/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"On/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> e <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nessuna}=1{1 pianificazione impostata}other{# pianificazioni impostate}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Non disturbare"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Ricevi soltanto le notifiche di app e persone importanti"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index f84ac3c..90d7698 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -3814,6 +3814,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"הפעלת צלילים"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"כתוביות מיידיות"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"הוספת כתוביות למדיה באופן אוטומטי"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"רמקול של טלפון"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"אוזניות חוטיות"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"התכונה \'אודיו מרחבי\' יוצרת צליל עשיר שגורם לך להרגיש שהוא עוטף אותך. פועלת רק עם אמצעי מדיה מסוימים."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"התכונה כבויה"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"התכונה פועלת / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"התכונה פועלת / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ו<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{אין}=1{הוגדר לוח זמנים אחד}two{הוגדרו # לוחות זמנים}many{הוגדרו # לוחות זמנים}other{הוגדרו # לוחות זמנים}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"נא לא להפריע"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"קבלת התראות רק מאפליקציות ומאנשים חשובים"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1bbb9a9..a3c1dc1 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"電源オンの音"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"自動字幕起こし"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"メディアの自動字幕起こし"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"スマートフォンのスピーカー"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"有線ヘッドフォン"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"空間オーディオは、音があらゆる方向から聞こえてくるような、臨場感あふれるサウンドを生み出します。一部のメディアでのみ利用できます。"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"OFF"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ON / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ON / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>、<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{なし}=1{1 件のスケジュールが有効}other{# 件のスケジュールが有効}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"サイレント モード"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"大切な人やアプリからの通知のみ受け取ります"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 90873a6..bb7ee53 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ჩართვის ხმები"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"პირდაპირი სუბტიტრები"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"მედიის ავტომ. სუბტიტრირება"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ტელეფონის დინამიკი"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"სადენიანი ყურსასმენი"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"სივრცითი აუდიო ქმნის ჩაღრმავებულ ხმას, რომელიც თითქოს თქვენს გარშემო მოდის. მუშაობს მხოლოდ გარკვეულ მედიასთან."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"გამორთვა"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ჩართულია / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ჩართულია / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> და <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{არცერთი}=1{დაყენებულია 1 განრიგი}other{დაყენებულია # განრიგი}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"არ შემაწუხოთ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"შეტყობინებების მიღება მხოლოდ მნიშვნელოვანი ხალხისგან და აპებიდან"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 0a52b95..0653394 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Дыбыстарды қосу"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Автоматты субтитр қосу"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Телефон динамигі"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Сымды құлақаспап"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Кеңістіктік дыбыс функциясы жан-жағыңыздан естілетіндей иммерсивті дыбыс жасайды. Кейбір медиақұрылғыда ғана қолжетімді."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Өшірулі"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Қосулы/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Қосулы/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> және <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Жоқ}=1{1 кесте қойылған.}other{# кесте қойылған.}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Мазаламау"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Хабарландыруды маңызды адамдардан және қолданбалардан ғана алу"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index fc97b38..c68cc1d 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"បើកសំឡេង"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"អក្សររត់ក្នុងពេលជាក់ស្ដែង"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ដាក់អក្សររត់លើមេឌៀដោយស្វ័យប្រវត្តិ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ឧបករណ៍​បំពង​សំឡេង​ទូរសព្ទ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"កាស​ប្រើ​ខ្សែ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"មុខងារសំឡេងលំហបង្កើតសំឡេងដ៏ជក់ចិត្ត ដែលហាក់ដូចជាចេញមកពីជុំវិញខ្លួនអ្នក។ ដំណើរការជាមួយមេឌៀមួយចំនួនប៉ុណ្ណោះ។"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"បិទ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"បើក / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"បើក / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> និង <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{គ្មាន}=1{បានកំណត់​កាលវិភាគ 1}other{បានកំណត់​កាលវិភាគ #}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"កុំ​រំខាន"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ទទួលការជូនដំណឹង​ពីកម្មវិធី និងមនុស្សសំខាន់ៗ​តែប៉ុណ្ណោះ"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 6b6935a..b3e1e52 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ಧ್ವನಿಗಳನ್ನು ಪವರ್ ಆನ್ ಮಾಡಿ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"ಲೈವ್ ಶೀರ್ಷಿಕೆ"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ಸ್ವಯಂಚಾಲಿತ ಶೀರ್ಷಿಕೆ ಮಾಧ್ಯಮ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ಫೋನ್ ಸ್ಪೀಕರ್"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ವೈರ್ ಕನೆಕ್ಷನ್ ಹೊಂದಿರುವ ಹೆಡ್‌ಫೋನ್‌ಗಳು"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"ಸ್ಪೇಷಿಯಲ್ ಆಡಿಯೋ ತಲ್ಲೀನಗೊಳಿಸುವ ಧ್ವನಿಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ ಅದರಿಂದ ಧ್ವನಿಯು ನಿಮ್ಮ ಸುತ್ತಲಿನಿಂದಲೇ ಬರುತ್ತಿರುವಂತೆ ಅನ್ನಿಸುತ್ತದೆ. ಕೆಲವು ಮೀಡಿಯಾ ಜೊತೆ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ಆಫ್ ಮಾಡಿ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ಆನ್ / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ಆನ್ / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ವೇಳಾಪಟ್ಟಿಯನ್ನು ಸೆಟ್ ಮಾಡಲಾಗಿದೆ}one{# ವೇಳಾಪಟ್ಟಿಗಳನ್ನು ಸೆಟ್ ಮಾಡಲಾಗಿದೆ}other{# ವೇಳಾಪಟ್ಟಿಗಳನ್ನು ಸೆಟ್ ಮಾಡಲಾಗಿದೆ}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ಪ್ರಮುಖ ಜನರು ಮತ್ತು ಆ್ಯಪ್‌ಗಳಿಂದ ಮಾತ್ರ ಅಧಿಸೂಚನೆ ಪಡೆಯಿರಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index bc32883..9b4ccc9 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"부팅 소리"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"실시간 자막"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"미디어 자막 자동 생성"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"휴대전화 스피커"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"유선 헤드폰"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"공간 음향은 사용자의 주변에서 들리는 것처럼 소리를 재생하여 몰입도 높은 사운드를 지원합니다. 일부 미디어에서만 호환됩니다."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"사용 안함"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"사용 중/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"사용 중/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> 및 <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{없음}=1{예약 1개 설정됨}other{예약 #개 설정됨}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"방해 금지 모드"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"중요한 사람과 앱의 알림만 받기"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 2354ce9..36f4f7d 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Түзмөк күйгүзүлгөндөгү үндөр"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Ыкчам коштомо жазуулар"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Автоматтык коштомо жазуулар"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Телефондун динамиги"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Зымдуу гарнитура"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Мейкиндиктүү үн ар тараптан келип жаткандай угулган сүңгүтүүчү үндү жаратат. Айрым медиа менен гана иштейт."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Өчүк"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Күйүк/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Күйүк/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> жана <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Жок}=1{1 график коюлду}other{# график коюлду}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Тынчымды алба"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Маанилүү байланыштар менен колдонмолордон гана билдирмелерди алуу"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 87da98b..e29d8b8 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ສຽງຕອນເປີດເຄື່ອງ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"ຄຳບັນຍາຍສົດ"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ສ້າງຄຳບັນຍາຍມີເດຍໂດຍອັດຕະໂນມັດ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ລຳໂພງໂທລະສັບ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ຫູຟັງແບບມີສາຍ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"ສຽງຮອບທິດທາງຈະສ້າງສຽງແບບອິມເມີສີບທີ່ຄ້າຍກັບວ່າມາຈາກທຸກທິດອ້ອມຕົວທ່ານ. ໃຊ້ໄດ້ໃນມີເດຍບາງຢ່າງເທົ່ານັ້ນ."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ປິດ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ເປີດ / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ເປີດ / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ແລະ <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ບໍ່ມີ}=1{ຕັ້ງກຳນົດເວລາ 1 ລາຍການແລ້ວ}other{ຕັ້ງກຳນົດເວລາ # ລາຍການແລ້ວ}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ຫ້າມລົບກວນ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ຮັບການແຈ້ງເຕືອນສະເພາະຄົນ ແລະ ແອັບສຳຄັນເທົ່ານັ້ນ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 9a02ad7..42ea63b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -3812,6 +3812,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Įjungti garsus"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtitrai realiuoju laiku"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Taikyti automatinius medijos subtitrus"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefono garsiakalbis"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Laidinės ausinės"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Naudojant erdvinio garso funkciją kuriamas įtraukiantis garsas, kuris skamba taip, tarsi jo šaltinis būtų visai šalia jūsų. Veikia tik su tam tikra medija."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Išjungta"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Įjungta / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Įjungta / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ir <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nė vieno}=1{Nustatytas 1 tvarkaraštis}one{Nustatytas # tvarkaraštis}few{Nustatyti # tvarkaraščiai}many{Nustatyta # tvarkaraščio}other{Nustatyta # tvarkaraščių}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Netrukdymo režimas"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Gauti pranešimus tik iš svarbių žmonių ar įvykių"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 569b64f..58beeaf 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -3767,6 +3767,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ieslēgšanas skaņas"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtitri reāllaikā"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automātiskie paraksti multividei"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Tālruņa skaļrunis"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Vadu austiņas"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Iestatījums “Telpiskais audio” rada visaptverošu skaņu, kas šķietami nāk no visām pusēm. Darbojas tikai noteiktam multivides saturam."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Izslēgts"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Ieslēgts (<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>)"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Ieslēgts (<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> un <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>)"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nav}=1{Iestatīts viens grafiks}zero{Iestatīti # grafiki}one{Iestatīts # grafiks}other{Iestatīti # grafiki}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Netraucēt"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Saņemt paziņojumus tikai no svarīgām personām un lietotnēm"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index ed9bf77..709a003 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -3711,6 +3711,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Вклучете ги звуците"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Автоматски титлови"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Автоматски титлови за аудиовизуелни содржини"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Телефонски звучник"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Жичени слушалки"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Просторниот звук создава подлабок звук што се чини дека доаѓа од секаде околу вас. Функционира само со некои аудиовизуелни содржини."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Исклучено"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Вклучено/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Вклучено/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> и <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ниеден}=1{Поставен е 1 распоред}one{Поставен е # распоред}other{Поставени се # распореди}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не вознемирувај"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Добивајте известувања само од важни луѓе и апликации"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 1db250f..0ae2797 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ശബ്ദങ്ങൾ ഓണാക്കുക"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"തത്സമയ ക്യാപ്‌ഷനുകൾ"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"മീഡിയയ്ക്ക് സ്വയമേവ അടിക്കുറിപ്പ് നൽകുക"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ഫോൺ സ്‌പീക്കർ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"വയേർഡ് ഹെഡ്ഫോണുകൾ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"സ്‌പേഷ്യൽ ഓഡിയോ നിങ്ങളുടെ ചുറ്റിലും നിന്ന് വരുന്നതായി തോന്നിപ്പിക്കുന്ന കൂടുതൽ ആഴത്തിലുള്ള ശബ്‌ദം സൃഷ്‌ടിക്കുന്നു. ചില മീഡിയയിൽ മാത്രമേ പ്രവർത്തിക്കൂ."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ഓഫാണ്"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ഓണാണ് / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ഓണാണ് / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>, <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ഒന്നുമില്ല}=1{ഒരു ഷെഡ്യൂൾ സജ്ജീകരിച്ചു}other{# ഷെഡ്യൂളുകൾ സജ്ജീകരിച്ചു}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ശല്യപ്പെടുത്തരുത്"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"പ്രധാനപ്പെട്ട ആളുകളിൽ നിന്നും ആപ്പുകളിൽ നിന്നുമുള്ള അറിയിപ്പ് മാത്രം നേടുക"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 8e1a4c6..ea0e217 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Дууны чадал"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Шууд тайлбар"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Медиад автоматаар тайлбар нэмэх"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Утасны чанга яригч"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Утастай чихэвч"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Орчны аудио нь таны эргэн тойрноос гарч буй мэт гайхалтай аудиог үүсгэнэ. Зөвхөн зарим медиатай ажиллана."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Унтраалттай"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Асаалттай / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Асаалттай / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> болон <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Байхгүй}=1{1 хуваарийг тохируулсан}other{# хуваарийг тохируулсан}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Бүү саад бол"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Зөвхөн чухал хүмүүс болон аппуудаас мэдэгдэл авах"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index edd1ae6..e8bcf20 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -3723,6 +3723,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ध्वनी सुरू करा"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"लाइव्ह कॅप्शन"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"मीडियाला आपोआप सबटायटल द्या"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"फोनचा स्पीकर"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"वायर असलेले हेडफोन"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"अवकाशीय ऑडिओ हा तुमच्या आजूबाजूने येत आहे असे वाटणारा इमर्सिव्ह आवाज तयार करते. फक्त काही मीडियासोबत काम करते."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"बंद आहे"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"सुरू आहे / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"सुरू आहे / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> आणि <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{None}=1{एक शेड्युल सेट केले}other{# शेड्युल सेट केली}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"व्यत्यय आणू नका"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"फक्त महत्त्वाच्या लोकांच्या आणि अ‍ॅप्सच्या सूचना मिळवा"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 09c5401..3f08e3b 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Bunyi semasa kuasa dihidupkan"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Sari Kata Langsung"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Sari kata media automatik"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Pembesar suara telefon"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Fon kepala berwayar"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio Ruang mewujudkan bunyi mengasyikkan yang seolah-olah datang dari sekeliling anda. Hanya berfungsi dengan sesetengah media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Mati"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Hidup / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Hidup / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> dan <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Tiada}=1{1 jadual ditetapkan}other{# jadual ditetapkan}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Jangan Ganggu"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Dapatkan pemberitahuan oleh orang dan apl penting sahaja"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index d133b58..2f1a3b0 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"အသံများ ဖွင့်ထားပါ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"တိုက်ရိုက်စာတန်းထိုး"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"အလိုအလျောက် စာတန်းထိုးရန်"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ဖုန်းစပီကာ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ကြိုးတပ် နားကြပ်"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"‘ထောင့်စုံအော်ဒီယို’ က သင်၏ဘက်ပေါင်းစုံမှ အသံလာသကဲ့သို့ ပြုလုပ်ပေးသည်။ မီဒီယာအချို့နှင့်သာ သုံးနိုင်သည်။"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ပိတ်"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ဖွင့် / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ဖွင့် / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> နှင့် <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{မရှိ}=1{အချိန်ဇယား ၁ ခု သတ်မှတ်ထားသည်}other{အချိန်ဇယား # ခု သတ်မှတ်ထားသည်}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"မနှောင့်ယှက်ရ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"အရေးကြီးပုဂ္ဂိုလ်များနှင့် အက်ပ်များထံမှသာ အကြောင်းကြားချက် ရယူပါ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 6b6b44a..b2911b2 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Lyder ved oppstart"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Direkteteksting"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatisk medieteksting"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefonhøyttaler"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Hodetelefoner med ledning"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Romlig lyd lager omsluttende lyd som virker som om den kommer fra alle kanter. Dette fungerer bare med enkelte medier."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Av"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"På / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"På / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> og <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ingen}=1{1 tidsplan er angitt}other{# tidsplaner er angitt}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ikke forstyrr"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Bli bare varslet av viktige personer og apper"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 305b5d9..a4f5353 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"यन्त्र सक्रिय हुँदाका ध्वनिहरू"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"लाइभ क्याप्सन"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"मिडियाको स्वत: क्याप्सन बनाउनुहोस्"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"फोनको स्पिकर"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"तारयुक्त हेडफोन"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"स्पेसियल अडियोले चारैतिरबाट आए जस्तो लाग्ने इमर्सिभ आवाज निकाल्छ। यो अडियोले केही मिडियामा मात्र काम गर्छ।"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"अफ छ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"अन छ / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"अन छ / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> र <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{कुनै पनि समयतालिका बनाइएको छैन}=1{एउटा समयतालिका बनाइएको छ}other{# वटा समयतालिका बनाइएको छ}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"बाधा नपुऱ्याउनुहोस्"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"महत्त्वपूर्ण मान्छे र एपका सूचना मात्र प्राप्त गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 6e9b7ab..ffe4ea9 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Opstartgeluiden"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live ondertiteling"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Ondertitel media automatisch"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefoonspeaker"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Bedrade hoofdtelefoon"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Ruimtelijke audio creëert geluid dat je omringt. Werkt alleen met bepaalde media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Uit"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aan / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Aan / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> en <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Geen}=1{1 planning ingesteld}other{# planningen ingesteld}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Niet storen"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Alleen meldingen van belangrijke mensen en apps ontvangen"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 8946148..406aac7 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ଚାଲୁ ହେବାର ଶବ୍ଦ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"ଲାଇଭ୍ କ୍ୟାପ୍ସନ୍"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ସ୍ବଚାଳିତ କ୍ୟାପ୍ସନ୍ ମିଡିଆ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ଫୋନ ସ୍ପିକର"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ତାରଯୁକ୍ତ ହେଡଫୋନଗୁଡ଼ିକ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"ସ୍ପାସିଅଲ ଅଡିଓ ଇମରସିଭ ସାଉଣ୍ଡ ତିଆରି କରେ ଯାହା ଆପଣଙ୍କ ଚାରିପାଖରୁ ଆସୁଥିବା ପରି ଲାଗେ। କେବଳ କିଛି ମିଡିଆରେ କାମ କରେ।"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ବନ୍ଦ ଅଛି"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ଚାଲୁ ଅଛି / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ଚାଲୁ ଅଛି / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ଏବଂ <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{କିଛି ନାହିଁ}=1{1ଟି ସିଡୁଲ୍ ସେଟ୍ ହୋଇଛି}other{#ଟି ସିଡୁଲ୍ ସେଟ୍ ହୋଇଛି}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"କେବଳ ଗୁରୁତ୍ଵପୂର୍ଣ୍ଣ ଲୋକ ଏବଂ ଆପ୍ସ ଦ୍ୱାରା ସୂଚନା ପାଆନ୍ତୁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index bad44c8..ab96000 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ਚਾਲੂ ਹੋਣ \'ਤੇ ਵੱਜਣ ਵਾਲੀਆਂ ਧੁਨੀਆਂ"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"ਲਾਈਵ ਸੁਰਖੀਆਂ"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"ਸਵੈਚਲਿਤ ਸੁਰਖੀ ਮੀਡੀਆ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ਫ਼ੋਨ ਦਾ ਸਪੀਕਰ"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"ਤਾਰ ਵਾਲੇ ਹੈੱਡਫੋਨ"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"ਸਪੇਸ਼ਿਅਲ ਆਡੀਓ ਇਮਰਸਿਵ ਧੁਨੀ ਪੈਦਾ ਕਰਦਾ ਹੈ, ਜੋ ਇੰਝ ਲੱਗਦੀ ਹੈ ਜਿਵੇਂ ਇਹ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਤੋਂ ਆ ਰਹੀ ਹੋਵੇ। ਸਿਰਫ਼ ਕੁਝ ਮੀਡੀਆ ਨਾਲ ਹੀ ਕੰਮ ਕਰਦਾ ਹੈ।"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ਬੰਦ"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ਚਾਲੂ / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ਚਾਲੂ / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ਕੋਈ ਨਹੀਂ}=1{1 ਸਮਾਂ-ਸੂਚੀ ਸੈੱਟ ਹੈ}other{# ਸਮਾਂ-ਸੂਚੀਆਂ ਸੈੱਟ ਹਨ}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ਸਿਰਫ਼ ਮਹੱਤਵਪੂਰਨ ਲੋਕਾਂ ਅਤੇ ਐਪਾਂ ਵੱਲੋਂ ਸੂਚਨਾ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 034eb071..de6393c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -3799,6 +3799,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Włącz dźwięki"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Napisy na żywo"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatycznie wyświetlaj napisy do multimediów"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Głośnik telefonu"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Słuchawki przewodowe"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Dźwięk przestrzenny zapewnia wrażenie dźwięku dochodzącego ze wszystkich stron, w którym można się zanurzyć. Działa tylko w przypadku niektórych multimediów."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Wyłączono"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Wł. / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Wł. / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> i <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Brak}=1{Ustawiono 1 harmonogram}few{Ustawiono # harmonogramy}many{Ustawiono # harmonogramów}other{Ustawiono # harmonogramu}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Nie przeszkadzać"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Otrzymuj powiadomienia tylko od ważnych osób i z kluczowych aplikacji"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index e6ffffa..5077e8f 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -3711,6 +3711,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ativar sons"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Legenda Instantânea"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Legendar mídias automaticamente"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Alto-falante do smartphone"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Fones de ouvido com fio"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"O Áudio espacial cria um som imersivo que parece vir de todos os lados. Ele só funciona com alguns tipos de mídia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desativado"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Ativado / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Ativado / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> e <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nenhum}=1{1 programação definida}one{# programação definida}other{# programações definidas}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Não perturbe"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Receber notificações apenas de pessoas e apps importantes"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 9e9d849..8509028 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ativar sons"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Legendas instantâneas"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Multimédia com legendas automáticas"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altifalante do telemóvel"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Auscultadores com fios"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"O Áudio espacial cria um som envolvente que dá a sensação de surgir de todas as direções. Funciona apenas com alguns conteúdos multimédia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desativado"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Ativado/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Ativado/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> e <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nenhum}=1{1 horário definido}other{# horários definidos}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Não incomodar"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Receber notificações apenas de pessoas e apps importantes"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e6ffffa..5077e8f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -3711,6 +3711,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ativar sons"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Legenda Instantânea"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Legendar mídias automaticamente"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Alto-falante do smartphone"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Fones de ouvido com fio"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"O Áudio espacial cria um som imersivo que parece vir de todos os lados. Ele só funciona com alguns tipos de mídia."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Desativado"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Ativado / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Ativado / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> e <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Nenhum}=1{1 programação definida}one{# programação definida}other{# programações definidas}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Não perturbe"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Receber notificações apenas de pessoas e apps importantes"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index ebccf2c..55e8a93 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -3756,6 +3756,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Sunete la pornire"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Subtitrări live"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Adăugați subtitrări automate la fișierele media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Difuzorul telefonului"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Căști cu fir"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audio spațial creează un sunet captivant care pare că vă învăluie. Funcționează doar cu anumite tipuri de conținut media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Dezactivat"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Activat/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Activat/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> și <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Niciunul}=1{Un program setat}few{# programe setate}other{# de programe setate}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Nu deranja"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Primiți doar notificări de la persoane și aplicații importante"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 68dd6b0..87b0d85 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -3812,6 +3812,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Звуки при включении устройства"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Автоматические субтитры"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Автоматически добавлять субтитры"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Встроенный динамик"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Проводные наушники"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Пространственное звучание создает эффект погружения. Поддерживается не для всего медиаконтента."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Выключено"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Включено/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Включено/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> и <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Нет настроенных расписаний}=1{Настроено 1 расписание}one{Настроено # расписание}few{Настроено # расписания}many{Настроено # расписаний}other{Настроено # расписания}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не беспокоить"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Получать уведомления только от важных людей и приложений."</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index f95d20d..093898b 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ශබ්ද බල ගන්වන්න"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"සජීවී සිරස්තලය"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"මාධ්‍ය ස්වයංක්‍රීයව සිරස්තල"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"දුරකථන ස්පීකරය"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"රැහැන්ගත හෙඩ්ෆෝන්"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"අවකාශීය ශ්‍රව්‍ය ඔබ අවටින් එන බව පෙනෙන ගිලී යන ශබ්දය නිර්මාණය කරයි. සමහර මාධ්‍ය සමග පමණක් ක්‍රියා කරයි."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ක්‍රියාවිරහිතයි"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ක්‍රියාත්මකයි / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ක්‍රියාත්මකයි / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> සහ <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{කිසිත් නැත}=1{කාලසටහන් 1ක් සකසන ලදී}one{කාලසටහන් #ක් සකසන ලදී}other{කාලසටහන් #ක් සකසන ලදී}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"බාධා නොකරන්න"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"වැදගත් පුද්ගලයන් සහ යෙදුම් විසින් පමණක් දැනුම් දෙනු ලැබේ"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8ab95e2..c725e2b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -3801,6 +3801,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Zvuky pri spustení"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Živý prepis"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Automatické titulkovanie médií"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Reproduktor telefónu"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Slúchadlá s káblom"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Priestorový zvuk vytvára pohlcujúci zvuk, pri ktorom sa zdá, že vychádza zo všetkých strán. Funguje iba s niektorými médiami."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Vypnuté"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Zapnuté / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Zapnuté / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> a <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Žiadne}=1{Bol nastavený 1 plán}few{Boli nastavené # plány}many{# schedules set}other{Bolo nastavených # plánov}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Režim bez vyrušení"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Prijímajte upozornenia iba od dôležitých ľudí a z dôležitých aplikácií"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 1e011f1..7de9d4f 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -3801,6 +3801,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Zvoki ob zagonu"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Samodejni podnapisi"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Samodejni podnapisi predstavnosti"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Zvočnik telefona"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Žične slušalke"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Prostorski zvok ustvari poln zvok, pri katerem se vam zdi, da prihaja od vsepovsod okoli vas. Deluje samo z nekaterimi predstavnostmi."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Izklopljeno"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Vklopljeno/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Vklopljeno/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> in <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Noben}=1{Nastavljen je 1 razpored}one{Nastavljen je # razpored}two{Nastavljena sta # razporeda}few{Nastavljeni so # razporedi}other{Nastavljenih je # razporedov}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ne moti"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Prejemajte samo obvestila pomembnih oseb in aplikacij."</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 51e1a0e..4008733 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Aktivizo tingujt"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Titra në çast"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Media me titra automatike"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Altoparlanti i telefonit"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Kufje me tel"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Audioja hapësinore krijon tinguj përfshirës që duket sikur vijnë nga kudo përreth teje. Funksionon vetëm me disa media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Joaktiv"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Aktiv / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Aktiv / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> dhe <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Asnjë}=1{1 orar i caktuar}other{# orare të caktuara}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Mos shqetëso"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Merr njoftime vetëm nga aplikacionet dhe personat e rëndësishëm"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index e98ed10..96a4a8f 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -3754,6 +3754,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Звукови при укључивању"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Титл уживо"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Аутоматски титл за медије"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Звучник телефона"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Жичане слушалице"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Просторни звук пружа доживљај звука који вас окружује и делује као да долази са свих страна. Ово ради само са одређеним медијским садржајем."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Искључено"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Укључено/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Укључено/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> и <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Ниједан}=1{1 распоред је подешен}one{# распоред је подешен}few{# распореда су подешена}other{# распореда је подешено}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не узнемиравај"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Добијајте обавештења само од важних особа и апликација"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 1ff7901..f444dcb 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ljud vid uppstart"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Live Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Texta media automatiskt"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefonhögtalare"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Hörlurar med sladd"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Med Rumsligt ljud får du uppslukande ljud som verkar omge dig. Fungerar inte med all media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Av"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"På/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"På/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> och <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Inga}=1{1 schema har ställts in}other{# scheman har ställts in}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Stör ej"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Få bara aviseringar från viktiga personer och appar"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 08ed13e..70f06d6 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Washa sauti"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Manukuu Papo Hapo"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Wekea maudhui manukuu kiotomatiki"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Spika ya simu"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Vipokea sauti vya kichwani vinavyotumia waya"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Sauti inayojirekebisha huunda sauti nzuri ambayo huonekana kama vile inatoka pande zote. Inafanya kazi na baadhi ya programu tu."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Imezimwa"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Imewashwa / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Imewashwa / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> na <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Hamna}=1{Umeweka ratiba moja}other{Umeweka ratiba #}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Usinisumbue"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Pata arifa za watu na programu muhimu pekee"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 9ba507e..f41a11c 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"ஒலிகளை இயக்கு"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"உடனடி வசன உரை"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"வசன உரைகளைத் தானாக எழுதும்"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"மொபைல் ஸ்பீக்கர்"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"வயருள்ள ஹெட்ஃபோன்கள்"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"\'சுற்றிலும் கேட்கும் ஆடியோ\' உங்களைச் சுற்றிலும் ஒலிப்பது போன்ற தத்ரூபமான ஒலியை உருவாக்கும். இது சில மீடியாக்களில் மட்டுமே செயல்படும்."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ஆஃப்"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ஆன் / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ஆன் / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> மற்றும் <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{எதுவுமில்லை}=1{1 திட்டமிடல் அமைக்கப்பட்டுள்ளது}other{# திட்டமிடல்கள் அமைக்கப்பட்டுள்ளன}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"தொந்தரவு செய்யாதே"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"முக்கியமான நபர்கள் மற்றும் ஆப்ஸிலிருந்து மட்டும் அறிவிப்புகளைப் பெறுங்கள்"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 9a3eaa8..f074101 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"పవర్ ఆన్ చేసేటప్పుడు ధ్వనులు"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"లైవ్ క్యాప్షన్"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"మీడియాకు ఆటోమేటిక్ క్యాప్షన్‌లు"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ఫోన్ స్పీకర్"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"వైర్ ఉన్న హెడ్‌ఫోన్స్"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"స్పేషియల్ ఆడియో మీ చుట్టుపక్కల నుండి వస్తున్నట్లుగా కనిపించే లీనమయ్యే సౌండ్‌ను క్రియేట్ చేస్తుంది. కొంత మీడియాతో మాత్రమే పని చేస్తుంది."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ఆఫ్‌లో ఉంది"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"ఆన్‌లో ఉంది / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"ఆన్‌లో ఉన్నాయి / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>, <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ఏవీ లేవు}=1{1 షెడ్యూల్ సెట్ చేయబడింది}other{# షెడ్యూల్‌లు సెట్ చేయబడ్డాయి}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"అంతరాయం కలిగించవద్దు"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"ముఖ్యమైన వ్యక్తులు, యాప్‌ల నుంచి వచ్చే నోటిఫికేషన్‌లను మాత్రమే అందించు"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index c030359..d3cc922 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -3709,6 +3709,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"เสียงเปิดเครื่อง"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"คำบรรยายสด"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"แสดงคำบรรยายสื่อโดยอัตโนมัติ"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"ลำโพงโทรศัพท์"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"หูฟังแบบมีสาย"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"เสียงรอบทิศทางทำให้เกิดเสียงที่เต็มอรรถรสราวกับดังมาจากรอบตัวคุณ โดยจะใช้ได้ในบางสื่อเท่านั้น"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"ปิด"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"เปิด / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"เปิด / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> และ <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{ไม่มี}=1{ตั้งกำหนดการแล้ว 1 รายการ}other{ตั้งกำหนดการแล้ว # รายการ}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ห้ามรบกวน"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"รับเฉพาะการแจ้งเตือนจากผู้คนและแอปที่สำคัญ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index a614af8..0573eb1 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"I-on ang mga tunog"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Instant Caption"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"I-autocaption ang media"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Speaker ng telepono"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Wired na headphones"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Gumagawa ang Spatial Audio ng immersive na tunog na parang nanggagaling sa buong paligid mo. Gumagana lang sa ilang media."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Naka-off"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Naka-on / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Naka-on / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> at <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Wala}=1{Naitakda ang 1 iskedyul}one{Naitakda ang # iskedyul}other{Naitakda ang # na iskedyul}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Huwag Istorbohin"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Makakuha lang ng notification mula sa mahahalagang tao at app"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 724198a..05b348c 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Açılış sesleri"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Canlı Altyazı"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Otomatik medya altyazısı"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefon hoparlörü"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Kablolu kulaklık"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Üç boyutlu ses özelliği, sesi her yerden geliyormuş gibi duymanızı sağlayan etkileyici bir deneyim sunar Bu özellik yalnızca bazı medyalarla çalışır."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Kapalı"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Açık/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Açık/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> ve <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Yok}=1{1 program ayarlandı}other{# program ayarlandı}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Rahatsız Etmeyin"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Yalnızca önemli kişiler ve uygulamalardan gelen bildirimleri alın"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e3ae1da..616e19c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -3812,6 +3812,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Увімкнути звуки"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Живі субтитри"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Автоматичні субтитри (медіа)"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Динамік телефона"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Дротові навушники"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Функція \"Просторове звучання\" забезпечує реалістичний об’ємний звук з ефектом присутності. Підтримуються лише певні типи медіафайлів."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Вимкнено"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Увімкнено / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Увімкнено / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> і <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Немає}=1{Налаштовано 1 розклад}one{Налаштовано # розклад}few{Налаштовано # розклади}many{Налаштовано # розкладів}other{Налаштовано # розкладу}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Не турбувати"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Отримуйте сповіщення лише від важливих людей і додатків"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 4c4db05..cee3519 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"آوازیں آن کریں"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"لائیو کیپشن"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"خودکار طور پر میڈیا پر کیپشن لگائیں"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"فون اسپیکر"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"تار والے ہیڈ فونز"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"اسپیشیئل آڈیو عمیق آواز تخلیق کرتا ہے جو لگتا ہے کہ یہ آپ کے چاروں طرف سے آ رہی ہے۔ صرف چند میڈیا کے ساتھ کام کرتی ہے۔"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"آف ہے"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"آن / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"آن / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> اور <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{کوئی نہیں}=1{1 شیڈول سیٹ کریں}other{# شیڈول سیٹ کریں}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"ڈسٹرب نہ کریں"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"صرف اہم لوگوں اور ایپس کی جانب سے اطلاعات حاصل کریں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 4a7fd70..e8bc6fe 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -3711,6 +3711,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Ovozni yoqish"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Jonli izoh"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Avtomatik taglavha yaratish"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Telefon karnayi"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Simli quloqlik"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Qamrovli ovoz atrofingizdan kelayotgandek taʼsirli tovush yaratadi. Faqat ayrim mediakontent bilan ishlaydi."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Oʻchiq"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Yoniq / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Yoniq / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> va <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Hech qanday}=1{1 ta reja sozlandi}other{# ta reja sozlandi}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Bezovta qilinmasin"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Faqat ishonchli odamlar va ilovalardan bildirishnoma kelsin"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 85149e7..478594c 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Âm thanh bật nguồn"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Phụ đề trực tiếp"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Tự động tạo phụ đề cho nội dung nghe nhìn"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Loa điện thoại"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Tai nghe có dây"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"Tính năng Âm thanh không gian tạo ra trải nghiệm âm thanh sống động như thể âm thanh ở xung quanh bạn. Chỉ hoạt động với một số nội dung nghe nhìn."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Đang tắt"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Đang bật/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Đang bật/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> và <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Không có}=1{Đã đặt 1 lịch biểu}other{Đã đặt # lịch biểu}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Không làm phiền"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Chỉ nhận thông báo của những người và ứng dụng quan trọng"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 05021d0..523c7c1 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3722,6 +3722,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"开机音效"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"实时字幕"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"自动生成媒体字幕"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"手机扬声器"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"有线头戴式耳机"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"“空间音频”功能可以营造出身临其境的听觉盛宴,声音仿佛就萦绕在您耳畔。仅适用于部分媒体。"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"关闭"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"开启/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"开启/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>和<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{无}=1{已设置 1 个时间表}other{已设置 # 个时间表}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"勿扰模式"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"仅接收来自重要联系人和重要应用的通知"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 7e2c008..5075bcd 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -3725,6 +3725,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"開機聲音"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"即時字幕"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"自動為媒體加入字幕"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"手機喇叭"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"有線耳機"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"「空間音訊」功能可創造身歷其境的聽覺享受,讓聲音聽起來彷彿來自四面八方。此功能只支援部分媒體。"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"已關閉"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"已開啟/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"已開啟/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>和<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{無}=1{已設定 1 個時間表}other{已設定 # 個時間表}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"請勿騷擾"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"只接收重要聯絡人和應用程式的通知"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index b58a5a5..260d00d 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -3724,6 +3724,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"啟動音效"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"即時字幕"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"自動產生媒體字幕"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"手機喇叭"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"有線耳罩式耳機"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"「空間音訊」功能可產生層次豐富的聲音,讓你有身歷其境的感覺。請注意,這項功能僅支援部分媒體。"</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"已關閉"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"已開啟/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"已開啟/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g>和<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{無}=1{已設定 1 個時間表}other{已設定 # 個時間表}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"零打擾"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"僅接收重要聯絡人和應用程式的通知"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 8f3c7a8..177bf77 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -3710,6 +3710,12 @@
     <string name="boot_sounds_title" msgid="5033062848948884111">"Amandla kumisindo"</string>
     <string name="live_caption_title" msgid="8617086825712756983">"Amagama-ncazo abukhoma"</string>
     <string name="live_caption_summary" msgid="2898451867595161809">"Yenza amagama-ngcazo ngokuzenzakalela emidiya"</string>
+    <string name="spatial_audio_speaker" msgid="9145233652433523302">"Isipikha sefoni"</string>
+    <string name="spatial_audio_wired_headphones" msgid="2237355789145828648">"Ama-headphone entambo"</string>
+    <string name="spatial_audio_text" msgid="3273982964342449273">"I-Spatial Audio isingula umsindo omkhulu kakhulu ozwakala sengathi uvela kuyo yonke indawo. Isebenza ngemidiya ethile kuphela."</string>
+    <string name="spatial_summary_off" msgid="8272678804629774378">"Valiwe"</string>
+    <string name="spatial_summary_on_one" msgid="6239933399496282994">"Vuliwe / <xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
+    <string name="spatial_summary_on_two" msgid="4526919818832483883">"Kuvuliwe / <xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> futhi ne-<xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
     <string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Lutho}=1{ishejuli esethiwe e-1}one{amashejuli asethiwe angu-#}other{amashejuli asethiwe angu-#}}"</string>
     <string name="zen_mode_settings_title" msgid="682676757791334259">"Ungaphazamisi"</string>
     <string name="zen_mode_settings_summary" msgid="6040862775514495191">"Yaziswa kuphela abantu ababalulekile nezinhlelo zokusebenza"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 03fc59f..6e0fea5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -98,10 +98,10 @@
     <string name="font_size_make_larger_desc">Make larger</string>
 
     <!-- Auto rotate switchbar title. [CHAR_LIMIT=NONE] -->
-    <string name="auto_rotate_settings_primary_switch_title">Use Auto-rotate</string>
+    <string name="auto_rotate_settings_primary_switch_title">Use auto-rotate</string>
 
     <!-- Disclaimer for camera based rotate [CHAR_LIMIT=NONE] -->
-    <string name="smart_rotate_text_headline">Face Detection uses the front-facing camera to improve Auto-rotate accuracy. Images are never stored or sent to Google.</string>
+    <string name="smart_rotate_text_headline">Face Detection uses the front-facing camera to improve auto-rotate accuracy. Images are never stored or sent to Google.</string>
     <string name="font_size_preview_text_headline">Sample text</string>
     <string name="font_size_preview_text_title"
             translation_description="Title text in sample text used to illustrate how the currently selected font size will appear to the user. NOTE: Translate manually. No not adopt any copyrighted material for translation.">
@@ -2922,7 +2922,11 @@
     <!-- Sound & display settings screen, face-based rotation check box label [CHAR LIMIT=30] -->
     <string name="auto_rotate_option_face_based">On - Face-based</string>
     <!-- SmartAutoRotatePreferenceFragment settings screen, face-based rotation switch label [CHAR LIMIT=30] -->
-    <string name="auto_rotate_switch_face_based">Enable Face Detection</string>
+    <string name="auto_rotate_switch_face_based">Face Detection</string>
+    <!-- Preference summary to enable auto rotate[CHAR_LIMIT=NONE]-->
+    <string name="auto_rotate_screen_summary">Automatically adjust the screen orientation when you move your phone between portrait and landscape</string>
+    <!-- Accessibility description for auto rotate learn more link [CHAR LIMIT=NONE] -->
+    <string name="auto_rotate_link_a11y">Learn more about auto-rotate</string>
 
     <!-- Display settings screen, screen resolution settings title [CHAR LIMIT=30] -->
     <string name="screen_resolution_title">Screen resolution</string>
@@ -12448,6 +12452,9 @@
     <!-- Help URI, battery saver page [DO NOT TRANSLATE] -->
     <string name="help_url_battery_saver_settings" translatable="false"></string>
 
+    <!-- Help URI, auto rotate page [DO NOT TRANSLATE] -->
+    <string name="help_url_auto_rotate_settings" translatable="false"></string>
+
     <!-- Help URI, app usage page [DO NOT TRANSLATE] -->
     <string name="help_url_app_usage_settings" translatable="false"></string>
 
diff --git a/res/xml/app_locale_details.xml b/res/xml/app_locale_details.xml
index 40ca582..05e72ee 100644
--- a/res/xml/app_locale_details.xml
+++ b/res/xml/app_locale_details.xml
@@ -18,6 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/app_locale_picker_title">
+
     <com.android.settingslib.widget.LayoutPreference
         android:key="app_locale_description"
         android:layout="@layout/app_locale_details_description"
@@ -26,19 +27,4 @@
         settings:allowDividerBelow="true"
         settings:searchable="false"/>
 
-    <PreferenceCategory
-        android:key="category_key_suggested_languages"
-        android:title="@string/suggested_app_locales_title" >
-
-        <com.android.settingslib.widget.RadioButtonPreference
-            android:key="system_default_locale"
-            android:title="@string/preference_of_system_locale_title"
-            android:order="-10000"/>
-
-    </PreferenceCategory>
-
-    <PreferenceCategory
-        android:key="category_key_all_languages"
-        android:title="@string/all_supported_app_locales_title" />
-
 </PreferenceScreen>
diff --git a/res/xml/auto_rotate_settings.xml b/res/xml/auto_rotate_settings.xml
index 0c120d6..adfb377 100644
--- a/res/xml/auto_rotate_settings.xml
+++ b/res/xml/auto_rotate_settings.xml
@@ -17,9 +17,19 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/accelerometer_title" >
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:title="@string/auto_rotate_screen_summary"
+        app:allowDividerAbove="false"/>
+
+    <com.android.settingslib.widget.MainSwitchPreference
+        android:key="auto_rotate_main_switch"
+        android:title="@string/auto_rotate_settings_primary_switch_title"
+        settings:controller="com.android.settings.display.AutoRotateSwitchBarController"/>
+
     <SwitchPreference
         android:key="auto_rotate_switch"
         android:title="@string/auto_rotate_settings_primary_switch_title"
@@ -48,8 +58,10 @@
         settings:controller="com.android.settings.display.SmartAutoRotateController" />
 
     <com.android.settingslib.widget.FooterPreference
-        android:icon="@drawable/ic_privacy_shield_24dp"
-        android:selectable="false"
-        settings:searchable="false" />
+        android:order="100"
+        android:key="auto_rotate_footer_preference"
+        android:title="@string/smart_rotate_text_headline"
+        android:selectable="true"
+        settings:searchable="false"/>
 
 </PreferenceScreen>
diff --git a/res/xml/double_tap_screen_settings.xml b/res/xml/double_tap_screen_settings.xml
index 1a277c3..f982331 100644
--- a/res/xml/double_tap_screen_settings.xml
+++ b/res/xml/double_tap_screen_settings.xml
@@ -20,18 +20,15 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:title="@string/ambient_display_title">
 
-    <com.android.settings.widget.VideoPreference
+    <com.android.settingslib.widget.IllustrationPreference
         android:key="gesture_double_tap_screen_video"
-        app:animation="@raw/gesture_ambient_tap"
-        app:preview="@drawable/gesture_ambient_tap"
-        app:controller="com.android.settings.widget.VideoPreferenceController" />
+        app:lottie_rawRes="@raw/lottie_tap_to_check_phone" />
 
     <SwitchPreference
         android:key="gesture_double_tap_screen"
         android:title="@string/ambient_display_title"
         android:summary="@string/ambient_display_summary"
         app:keywords="@string/keywords_gesture"
-        app:controller="com.android.settings.gestures.DoubleTapScreenPreferenceController"
-        app:allowDividerAbove="true" />
+        app:controller="com.android.settings.gestures.DoubleTapScreenPreferenceController" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/MainClear.java b/src/com/android/settings/MainClear.java
index 62462b3..7eb4a5d 100644
--- a/src/com/android/settings/MainClear.java
+++ b/src/com/android/settings/MainClear.java
@@ -500,10 +500,10 @@
                         context.getSystemService(DevicePolicyManager.class);
 
                 if (userInfo.isManagedProfile()) {
-                    titleText.setText(devicePolicyManager.getResources().getString(
+                    titleText.setText(devicePolicyManager.getString(
                             WORK_CATEGORY_HEADER, () -> getString(R.string.category_work)));
                 } else {
-                    titleText.setText(devicePolicyManager.getResources().getString(
+                    titleText.setText(devicePolicyManager.getString(
                             PERSONAL_CATEGORY_HEADER, () -> getString(R.string.category_personal)));
                 }
                 contents.addView(titleView);
diff --git a/src/com/android/settings/RemoteBugreportActivity.java b/src/com/android/settings/RemoteBugreportActivity.java
index 1485287..12dce90 100644
--- a/src/com/android/settings/RemoteBugreportActivity.java
+++ b/src/com/android/settings/RemoteBugreportActivity.java
@@ -54,7 +54,7 @@
 
         if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
             AlertDialog dialog = new AlertDialog.Builder(this)
-                    .setMessage(devicePolicyManager.getResources().getString(
+                    .setMessage(devicePolicyManager.getString(
                             SHARING_REMOTE_BUGREPORT_MESSAGE,
                             () -> getString(R.string.sharing_remote_bugreport_dialog_message)))
                     .setOnDismissListener(new DialogInterface.OnDismissListener() {
@@ -85,10 +85,9 @@
                     : SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;
 
             AlertDialog dialog = new AlertDialog.Builder(this)
-                    .setTitle(devicePolicyManager.getResources().getString(
-                            SHARE_REMOTE_BUGREPORT_DIALOG_TITLE,
+                    .setTitle(devicePolicyManager.getString(SHARE_REMOTE_BUGREPORT_DIALOG_TITLE,
                             () -> getString(R.string.share_remote_bugreport_dialog_title)))
-                    .setMessage(devicePolicyManager.getResources().getString(overrideMessageId,
+                    .setMessage(devicePolicyManager.getString(overrideMessageId,
                             () -> getString(defaultMessageId)))
                     .setOnDismissListener(new DialogInterface.OnDismissListener() {
                         @Override
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 57d7d10..10a4771 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -108,8 +108,6 @@
     public static class InputMethodAndSubtypeEnablerActivity extends SettingsActivity { /* empty */ }
     public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ }
     public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
-    /** Activity for the App locale details settings. */
-    public static class AppLocalePickerActivity extends SettingsActivity { /* empty */ }
     public static class LanguageAndInputSettingsActivity extends SettingsActivity { /* empty */ }
     public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
     public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index 735cb3b..fffb8eb 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -389,11 +389,10 @@
 
             final TextView title = (TextView) convertView.findViewById(android.R.id.title);
             if (getUserInfoByGroup(groupPosition).isManagedProfile()) {
-                title.setText(mDevicePolicyManager.getResources().getString(WORK_CATEGORY_HEADER,
+                title.setText(mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
                         () -> getString(R.string.category_work)));
             } else {
-                title.setText(mDevicePolicyManager.getResources().getString(
-                        PERSONAL_CATEGORY_HEADER,
+                title.setText(mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
                         () -> getString(R.string.category_personal)));
 
             }
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 29198fb..8f387d4 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -199,7 +199,7 @@
                         UserHandle.myUserId())) {
                     final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
                     data.key = PREF_KEY_REMOVE_PROFILE;
-                    data.title = mDpm.getResources().getString(
+                    data.title = mDpm.getString(
                             REMOVE_WORK_PROFILE,
                             () -> res.getString(R.string.remove_managed_profile_label));
                     data.screenTitle = screenTitle;
@@ -207,7 +207,7 @@
                 }
                 final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
                 data.key = PREF_KEY_WORK_PROFILE_SETTING;
-                data.title = mDpm.getResources().getString(MANAGED_PROFILE_SETTINGS_TITLE,
+                data.title = mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
                         () -> res.getString(R.string.managed_profile_settings_title));
                 data.screenTitle = screenTitle;
                 rawData.add(data);
@@ -267,7 +267,7 @@
                 new SubSettingLauncher(mContext)
                         .setSourceMetricsCategory(metricsCategory)
                         .setDestination(ManagedProfileSettings.class.getName())
-                        .setTitleText(mDpm.getResources().getString(MANAGED_PROFILE_SETTINGS_TITLE,
+                        .setTitleText(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
                                 () -> mContext.getString(R.string.managed_profile_settings_title)))
                         .setArguments(arguments)
                         .launch();
@@ -347,12 +347,12 @@
         } else if (userInfo.isManagedProfile()) {
             if (mType == ProfileSelectFragment.ProfileType.ALL) {
                 preferenceGroup.setTitle(
-                        mDpm.getResources().getString(WORK_CATEGORY_HEADER,
+                        mDpm.getString(WORK_CATEGORY_HEADER,
                                 () -> mContext.getString(R.string.category_work)));
                 final String workGroupSummary = getWorkGroupSummary(context, userInfo);
                 preferenceGroup.setSummary(workGroupSummary);
                 preferenceGroup.setContentDescription(
-                        mDpm.getResources().getString(ACCESSIBILITY_CATEGORY_WORK, () ->
+                        mDpm.getString(ACCESSIBILITY_CATEGORY_WORK, () ->
                         mContext.getString(
                                 R.string.accessibility_category_work, workGroupSummary)));
             }
@@ -363,10 +363,10 @@
         } else {
             if (mType == ProfileSelectFragment.ProfileType.ALL) {
                 preferenceGroup.setTitle(
-                        mDpm.getResources().getString(PERSONAL_CATEGORY_HEADER,
+                        mDpm.getString(PERSONAL_CATEGORY_HEADER,
                                 () -> mContext.getString(R.string.category_personal)));
                 preferenceGroup.setContentDescription(
-                        mDpm.getResources().getString(ACCESSIBILITY_CATEGORY_PERSONAL, () ->
+                        mDpm.getString(ACCESSIBILITY_CATEGORY_PERSONAL, () ->
                         mContext.getString(R.string.accessibility_category_personal)));
             }
         }
@@ -401,7 +401,7 @@
                 mFragment.getPreferenceManager().getContext());
         preference.setKey(PREF_KEY_REMOVE_PROFILE);
         preference.setTitle(
-                mDpm.getResources().getString(REMOVE_WORK_PROFILE,
+                mDpm.getString(REMOVE_WORK_PROFILE,
                         () -> mContext.getString(R.string.remove_managed_profile_label)));
         preference.setIcon(R.drawable.ic_delete);
         preference.setOnPreferenceClickListener(this);
@@ -413,7 +413,7 @@
     private Preference newManagedProfileSettings() {
         Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
         preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
-        preference.setTitle(mDpm.getResources().getString(MANAGED_PROFILE_SETTINGS_TITLE,
+        preference.setTitle(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
                 () -> mContext.getString(R.string.managed_profile_settings_title)));
         preference.setIcon(R.drawable.ic_settings_24dp);
         preference.setOnPreferenceClickListener(this);
@@ -428,7 +428,7 @@
             return null;
         }
         CharSequence appLabel = packageManager.getApplicationLabel(adminApplicationInfo);
-        return mDpm.getResources().getString(MANAGED_BY,
+        return mDpm.getString(MANAGED_BY,
                 () -> mContext.getString(R.string.managing_admin, appLabel), appLabel);
     }
 
@@ -508,7 +508,7 @@
             mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
             mProfileNotAvailablePreference.setTitle(null);
             mProfileNotAvailablePreference.setSummary(
-                    mDpm.getResources().getString(
+                    mDpm.getString(
                             WORK_PROFILE_NOT_AVAILABLE, () -> mContext.getString(
                     R.string.managed_profile_not_available_label)));
             profileData.preferenceGroup.addPreference(mProfileNotAvailablePreference);
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 83f89d8..7c72d6c 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -163,11 +163,10 @@
 
         String accessibilityTitle =
                 isWorkProfile
-                        ? devicePolicyManager.getResources().getString(
-                                ACCESSIBILITY_WORK_ACCOUNT_TITLE,
+                        ? devicePolicyManager.getString(ACCESSIBILITY_WORK_ACCOUNT_TITLE,
                                 () -> getString(R.string.accessibility_work_account_title,
                                         currentTitle), currentTitle)
-                                : devicePolicyManager.getResources().getString(
+                                : devicePolicyManager.getString(
                                         ACCESSIBILITY_PERSONAL_ACCOUNT_TITLE,
                                         () -> getString(
                                                 R.string.accessibility_personal_account_title,
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 60faab9..58ef7f1 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -217,7 +217,6 @@
             return new AlertDialog.Builder(context)
                     .setTitle(R.string.remove_account_label)
                     .setMessage(getContext().getSystemService(DevicePolicyManager.class)
-                            .getResources()
                             .getString(REMOVE_ACCOUNT_FAILED_ADMIN_RESTRICTION,
                                     () -> getString(R.string.remove_account_failed)))
                     .setPositiveButton(android.R.string.ok, null)
diff --git a/src/com/android/settings/accounts/WorkModePreferenceController.java b/src/com/android/settings/accounts/WorkModePreferenceController.java
index f4ab195..aa54d33 100644
--- a/src/com/android/settings/accounts/WorkModePreferenceController.java
+++ b/src/com/android/settings/accounts/WorkModePreferenceController.java
@@ -87,13 +87,13 @@
     @Override
     public CharSequence getSummary() {
         if (isChecked()) {
-            return mDevicePolicyManager.getResources().getString(
-                    WORK_PROFILE_SETTING_ON_SUMMARY,
-                    () -> mContext.getString(R.string.work_mode_on_summary));
+            return mDevicePolicyManager
+                    .getString(WORK_PROFILE_SETTING_ON_SUMMARY,
+                            () -> mContext.getString(R.string.work_mode_on_summary));
         }
 
-        return mDevicePolicyManager.getResources().getString(
-                WORK_PROFILE_SETTING_OFF_SUMMARY,
+        return mDevicePolicyManager
+                .getString(WORK_PROFILE_SETTING_OFF_SUMMARY,
                         () -> mContext.getString(R.string.work_mode_off_summary));
     }
 
diff --git a/src/com/android/settings/applications/AppLocaleUtil.java b/src/com/android/settings/applications/AppLocaleUtil.java
index 7004377..5a667c0 100644
--- a/src/com/android/settings/applications/AppLocaleUtil.java
+++ b/src/com/android/settings/applications/AppLocaleUtil.java
@@ -42,9 +42,15 @@
             @NonNull Context context,
             @NonNull String packageName,
             @NonNull List<ResolveInfo> infos) {
-        return !isDisallowedPackage(context, packageName)
-                && !isSignedWithPlatformKey(context, packageName)
-                && hasLauncherEntry(packageName, infos);
+        boolean isDisallowedPackage = isDisallowedPackage(context, packageName);
+        boolean hasLauncherEntry = hasLauncherEntry(packageName, infos);
+        boolean isSignedWithPlatformKey = isSignedWithPlatformKey(context, packageName);
+        Log.i(TAG, "Can display preference - [" + packageName + "] :"
+                + " isDisallowedPackage : " + isDisallowedPackage
+                + " / isSignedWithPlatformKey : " + isSignedWithPlatformKey
+                + " / hasLauncherEntry : " + hasLauncherEntry);
+
+        return !isDisallowedPackage && !isSignedWithPlatformKey && hasLauncherEntry;
     }
 
     private static boolean isDisallowedPackage(Context context, String packageName) {
diff --git a/src/com/android/settings/applications/UsageAccessDetails.java b/src/com/android/settings/applications/UsageAccessDetails.java
index 8085b69..ef259d2 100644
--- a/src/com/android/settings/applications/UsageAccessDetails.java
+++ b/src/com/android/settings/applications/UsageAccessDetails.java
@@ -97,8 +97,7 @@
                     new AlertDialog.Builder(getContext())
                             .setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
                             .setTitle(android.R.string.dialog_alert_title)
-                            .setMessage(mDpm.getResources().getString(
-                                    WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING,
+                            .setMessage(mDpm.getString(WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING,
                                     () -> getString(R.string.work_profile_usage_access_warning)))
                             .setPositiveButton(R.string.okay, null)
                             .show();
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
index d50a67b..5f75b6b 100644
--- a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -22,73 +22,64 @@
 import android.app.LocaleManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.LocaleList;
-import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
 
-import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceGroup;
 
 import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.widget.RadioButtonPreference;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
 import java.util.Locale;
 
 /**
- * A fragment to show the current app locale info and help the user to select the expected locale.
+ * TODO(b/223503670): Implement the unittest.
+ * A fragment to show the current app locale info.
  */
-public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreference.OnClickListener {
+public class AppLocaleDetails extends SettingsPreferenceFragment {
     private static final String TAG = "AppLocaleDetails";
 
-    private static final String CATEGORY_KEY_SUGGESTED_LANGUAGES =
-            "category_key_suggested_languages";
-    private static final String CATEGORY_KEY_ALL_LANGUAGES =
-            "category_key_all_languages";
     private static final String KEY_APP_DESCRIPTION = "app_locale_description";
-    @VisibleForTesting
-    static final String KEY_SYSTEM_DEFAULT_LOCALE = "system_default_locale";
 
     private boolean mCreated = false;
-    @VisibleForTesting
-    AppLocaleDetailsHelper mAppLocaleDetailsHelper;
-
-    private PreferenceGroup mGroupOfSuggestedLocales;
-    private PreferenceGroup mGroupOfSupportedLocales;
+    private String mPackageName;
     private LayoutPreference mPrefOfDescription;
-    private RadioButtonPreference mDefaultPreference;
+
+    /**
+     * Create a instance of AppLocaleDetails.
+     * @param packageName Indicates which application need to show the locale picker.
+     */
+    public static AppLocaleDetails newInstance(String packageName) {
+        AppLocaleDetails appLocaleDetails = new AppLocaleDetails();
+        Bundle bundle = new Bundle();
+        bundle.putString(AppInfoBase.ARG_PACKAGE_NAME, packageName);
+        appLocaleDetails.setArguments(bundle);
+        return appLocaleDetails;
+    }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.app_locale_details);
-        mAppLocaleDetailsHelper = new AppLocaleDetailsHelper(getContext(), mPackageName);
+        Bundle bundle = getArguments();
+        mPackageName = bundle.getString(AppInfoBase.ARG_PACKAGE_NAME, "");
 
-        mGroupOfSuggestedLocales =
-                getPreferenceScreen().findPreference(CATEGORY_KEY_SUGGESTED_LANGUAGES);
-        mGroupOfSupportedLocales =
-                getPreferenceScreen().findPreference(CATEGORY_KEY_ALL_LANGUAGES);
-        mPrefOfDescription = getPreferenceScreen().findPreference(KEY_APP_DESCRIPTION);
-
-        mDefaultPreference = (RadioButtonPreference) getPreferenceScreen()
-                .findPreference(KEY_SYSTEM_DEFAULT_LOCALE);
-        mDefaultPreference.setOnClickListener(this);
+        if (mPackageName.isEmpty()) {
+            Log.d(TAG, "No package name.");
+            finish();
+        }
     }
 
     // Override here so we don't have an empty screen
@@ -96,8 +87,8 @@
     public View onCreateView(LayoutInflater inflater,
             ViewGroup container,
             Bundle savedInstanceState) {
-        // if we don't have a package info, show a page saying this is unsupported
-        if (mPackageInfo == null) {
+        // if we don't have a package, show a page saying this is unsupported
+        if (mPackageName.isEmpty()) {
             return inflater.inflate(R.layout.manage_applications_apps_unsupported, null);
         }
         return super.onCreateView(inflater, container, savedInstanceState);
@@ -105,46 +96,19 @@
 
     @Override
     public void onResume() {
-        // Update Locales first, before refresh ui.
-        mAppLocaleDetailsHelper.handleAllLocalesData();
-        super.onResume();
-        mDefaultPreference.setSummary(Locale.getDefault().getDisplayName(Locale.getDefault()));
-    }
-
-    @Override
-    protected boolean refreshUi() {
         refreshUiInternal();
-        return true;
+        super.onResume();
     }
 
-    @VisibleForTesting
-    void refreshUiInternal() {
-        if (mAppLocaleDetailsHelper.getSupportedLocales().isEmpty()) {
+    private void refreshUiInternal() {
+        if (!hasAppSupportedLocales()) {
             Log.d(TAG, "No supported language.");
-            mGroupOfSuggestedLocales.setVisible(false);
-            mGroupOfSupportedLocales.setVisible(false);
             mPrefOfDescription.setVisible(true);
             TextView description = (TextView) mPrefOfDescription.findViewById(R.id.description);
             description.setText(getContext().getString(R.string.no_multiple_language_supported,
                     Locale.getDefault().getDisplayName(Locale.getDefault())));
             return;
         }
-        resetLocalePreferences();
-        Locale appLocale = AppLocaleDetailsHelper.getAppDefaultLocale(getContext(), mPackageName);
-        // Sets up default locale preference.
-        mGroupOfSuggestedLocales.addPreference(mDefaultPreference);
-        mDefaultPreference.setChecked(appLocale == null);
-        // Sets up suggested locales of per app.
-        setLanguagesPreference(mGroupOfSuggestedLocales,
-                mAppLocaleDetailsHelper.getSuggestedLocales(), appLocale);
-        // Sets up supported locales of per app.
-        setLanguagesPreference(mGroupOfSupportedLocales,
-                mAppLocaleDetailsHelper.getSupportedLocales(), appLocale);
-    }
-
-    private void resetLocalePreferences() {
-        mGroupOfSuggestedLocales.removeAll();
-        mGroupOfSupportedLocales.removeAll();
     }
 
     @Override
@@ -153,22 +117,6 @@
     }
 
     @Override
-    protected AlertDialog createDialog(int id, int errorCode) {
-        return null;
-    }
-
-    @Override
-    public void onRadioButtonClicked(RadioButtonPreference pref) {
-        String key = pref.getKey();
-        if (KEY_SYSTEM_DEFAULT_LOCALE.equals(key)) {
-            mAppLocaleDetailsHelper.setAppDefaultLocale(LocaleList.forLanguageTags(""));
-        } else {
-            mAppLocaleDetailsHelper.setAppDefaultLocale(key);
-        }
-        refreshUi();
-    }
-
-    @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         if (mCreated) {
@@ -176,32 +124,98 @@
             return;
         }
         mCreated = true;
-        if (mPackageInfo == null) {
+        if (mPackageName == null) {
             return;
         }
         // Creates a head icon button of app on this page.
         final Activity activity = getActivity();
+        ApplicationInfo applicationInfo =
+                getApplicationInfo(mPackageName, getContext().getUserId());
         final Preference pref = EntityHeaderController
                 .newInstance(activity, this, null /* header */)
                 .setRecyclerView(getListView(), getSettingsLifecycle())
-                .setIcon(Utils.getBadgedIcon(getContext(), mPackageInfo.applicationInfo))
-                .setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
-                .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
+                .setIcon(Utils.getBadgedIcon(getContext(), applicationInfo))
+                .setLabel(applicationInfo.loadLabel(getContext().getPackageManager()))
+                .setIsInstantApp(AppUtils.isInstant(applicationInfo))
                 .setPackageName(mPackageName)
-                .setUid(mPackageInfo.applicationInfo.uid)
+                .setUid(applicationInfo.uid)
                 .setHasAppInfoLink(true)
                 .setButtonActions(ActionType.ACTION_NONE, ActionType.ACTION_NONE)
                 .done(activity, getPrefContext());
         getPreferenceScreen().addPreference(pref);
     }
 
+    private ApplicationInfo getApplicationInfo(String packageName, int userId) {
+        ApplicationInfo applicationInfo;
+        try {
+            applicationInfo = getContext().getPackageManager()
+                    .getApplicationInfoAsUser(packageName, /* flags= */ 0, userId);
+            return applicationInfo;
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Application info not found for: " + packageName);
+            return null;
+        }
+    }
+
+    private boolean hasAppSupportedLocales() {
+        LocaleList localeList = getPackageLocales();
+        return (localeList != null && localeList.size() > 0) || getAssetLocales().length > 0;
+    }
+
+    private String[] getAssetLocales() {
+        try {
+            PackageManager packageManager = getContext().getPackageManager();
+            String[] locales = packageManager.getResourcesForApplication(
+                    packageManager.getPackageInfo(mPackageName, PackageManager.MATCH_ALL)
+                            .applicationInfo).getAssets().getNonSystemLocales();
+            if (locales == null) {
+                Log.i(TAG, "[" + mPackageName + "] locales are null.");
+            }
+            if (locales.length <= 0) {
+                Log.i(TAG, "[" + mPackageName + "] locales length is 0.");
+                return new String[0];
+            }
+            String locale = locales[0];
+            Log.i(TAG, "First asset locale - [" + mPackageName + "] " + locale);
+            return locales;
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
+        }
+        return new String[0];
+    }
+
+    private LocaleList getPackageLocales() {
+        try {
+            LocaleConfig localeConfig =
+                    new LocaleConfig(getContext().createPackageContext(mPackageName, 0));
+            if (localeConfig.getStatus() == LocaleConfig.STATUS_SUCCESS) {
+                return localeConfig.getSupportedLocales();
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
+        }
+        return null;
+    }
+
+    /** Gets per app's default locale */
+    public static Locale getAppDefaultLocale(Context context, String packageName) {
+        LocaleManager localeManager = context.getSystemService(LocaleManager.class);
+        try {
+            LocaleList localeList = (localeManager == null)
+                    ? null : localeManager.getApplicationLocales(packageName);
+            return localeList == null ? null : localeList.get(0);
+        } catch (IllegalArgumentException e) {
+            Log.w(TAG, "package name : " + packageName + " is not correct. " + e);
+        }
+        return null;
+    }
+
     /**
      * TODO (b209962418) Do a performance test to low end device.
      * @return Return the summary to show the current app's language.
      */
     public static CharSequence getSummary(Context context, String packageName) {
-        Locale appLocale =
-                AppLocaleDetailsHelper.getAppDefaultLocale(context, packageName);
+        Locale appLocale = getAppDefaultLocale(context, packageName);
         if (appLocale == null) {
             Locale systemLocale = Locale.getDefault();
             return context.getString(R.string.preference_of_system_locale_summary,
@@ -210,217 +224,4 @@
             return appLocale.getDisplayName(appLocale);
         }
     }
-
-    private void setLanguagesPreference(PreferenceGroup group,
-            Collection<Locale> locales, Locale appLocale) {
-        if (locales == null) {
-            return;
-        }
-
-        for (Locale locale : locales) {
-            if (locale == null) {
-                continue;
-            }
-
-            RadioButtonPreference pref = new RadioButtonPreference(getContext());
-            pref.setTitle(locale.getDisplayName(locale));
-            pref.setKey(locale.toLanguageTag());
-            // Will never be checked if appLocale is null
-            // aka if there is no per-app locale
-            pref.setChecked(locale.equals(appLocale));
-            pref.setOnClickListener(this);
-            group.addPreference(pref);
-        }
-    }
-
-    @VisibleForTesting
-    static class AppLocaleDetailsHelper {
-        private String mPackageName;
-        private Context mContext;
-        private TelephonyManager mTelephonyManager;
-        private LocaleManager mLocaleManager;
-
-        private Collection<Locale> mProcessedSuggestedLocales = new ArrayList<>();
-        private Collection<Locale> mProcessedSupportedLocales = new ArrayList<>();
-
-        private Collection<Locale> mAppSupportedLocales = new ArrayList<>();
-
-        AppLocaleDetailsHelper(Context context, String packageName) {
-            mContext = context;
-            mPackageName = packageName;
-            mTelephonyManager = context.getSystemService(TelephonyManager.class);
-            mLocaleManager = context.getSystemService(LocaleManager.class);
-            mAppSupportedLocales = getAppSupportedLocales();
-        }
-
-        /** Handle suggested and supported locales for UI display. */
-        public void handleAllLocalesData() {
-            clearLocalesData();
-            handleSuggestedLocales();
-            handleSupportedLocales();
-        }
-
-        /** Gets suggested locales in the app. */
-        public Collection<Locale> getSuggestedLocales() {
-            return mProcessedSuggestedLocales;
-        }
-
-        /** Gets supported locales in the app. */
-        public Collection<Locale> getSupportedLocales() {
-            return mProcessedSupportedLocales;
-        }
-
-        @VisibleForTesting
-        void handleSuggestedLocales() {
-            Locale appLocale = getAppDefaultLocale(mContext, mPackageName);
-            // 1st locale in suggested languages group.
-            for (Locale supportedlocale : mAppSupportedLocales) {
-                if (compareLocale(supportedlocale, appLocale)) {
-                    mProcessedSuggestedLocales.add(appLocale);
-                    break;
-                }
-            }
-
-            // 2nd and 3rd locale in suggested languages group.
-            String simCountry = mTelephonyManager.getSimCountryIso().toUpperCase(Locale.US);
-            String networkCountry = mTelephonyManager.getNetworkCountryIso().toUpperCase(Locale.US);
-            mAppSupportedLocales.forEach(supportedlocale -> {
-                String localeCountry = supportedlocale.getCountry().toUpperCase(Locale.US);
-                if (!compareLocale(supportedlocale, appLocale)
-                        && isCountrySuggestedLocale(localeCountry, simCountry, networkCountry)) {
-                    mProcessedSuggestedLocales.add(supportedlocale);
-                }
-            });
-
-            // Other locales in suggested languages group.
-            Collection<Locale> supportedSystemLocales = new HashSet<>();
-            getCurrentSystemLocales().forEach(systemLocale -> {
-                mAppSupportedLocales.forEach(supportedLocale -> {
-                    if (compareLocale(systemLocale, supportedLocale)) {
-                        supportedSystemLocales.add(supportedLocale);
-                    }
-                });
-            });
-            supportedSystemLocales.removeAll(mProcessedSuggestedLocales);
-            mProcessedSuggestedLocales.addAll(supportedSystemLocales);
-        }
-
-        @VisibleForTesting
-        static boolean compareLocale(Locale source, Locale target) {
-            if (source == null && target == null) {
-                return true;
-            } else if (source != null && target != null) {
-                return LocaleList.matchesLanguageAndScript(source, target);
-            } else {
-                return false;
-            }
-        }
-
-        private static boolean isCountrySuggestedLocale(String localeCountry,
-                String simCountry,
-                String networkCountry) {
-            return ((!simCountry.isEmpty() && simCountry.equals(localeCountry))
-                    || (!networkCountry.isEmpty() && networkCountry.equals(localeCountry)));
-        }
-
-        @VisibleForTesting
-        void handleSupportedLocales() {
-            mProcessedSupportedLocales.addAll(mAppSupportedLocales);
-
-            if (mProcessedSuggestedLocales != null || !mProcessedSuggestedLocales.isEmpty()) {
-                mProcessedSuggestedLocales.retainAll(mProcessedSupportedLocales);
-                mProcessedSupportedLocales.removeAll(mProcessedSuggestedLocales);
-            }
-        }
-
-        private void clearLocalesData() {
-            mProcessedSuggestedLocales.clear();
-            mProcessedSupportedLocales.clear();
-        }
-
-        private Collection<Locale> getAppSupportedLocales() {
-            Collection<Locale> appSupportedLocales = new ArrayList<>();
-            LocaleList localeList = getPackageLocales();
-
-            if (localeList != null && localeList.size() > 0) {
-                for (int i = 0; i < localeList.size(); i++) {
-                    appSupportedLocales.add(localeList.get(i));
-                }
-            } else {
-                String[] languages = getAssetLocales();
-                for (String language : languages) {
-                    appSupportedLocales.add(Locale.forLanguageTag(language));
-                }
-            }
-            return appSupportedLocales;
-        }
-
-        /** Gets per app's default locale */
-        public static Locale getAppDefaultLocale(Context context, String packageName) {
-            LocaleManager localeManager = context.getSystemService(LocaleManager.class);
-            try {
-                LocaleList localeList = (localeManager == null)
-                        ? null : localeManager.getApplicationLocales(packageName);
-                return localeList == null ? null : localeList.get(0);
-            } catch (IllegalArgumentException e) {
-                Log.w(TAG, "package name : " + packageName + " is not correct. " + e);
-            }
-            return null;
-        }
-
-        /** Sets per app's default language to system. */
-        public void setAppDefaultLocale(String languageTag) {
-            if (languageTag.isEmpty()) {
-                Log.w(TAG, "[setAppDefaultLocale] No language tag.");
-                return;
-            }
-            setAppDefaultLocale(LocaleList.forLanguageTags(languageTag));
-        }
-
-        /** Sets per app's default language to system. */
-        public void setAppDefaultLocale(LocaleList localeList) {
-            if (mLocaleManager == null) {
-                Log.w(TAG, "LocaleManager is null, and cannot set the app locale up.");
-                return;
-            }
-            mLocaleManager.setApplicationLocales(mPackageName, localeList);
-        }
-
-        @VisibleForTesting
-        Collection<Locale> getCurrentSystemLocales() {
-            LocaleList localeList = Resources.getSystem().getConfiguration().getLocales();
-            Collection<Locale> systemLocales = new ArrayList<>();
-            for (int i = 0; i < localeList.size(); i++) {
-                systemLocales.add(localeList.get(i));
-            }
-            return systemLocales;
-        }
-
-        @VisibleForTesting
-        String[] getAssetLocales() {
-            try {
-                PackageManager packageManager = mContext.getPackageManager();
-                return packageManager.getResourcesForApplication(
-                        packageManager.getPackageInfo(mPackageName, PackageManager.MATCH_ALL)
-                                .applicationInfo).getAssets().getNonSystemLocales();
-            } catch (PackageManager.NameNotFoundException e) {
-                Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
-            }
-            return new String[0];
-        }
-
-        @VisibleForTesting
-        LocaleList getPackageLocales() {
-            try {
-                LocaleConfig localeConfig =
-                        new LocaleConfig(mContext.createPackageContext(mPackageName, 0));
-                if (localeConfig.getStatus() == LocaleConfig.STATUS_SUCCESS) {
-                    return localeConfig.getSupportedLocales();
-                }
-            } catch (PackageManager.NameNotFoundException e) {
-                Log.w(TAG, "Can not found the package name : " + mPackageName + " / " + e);
-            }
-            return null;
-        }
-    }
 }
diff --git a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
index eaa2ec0..38e655c 100644
--- a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
@@ -17,14 +17,20 @@
 package com.android.settings.applications.appinfo;
 
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.text.TextUtils;
 import android.util.FeatureFlagUtils;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
 
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.applications.AppLocaleUtil;
+import com.android.settings.localepicker.AppLocalePickerActivity;
 
 import java.util.List;
 
@@ -59,6 +65,23 @@
         return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry().info.packageName);
     }
 
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!TextUtils.equals(preference.getKey(), mPreferenceKey)) {
+            return false;
+        }
+
+        if (mParent != null) {
+            Intent intent = new Intent(mContext, AppLocalePickerActivity.class);
+            intent.setData(Uri.parse("package:" + mParent.getAppEntry().info.packageName));
+            mContext.startActivity(intent);
+            return true;
+        } else {
+            Log.d(TAG, "mParent is null");
+            return false;
+        }
+    }
+
     @VisibleForTesting
     boolean canDisplayLocaleUi() {
         return AppLocaleUtil
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 4d59839..22a4ea7 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -120,6 +120,7 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
 import com.android.settings.fuelgauge.HighPowerDetail;
+import com.android.settings.localepicker.AppLocalePickerActivity;
 import com.android.settings.notification.ConfigureNotificationSettings;
 import com.android.settings.notification.NotificationBackend;
 import com.android.settings.notification.app.AppNotificationSettings;
@@ -635,8 +636,9 @@
                         R.string.media_management_apps_title);
                 break;
             case LIST_TYPE_APPS_LOCALE:
-                startAppInfoFragment(AppLocaleDetails.class,
-                        R.string.app_locale_picker_title);
+                Intent intent = new Intent(getContext(), AppLocalePickerActivity.class);
+                intent.setData(Uri.parse("package:" + mCurrentPkgName));
+                startActivity(intent);
                 break;
             // TODO: Figure out if there is a way where we can spin up the profile's settings
             // process ahead of time, to avoid a long load of data when user clicks on a managed
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 7dbf333..de79739 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -335,7 +335,7 @@
 
             // Build and show the simplified dialog
             final Dialog dialog = new AlertDialog.Builder(this)
-                    .setTitle(mDPM.getResources().getString(SET_PROFILE_OWNER_DIALOG_TITLE,
+                    .setTitle(mDPM.getString(SET_PROFILE_OWNER_DIALOG_TITLE,
                             () -> getString(R.string.profile_owner_add_title_simplified)))
                     .setView(R.layout.profile_owner_add)
                     .setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
@@ -358,7 +358,7 @@
             mAddMsg.setText(mAddMsgText);
             mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
             mAdminWarning.setText(
-                    mDPM.getResources().getString(NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED, () ->
+                    mDPM.getString(NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED, () ->
                     getString(R.string.device_admin_warning_simplified,
                     mProfileOwnerName), mProfileOwnerName));
             return;
@@ -371,7 +371,7 @@
         mProfileOwnerWarning = (TextView) findViewById(R.id.profile_owner_warning);
 
         mProfileOwnerWarning.setText(
-                mDPM.getResources().getString(SET_PROFILE_OWNER_POSTSETUP_WARNING,
+                mDPM.getString(SET_PROFILE_OWNER_POSTSETUP_WARNING,
                         () -> getString(R.string.adding_profile_owner_warning)));
 
         mAddMsg = (TextView)findViewById(R.id.add_msg);
@@ -419,7 +419,7 @@
         });
 
         mUninstallButton = (Button) findViewById(R.id.uninstall_button);
-        mUninstallButton.setText(mDPM.getResources().getString(UNINSTALL_DEVICE_ADMIN,
+        mUninstallButton.setText(mDPM.getString(UNINSTALL_DEVICE_ADMIN,
                 () -> getString(R.string.uninstall_device_admin)));
         mUninstallButton.setFilterTouchesWhenObscured(true);
         mUninstallButton.setOnClickListener(new View.OnClickListener() {
@@ -681,10 +681,9 @@
             final boolean isManagedProfile = isManagedProfile(mDeviceAdmin);
             if (isProfileOwner && isManagedProfile) {
                 // Profile owner in a managed profile, user can remove profile to disable admin.
-                mAdminWarning.setText(mDPM.getResources().getString(
-                        WORK_PROFILE_ADMIN_POLICIES_WARNING,
+                mAdminWarning.setText(mDPM.getString(WORK_PROFILE_ADMIN_POLICIES_WARNING,
                         () -> getString(R.string.admin_profile_owner_message)));
-                mActionButton.setText(mDPM.getResources().getString(REMOVE_WORK_PROFILE,
+                mActionButton.setText(mDPM.getString(REMOVE_WORK_PROFILE,
                         () -> getString(R.string.remove_managed_profile_label)));
 
                 final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
@@ -699,34 +698,32 @@
                 // Profile owner in a user or device owner, user can't disable admin.
                 if (isProfileOwner) {
                     // Show profile owner in a user description.
-                    mAdminWarning.setText(mDPM.getResources().getString(USER_ADMIN_POLICIES_WARNING,
+                    mAdminWarning.setText(mDPM.getString(USER_ADMIN_POLICIES_WARNING,
                             () -> getString(R.string.admin_profile_owner_user_message)));
                 } else {
                     // Show device owner description.
                     if (isFinancedDevice()) {
                         mAdminWarning.setText(R.string.admin_financed_message);
                     } else {
-                        mAdminWarning.setText(mDPM.getResources().getString(
-                                DEVICE_ADMIN_POLICIES_WARNING,
+                        mAdminWarning.setText(mDPM.getString(DEVICE_ADMIN_POLICIES_WARNING,
                                 () -> getString(R.string.admin_device_owner_message)));
                     }
                 }
-                mActionButton.setText(mDPM.getResources().getString(REMOVE_DEVICE_ADMIN,
+                mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
                         () -> getString(R.string.remove_device_admin)));
                 mActionButton.setEnabled(false);
             } else {
                 addDeviceAdminPolicies(false /* showDescription */);
                 CharSequence label = mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
                         getPackageManager());
-                mAdminWarning.setText(mDPM.getResources().getString(ACTIVE_DEVICE_ADMIN_WARNING,
+                mAdminWarning.setText(mDPM.getString(ACTIVE_DEVICE_ADMIN_WARNING,
                         () -> getString(R.string.device_admin_status, label), label));
                 setTitle(R.string.active_device_admin_msg);
                 if (mUninstalling) {
-                    mActionButton.setText(mDPM.getResources().getString(
-                            REMOVE_AND_UNINSTALL_DEVICE_ADMIN,
+                    mActionButton.setText(mDPM.getString(REMOVE_AND_UNINSTALL_DEVICE_ADMIN,
                             () -> getString(R.string.remove_and_uninstall_device_admin)));
                 } else {
-                    mActionButton.setText(mDPM.getResources().getString(REMOVE_DEVICE_ADMIN,
+                    mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
                             () -> getString(R.string.remove_device_admin)));
                 }
             }
@@ -743,12 +740,12 @@
             CharSequence label = mDeviceAdmin.getActivityInfo()
                     .applicationInfo.loadLabel(getPackageManager());
             mAdminWarning.setText(
-                    mDPM.getResources().getString(NEW_DEVICE_ADMIN_WARNING, () ->
+                    mDPM.getString(NEW_DEVICE_ADMIN_WARNING, () ->
                     getString(R.string.device_admin_warning, label
                     ), label));
-            setTitle(mDPM.getResources().getString(ACTIVATE_DEVICE_ADMIN_APP,
+            setTitle(mDPM.getString(ACTIVATE_DEVICE_ADMIN_APP,
                     () -> getString(R.string.add_device_admin_msg)));
-            mActionButton.setText(mDPM.getResources().getString(ACTIVATE_THIS_DEVICE_ADMIN_APP,
+            mActionButton.setText(mDPM.getString(ACTIVATE_THIS_DEVICE_ADMIN_APP,
                     () -> getString(R.string.add_device_admin)));
             if (isAdminUninstallable()) {
                 mUninstallButton.setVisibility(View.VISIBLE);
diff --git a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
index e316125..e85a513 100644
--- a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
+++ b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesDetails.java
@@ -156,7 +156,7 @@
         }
 
         preference.setSummary(
-                mDevicePolicyManager.getResources().getString(overrideKey,
+                mDevicePolicyManager.getString(overrideKey,
                         () -> getString(resource)));
     }
 
@@ -296,20 +296,19 @@
 
         final TextView dialogTitle = dialogView.findViewById(
                 R.id.interact_across_profiles_consent_dialog_title);
-        dialogTitle.setText(mDpm.getResources().getString(CONNECT_APPS_DIALOG_TITLE, () ->
+        dialogTitle.setText(mDpm.getString(CONNECT_APPS_DIALOG_TITLE, () ->
                 getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel),
                 mAppLabel));
 
         final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
         appDataSummary.setText(
-                mDpm.getResources().getString(APP_CAN_ACCESS_PERSONAL_DATA,
+                mDpm.getString(APP_CAN_ACCESS_PERSONAL_DATA,
                         () -> getString(
                                 R.string.interact_across_profiles_consent_dialog_app_data_summary,
                                 mAppLabel), mAppLabel));
 
         final TextView permissionsSummary = dialogView.findViewById(R.id.permissions_summary);
-        permissionsSummary.setText(mDpm.getResources().getString(
-                APP_CAN_ACCESS_PERSONAL_PERMISSIONS,
+        permissionsSummary.setText(mDpm.getString(APP_CAN_ACCESS_PERSONAL_PERMISSIONS,
                 () -> getString(
                         R.string.interact_across_profiles_consent_dialog_permissions_summary,
                         mAppLabel),
@@ -317,7 +316,7 @@
 
         final TextView dialogSummary =
                 dialogView.findViewById(R.id.interact_across_profiles_consent_dialog_summary);
-        dialogSummary.setText(mDpm.getResources().getString(CONNECT_APPS_DIALOG_SUMMARY,
+        dialogSummary.setText(mDpm.getString(CONNECT_APPS_DIALOG_SUMMARY,
                 () -> getString(
                         R.string.interact_across_profiles_consent_dialog_summary)));
 
@@ -446,7 +445,7 @@
         }
         if (!mInstalledInPersonal) {
             mInstallBanner.setTitle(
-                    mDpm.getResources().getString(INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT,
+                    mDpm.getString(INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT,
                             () -> getString(
                                     R.string.interact_across_profiles_install_personal_app_title,
                                     mAppLabel),
@@ -460,7 +459,7 @@
         }
         if (!mInstalledInWork) {
             mInstallBanner.setTitle(
-                    mDpm.getResources().getString(INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT,
+                    mDpm.getString(INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT,
                             () -> getString(
                                     R.string.interact_across_profiles_install_work_app_title,
                                     mAppLabel),
diff --git a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
index 6ce0869..05ec3e9 100644
--- a/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
+++ b/src/com/android/settings/applications/specialaccess/interactacrossprofiles/InteractAcrossProfilesSettings.java
@@ -95,8 +95,7 @@
                 @Override
                 public boolean onPreferenceClick(Preference preference) {
                     AppInfoBase.startAppInfoFragment(InteractAcrossProfilesDetails.class,
-                            mDevicePolicyManager.getResources().getString(
-                                    CONNECTED_WORK_AND_PERSONAL_APPS_TITLE,
+                            mDevicePolicyManager.getString(CONNECTED_WORK_AND_PERSONAL_APPS_TITLE,
                                     () -> getString(R.string.interact_across_profiles_title)),
                             packageName,
                             appInfo.uid,
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index efb200f..b622c1c 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -225,7 +225,7 @@
     @Override
     protected String getDescriptionDisabledByAdmin() {
         DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
-        return devicePolicyManager.getResources().getString(
+        return devicePolicyManager.getString(
                 FACE_UNLOCK_DISABLED,
                 () -> getString(R.string.security_settings_face_enroll_introduction_message_unlock_disabled));
     }
diff --git a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
index a2e11af..abfd3a2 100644
--- a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
@@ -80,7 +80,7 @@
         super.updateState(preference);
 
         preference.setTitle(
-                mDevicePolicyManager.getResources().getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
+                mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
                 mContext.getResources().getString(
                 R.string.security_settings_face_profile_preference_title)));
     }
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index dc94376..f3a7f2c 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -162,9 +162,9 @@
 
         if (mUserManager.getUserInfo(mUserId).isManagedProfile()) {
             getActivity().setTitle(
-                    mDevicePolicyManager.getResources().getString(FACE_SETTINGS_FOR_WORK_TITLE,
-                            () -> getActivity().getResources().getString(
-                                    R.string.security_settings_face_profile_preference_title)));
+                    mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
+                    getActivity().getResources().getString(
+                    R.string.security_settings_face_profile_preference_title)));
         }
 
         mLockscreenController = Utils.isMultipleBiometricsSupported(context)
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index 82b76c3..23595fb 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -186,7 +186,7 @@
 
     @Override
     protected String getDescriptionDisabledByAdmin() {
-        return mDevicePolicyManager.getResources().getString(
+        return mDevicePolicyManager.getString(
                 FINGERPRINT_UNLOCK_DISABLED,
                 () -> getString(R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled));
     }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 2282192..a5832ea 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -19,7 +19,7 @@
 
 import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED_EXPLANATION;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE;
-import static android.app.admin.DevicePolicyResources.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
 
 import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
 
@@ -366,7 +366,7 @@
             if (admin != null) {
                 DevicePolicyManager devicePolicyManager =
                         getSystemService(DevicePolicyManager.class);
-                String footerText = devicePolicyManager.getResources().getString(
+                String footerText = devicePolicyManager.getString(
                         FINGERPRINT_UNLOCK_DISABLED_EXPLANATION,
                         () -> getString(R.string.security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled));
 
@@ -457,8 +457,10 @@
             final Preference addPreference = findPreference(KEY_FINGERPRINT_ADD);
 
             /* Disable preference if too many fingerprints added */
-            final int max = getContext().getResources().getInteger(
-                    com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+            final List<FingerprintSensorPropertiesInternal> props =
+                    mFingerprintManager.getSensorPropertiesInternal();
+            // This will need to be updated for devices with multiple fingerprint sensors
+            final int max = props.get(0).maxEnrollmentsPerUser;
             boolean tooMany = mFingerprintManager.getEnrolledFingerprints(mUserId).size() >= max;
             // retryFingerprint() will be called when remove finishes
             // need to disable enroll or have a way to determine if enroll is in progress
@@ -946,7 +948,7 @@
 
                 final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
                         .setTitle(R.string.fingerprint_last_delete_title)
-                        .setMessage(devicePolicyManager.getResources().getString(
+                        .setMessage(devicePolicyManager.getString(
                                 messageId, () -> getContext().getString(defaultMessageId)))
                         .setPositiveButton(R.string.fingerprint_last_delete_confirm,
                                 new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
index 276e7aa..25b15c7 100644
--- a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
+++ b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
@@ -196,10 +196,10 @@
                 context.getSystemService(DevicePolicyManager.class);
 
         if (userInfo != null && userInfo.isManagedProfile()) {
-            return devicePolicyManager.getResources().getString(WORK_PROFILE_APP_SUBTEXT,
+            return devicePolicyManager.getString(WORK_PROFILE_APP_SUBTEXT,
                     () -> context.getString(R.string.work_profile_app_subtext));
         }
-        return devicePolicyManager.getResources().getString(PERSONAL_PROFILE_APP_SUBTEXT,
+        return devicePolicyManager.getString(PERSONAL_PROFILE_APP_SUBTEXT,
                 () -> context.getString(R.string.personal_profile_app_subtext));
     }
 
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 6ac0fa4..26fe1b1 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -545,7 +545,7 @@
         }
 
         preference.setTitle(
-                mDevicePolicyManager.getResources().getString(overrideKey,
+                mDevicePolicyManager.getString(overrideKey,
                         () -> getString(resource)));
     }
 
@@ -558,7 +558,7 @@
         }
 
         preference.setSummary(
-                mDevicePolicyManager.getResources().getString(overrideKey,
+                mDevicePolicyManager.getString(overrideKey,
                         () -> getString(resource)));
     }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
index 30b971c..47eaf84 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
@@ -189,11 +189,11 @@
                 getContext().getSystemService(DevicePolicyManager.class);
 
         if (position == WORK_TAB) {
-            return devicePolicyManager.getResources().getString(WORK_CATEGORY_HEADER,
+            return devicePolicyManager.getString(WORK_CATEGORY_HEADER,
                     () -> getContext().getString(R.string.category_work));
         }
 
-        return devicePolicyManager.getResources().getString(PERSONAL_CATEGORY_HEADER,
+        return devicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
                 () -> getContext().getString(R.string.category_personal));
     }
 
diff --git a/src/com/android/settings/dashboard/profileselector/UserAdapter.java b/src/com/android/settings/dashboard/profileselector/UserAdapter.java
index ae5351e..abf22df 100644
--- a/src/com/android/settings/dashboard/profileselector/UserAdapter.java
+++ b/src/com/android/settings/dashboard/profileselector/UserAdapter.java
@@ -59,9 +59,9 @@
             UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
             Drawable icon;
             if (userInfo.isManagedProfile()) {
-                mName = context.getSystemService(DevicePolicyManager.class).getResources()
-                        .getString(WORK_PROFILE_USER_LABEL,
-                                () -> context.getString(R.string.managed_user_title));
+                mName = context.getSystemService(DevicePolicyManager.class).getString(
+                        WORK_PROFILE_USER_LABEL,
+                        () -> context.getString(R.string.managed_user_title));
                 icon = context.getPackageManager().getUserBadgeForDensityNoBackground(
                         userHandle, /* density= */ 0);
             } else {
@@ -119,10 +119,10 @@
         int userHandle = user.mUserHandle.getIdentifier();
         if (userHandle == UserHandle.USER_CURRENT
                 || userHandle == ActivityManager.getCurrentUser()) {
-            return mDevicePolicyManager.getResources().getString(PERSONAL_CATEGORY_HEADER,
+            return mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
                     () -> mContext.getString(R.string.category_personal));
         } else {
-            return mDevicePolicyManager.getResources().getString(WORK_CATEGORY_HEADER,
+            return mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
                     () -> mContext.getString(R.string.category_work));
         }
     }
diff --git a/src/com/android/settings/datausage/ChartDataUsagePreference.java b/src/com/android/settings/datausage/ChartDataUsagePreference.java
index 12fb03b..286d9e5 100644
--- a/src/com/android/settings/datausage/ChartDataUsagePreference.java
+++ b/src/com/android/settings/datausage/ChartDataUsagePreference.java
@@ -48,8 +48,8 @@
     // Set to half a meg for now.
     private static final long RESOLUTION = DataUnit.MEBIBYTES.toBytes(1) / 2;
 
-    private final int mWarningColor;
-    private final int mLimitColor;
+    private int mWarningColor;
+    private int mLimitColor;
 
     private Resources mResources;
     private NetworkPolicy mPolicy;
@@ -58,24 +58,25 @@
     private NetworkCycleChartData mNetworkCycleChartData;
     private int mSecondaryColor;
     private int mSeriesColor;
+    private UsageView mUsageView;
+    private boolean mSuspendUiUpdate;  // Suppress UI updates to save some CPU time.
 
     public ChartDataUsagePreference(Context context, AttributeSet attrs) {
         super(context, attrs);
-        mResources = context.getResources();
         setSelectable(false);
-        mLimitColor = Utils.getColorAttrDefaultColor(context, android.R.attr.colorError);
-        mWarningColor = Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary);
-        setLayoutResource(R.layout.data_usage_graph);
     }
 
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
-        final UsageView chart = (UsageView) holder.findViewById(R.id.data_usage);
-        if (mNetworkCycleChartData == null) {
+        mUsageView = (UsageView) holder.findViewById(R.id.data_usage);
+    }
+
+    private void onUpdateView() {
+        UsageView chart = mUsageView;
+        if ((chart == null) || (mNetworkCycleChartData == null)) {
             return;
         }
-
         final int top = getTop();
         chart.clearPaths();
         chart.configureGraph(toInt(mEnd - mStart), top);
@@ -291,9 +292,16 @@
         return new SpannableStringBuilder().append(label, new ForegroundColorSpan(mLimitColor), 0);
     }
 
+    public void onPreparingChartData() {
+        mSuspendUiUpdate = true;
+    }
+
     public void setNetworkPolicy(NetworkPolicy policy) {
         mPolicy = policy;
-        notifyChanged();
+        if ((!mSuspendUiUpdate) && (mResources != null)) {
+            onUpdateView();
+            notifyChanged();
+        }
     }
 
     public long getInspectStart() {
@@ -305,15 +313,31 @@
     }
 
     public void setNetworkCycleData(NetworkCycleChartData data) {
+        if (data == null) {
+            return;
+        }
         mNetworkCycleChartData = data;
         mStart = data.getStartTime();
         mEnd = data.getEndTime();
+        if (mResources == null) {
+            Context context = getContext();
+            mResources = context.getResources();
+            mLimitColor = Utils.getColorAttrDefaultColor(context, android.R.attr.colorError);
+            mWarningColor = Utils.getColorAttrDefaultColor(context,
+                    android.R.attr.textColorSecondary);
+            setLayoutResource(R.layout.data_usage_graph);
+        }
+        onUpdateView();
         notifyChanged();
+        mSuspendUiUpdate = false;
     }
 
     public void setColors(int seriesColor, int secondaryColor) {
         mSeriesColor = seriesColor;
         mSecondaryColor = secondaryColor;
-        notifyChanged();
+        if ((!mSuspendUiUpdate) && (mResources != null)) {
+            onUpdateView();
+            notifyChanged();
+        }
     }
 }
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index dc945f1..2f4054d 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -151,7 +151,20 @@
     public void onViewCreated(View v, Bundle savedInstanceState) {
         super.onViewCreated(v, savedInstanceState);
 
+        // Show loading
+        mLoadingViewController = new LoadingViewController(
+                v.findViewById(R.id.loading_container), getListView());
+        mLoadingViewController.showLoadingViewDelayed();
+    }
+
+    private void onEndOfLoading() {
+        if (mHeader != null) {
+            return;
+        }
         mHeader = setPinnedHeaderView(R.layout.apps_filter_spinner);
+
+        mCycleSpinner = mHeader.findViewById(R.id.filter_spinner);
+
         mHeader.findViewById(R.id.filter_settings).setOnClickListener(btn -> {
             final Bundle args = new Bundle();
             args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
@@ -162,8 +175,6 @@
                     .setArguments(args)
                     .launch();
         });
-        mCycleSpinner = mHeader.findViewById(R.id.filter_spinner);
-        mCycleSpinner.setVisibility(View.GONE);
         mCycleAdapter = new CycleAdapter(mCycleSpinner.getContext(), new SpinnerInterface() {
             @Override
             public void setAdapter(CycleAdapter cycleAdapter) {
@@ -195,10 +206,6 @@
                 super.sendAccessibilityEvent(host, eventType);
             }
         });
-
-        mLoadingViewController = new LoadingViewController(
-                getView().findViewById(R.id.loading_container), getListView());
-        mLoadingViewController.showLoadingViewDelayed();
     }
 
     @Override
@@ -206,6 +213,10 @@
         super.onResume();
         mDataStateListener.start(mSubId);
 
+        if (mChart != null) {
+            mChart.onPreparingChartData();
+        }
+
         // kick off loader for network history
         // TODO: consider chaining two loaders together instead of reloading
         // network history when showing app detail.
@@ -526,11 +537,13 @@
         @Override
         public void onLoadFinished(Loader<List<NetworkCycleChartData>> loader,
                 List<NetworkCycleChartData> data) {
-            mLoadingViewController.showContent(false /* animate */);
+            onEndOfLoading();
+            if (mLoadingViewController != null) {
+                mLoadingViewController.showContent(false /* animate */);
+            }
             mCycleData = data;
             // calculate policy cycles based on available data
             updatePolicy();
-            mCycleSpinner.setVisibility(View.VISIBLE);
         }
 
         @Override
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
index 0c5e4a0..454de9d 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
@@ -89,7 +89,7 @@
             case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
                 return getString(R.string.insufficient_storage);
             case PackageManager.MOVE_FAILED_DEVICE_ADMIN:
-                return getSystemService(DevicePolicyManager.class).getResources()
+                return getSystemService(DevicePolicyManager.class)
                         .getString(ERROR_MOVE_DEVICE_ADMIN,
                                 () -> getString(R.string.move_error_device_admin));
             case PackageManager.MOVE_FAILED_DOESNT_EXIST:
diff --git a/src/com/android/settings/display/AutoRotateSwitchBarController.java b/src/com/android/settings/display/AutoRotateSwitchBarController.java
index 48dedfd..d76104a 100644
--- a/src/com/android/settings/display/AutoRotateSwitchBarController.java
+++ b/src/com/android/settings/display/AutoRotateSwitchBarController.java
@@ -18,86 +18,78 @@
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.widget.Switch;
 
 import com.android.internal.view.RotationPolicy;
+import com.android.settings.R;
 import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.SettingsMainSwitchBar;
+import com.android.settings.widget.SettingsMainSwitchPreferenceController;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
-import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
 /**
- * The switch controller for auto-rotate.
+ * The main switch controller for auto-rotate.
  */
-public class AutoRotateSwitchBarController implements OnMainSwitchChangeListener,
+public class AutoRotateSwitchBarController extends SettingsMainSwitchPreferenceController implements
         LifecycleObserver, OnStart, OnStop {
 
-    private final SettingsMainSwitchBar mSwitchBar;
-    private final Context mContext;
-    private boolean mValidListener;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
+    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
 
-    public AutoRotateSwitchBarController(Context context, SettingsMainSwitchBar switchBar,
-            Lifecycle lifecycle) {
-        mSwitchBar = switchBar;
-        mContext = context;
+    public AutoRotateSwitchBarController(Context context, String key) {
+        super(context, key);
         mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return RotationPolicy.isRotationLockToggleVisible(mContext)
+                && !DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(mContext)
+                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     @Override
     public void onStart() {
-        if (!mValidListener) {
-            mSwitchBar.addOnSwitchChangeListener(this);
-            mValidListener = true;
+        if (mRotationPolicyListener == null) {
+            mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() {
+                @Override
+                public void onChange() {
+                    if (mSwitchPreference != null) {
+                        updateState(mSwitchPreference);
+                    }
+                }
+            };
         }
-        onChange();
+        RotationPolicy.registerRotationPolicyListener(mContext,
+                mRotationPolicyListener);
     }
 
     @Override
     public void onStop() {
-        if (mValidListener) {
-            mSwitchBar.removeOnSwitchChangeListener(this);
-            mValidListener = false;
+        if (mRotationPolicyListener != null) {
+            RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
         }
     }
 
-    /**
-     * Listens to the state change of the rotation primary switch.
-     */
     @Override
-    public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        setRotationLock(isChecked);
+    public boolean isChecked() {
+        return !RotationPolicy.isRotationLocked(mContext);
     }
 
-
-    protected void onChange() {
-        final boolean isEnabled = !RotationPolicy.isRotationLocked(mContext);
-        if (isEnabled != mSwitchBar.isChecked()) {
-            // set listener to null so that that code below doesn't trigger onCheckedChanged()
-            if (mValidListener) {
-                mSwitchBar.removeOnSwitchChangeListener(this);
-            }
-            mSwitchBar.setChecked(isEnabled);
-            if (mValidListener) {
-                mSwitchBar.addOnSwitchChangeListener(this);
-            }
-        }
-    }
-
-    private boolean setRotationLock(boolean isChecked) {
+    @Override
+    public boolean setChecked(boolean isChecked) {
         final boolean isLocked = !isChecked;
         mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ROTATE_ROTATE_MASTER_TOGGLE,
-                isChecked);
+                isLocked);
         RotationPolicy.setRotationLock(mContext, isLocked);
         return true;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
 }
 
diff --git a/src/com/android/settings/display/ScreenTimeoutPreferenceController.java b/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
index 94041ee..65f0853 100644
--- a/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
+++ b/src/com/android/settings/display/ScreenTimeoutPreferenceController.java
@@ -62,7 +62,6 @@
         if (admin != null) {
             preference.setEnabled(false);
             preference.setSummary(mContext.getSystemService(DevicePolicyManager.class)
-                    .getResources()
                     .getString(DISABLED_BY_IT_ADMIN_TITLE,
                             () -> mContext.getString(R.string.disabled_by_policy_title)));
             ((RestrictedPreference) preference).setDisabledByAdmin(admin);
diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java
index 25bf852..43ec864 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -223,7 +223,7 @@
 
     @VisibleForTesting
     void setupDisabledFooterPreference() {
-        final String textDisabledByAdmin = mDevicePolicyManager.getResources().getString(
+        final String textDisabledByAdmin = mDevicePolicyManager.getString(
                 OTHER_OPTIONS_DISABLED_BY_ADMIN, () -> getResources().getString(
                         R.string.admin_disabled_other_options));
         final String textMoreDetails = getResources().getString(R.string.admin_more_details);
diff --git a/src/com/android/settings/display/SmartAutoRotatePreferenceFragment.java b/src/com/android/settings/display/SmartAutoRotatePreferenceFragment.java
index 9fda03c..8a6120c 100644
--- a/src/com/android/settings/display/SmartAutoRotatePreferenceFragment.java
+++ b/src/com/android/settings/display/SmartAutoRotatePreferenceFragment.java
@@ -20,7 +20,7 @@
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.os.Bundle;
-import android.text.Html;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -28,12 +28,11 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
-import com.android.internal.view.RotationPolicy;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SettingsMainSwitchBar;
+import com.android.settingslib.HelpUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.Indexable;
 import com.android.settingslib.search.SearchIndexable;
@@ -51,9 +50,11 @@
 
     private static final String TAG = "SmartAutoRotatePreferenceFragment";
 
-    private RotationPolicy.RotationPolicyListener mRotationPolicyListener;
-    private AutoRotateSwitchBarController mSwitchBarController;
-    @VisibleForTesting static final String AUTO_ROTATE_SWITCH_PREFERENCE_ID = "auto_rotate_switch";
+    @VisibleForTesting
+    static final String AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY = "auto_rotate_main_switch";
+    @VisibleForTesting
+    static final String AUTO_ROTATE_SWITCH_PREFERENCE_KEY = "auto_rotate_switch";
+    private static final String KEY_FOOTER_PREFERENCE = "auto_rotate_footer_preference";
 
     @Override
     protected int getPreferenceScreenResId() {
@@ -71,6 +72,13 @@
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        setupFooter();
+    }
+
+
+    @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         return DeviceStateAutoRotationHelper.createPreferenceControllers(context);
     }
@@ -81,10 +89,8 @@
         final View view = super.onCreateView(inflater, container, savedInstanceState);
         final SettingsActivity activity = (SettingsActivity) getActivity();
         createHeader(activity);
-        final Preference footerPreference = findPreference(FooterPreference.KEY_FOOTER);
+        final Preference footerPreference = findPreference(KEY_FOOTER_PREFERENCE);
         if (footerPreference != null) {
-            footerPreference.setTitle(Html.fromHtml(getString(R.string.smart_rotate_text_headline),
-                    Html.FROM_HTML_MODE_COMPACT));
             footerPreference.setVisible(isRotationResolverServiceAvailable(activity));
         }
         return view;
@@ -95,39 +101,9 @@
         boolean deviceStateRotationEnabled =
                 DeviceStateAutoRotationHelper.isDeviceStateRotationEnabled(activity);
         if (isRotationResolverServiceAvailable(activity) && !deviceStateRotationEnabled) {
-            final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
-            switchBar.setTitle(
-                    getContext().getString(R.string.auto_rotate_settings_primary_switch_title));
-            switchBar.show();
-            mSwitchBarController = new AutoRotateSwitchBarController(activity, switchBar,
-                    getSettingsLifecycle());
-            findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID).setVisible(false);
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mRotationPolicyListener == null) {
-            mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() {
-                @Override
-                public void onChange() {
-                    if (mSwitchBarController != null) {
-                        mSwitchBarController.onChange();
-                    }
-                }
-            };
-        }
-        RotationPolicy.registerRotationPolicyListener(getPrefContext(),
-                mRotationPolicyListener);
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (mRotationPolicyListener != null) {
-            RotationPolicy.unregisterRotationPolicyListener(getPrefContext(),
-                    mRotationPolicyListener);
+            findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_KEY).setVisible(false);
+        } else {
+            findPreference(AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY).setVisible(false);
         }
     }
 
@@ -141,6 +117,35 @@
         return TAG;
     }
 
+    @Override
+    public int getHelpResource() {
+        return R.string.help_url_auto_rotate_settings;
+    }
+
+    // Updates the footer for this page.
+    @VisibleForTesting
+    void setupFooter() {
+        final String mHelpUri = getString(getHelpResource());
+        if (!TextUtils.isEmpty(mHelpUri)) {
+            addHelpLink();
+        }
+    }
+
+    // Changes the text to include a learn more link if the link is defined.
+    @VisibleForTesting
+    void addHelpLink() {
+        final FooterPreference pref = findPreference(KEY_FOOTER_PREFERENCE);
+        if (pref != null) {
+            pref.setSelectable(false);
+            pref.setLearnMoreAction(v -> {
+                startActivityForResult(HelpUtils.getHelpIntent(getContext(),
+                        getString(getHelpResource()),
+                        /*backupContext=*/ ""), /*requestCode=*/ 0);
+            });
+            pref.setLearnMoreContentDescription(getString(R.string.auto_rotate_link_a11y));
+        }
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.auto_rotate_settings) {
 
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index b61813b..055e868 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -73,7 +73,7 @@
                 mActivity.getSystemService(DevicePolicyManager.class);
 
         TextView title = mDialogView.findViewById(R.id.admin_support_dialog_title);
-        title.setText(devicePolicyManager.getResources().getString(DISABLED_BY_IT_ADMIN_TITLE,
+        title.setText(devicePolicyManager.getString(DISABLED_BY_IT_ADMIN_TITLE,
                 () -> mActivity.getString(R.string.disabled_by_policy_title)));
 
     }
diff --git a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
index e5484db..d5c10b4 100644
--- a/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
+++ b/src/com/android/settings/enterprise/AdminActionPreferenceControllerBase.java
@@ -52,7 +52,7 @@
     }
 
     private String getEnterprisePrivacyNone() {
-        return mContext.getSystemService(DevicePolicyManager.class).getResources()
+        return mContext.getSystemService(DevicePolicyManager.class)
                 .getString(ADMIN_ACTION_NONE,
                         () -> mContext.getString(R.string.enterprise_privacy_none));
     }
diff --git a/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java b/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
index f1f9a61..e883ac3 100644
--- a/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
+++ b/src/com/android/settings/enterprise/AlwaysOnVpnCurrentUserPreferenceController.java
@@ -44,13 +44,13 @@
     public void updateState(Preference preference) {
         if (mFeatureProvider.isInCompMode()) {
             preference.setTitle(
-                    mDevicePolicyManager.getResources().getString(
+                    mDevicePolicyManager.getString(
                             ALWAYS_ON_VPN_PERSONAL_PROFILE,
                             () -> mContext.getString(
                                     R.string.enterprise_privacy_always_on_vpn_personal)));
         } else {
             preference.setTitle(
-                    mDevicePolicyManager.getResources().getString(ALWAYS_ON_VPN_DEVICE,
+                    mDevicePolicyManager.getString(ALWAYS_ON_VPN_DEVICE,
                             () -> mContext.getString(
                                     R.string.enterprise_privacy_always_on_vpn_device)));
         }
diff --git a/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java b/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
index 394de07..76aa6bc 100644
--- a/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
+++ b/src/com/android/settings/enterprise/CaCertsCurrentUserPreferenceController.java
@@ -47,11 +47,11 @@
         super.updateState(preference);
 
         if (mFeatureProvider.isInCompMode()) {
-            preference.setTitle(mDevicePolicyManager.getResources().getString(
+            preference.setTitle(mDevicePolicyManager.getString(
                     CA_CERTS_PERSONAL_PROFILE,
                     () -> mContext.getString(R.string.enterprise_privacy_ca_certs_personal)));
         } else {
-            preference.setTitle(mDevicePolicyManager.getResources().getString(
+            preference.setTitle(mDevicePolicyManager.getString(
                     CA_CERTS_DEVICE,
                     () -> mContext.getString(R.string.enterprise_privacy_ca_certs_device)));
         }
diff --git a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
index 422ffe9..696baca 100644
--- a/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
+++ b/src/com/android/settings/enterprise/DeviceAdminStringProviderImpl.java
@@ -39,7 +39,7 @@
 
     @Override
     public String getDefaultDisabledByPolicyTitle() {
-        return mDevicePolicyManager.getResources().getString(DISABLED_BY_IT_ADMIN_TITLE,
+        return mDevicePolicyManager.getString(DISABLED_BY_IT_ADMIN_TITLE,
                 () -> mContext.getString(R.string.disabled_by_policy_title));
     }
 
@@ -75,13 +75,13 @@
 
     @Override
     public String getDefaultDisabledByPolicyContent() {
-        return mDevicePolicyManager.getResources().getString(CONTACT_YOUR_IT_ADMIN,
+        return mDevicePolicyManager.getString(CONTACT_YOUR_IT_ADMIN,
                 () -> mContext.getString(R.string.default_admin_support_msg));
     }
 
     @Override
     public String getLearnMoreHelpPageUrl() {
-        return mDevicePolicyManager.getResources().getString(IT_ADMIN_POLICY_DISABLING_INFO_URL,
+        return mDevicePolicyManager.getString(IT_ADMIN_POLICY_DISABLING_INFO_URL,
                 () -> mContext.getString(R.string.help_url_action_disabled_by_it_admin));
     }
 
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index 6cadbda..76b2e24 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -98,11 +98,11 @@
         final SpannableStringBuilder disclosure = new SpannableStringBuilder();
         final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
         if (organizationName != null) {
-            disclosure.append(mDpm.getResources().getString(DEVICE_MANAGED_WITH_NAME,
+            disclosure.append(mDpm.getString(DEVICE_MANAGED_WITH_NAME,
                     () -> mResources.getString(R.string.do_disclosure_with_name,
                     organizationName), organizationName));
         } else {
-            disclosure.append(mDpm.getResources().getString(DEVICE_MANAGED_WITHOUT_NAME,
+            disclosure.append(mDpm.getString(DEVICE_MANAGED_WITHOUT_NAME,
                     () -> mResources.getString(R.string.do_disclosure_generic)));
         }
         return disclosure;
diff --git a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
index 3c090ed..34d098d 100644
--- a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
+++ b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListPreferenceController.java
@@ -134,11 +134,11 @@
                 final PreferenceCategory category = new PreferenceCategory(prefContext);
                 screen.addPreference(category);
                 if (userInfo.isManagedProfile()) {
-                    category.setTitle(devicePolicyManager.getResources().getString(
+                    category.setTitle(devicePolicyManager.getString(
                             WORK_CATEGORY_HEADER,
                             () -> mContext.getString(R.string.category_work)));
                 } else {
-                    category.setTitle(devicePolicyManager.getResources().getString(
+                    category.setTitle(devicePolicyManager.getString(
                             PERSONAL_CATEGORY_HEADER,
                             () -> mContext.getString(R.string.category_personal)));
                 }
diff --git a/src/com/android/settings/enterprise/ImePreferenceController.java b/src/com/android/settings/enterprise/ImePreferenceController.java
index 2adf52c..25dcdaf 100644
--- a/src/com/android/settings/enterprise/ImePreferenceController.java
+++ b/src/com/android/settings/enterprise/ImePreferenceController.java
@@ -41,7 +41,7 @@
     @Override
     public void updateState(Preference preference) {
         preference.setSummary(
-                mContext.getSystemService(DevicePolicyManager.class).getResources()
+                mContext.getSystemService(DevicePolicyManager.class)
                         .getString(ADMIN_ACTION_SET_INPUT_METHOD_NAME, () ->
                                 mContext.getResources().getString(
                                         R.string.enterprise_privacy_input_method_name,
diff --git a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
index 71bd3d1..934659d 100644
--- a/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
+++ b/src/com/android/settings/enterprise/ManageDeviceAdminPreferenceController.java
@@ -42,7 +42,7 @@
                 = mFeatureProvider.getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
 
         if (activeAdmins == 0) {
-            return mDevicePolicyManager.getResources().getString(NUMBER_OF_DEVICE_ADMINS_NONE,
+            return mDevicePolicyManager.getString(NUMBER_OF_DEVICE_ADMINS_NONE,
                     () -> mContext.getResources().getString(R.string.number_of_device_admins_none));
         }
 
diff --git a/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java b/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
index e582fb0..f6070bd 100644
--- a/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
+++ b/src/com/android/settings/enterprise/PrivacyPreferenceControllerHelper.java
@@ -52,16 +52,16 @@
 
         final String organizationName = mFeatureProvider.getDeviceOwnerOrganizationName();
         if (organizationName == null) {
-            preference.setSummary(mDevicePolicyManager.getResources().getString(
+            preference.setSummary(mDevicePolicyManager.getString(
                     MANAGED_DEVICE_INFO_SUMMARY,
                     () -> mContext.getString(
                             R.string.enterprise_privacy_settings_summary_generic)));
         } else {
-            preference.setSummary(mDevicePolicyManager.getResources().getString(
-                    MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME,
-                    () -> mContext.getResources().getString(
-                            R.string.enterprise_privacy_settings_summary_with_name,
-                            organizationName), organizationName));
+            preference.setSummary(mDevicePolicyManager
+                    .getString(MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME,
+                            () -> mContext.getResources().getString(
+                                    R.string.enterprise_privacy_settings_summary_with_name,
+                                    organizationName), organizationName));
         }
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
index beef59f..1927421 100644
--- a/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
+++ b/src/com/android/settings/homepage/contextualcards/conditional/WorkModeConditionController.java
@@ -89,7 +89,7 @@
 
     @Override
     public ContextualCard buildContextualCard() {
-        String conditionWorkTitle = mDpm.getResources().getString(WORK_PROFILE_OFF_CONDITION_TITLE,
+        String conditionWorkTitle = mDpm.getString(WORK_PROFILE_OFF_CONDITION_TITLE,
                 () -> mAppContext.getString(R.string.condition_work_title));
         return new ConditionalContextualCard.Builder()
                 .setConditionId(ID)
diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
new file mode 100644
index 0000000..227b5e3
--- /dev/null
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.localepicker;
+
+import android.app.FragmentTransaction;
+import android.app.LocaleManager;
+import android.os.Bundle;
+import android.os.LocaleList;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.MenuItem;
+
+import com.android.internal.app.LocalePickerWithRegion;
+import com.android.internal.app.LocaleStore;
+import com.android.settings.R;
+import com.android.settings.applications.appinfo.AppLocaleDetails;
+import com.android.settings.core.SettingsBaseActivity;
+
+/**
+ * TODO(b/223503670): Add unit test for AppLocalePickerActivity.
+ * A activity to show the locale picker and information page.
+ */
+public class AppLocalePickerActivity extends SettingsBaseActivity
+        implements LocalePickerWithRegion.LocaleSelectedListener {
+    private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
+
+    private String mPackageName;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mPackageName = getIntent().getData().getSchemeSpecificPart();
+        if (TextUtils.isEmpty(mPackageName)) {
+            Log.d(TAG, "There is no package name.");
+            finish();
+            return;
+        }
+
+        getActionBar().setDisplayHomeAsUpEnabled(true);
+        setContentView(R.layout.app_locale_picker);
+
+        // Create App locale info detail part.
+        AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
+        getSupportFragmentManager()
+                .beginTransaction()
+                .replace(R.id.app_locale_detail, appLocaleDetails)
+                .commit();
+
+        // Create Locale picker part.
+        final LocalePickerWithRegion selector = LocalePickerWithRegion.createLanguagePicker(
+                this, AppLocalePickerActivity.this, false /* translate only */);
+        // LocalePickerWithRegion use android.app.ListFragment. Thus, it can not user
+        // getSupportFragmentManager() to add this into container.
+        getFragmentManager()
+                .beginTransaction()
+                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+                .replace(R.id.app_locale_picker_with_region, selector)
+                .commit();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            handleBackPressed();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void onBackPressed() {
+        handleBackPressed();
+    }
+
+    private void handleBackPressed() {
+        if (getFragmentManager().getBackStackEntryCount() > 1) {
+            super.onBackPressed();
+        } else {
+            setResult(RESULT_CANCELED);
+            finish();
+        }
+    }
+
+    @Override
+    public void onLocaleSelected(LocaleStore.LocaleInfo localeInfo) {
+        // TODO(b/223090003): check localeInfo.isSystemLocale()
+        if (localeInfo == null || localeInfo.getLocale() == null) {
+            setAppDefaultLocale("");
+        } else {
+            setAppDefaultLocale(localeInfo.getLocale().getLanguage());
+        }
+        finish();
+    }
+
+    /** Sets the app's locale to the supplied language tag */
+    private void setAppDefaultLocale(String languageTag) {
+        LocaleManager localeManager = getSystemService(LocaleManager.class);
+        if (localeManager == null) {
+            Log.w(TAG, "LocaleManager is null, cannot set default app locale");
+            return;
+        }
+        localeManager.setApplicationLocales(mPackageName, LocaleList.forLanguageTags(languageTag));
+    }
+}
+
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 6246b91..cb5b5d0 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -39,11 +39,14 @@
 import com.android.settings.network.AllowedNetworkTypesListener;
 import com.android.settings.network.CarrierConfigCache;
 import com.android.settings.network.SubscriptionsChangeListener;
+import com.android.settings.network.telephony.NetworkModeChoicesProto.EnabledNetworks;
+import com.android.settings.network.telephony.NetworkModeChoicesProto.UiOptions;
 import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
 /**
@@ -187,21 +190,6 @@
         }
     }
 
-    enum EnabledNetworks {
-        ENABLED_NETWORKS_UNKNOWN,
-        ENABLED_NETWORKS_CDMA_CHOICES,
-        ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES,
-        ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES,
-        ENABLED_NETWORKS_TDSCDMA_CHOICES,
-        ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES,
-        ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES,
-        ENABLED_NETWORKS_EXCEPT_GSM_CHOICES,
-        ENABLED_NETWORKS_EXCEPT_LTE_CHOICES,
-        ENABLED_NETWORKS_4G_CHOICES,
-        ENABLED_NETWORKS_CHOICES,
-        PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE
-    }
-
     private final class PreferenceEntriesBuilder {
         private CarrierConfigCache mCarrierConfigCache;
         private Context mContext;
@@ -256,163 +244,144 @@
             final boolean display2gOptions = carrierConfig
                     .getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL);
             clearAllEntries();
-            String[] entryValues;
-            int[] entryValuesInt;
-            switch (getEnabledNetworkType()) {
+            UiOptions.Builder uiOptions = UiOptions.newBuilder();
+            uiOptions.setType(getEnabledNetworkType());
+            switch (uiOptions.getType()) {
                 case ENABLED_NETWORKS_CDMA_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_cdma_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 4) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_CDMA_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
-                    addLteEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
-                    if (display2gOptions) {
-                        add1xEntry(entryValuesInt[2]);
-                    }
-                    addGlobalEntry(entryValuesInt[3]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_cdma_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add1xEntry)
+                            .addFormat(UiOptions.PresentFormat.addGlobalEntry);
                     break;
                 case ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_cdma_no_lte_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 2) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_CDMA_NO_LTE_CHOICES index error.");
-                    }
-                    add3gEntry(entryValuesInt[0]);
-                    if (display2gOptions) {
-                        add1xEntry(entryValuesInt[1]);
-                    }
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_cdma_no_lte_values)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add1xEntry);
                     break;
                 case ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_cdma_only_lte_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 2) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_CDMA_ONLY_LTE_CHOICES index error.");
-                    }
-                    addLteEntry(entryValuesInt[0]);
-                    addGlobalEntry(entryValuesInt[1]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_cdma_only_lte_values)
+                            .addFormat(UiOptions.PresentFormat.addLteEntry)
+                            .addFormat(UiOptions.PresentFormat.addGlobalEntry);
                     break;
                 case ENABLED_NETWORKS_TDSCDMA_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_tdscdma_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 3) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_TDSCDMA_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
-                    addLteEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
-                    if (display2gOptions) {
-                        add2gEntry(entryValuesInt[2]);
-                    }
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_tdscdma_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                     break;
                 case ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_except_gsm_lte_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 1) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_EXCEPT_GSM_LTE_CHOICES index error.");
-                    }
-                    add3gEntry(entryValuesInt[0]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_except_gsm_lte_values)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                     break;
                 case ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_except_gsm_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 2) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_EXCEPT_GSM_4G_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
-                    add4gEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_except_gsm_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAnd4gEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                     break;
                 case ENABLED_NETWORKS_EXCEPT_GSM_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_except_gsm_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 2) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_EXCEPT_GSM_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
-                    addLteEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_except_gsm_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry);
                     break;
                 case ENABLED_NETWORKS_EXCEPT_LTE_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_except_lte_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 2) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_EXCEPT_LTE_CHOICES index error.");
-                    }
-                    add3gEntry(entryValuesInt[0]);
-                    if (carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {
-                        add2gEntry(entryValuesInt[1]);
-                    }
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_except_lte_values)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                     break;
                 case ENABLED_NETWORKS_4G_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 3) {
-                        throw new IllegalArgumentException(
-                                "ENABLED_NETWORKS_4G_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(
-                            entryValuesInt[0]));
-                    add4gEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
-                    if (display2gOptions) {
-                        add2gEntry(entryValuesInt[2]);
-                    }
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAnd4gEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                     break;
                 case ENABLED_NETWORKS_CHOICES:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.enabled_networks_values);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 3) {
-                        throw new IllegalArgumentException("ENABLED_NETWORKS_CHOICES index error.");
-                    }
-                    add5gEntry(addNrToLteNetworkType(entryValuesInt[0]));
-                    addLteEntry(entryValuesInt[0]);
-                    add3gEntry(entryValuesInt[1]);
-                    if (display2gOptions) {
-                        add2gEntry(entryValuesInt[2]);
-                    }
+                    uiOptions = uiOptions
+                            .setChoices(R.array.enabled_networks_values)
+                            .addFormat(UiOptions.PresentFormat.add5gAndLteEntry)
+                            .addFormat(UiOptions.PresentFormat.add3gEntry)
+                            .addFormat(UiOptions.PresentFormat.add2gEntry);
                     break;
                 case PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE:
-                    entryValues = getResourcesForSubId().getStringArray(
-                            R.array.preferred_network_mode_values_world_mode);
-                    entryValuesInt = Stream.of(entryValues).mapToInt(Integer::parseInt).toArray();
-                    if (entryValuesInt.length < 3) {
-                        throw new IllegalArgumentException(
-                                "PREFERRED_NETWORK_MODE_CHOICES_WORLD_MODE index error.");
-                    }
-                    addGlobalEntry(entryValuesInt[0]);
-
-                    addCustomEntry(
-                            getResourcesForSubId().getString(
-                                    R.string.network_world_mode_cdma_lte),
-                            entryValuesInt[1]);
-                    addCustomEntry(
-                            getResourcesForSubId().getString(
-                                    R.string.network_world_mode_gsm_lte),
-                            entryValuesInt[2]);
+                    uiOptions = uiOptions
+                            .setChoices(R.array.preferred_network_mode_values_world_mode)
+                            .addFormat(UiOptions.PresentFormat.addGlobalEntry)
+                            .addFormat(UiOptions.PresentFormat.addWorldModeCdmaEntry)
+                            .addFormat(UiOptions.PresentFormat.addWorldModeGsmEntry);
                     break;
                 default:
                     throw new IllegalArgumentException("Not supported enabled network types.");
             }
+
+            String[] entryValues = getResourcesForSubId().getStringArray(uiOptions.getChoices());
+            final int[] entryValuesInt = Stream.of(entryValues)
+                    .mapToInt(Integer::parseInt).toArray();
+            final List<UiOptions.PresentFormat> formatList = uiOptions.getFormatList();
+            if (entryValuesInt.length < formatList.size()) {
+                throw new IllegalArgumentException(
+                        uiOptions.getType().name() + " index error.");
+            }
+            // Compose options based on given values and formats.
+            IntStream.range(0, formatList.size()).forEach(entryIndex -> {
+                switch (formatList.get(entryIndex)) {
+                case add1xEntry:
+                    if (display2gOptions) {
+                        add1xEntry(entryValuesInt[entryIndex]);
+                    }
+                    break;
+                case add2gEntry:
+                    if (display2gOptions) {
+                        add2gEntry(entryValuesInt[entryIndex]);
+                    }
+                    break;
+                case add3gEntry:
+                    add3gEntry(entryValuesInt[entryIndex]);
+                    break;
+                case addGlobalEntry:
+                    addGlobalEntry(entryValuesInt[entryIndex]);
+                    break;
+                case addWorldModeCdmaEntry:
+                    addCustomEntry(
+                            getResourcesForSubId().getString(
+                                    R.string.network_world_mode_cdma_lte),
+                            entryValuesInt[entryIndex]);
+                    break;
+                case addWorldModeGsmEntry:
+                    addCustomEntry(
+                            getResourcesForSubId().getString(
+                                    R.string.network_world_mode_gsm_lte),
+                            entryValuesInt[entryIndex]);
+                    break;
+                case add4gEntry:
+                    add4gEntry(entryValuesInt[entryIndex]);
+                    break;
+                case addLteEntry:
+                    addLteEntry(entryValuesInt[entryIndex]);
+                    break;
+                case add5gEntry:
+                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
+                    break;
+                case add5gAnd4gEntry:
+                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
+                    add4gEntry(entryValuesInt[entryIndex]);
+                    break;
+                case add5gAndLteEntry:
+                    add5gEntry(addNrToLteNetworkType(entryValuesInt[entryIndex]));
+                    addLteEntry(entryValuesInt[entryIndex]);
+                    break;
+                default:
+                    throw new IllegalArgumentException("Not supported ui options format.");
+                }
+            });
         }
 
         private int getPreferredNetworkMode() {
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index 4ec9ccd..0daa818 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -107,7 +107,7 @@
         if (UserManager.get(mContext).isManagedProfile()) {
             // Apps in the work profile do not support notification listeners.
             Toast.makeText(mContext,
-                    mDpm.getResources().getString(WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS,
+                    mDpm.getString(WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS,
                             () -> mContext.getString(R.string.notification_settings_work_profile)),
                     Toast.LENGTH_SHORT).show();
             finish();
@@ -168,8 +168,7 @@
             if (managedProfileId != UserHandle.USER_NULL
                     && !mDpm.isNotificationListenerServicePermitted(
                     service.packageName, managedProfileId)) {
-                pref.setSummary(mDpm.getResources().getString(
-                        WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
+                pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
                         () -> getString(
                                 R.string.work_profile_notification_access_blocked_summary)));
             }
diff --git a/src/com/android/settings/notification/SoundWorkSettingsController.java b/src/com/android/settings/notification/SoundWorkSettingsController.java
index c14a7fe..bcaf4af 100644
--- a/src/com/android/settings/notification/SoundWorkSettingsController.java
+++ b/src/com/android/settings/notification/SoundWorkSettingsController.java
@@ -257,9 +257,9 @@
     private void enableWorkSyncSettings() {
         mWorkUsePersonalSounds.setChecked(true);
 
-        String summary = mContext.getSystemService(DevicePolicyManager.class).getResources()
-                .getString(WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY,
-                        () -> mContext.getString(R.string.work_sound_same_as_personal)
+        String summary = mContext.getSystemService(DevicePolicyManager.class).getString(
+                WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY,
+                () -> mContext.getString(R.string.work_sound_same_as_personal)
         );
 
         if (mWorkPhoneRingtonePreference != null) {
@@ -355,10 +355,10 @@
                     context.getSystemService(DevicePolicyManager.class);
 
             return new AlertDialog.Builder(getActivity())
-                    .setTitle(devicePolicyManager.getResources().getString(
+                    .setTitle(devicePolicyManager.getString(
                             ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_TITLE,
                             () -> context.getString(R.string.work_sync_dialog_title)))
-                    .setMessage(devicePolicyManager.getResources().getString(
+                    .setMessage(devicePolicyManager.getString(
                             ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_MESSAGE,
                             () -> context.getString(R.string.work_sync_dialog_message)))
                     .setPositiveButton(R.string.work_sync_dialog_yes,
diff --git a/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
index c9eaa65..52eea54 100644
--- a/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
+++ b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
@@ -39,9 +39,8 @@
         super(context, key);
         AudioManager audioManager = context.getSystemService(AudioManager.class);
         mSpatializer = audioManager.getSpatializer();
-        mSpatialAudioPreferenceController = new SpatialAudioPreferenceController(context, "unused");
-        mSpatialAudioWiredHeadphonesController = new SpatialAudioWiredHeadphonesController(context,
-                "unused");
+        mSpatialAudioPreferenceController = new SpatialAudioPreferenceController(context);
+        mSpatialAudioWiredHeadphonesController = new SpatialAudioWiredHeadphonesController(context);
     }
 
     @Override
diff --git a/src/com/android/settings/notification/SpatialAudioPreferenceController.java b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
index 707340f..b9a0776 100644
--- a/src/com/android/settings/notification/SpatialAudioPreferenceController.java
+++ b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
@@ -32,12 +32,18 @@
  */
 public class SpatialAudioPreferenceController extends TogglePreferenceController {
 
+    private static final String KEY_SPATIAL_AUDIO = "spatial_audio";
+
     private final Spatializer mSpatializer;
     @VisibleForTesting
     final AudioDeviceAttributes mSpeaker = new AudioDeviceAttributes(
             AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, ""
     );
 
+    public SpatialAudioPreferenceController(Context context) {
+        this(context, KEY_SPATIAL_AUDIO);
+    }
+
     public SpatialAudioPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         AudioManager audioManager = context.getSystemService(AudioManager.class);
diff --git a/src/com/android/settings/notification/SpatialAudioSettings.java b/src/com/android/settings/notification/SpatialAudioSettings.java
index 001c617..eb68e87 100644
--- a/src/com/android/settings/notification/SpatialAudioSettings.java
+++ b/src/com/android/settings/notification/SpatialAudioSettings.java
@@ -17,12 +17,17 @@
 package com.android.settings.notification;
 
 import android.app.settings.SettingsEnums;
+import android.content.Context;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.SearchIndexable;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Spatial audio settings located in the sound menu
  */
@@ -46,6 +51,19 @@
         return TAG;
     }
 
+    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
+        controllers.add(new SpatialAudioPreferenceController(context));
+        controllers.add(new SpatialAudioWiredHeadphonesController(context));
+        return controllers;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.spatial_audio_settings);
+            new BaseSearchIndexProvider(R.xml.spatial_audio_settings) {
+                @Override
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
+                    return buildPreferenceControllers(context);
+                }
+            };
 }
diff --git a/src/com/android/settings/notification/SpatialAudioWiredHeadphonesController.java b/src/com/android/settings/notification/SpatialAudioWiredHeadphonesController.java
index 9ff6a7f..cd723f9 100644
--- a/src/com/android/settings/notification/SpatialAudioWiredHeadphonesController.java
+++ b/src/com/android/settings/notification/SpatialAudioWiredHeadphonesController.java
@@ -32,12 +32,19 @@
  */
 public class SpatialAudioWiredHeadphonesController extends TogglePreferenceController {
 
+    private static final String KEY_SPATIAL_AUDIO_WIRED_HEADPHONES =
+            "spatial_audio_wired_headphones";
+
     private final Spatializer mSpatializer;
     @VisibleForTesting
     final AudioDeviceAttributes mWiredHeadphones = new AudioDeviceAttributes(
             AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceInfo.TYPE_WIRED_HEADPHONES, ""
     );
 
+    public SpatialAudioWiredHeadphonesController(Context context) {
+        this(context, KEY_SPATIAL_AUDIO_WIRED_HEADPHONES);
+    }
+
     public SpatialAudioWiredHeadphonesController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         AudioManager audioManager = context.getSystemService(AudioManager.class);
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 841d1f9..a28f237 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -396,18 +396,16 @@
                 }
             } else {
                 if (mIsManagedProfile) {
-                    textView.setText(mDpm.getResources().getString(
-                            WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
+                    textView.setText(mDpm.getString(WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
                             () -> getString(R.string.lock_settings_picker_profile_message)));
                 } else {
                     int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
                     if (mController.isScreenLockRestrictedByAdmin()
                             && profileUserId != UserHandle.USER_NULL) {
                         final StringBuilder description = new StringBuilder(
-                                mDpm.getResources().getString(
-                                        WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK,
-                                        () -> getString(
-                                                R.string.lock_settings_picker_admin_restricted_personal_message)));
+                                mDpm.getString(WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK, () ->
+                                getString(
+                                R.string.lock_settings_picker_admin_restricted_personal_message)));
                         final LinkifyUtils.OnClickListener clickListener = () -> {
                             final Bundle extras = new Bundle();
                             extras.putInt(Intent.EXTRA_USER_ID, profileUserId);
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 7b0955e..9f307cb 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -24,7 +24,7 @@
 import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PIN_HEADER;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PASSWORD_HEADER;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PIN_HEADER;
-import static android.app.admin.DevicePolicyResources.UNDEFINED;
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
 
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
 import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
@@ -389,7 +389,7 @@
                     } else if (type == TYPE_BIOMETRIC) {
                         return context.getString(alphaHintForBiometrics);
                     } else if (isProfile) {
-                        return context.getSystemService(DevicePolicyManager.class).getResources()
+                        return context.getSystemService(DevicePolicyManager.class)
                                 .getString(alphaHintOverrideForProfile,
                                         () -> context.getString(alphaHintForProfile));
                     } else {
@@ -403,7 +403,7 @@
                     } else if (type == TYPE_BIOMETRIC) {
                         return context.getString(numericHintForBiometrics);
                     } else if (isProfile) {
-                        return context.getSystemService(DevicePolicyManager.class).getResources()
+                        return context.getSystemService(DevicePolicyManager.class)
                                 .getString(numericHintOverrideForProfile,
                                         () -> context.getString(numericHintForProfile));
                     } else {
@@ -848,11 +848,11 @@
                         DevicePolicyManager devicePolicyManager =
                                 getContext().getSystemService(DevicePolicyManager.class);
                         if (mIsAlphaMode) {
-                            messages.add(devicePolicyManager.getResources().getString(
+                            messages.add(devicePolicyManager.getString(
                                     PASSWORD_RECENTLY_USED,
                                     () -> getString(R.string.lockpassword_password_recently_used)));
                         } else {
-                            messages.add(devicePolicyManager.getResources().getString(
+                            messages.add(devicePolicyManager.getString(
                                     PIN_RECENTLY_USED,
                                     () -> getString(R.string.lockpassword_pin_recently_used)));
                         }
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 6558262..64fe9ef 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -482,7 +482,7 @@
             } else if (mForFace) {
                 msg = getString(R.string.lockpassword_choose_your_pattern_header_for_face);
             } else if (mIsManagedProfile) {
-                msg = getContext().getSystemService(DevicePolicyManager.class).getResources()
+                msg = getContext().getSystemService(DevicePolicyManager.class)
                         .getString(SET_WORK_PROFILE_PATTERN_HEADER,
                                 () -> getString(
                                         R.string.lockpassword_choose_your_profile_pattern_header));
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index 3b5600f..4b06fe0 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -272,7 +272,7 @@
             case LockPatternUtils.CREDENTIAL_TYPE_PIN:
 
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(
+                    return mDevicePolicyManager.getString(
                             CONFIRM_WORK_PROFILE_PIN_HEADER,
                             () -> getString(R.string.lockpassword_confirm_your_work_pin_header));
                 }
@@ -280,7 +280,7 @@
                 return getString(R.string.lockpassword_confirm_your_pin_header);
             case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(
+                    return mDevicePolicyManager.getString(
                             CONFIRM_WORK_PROFILE_PATTERN_HEADER,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_work_pattern_header));
@@ -289,7 +289,7 @@
                 return getString(R.string.lockpassword_confirm_your_pattern_header);
             case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(
+                    return mDevicePolicyManager.getString(
                             CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_work_password_header));
@@ -305,7 +305,7 @@
         switch (credentialType) {
             case LockPatternUtils.CREDENTIAL_TYPE_PIN:
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(WORK_PROFILE_CONFIRM_PIN,
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PIN,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_pin_generic_profile));
                 }
@@ -313,8 +313,7 @@
                 return getString(R.string.lockpassword_confirm_your_pin_generic);
             case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(
-                            WORK_PROFILE_CONFIRM_PATTERN,
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_pattern_generic_profile));
                 }
@@ -322,8 +321,7 @@
                 return getString(R.string.lockpassword_confirm_your_pattern_generic);
             case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
                 if (isEffectiveUserManagedProfile) {
-                    return mDevicePolicyManager.getResources().getString(
-                            WORK_PROFILE_CONFIRM_PASSWORD,
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PASSWORD,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_password_generic_profile));
                 }
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
index 793f600..9650a4d 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
@@ -247,7 +247,7 @@
                     R.string.lock_last_attempt_before_wipe_warning_title);
             final String overrideMessageId = getLastTryOverrideErrorMessageId(userType);
             final int defaultMessageId = getLastTryDefaultErrorMessage(userType);
-            final String message = mDevicePolicyManager.getResources().getString(
+            final String message = mDevicePolicyManager.getString(
                     overrideMessageId, () -> getString(defaultMessageId));
             LastTryDialog.show(fragmentManager, title, message,
                     android.R.string.ok, false /* dismiss */);
@@ -279,8 +279,7 @@
             case USER_TYPE_PRIMARY:
                 return getString(R.string.lock_failed_attempts_now_wiping_device);
             case USER_TYPE_MANAGED_PROFILE:
-                return mDevicePolicyManager.getResources().getString(
-                        WORK_PROFILE_LOCK_ATTEMPTS_FAILED,
+                return mDevicePolicyManager.getString(WORK_PROFILE_LOCK_ATTEMPTS_FAILED,
                         () -> getString(R.string.lock_failed_attempts_now_wiping_profile));
             case USER_TYPE_SECONDARY:
                 return getString(R.string.lock_failed_attempts_now_wiping_user);
diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java
index 7dcfc83..df7e2dd 100644
--- a/src/com/android/settings/password/ConfirmLockPassword.java
+++ b/src/com/android/settings/password/ConfirmLockPassword.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
@@ -24,7 +25,6 @@
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PASSWORD_REQUIRED;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PIN_REQUIRED;
-import static android.app.admin.DevicePolicyResources.UNDEFINED;
 
 import android.annotation.Nullable;
 import android.app.admin.DevicePolicyManager;
@@ -256,12 +256,12 @@
             }
             if (mIsManagedProfile) {
                 if (mIsAlpha) {
-                    return mDevicePolicyManager.getResources().getString(
+                    return mDevicePolicyManager.getString(
                             CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_work_password_header));
                 }
-                return mDevicePolicyManager.getResources().getString(
+                return mDevicePolicyManager.getString(
                         CONFIRM_WORK_PROFILE_PIN_HEADER,
                         () -> getString(R.string.lockpassword_confirm_your_work_pin_header));
             }
@@ -278,7 +278,7 @@
             // Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
             int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
                     + (mIsAlpha ? 1 : 0);
-            return mDevicePolicyManager.getResources().getString(
+            return mDevicePolicyManager.getString(
                     DETAIL_TEXT_OVERRIDES[index], () -> getString(DETAIL_TEXTS[index]));
         }
 
diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java
index 8b33aa5..f20a2a2 100644
--- a/src/com/android/settings/password/ConfirmLockPattern.java
+++ b/src/com/android/settings/password/ConfirmLockPattern.java
@@ -16,11 +16,11 @@
 
 package com.android.settings.password;
 
+import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PATTERN_REQUIRED;
-import static android.app.admin.DevicePolicyResources.UNDEFINED;
 
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
@@ -271,13 +271,11 @@
             final boolean isStrongAuthRequired = isStrongAuthRequired();
             if (mIsManagedProfile) {
                 if (isStrongAuthRequired) {
-                    return mDevicePolicyManager.getResources().getString(
-                            WORK_PROFILE_PATTERN_REQUIRED,
+                    return mDevicePolicyManager.getString(WORK_PROFILE_PATTERN_REQUIRED,
                             () -> getString(
                                     R.string.lockpassword_strong_auth_required_work_pattern));
                 } else {
-                    return mDevicePolicyManager.getResources().getString(
-                            WORK_PROFILE_CONFIRM_PATTERN,
+                    return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
                             () -> getString(
                                     R.string.lockpassword_confirm_your_pattern_generic_profile));
                 }
@@ -370,7 +368,7 @@
             if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
 
             if (mIsManagedProfile) {
-                return mDevicePolicyManager.getResources().getString(
+                return mDevicePolicyManager.getString(
                         CONFIRM_WORK_PROFILE_PATTERN_HEADER,
                         () -> getString(R.string.lockpassword_confirm_your_work_pattern_header));
             }
diff --git a/src/com/android/settings/password/ForgotPasswordActivity.java b/src/com/android/settings/password/ForgotPasswordActivity.java
index 657139e..d963a05 100644
--- a/src/com/android/settings/password/ForgotPasswordActivity.java
+++ b/src/com/android/settings/password/ForgotPasswordActivity.java
@@ -51,7 +51,7 @@
 
         DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
         TextView forgotPasswordText = (TextView) findViewById(R.id.forgot_password_text);
-        forgotPasswordText.setText(devicePolicyManager.getResources().getString(
+        forgotPasswordText.setText(devicePolicyManager.getString(
                 FORGOT_PASSWORD_TEXT, () -> getString(R.string.forgot_password_text)));
 
         final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
diff --git a/src/com/android/settings/security/LockUnificationPreferenceController.java b/src/com/android/settings/security/LockUnificationPreferenceController.java
index d85d65b..ec7a6ed 100644
--- a/src/com/android/settings/security/LockUnificationPreferenceController.java
+++ b/src/com/android/settings/security/LockUnificationPreferenceController.java
@@ -192,8 +192,7 @@
      */
     public void startUnification() {
         // Confirm profile lock
-        final String title = mDpm.getResources().getString(
-                WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
+        final String title = mDpm.getString(WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
                 () -> mContext.getString(R.string.unlock_set_unlock_launch_picker_title_profile));
         final ChooseLockSettingsHelper.Builder builder =
                 new ChooseLockSettingsHelper.Builder(mHost.getActivity(), mHost);
diff --git a/src/com/android/settings/security/UnificationConfirmationDialog.java b/src/com/android/settings/security/UnificationConfirmationDialog.java
index 0238b0c..929751c 100644
--- a/src/com/android/settings/security/UnificationConfirmationDialog.java
+++ b/src/com/android/settings/security/UnificationConfirmationDialog.java
@@ -65,7 +65,7 @@
 
         return new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.lock_settings_profile_unification_dialog_title)
-                .setMessage(getContext().getSystemService(DevicePolicyManager.class).getResources()
+                .setMessage(getContext().getSystemService(DevicePolicyManager.class)
                         .getString(overrideMessageId, () -> getString(defaultMessageId)))
                 .setPositiveButton(
                         compliant ? R.string.lock_settings_profile_unification_dialog_confirm
diff --git a/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java b/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
index 180ed99..17e7e01 100644
--- a/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
+++ b/src/com/android/settings/security/screenlock/LockAfterTimeoutPreferenceController.java
@@ -124,7 +124,7 @@
     private void updateLockAfterPreferenceSummary(TimeoutListPreference preference) {
         final CharSequence summary;
         if (preference.isDisabledByAdmin()) {
-            summary = mDPM.getResources().getString(DISABLED_BY_IT_ADMIN_TITLE,
+            summary = mDPM.getString(DISABLED_BY_IT_ADMIN_TITLE,
                     () -> mContext.getString(R.string.disabled_by_policy_title));
         } else {
             // Update summary message with current value
diff --git a/src/com/android/settings/users/UserDialogs.java b/src/com/android/settings/users/UserDialogs.java
index d28b798..4dcec4d 100644
--- a/src/com/android/settings/users/UserDialogs.java
+++ b/src/com/android/settings/users/UserDialogs.java
@@ -63,13 +63,13 @@
                 .setPositiveButton(R.string.user_delete_button, onConfirmListener)
                 .setNegativeButton(android.R.string.cancel, null);
         if (userInfo.isManagedProfile()) {
-            builder.setTitle(dpm.getResources().getString(WORK_PROFILE_CONFIRM_REMOVE_TITLE,
+            builder.setTitle(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_TITLE,
                     () -> context.getString(R.string.work_profile_confirm_remove_title)));
             View view = createRemoveManagedUserDialogView(context, removingUserId);
             if (view != null) {
                 builder.setView(view);
             } else {
-                builder.setMessage(dpm.getResources().getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
+                builder.setMessage(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
                         () -> context.getString(R.string.work_profile_confirm_remove_message)));
             }
         } else if (UserHandle.myUserId() == removingUserId) {
@@ -107,14 +107,12 @@
 
         TextView openingParagraph = (TextView)
                 view.findViewById(R.id.delete_managed_profile_opening_paragraph);
-        openingParagraph.setText(devicePolicyManager.getResources().getString(
-                WORK_PROFILE_MANAGED_BY,
+        openingParagraph.setText(devicePolicyManager.getString(WORK_PROFILE_MANAGED_BY,
                 () -> context.getString(
                         R.string.opening_paragraph_delete_profile_unknown_company)));
         TextView closingParagraph = (TextView)
                 view.findViewById(R.id.delete_managed_profile_closing_paragraph);
-        closingParagraph.setText(devicePolicyManager.getResources().getString(
-                WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
+        closingParagraph.setText(devicePolicyManager.getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
                 () -> context.getString(R.string.work_profile_confirm_remove_message)));
 
         CharSequence appLabel = packageManager.getApplicationLabel(mdmApplicationInfo);
diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java
index a1e2b05..06a8fff 100644
--- a/src/com/android/settings/utils/ManagedServiceSettings.java
+++ b/src/com/android/settings/utils/ManagedServiceSettings.java
@@ -136,8 +136,7 @@
             if (managedProfileId != UserHandle.USER_NULL
                     && !mDpm.isNotificationListenerServicePermitted(
                             service.packageName, managedProfileId)) {
-                pref.setSummary(mDpm.getResources().getString(
-                        WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
+                pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
                         () -> getString(
                                 R.string.work_profile_notification_access_blocked_summary)));
             }
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 2945bef..ee0a7d8 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -46,6 +46,7 @@
         "jsr305",
         "settings-contextual-card-protos-lite",
         "settings-log-bridge-protos-lite",
+	"settings-telephony-protos-lite",
         "contextualcards",
         "settings-logtags",
         "zxing-core-1.7",
diff --git a/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
index aab67be..3be652d 100644
--- a/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/ChartDataUsagePreferenceTest.java
@@ -17,7 +17,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
@@ -163,23 +166,32 @@
 
     @Test
     public void notifyChange_nonEmptyDataUsage_shouldHaveSingleContentDescription() {
-        final UsageView chart = (UsageView) mHolder.findViewById(R.id.data_usage);
-        final TextView labelTop = (TextView) mHolder.findViewById(R.id.label_top);
-        final TextView labelMiddle = (TextView) mHolder.findViewById(R.id.label_middle);
-        final TextView labelBottom = (TextView) mHolder.findViewById(R.id.label_bottom);
-        final TextView labelStart = (TextView) mHolder.findViewById(R.id.label_start);
-        final TextView labelEnd = (TextView) mHolder.findViewById(R.id.label_end);
+        final ArgumentCaptor<CharSequence> contentCaptor =
+            ArgumentCaptor.forClass(CharSequence.class);
+        final UsageView chart = mock(UsageView.class);
+        doReturn(chart).when(mHolder).findViewById(R.id.data_usage);
+        final TextView labelTop = mock(TextView.class);
+        doReturn(labelTop).when(mHolder).findViewById(R.id.label_top);
+        final TextView labelMiddle = mock(TextView.class);
+        doReturn(labelMiddle).when(mHolder).findViewById(R.id.label_middle);
+        final TextView labelBottom = mock(TextView.class);
+        doReturn(labelBottom).when(mHolder).findViewById(R.id.label_bottom);
+        final TextView labelStart = mock(TextView.class);
+        doReturn(labelStart).when(mHolder).findViewById(R.id.label_start);
+        final TextView labelEnd = mock(TextView.class);
+        doReturn(labelEnd).when(mHolder).findViewById(R.id.label_end);
         createTestNetworkData();
-        mPreference.setNetworkCycleData(mNetworkCycleChartData);
 
         mPreference.onBindViewHolder(mHolder);
+        mPreference.setNetworkCycleData(mNetworkCycleChartData);
 
-        assertThat(chart.getContentDescription()).isNotNull();
-        assertThat(labelTop.getContentDescription()).isNull();
-        assertThat(labelMiddle.getContentDescription()).isNull();
-        assertThat(labelBottom.getContentDescription()).isNull();
-        assertThat(labelStart.getContentDescription()).isNull();
-        assertThat(labelEnd.getContentDescription()).isNull();
+        verify(chart).setContentDescription(contentCaptor.capture());
+        assertThat(contentCaptor.getValue()).isNotNull();
+        verify(labelTop, never()).setContentDescription(any());
+        verify(labelMiddle, never()).setContentDescription(any());
+        verify(labelBottom, never()).setContentDescription(any());
+        verify(labelStart, never()).setContentDescription(any());
+        verify(labelEnd, never()).setContentDescription(any());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index e4f5b1f..3a10132 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -192,32 +192,23 @@
     }
 
     @Test
-    public void onViewCreated_shouldHideCycleSpinner() {
-        final View view = new View(mActivity);
-        final View header = getHeader();
-        final Spinner spinner = getSpinner(header);
-        spinner.setVisibility(View.VISIBLE);
-        doReturn(header).when(mDataUsageList).setPinnedHeaderView(anyInt());
-        doReturn(view).when(mDataUsageList).getView();
+    public void onViewCreated_shouldNotSetCycleSpinner() {
+        View view = constructRootView();
 
         mDataUsageList.onViewCreated(view, null);
 
-        assertThat(spinner.getVisibility()).isEqualTo(View.GONE);
+        assertThat(getSpinner(view)).isNull();
     }
 
     @Test
-    public void onLoadFinished_networkCycleDataCallback_shouldShowCycleSpinner() {
-        final LoadingViewController loadingViewController = mock(LoadingViewController.class);
-        mDataUsageList.mLoadingViewController = loadingViewController;
-        final Spinner spinner = getSpinner(getHeader());
-        spinner.setVisibility(View.INVISIBLE);
-        mDataUsageList.mCycleSpinner = spinner;
-        assertThat(spinner.getVisibility()).isEqualTo(View.INVISIBLE);
+    public void onLoadFinished_networkCycleDataCallback_shouldSetCycleSpinner() {
+        final View view = constructRootView();
         doNothing().when(mDataUsageList).updatePolicy();
+        doReturn(setupHeaderView(view)).when(mDataUsageList).setPinnedHeaderView(anyInt());
 
         mDataUsageList.mNetworkCycleDataCallbacks.onLoadFinished(null, null);
 
-        assertThat(spinner.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(getSpinner(view)).isNotNull();
     }
 
     @Test
@@ -228,18 +219,24 @@
         verify(mLoaderManager).destroyLoader(DataUsageList.LOADER_SUMMARY);
     }
 
-    private View getHeader() {
-        final View rootView = LayoutInflater.from(mActivity)
+    private View constructRootView() {
+        View rootView = LayoutInflater.from(mActivity)
                 .inflate(R.layout.preference_list_fragment, null, false);
-        final FrameLayout pinnedHeader = rootView.findViewById(R.id.pinned_header);
-        final View header = mActivity.getLayoutInflater()
-                .inflate(R.layout.apps_filter_spinner, pinnedHeader, false);
+        return rootView;
+    }
 
+    private View setupHeaderView(View rootView) {
+        final FrameLayout pinnedHeader = (FrameLayout) rootView.findViewById(R.id.pinned_header);
+        final View header = mActivity.getLayoutInflater()
+                .inflate(R.layout.apps_filter_spinner, pinnedHeader, true);
         return header;
     }
 
-    private Spinner getSpinner(View header) {
-        final Spinner spinner = header.findViewById(R.id.filter_spinner);
-        return spinner;
+    private Spinner getSpinner(View rootView) {
+        final FrameLayout pinnedHeader = (FrameLayout) rootView.findViewById(R.id.pinned_header);
+        if (pinnedHeader == null) {
+            return null;
+        }
+        return pinnedHeader.findViewById(R.id.filter_spinner);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
index 942fed6..e537419 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
@@ -16,7 +16,8 @@
 
 package com.android.settings.display;
 
-import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_ID;
+import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY;
+import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_SWITCH_PREFERENCE_KEY;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -45,7 +46,6 @@
 import com.android.settings.testutils.ResolveInfoBuilder;
 import com.android.settings.testutils.shadow.ShadowDeviceStateRotationLockSettingsManager;
 import com.android.settings.testutils.shadow.ShadowRotationPolicy;
-import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
 
@@ -71,8 +71,6 @@
 
     private SmartAutoRotatePreferenceFragment mFragment;
 
-    private SettingsMainSwitchBar mSwitchBar;
-
     @Mock
     private PackageManager mPackageManager;
 
@@ -87,6 +85,9 @@
     private Resources mResources;
     private Context mContext;
 
+    @Mock
+    private Preference mRotateMainSwitchPreference;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -112,21 +113,21 @@
         when(mFragment.getContext()).thenReturn(mContext);
         doReturn(mView).when(mFragment).getView();
 
-        when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_ID)).thenReturn(
+        when(mFragment.findPreference(AUTO_ROTATE_SWITCH_PREFERENCE_KEY)).thenReturn(
                 mRotateSwitchPreference);
 
-        mSwitchBar = spy(new SettingsMainSwitchBar(mContext));
-        when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
-        doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
-        ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
+
+        when(mFragment.findPreference(AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY)).thenReturn(
+                mRotateMainSwitchPreference);
     }
 
 
     @Test
     public void createHeader_faceDetectionSupported_switchBarIsEnabled() {
+        ShadowDeviceStateRotationLockSettingsManager.setDeviceStateRotationLockEnabled(false);
         mFragment.createHeader(mActivity);
 
-        verify(mSwitchBar, times(1)).show();
+        verify(mRotateMainSwitchPreference, never()).setVisible(false);
         verify(mRotateSwitchPreference, times(1)).setVisible(false);
     }
 
@@ -137,7 +138,7 @@
 
         mFragment.createHeader(mActivity);
 
-        verify(mSwitchBar, never()).show();
+        verify(mRotateMainSwitchPreference, times(1)).setVisible(false);
         verify(mRotateSwitchPreference, never()).setVisible(false);
     }
 
@@ -147,7 +148,7 @@
 
         mFragment.createHeader(mActivity);
 
-        verify(mSwitchBar, never()).show();
+        verify(mRotateMainSwitchPreference, times(1)).setVisible(false);
         verify(mRotateSwitchPreference, never()).setVisible(false);
     }
 
@@ -176,6 +177,19 @@
                 DeviceStateAutoRotateSettingController.class);
     }
 
+    @Test
+    public void setupFooter_linkAddedWhenAppropriate() {
+        doReturn("").when(mFragment).getText(anyInt());
+        doReturn("").when(mFragment).getString(anyInt());
+        mFragment.setupFooter();
+        verify(mFragment, never()).addHelpLink();
+
+        doReturn("testString").when(mFragment).getText(anyInt());
+        doReturn("testString").when(mFragment).getString(anyInt());
+        mFragment.setupFooter();
+        verify(mFragment, times(1)).addHelpLink();
+    }
+
     private void enableDeviceStateSettableRotationStates(String[] settableStates,
             String[] settableStatesDescriptions) {
         when(mResources.getStringArray(
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioParentPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioParentPreferenceControllerTest.java
index 21fcea3..9242cf0 100644
--- a/tests/robotests/src/com/android/settings/notification/SpatialAudioParentPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioParentPreferenceControllerTest.java
@@ -31,6 +31,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
@@ -41,7 +42,7 @@
 
     private static final String KEY = "spatial_audio_summary";
 
-    @Mock
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
     @Mock
     private AudioManager mAudioManager;
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
index e88b758..e57b897 100644
--- a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
@@ -56,7 +56,7 @@
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
         when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
-        mController = new SpatialAudioPreferenceController(mContext, "unused");
+        mController = new SpatialAudioPreferenceController(mContext);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java
index 14d70ca..29525e4 100644
--- a/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java
@@ -56,7 +56,7 @@
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
         when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
-        mController = new SpatialAudioWiredHeadphonesController(mContext, "unused");
+        mController = new SpatialAudioWiredHeadphonesController(mContext);
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
deleted file mode 100644
index aa0daad..0000000
--- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * 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.settings.applications.appinfo;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.LocaleManager;
-import android.content.Context;
-import android.os.LocaleList;
-import android.os.Looper;
-import android.telephony.TelephonyManager;
-
-import androidx.test.annotation.UiThreadTest;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settingslib.widget.RadioButtonPreference;
-
-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.Collection;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-
-/**
- * Unittest for ApplocaleDetails
- * TODO Need to add a unittest for the UI preference component.
- */
-@RunWith(AndroidJUnit4.class)
-public class AppLocaleDetailsTest {
-    private static final String APP_PACKAGE_NAME = "app_package_name";
-
-    @Mock
-    private TelephonyManager mTelephonyManager;
-    @Mock
-    private LocaleManager mLocaleManager;
-
-    private Context mContext;
-    private Collection<Locale> mSystemLocales;
-    private LocaleList mAppLocale;
-    private String[] mAssetLocales;
-    private LocaleList mPackageLocales;
-
-    @Before
-    @UiThreadTest
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        if (Looper.myLooper() == null) {
-            Looper.prepare();
-        }
-        mContext = spy(ApplicationProvider.getApplicationContext());
-        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
-        when(mContext.getSystemService(LocaleManager.class)).thenReturn(mLocaleManager);
-
-        setupInitialLocales(
-                /* appLocale= */ "en-gb",
-                /* simCountry= */ "tw",
-                /* networkCountry= */ "jp",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "pa, cn, zh-tw, en-gb, ja-jp",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "zh-tw", "ja-jp"});
-    }
-
-    @Test
-    @UiThreadTest
-    public void onRadioButtonClicked_setCurrentLocaleToSystem() {
-        AppLocaleDetails appLocaleDetails = new AppLocaleDetails() {
-            @Override
-            void refreshUiInternal() {}
-        };
-        DummyAppLocaleDetailsHelper helper =
-                spy(new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME));
-        appLocaleDetails.mAppLocaleDetailsHelper = helper;
-        RadioButtonPreference pref = new RadioButtonPreference(mContext);
-        pref.setKey(AppLocaleDetails.KEY_SYSTEM_DEFAULT_LOCALE);
-
-        appLocaleDetails.onRadioButtonClicked(pref);
-
-        verify(helper).setAppDefaultLocale(LocaleList.forLanguageTags(""));
-    }
-
-    @Test
-    @UiThreadTest
-    public void onRadioButtonClicked_setCurrentLocaleForUserSelected() {
-        AppLocaleDetails appLocaleDetails = new AppLocaleDetails() {
-            @Override
-            void refreshUiInternal() {}
-        };
-        DummyAppLocaleDetailsHelper helper =
-                spy(new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME));
-        appLocaleDetails.mAppLocaleDetailsHelper = helper;
-        RadioButtonPreference pref = new RadioButtonPreference(mContext);
-        pref.setKey("en");
-
-        appLocaleDetails.onRadioButtonClicked(pref);
-
-        verify(helper).setAppDefaultLocale("en");
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_localeManagerIsNull_noCrash() {
-        when(mContext.getSystemService(LocaleManager.class)).thenReturn(null);
-
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_1stLocaleIsAppLocaleAndHasSimAndNetwork() {
-        Locale simCountryLocale = new Locale("zh", "TW");
-        Locale networkCountryLocale = new Locale("ja", "JP");
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        Locale locale = suggestedLocales.iterator().next();
-        assertTrue(locale.equals(mAppLocale.get(0)));
-        assertTrue(suggestedLocales.contains(simCountryLocale));
-        assertTrue(suggestedLocales.contains(networkCountryLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void
-            handleAllLocalesData_noAppAndNoSupportedSimLocale_suggestedLocaleIsSupported() {
-        Locale testEnAssetLocale = new Locale("en", "GB");
-        Locale testJaAssetLocale = new Locale("ja", "JP");
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "tw",
-                /* networkCountry= */ "",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "ja-jp"});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        assertTrue(suggestedLocales.contains(testEnAssetLocale));
-        assertTrue(suggestedLocales.contains(testJaAssetLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_noAppButHasSupportedSimLocale_1stSuggestedLocaleIsSim() {
-        Locale simLocale = new Locale("zh", "tw");
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "tw",
-                /* networkCountry= */ "",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "ja-jp", "zh-tw"});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        Locale locale = suggestedLocales.iterator().next();
-        assertTrue(locale.equals(simLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void
-            handleAllLocalesData_noAppButHasSupportedNetworkLocale_1stSuggestedLocaleIsNetwork() {
-        Locale networkLocale = new Locale("ja", "JP");
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "",
-                /* networkCountry= */ "jp",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "ja-jp"});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        Locale locale = suggestedLocales.iterator().next();
-        assertTrue(locale.equals(networkLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_noAppSimOrNetworkLocale_suggestedLocalesHasSystemLocale() {
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "",
-                /* networkCountry= */ "",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "zh-tw", "ja-jp"});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        assertTrue(suggestedLocales.contains(Locale.forLanguageTag("ne")));
-        // ru language is not present in the asset locales
-        assertFalse(suggestedLocales.contains(Locale.forLanguageTag("ru")));
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_noAppButHasSimAndNetworkLocale_1stLocaleIsSimLocale() {
-        Locale simCountryLocale = new Locale("zh", "TW");
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "tw",
-                /* networkCountry= */ "jp",
-                /* systemLocales= */ "en-gb, ru, ja-jp, ne, zh-tw",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{"en-gb", "ne", "ms", "pa", "zh-tw", "ja-jp"});
-
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        Locale locale = suggestedLocales.iterator().next();
-        assertTrue(locale.equals(simCountryLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_noSupportedLocale_noSuggestedLocales() {
-        Locale networkCountryLocale = new Locale("en", "GB");
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "",
-                /* networkCountry= */ "gb",
-                /* systemLocales= */ "en, uk, jp, ne",
-                /* packageLocales= */ "",
-                /* assetLocales= */ new String[]{});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        assertTrue(suggestedLocales.size() == 0);
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_hasPackageAndSystemLocales_1stLocaleIs1stOneInSystemLocales() {
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "",
-                /* networkCountry= */ "",
-                /* systemLocales= */ "en, uk, jp, ne",
-                /* packageLocales= */ "pa, cn, tw, en",
-                /* assetLocales= */ new String[]{});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        Locale locale = suggestedLocales.iterator().next();
-        Locale systemLocale = mSystemLocales.iterator().next();
-        assertTrue(locale.equals(systemLocale));
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_sameLocaleButDifferentRegion_notShowDuplicatedLocale() {
-        setupInitialLocales(
-                /* appLocale= */ "",
-                /* simCountry= */ "",
-                /* networkCountry= */ "",
-                /* systemLocales= */ "en-us, en-gb, jp, ne",
-                /* packageLocales= */ "pa, cn, tw, en-us, en-gb",
-                /* assetLocales= */ new String[]{});
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        Collection<Locale> suggestedLocales = helper.getSuggestedLocales();
-        assertFalse(hasDuplicatedResult(suggestedLocales));
-    }
-
-    private boolean hasDuplicatedResult(Collection<Locale> locales) {
-        Set<Locale> tempSet = new HashSet<>();
-        for (Locale locale : locales) {
-            if (!tempSet.add(locale)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_supportLocaleListIsNotEmpty() {
-        DummyAppLocaleDetailsHelper helper =
-                new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
-
-        helper.handleAllLocalesData();
-
-        assertFalse(helper.getSupportedLocales().isEmpty());
-    }
-
-    @Test
-    @UiThreadTest
-    public void handleAllLocalesData_compareLocale() {
-        //Use LocaleList.matchScore() to compare two locales.
-        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("en-US"),
-                Locale.forLanguageTag("en-CA")));
-        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
-                Locale.forLanguageTag("zh")));
-        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-CN"),
-                Locale.forLanguageTag("zh-Hans")));
-        assertTrue(DummyAppLocaleDetailsHelper.compareLocale(Locale.forLanguageTag("zh-TW"),
-                Locale.forLanguageTag("zh-Hant")));
-
-        //Use Locale.equals() to compare two locales.
-        assertFalse(Locale.forLanguageTag("en-US").equals(Locale.forLanguageTag("en-CA")));
-        assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh")));
-        assertFalse(Locale.forLanguageTag("zh-CN").equals(Locale.forLanguageTag("zh-Hans")));
-        assertFalse(Locale.forLanguageTag("zh-TW").equals(Locale.forLanguageTag("zh-Hant")));
-    }
-
-    /**
-     * Sets the initial Locale data
-     *
-     * @param appLocale      Application locale, it shall be a language tag.
-     *                       example: "en"
-     *
-     * @param simCountry     The ISO-3166-1 alpha-2 country code equivalent for the SIM
-     *                       provider's country code.
-     *                       example: "us"
-     *
-     * @param networkCountry The ISO-3166-1 alpha-2 country code equivalent of the MCC
-     *                       (Mobile Country Code) of the current registered operato
-     *                       or the cell nearby.
-     *                       example: "us"
-     *
-     * @param systemLocales  System locales, a locale list by a multiple language tags with comma.
-     *                       example: "en, uk, jp"
-     *
-     * @param packageLocales PackageManager locales, a locale list by a multiple language tags with
-     *                       comma.
-     *                       example: "en, uk, jp"
-     *
-     * @param assetLocales   Asset locales, a locale list by a multiple language tags with String
-     *                       array.
-     *                       example: new String[] {"en", "ne", "ms", "pa"}
-     */
-    private void setupInitialLocales(String appLocale,
-            String simCountry,
-            String networkCountry,
-            String systemLocales,
-            String packageLocales,
-            String[] assetLocales) {
-        mAppLocale = LocaleList.forLanguageTags(appLocale);
-        // forLanguageTags does not filter space to the input string. If there is any space included
-        // in string, this will make locale fail to generate.
-        systemLocales = systemLocales.replaceAll("\\s+", "");
-        LocaleList listOfSystemLocales = LocaleList.forLanguageTags(systemLocales);
-        mSystemLocales = new ArrayList<>();
-        for (int i = 0; i < listOfSystemLocales.size(); i++) {
-            mSystemLocales.add(listOfSystemLocales.get(i));
-        }
-        mAssetLocales = assetLocales;
-        packageLocales = packageLocales.replaceAll("\\s+", "");
-        mPackageLocales = LocaleList.forLanguageTags(packageLocales);
-        when(mTelephonyManager.getSimCountryIso()).thenReturn(simCountry);
-        when(mTelephonyManager.getNetworkCountryIso()).thenReturn(networkCountry);
-        when(mLocaleManager.getApplicationLocales(anyString())).thenReturn(mAppLocale);
-    }
-
-    public class DummyAppLocaleDetailsHelper
-            extends AppLocaleDetails.AppLocaleDetailsHelper {
-
-        DummyAppLocaleDetailsHelper(Context context, String packageName) {
-            super(context, packageName);
-        }
-
-        @Override
-        String[] getAssetLocales() {
-            return mAssetLocales;
-        }
-
-        @Override
-        Collection<Locale> getCurrentSystemLocales() {
-            return mSystemLocales;
-        }
-
-        @Override
-        LocaleList getPackageLocales() {
-            return mPackageLocales;
-        }
-    }
-}