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;
- }
- }
-}