Merge "Update animation on storage item" into tm-dev am: 2d1c853931
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/17092203
Change-Id: If9d29b30f37e99467fd49de9144f9127a2f1ac8b
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 214d32a..012b922 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" />
@@ -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
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 a735e34..40ecb99 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"\'n Herselflaai word vereis om rekenaarmodus vir sekondêre skerms te verplig."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Herselflaai nou"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Herselflaai later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Ruimtelike oudio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Meesleurende oudio klink asof dit van oral rondom jou af kom. Dit werk net met sommige media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Maak oudio realistieser"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Verskuif posisionering van oudio sodat dit natuurliker klink."</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index db86284..beabb5a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"የዴስክቶፕ ሁነታን በሁለተኛ ደረጃ ማሳያዎች ላይ ለማስገደድ ዳግም ማስነሳት ያስፈልጋል።"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ዳግም አስነሳ"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"በኋላ ዳግም አስነሳ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"ከባቢያዊ ኦዲዮ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"አስማጭ ኦዲዮ ከአካባቢዎ የመጣ ይመስላል። ከአንዳንድ ሚዲያዎች ጋር ብቻ ይሰራል።"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ኦዲዮን ይበልጥ ትክክለኛ ያድርጉት"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ይበልጥ ተፈጥሯዊ እንዲመስል የድምጽ አቀማመጥን ይቀይሩ።"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index f774987..b9256ca 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -6072,4 +6072,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"يجب إعادة التشغيل لفرض وضع الكمبيوتر المكتبي على الشاشات الثانوية."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"إعادة التشغيل الآن"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"إعادة التشغيل لاحقًا"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"الصوت المكاني"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"الصوت الغامر يبدو وكأنه يأتي من جميع الجهات المحيطة بك. هذه الميزة غير متوافقة مع كل الوسائط."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"جعل الصوت أكثر واقعية"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"تكييف الصوت مع وضعية الرأس لخوض تجربة أكثر واقعية"</string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 33392e7..c3e7d81 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"গৌণ ডিছপ্লেত ডেস্কটপ ম’ড সক্ষম কৰিবৰ বাবে ৰিবুটৰ প্ৰয়োজন।"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"এতিয়াই ৰিবুট কৰক"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"পাছত ৰিবুট কৰক"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"প্ৰকৃত অভিজ্ঞতা দিয়া অডিঅ’"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ইমাৰ্ছিভ অডিঅ’, এইটো আপোনাৰ চৌপাশৰ আটাইবোৰ দিশৰ পৰা অহা যেন লাগিছে। কেৱল কিছুমান মিডিয়াৰ সৈতে কাম কৰে।"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"অডিঅ’ অধিক বাস্তৱিক কৰক"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"অডিঅ’টো অধিক প্ৰাকৃতিক শুনা পাবলৈ সেইটো স্থান সলনি কৰক।"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 211251f..6785b0c 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"İkinci dərəcəli displeylərdə masaüstü rejimini məcburi aktiv etmək üçün yenidən başlatma tələb olunur."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"İndi yenidən başladın"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Sonra yeniden başladın"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"3D audio effekti"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"İmmersiv audio ətrafınızdan gələn kimi görünür. Yalnız bəzi medialar ilə işləyir."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Audionu daha real edin"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Audionun yerini dəyişdirin ki, daha təbii səslənsin."</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 573812d..f02a9f1 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -5794,4 +5794,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Morate da restartujete da biste prinudno omogućili režim za računare na sekundarnim ekranima."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Restartuj"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Restartuj kasnije"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Prostorni zvuk"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Realistični zvuk deluje kao da je svuda oko vas. Ovo radi samo sa određenim medijskim sadržajem."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Neka zvuk bude realističniji"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Promenite položaj audio opreme da bi zvučala prirodnije."</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 1c3e3e9..2a8f7c5 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -5885,4 +5885,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Каб прымусова ўключыць на дадатковых дысплэях рэжым працоўнага стала, патрабуецца перазагрузка."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Перазагрузіць зараз"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Перазагрузіць пазней"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Прасторавы гук"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Імерсіўнае аўдыя стварае ўражанне, што гук ідзе адусюль. Працуе толькі з пэўным мультымедыйным змесцівам."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Зрабіце гучанне аўдыя больш рэалістычным"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Перамясціце крыніцу гуку, каб гучанне было больш натуральным."</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 551249c..4268618 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -5718,4 +5718,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"За да се зададе принудително настолният режим на алтернативни дисплеи, се изисква рестартиране."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Рестартиране сега"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Рестартиране по-късно"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Пространствено аудио"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"При всеобхватното аудио звукът сякаш идва отвсякъде около вас. Не работи с всяко мултимедийно съдържание."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Аудиото да звучи по-реалистично"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Промяна на позиционирането на аудиото така, че да звучи по-естествено."</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 53f54ae..f685ba4 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"সেকেন্ডারি ডিসপ্লেতে ডেস্কটপ মোড জোর করে চালানোর জন্য রিবুট করতে হবে।"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"এখনই রিবুট করুন"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"পরে রিবুট করুন"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"স্পেশ্যাল অডিও"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ইমারসিভ অডিও শুনে এমন লাগে যেন আওয়াজ আপনার আশপাশ থেকে আসছে। এটি কয়েকটি মিডিয়াতে ব্যবহার করা যাবে।"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"অডিও আরও বাস্তববাদী করে তুলুন"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"অডিও আরও ন্যাচরাল তৈরি করার জন্য স্থান পরিবর্তন করুন।"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 57c9edb..08dae6f 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -5794,4 +5794,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Potrebno je ponovno pokretanje da se nametne način rada računara na sekundarnim ekranima."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Ponovo pokreni sada"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Ponovo pokreni kasnije"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Prostorni zvuk"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Uz fokusirani zvuk će vam se činiti da zvuk dolazi sa svih strana. Funkcionira samo s određenim medijima."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Učinite zvuk realističnijim"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Promijenite položaj zvuka da zvuči prirodnije."</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 5cbb224..563a66c 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Cal reiniciar per forçar el mode d\'escriptori en pantalles secundàries."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reinicia ara"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reinicia més tard"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Àudio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Amb l\'àudio immersiu, et donarà la sensació que l\'àudio arriba per totes bandes. Només funciona amb alguns continguts multimèdia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Fes que l\'àudio sigui més realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Canvia la posició de l\'àudio perquè soni més natural."</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 7250dc6..0a0c47f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -5894,4 +5894,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"K vynucení režimu plochy na sekundárních displejích je vyžadován restart."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Restartovat hned"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Restartovat později"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Prostorový zvuk"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Prostorový zvuk vyvolává dojem, že vychází ze všech stran kolem vás. Funguje jen s některými médii."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Získejte realističtější zvuk"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Posuňte umístění zvuku, aby zněl přirozeněji."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 8b75c01..93127a1 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Du skal genstarte for at gennemtvinge aktivering af computertilstand på sekundære skærme."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Genstart nu"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Genstart senere"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Rumlig lyd"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Lyden er optimal, når den kan høres lige godt i hele rummet. Fungerer kun sammen med nogle former for medier."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Gør lyden mere realistisk"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Skift lydpositionering, så lyden bliver mere naturlig."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 49b889d..e2868d7 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -5708,4 +5708,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Damit der Desktop-Modus auf sekundären Bildschirmen erzwungen wird, musst du das Gerät neu starten."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Jetzt neu starten"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Später neu starten"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Raumklang"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Lässt dich in ein Audioerlebnis eintauchen, bei dem der Klang aus allen Richtungen kommt. Funktioniert nicht mit allen Medieninhalten."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Ein natürlicheres Audioerlebnis"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Passt den Sound für einen realistischeren Klang an deine Kopfbewegungen an."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index b3c0eff..fa6c06a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Απαιτείται επανεκκίνηση για την επιβολή χρήσης της λειτουργίας υπολογιστή σε δευτερεύουσες οθόνες."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Επανεκκίνηση τώρα"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Επανεκκίνηση αργότερα"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Χωρικός ήχος"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Συναρπαστικός ήχος που μοιάζει να έρχεται από κάθε σημείο γύρω σας. Λειτουργεί μόνο με ορισμένο περιεχόμενο μέσων."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Πιο ρεαλιστικός ήχος"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Μετατόπιση θέσης ήχου προκειμένου να ακούγεται πιο φυσικός."</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index fbfe260..e2c9dc1 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"A reboot is required to force desktop mode on secondary displays."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reboot now"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reboot later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive audio seems like it\'s coming from all around you. Only works with some media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Make audio more realistic"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shift positioning of audio so that it sounds more natural."</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 753f79f..57b3e49 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"A reboot is required to force desktop mode on secondary displays."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reboot now"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reboot later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive audio seems like it\'s coming from all around you. Only works with some media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Make audio more realistic"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shift positioning of audio so that it sounds more natural."</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5807d6b..0272184 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"A reboot is required to force desktop mode on secondary displays."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reboot now"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reboot later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive audio seems like it\'s coming from all around you. Only works with some media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Make audio more realistic"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shift positioning of audio so that it sounds more natural."</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 8c5ae2e..d5cad97 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"A reboot is required to force desktop mode on secondary displays."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reboot now"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reboot later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive audio seems like it\'s coming from all around you. Only works with some media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Make audio more realistic"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shift positioning of audio so that it sounds more natural."</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 81f7edc..60b0e1a 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -5701,4 +5701,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"A reboot is required to force desktop mode on secondary displays."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reboot now"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reboot later"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive audio seems like it\'s coming from all around you. Only works with some media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Make audio more realistic"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shift positioning of audio so it sounds more natural."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index a27906a..313af0e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -5717,4 +5717,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Se debe reiniciar para forzar el modo de computadora en las pantallas secundarias."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar ahora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar más adelante"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Sonido espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"El audio envolvente hace que parezca que el sonido se emite todo a tu alrededor. Solo funciona con ciertos tipos de contenido multimedia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Haz que el audio sea más realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Cambia el posicionamiento del audio para que suene más natural."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e2050ef..c516e9a 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Debes reiniciar para forzar el modo de escritorio en pantallas secundarias."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar ahora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar más tarde"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"El sonido envolvente parece que se origina en muchos puntos a tu alrededor. Solo funciona con algunos contenidos multimedia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Consigue un sonido más realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Cambia la posición del audio para que suene más natural."</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index acd222a..b569f41 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -5718,4 +5718,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Töölauarežiimi teisestele ekraanidele sundimiseks on vaja taaskäivitada."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Taaskäivita kohe"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Taaskäivita hiljem"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Ruumiline heli"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Esitatav heli kõlab, nagu ümbritseks see teid. Toimib ainult teatud meediasisu puhul."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Heli loomulikumaks muutmine"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Heli paigutuse muutmine, et see kõlaks loomulikumalt."</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 0d21aea..fa088e7 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Mahaigaineko modua bigarren mailako pantailetan erabiltzera behartzeko, gailua berrabiarazi egin behar da."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Berrabiarazi"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Berrabiarazi geroago"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"360°-ko audioa"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Audio inguratzailearekin, soinua alde guztietatik datorrela ematen du. Multimedia-eduki batzuetan bakarrik funtzionatzen du."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Bihurtu audioa errealistagoa"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Aldatu audioaren posizioa naturalago entzun dadin."</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 5b067af..30bc659 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"برای رفتن به حالت میز کار در نمایشگرهای ثانویه، راهاندازی مجدد الزامی است."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"اکنون راهاندازی مجدد شود"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"بعداً راهاندازی مجدد شود"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"صدای فراگیر"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"صدای سهبعدی بهاین صورت است که انگار از دورتادور شما شنیده میشود. فقط با بعضی رسانهها سازگار است."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"واقعیتر کردن صدا"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"موقعیت صدا را تغییر میدهد تا طبیعیتر شنیده شود."</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6b0417c..e0e69e8a9 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Työpöytätilan pakottaminen toissijaisille näytöille edellyttää uudelleenkäynnistystä."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Käynnistä uudelleen nyt"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Käynnistä uudelleen myöhemmin"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatiaalinen audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersiivinen audio tuntuu kuuluvan kaikkialta ympäriltäsi. Ei toimi kaiken median kanssa."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Tee audiosta realistisempaa"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Muuta audion sijaintia, jotta se kuulostaa luonnollisemmalta."</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a6edef0..4a0f79e 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Vous devez redémarrer l\'appareil pour forcer le mode Bureau sur des écrans secondaires."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Redémarrer maintenant"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Redémarrer plus tard"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Son spatialisé"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Le son immersif donne l\'impression d\'émaner tout autour de vous. Fonctionne uniquement avec certains contenus multimédias."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Rendre le son plus réaliste"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Déplacez le positionnement audio pour rendre le son plus naturel."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 3b88d9d..4166bcb 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Un redémarrage est nécessaire pour forcer le mode bureau sur les écrans secondaires."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Redémarrer maintenant"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Redémarrer plus tard"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Son spatial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Le son immersif semble provenir de toutes les directions. Cette fonctionnalité n\'est disponible qu\'avec certains contenus multimédias."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Rendre le son plus réaliste"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Changez la localisation du son afin qu\'il soit plus naturel."</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 88a6edd..b055f35 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Cómpre reiniciar o dispositivo para forzar o modo de escritorio nas pantallas secundarias."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar agora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar máis adiante"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Coa experiencia de audio envolvente, terás a sensación de que o son chega do teu arredor. Esta función só é compatible con algún contido multimedia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Facer o audio máis realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Cambia a distribución do audio para que soe máis natural."</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 6ac8200..5b27ae4 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ગૌણ ડિસ્પ્લે પર ડેસ્કટૉપ મોડ લાગુ થવાની ફરજ પાડવા માટે રીબૂટ કરવું જરૂરી છે."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"હમણાં રીબૂટ કરો"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"પછીથી રીબૂટ કરો"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"દિશાનુસાર ઑડિયો"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"તલ્લીન કરી દેનારો ઑડિયો જાણે તમારી ચારે તરફ્થી સંભળાતો હોય એમ લાગે છે. માત્ર અમુક મીડિયા કન્ટેન્ટ સાથે જ કામ કરે છે."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ઑડિયોને વધુ વાસ્તવિક બનાવો"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ઑડિયો વધુ સાહજિક રીતે સંભળાય તે માટે તેનું સ્થાન બદલો."</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6fbc8be..e42bd39 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"दूसरे डिसप्ले पर डेस्कटॉप मोड को ज़बरदस्ती चलाने के लिए, डिवाइस को फिर से चालू करना होगा."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"अभी रीबूट (फिर से चालू) करें"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"बाद में रीबूट (फिर से चालू) करें"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"स्पेशल ऑडियो"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"बेहतरीन ऑडियो को सुनकर ऐसा लगता है, जैसे कि आवाज़ आपके आस-पास से आ रही है. यह कुछ मीडिया के साथ ही काम करता है."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ऑडियो को वास्तविक बनाना"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"नैचुरल आवाज़ पाने के लिए, ऑडियो की जगह बदलें."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 35d2deb..8f31a45 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -5796,4 +5796,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Za prisilno uključivanje načina radne površine na sekundarnim zaslonima potrebno je ponovno pokretanje."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Ponovno pokreni sada"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Ponovno pokreni kasnije"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Prostorni zvuk"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Okružujućim zvukom stvara se dojam da zvuk dopire do vas iz svih smjerova. Radi samo s određenim medijskim sadržajima."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Učini zvuk realističnijim"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Promijenite položaj audiouređaja za prirodniji zvuk."</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 03d5308..d4252fb 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Az asztali mód másodlagos kijelzőkön való kényszerítéséhez újraindításra van szükség."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Újraindítás most"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Újraindítás később"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Térhatású hang"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"A térhatású hangzás jóvoltából a hang olyan, mintha minden irányból érkezne. Csak bizonyos médiatartalmak esetében működik."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Valósághűbb hangzást kaphat"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Az audio helyzetének módosításával természetesebb hangzást biztosít."</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 0472601..d22631b 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Լրացուցիչ էկրաններին համակարգչի ռեժիմը հարկադրաբար միացնելու համար պահանջվում է վերաբեռնում։"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Վերաբեռնել հիմա"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Վերաբեռնել ավելի ուշ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Տարածական ձայն"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Տարածական ձայնը ձեր շուրջ է հնչում։ Այն աջակցվում է ոչ բոլոր մեդիա ծառայությունների կողմից։"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Ավելի իրական հնչողություն"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Փոխեք աուդիոյի դիրքը, որպեսզի ձայնն ավելի բնական հնչի։"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index fd12a47..ce54edb 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Perlu memulai ulang untuk memaksa mode desktop di layar sekunder."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Mulai ulang sekarang"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Mulai ulang nanti"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio spasial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Audio yang imersif seolah-olah berasal dari sekitar Anda. Hanya berfungsi di beberapa media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Jadikan audio terasa lebih realistis"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Menggeser posisi audio agar terdengar lebih natural."</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 76580f7..8fcb8f4 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Endurræsingar er krafist til að þvinga skjáborðsstillingu á öðrum skjáum."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Endurræsa núna"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Endurræsa seinna"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Rýmishljóð"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Víðómur hljómar eins og hann sé allt um kring. Virkar aðeins með tilteknu efni."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Gerðu hljóðið raunverulegra"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Hljóðið færist til svo að hljómurinn sé sem eðlilegastur."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 80fc224..6ddb616 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"È necessario riavviare per forzare la modalità desktop su display secondari."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Riavvia ora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Riavvia più tardi"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio spaziale"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"L\'audio immersivo ti circonda. È supportato soltanto con alcuni contenuti multimediali."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Rendi l\'audio più realistico"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Cambia la posizione dell\'audio per renderlo più naturale."</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 52c93c2..729e146 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -5885,4 +5885,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"צריך להפעיל מחדש כדי לאלץ את הצגת הגרסה למחשב במסכים המשניים."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"להפעיל מחדש עכשיו"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"להפעיל מחדש מאוחר יותר"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"אודיו מרחבי"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"אודיו עשיר גורם לך להרגיש שהצלילים עוטפים אותך. הוא פועל רק עם אמצעי מדיה מסוימים."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"שינוי האודיו למציאותי יותר"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"שינוי המיקום של האודיו לקבלת צליל טבעי יותר."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1d47bfe..266b0d4 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"セカンダリ ディスプレイをデスクトップ モードに強制的に切り替えるには、再起動が必要です。"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"今すぐ再起動する"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"後で再起動する"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"空間音声"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"臨場感あふれる音声で包み込まれたように聞こえます。一部のメディアでのみ機能します。"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"音声のリアリティを高める"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"音声の位置をずらして自然に聞こえるようにします。"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index c7e4f9e..c34c65e 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"მეორეულ ეკრანზე დესკტოპ რეჟიმის იძულებით გასააქტიურებლად საჭიროა გადატვირთვა."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ახლავე გადატვირთვა"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"გადატვირთვა მოგვიანებით"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"სივრცითი აუდიო"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"იმერსიული აუდიო თითქოს მთლიანად თქვენს გარშემო ისმის. მუშაობს მხოლოდ გარკვეულ მედიასთან."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"გახადეთ ხმა უფრო რეალური"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"შეცვალეთ აუდიოს პოზიციონირება, რომ ხმა უფრო ბუნებრივად ისმოდეს."</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 321656e..0911c05 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Қосымша дисплейлерде жұмыс үстелі режимін мәжбүрлеп белсендіру үшін құрылғыны өшіріп қосу қажет."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Қазір өшіріп қосу"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Кейінірек өшіріп қосу"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Көлемді дыбыс"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Иммерсивті дыбыс жан-жағыңыздан естілетіндей әсер береді. Кейбір медиақұрылғыда ғана қолжетімді."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Дыбысты барынша шынайы етіңіз"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Дыбыс барынша жанды шығу үшін оның орнын өзгертіңіз."</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 2c5036b..12d896e 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"តម្រូវឱ្យចាប់ផ្ដើមឡើងវិញ ដើម្បីបង្ខំមុខងារកុំព្យូទ័រនៅលើផ្ទាំងអេក្រង់បន្ទាប់បន្សំ។"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ចាប់ផ្ដើមឡើងវិញឥឡូវនេះ"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"ចាប់ផ្ដើមឡើងវិញពេលក្រោយ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"សំឡេងខ្ទររណ្ដំ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"សំឡេងដ៏ជក់ចិត្តហាក់ដូចជាចេញមកពីជុំវិញខ្លួនអ្នក។ ដំណើរការជាមួយមេឌៀមួយចំនួនប៉ុណ្ណោះ។"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ធ្វើឱ្យសំឡេងកាន់តែមានលក្ខណៈដូចពិតជាក់ស្ដែង"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ប្ដូរទីតាំងសំឡេង ដើម្បីឱ្យសំឡេងកាន់តែមានលក្ខណៈធម្មជាតិ។"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 89b0d29..06b9960 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ಸೆಕೆಂಡರಿ ಡಿಸ್ಪ್ಲೇಗಳಲ್ಲಿ ಡೆಸ್ಕ್ಟಾಪ್ ಮೋಡ್ ಅನ್ನು ಬಲವಂತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲು ರೀಬೂಟ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ಈಗಲೇ ರೀಬೂಟ್ ಮಾಡಿ"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"ನಂತರ ರೀಬೂಟ್ ಮಾಡಿ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"ಪ್ರಾದೇಶಿಕ ಆಡಿಯೊ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ತಲ್ಲೀನವಾದ ಆಡಿಯೋದ ಅನುಭವವು ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿಂದಲೇ ಬರುತ್ತಿರುವಂತೆ ಭಾಸವಾಗುತ್ತದೆ. ಕೆಲವು ಮೀಡಿಯಾ ಜೊತೆ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ಆಡಿಯೋ ಇನ್ನಷ್ಟು ನೈಜವಾಗಿ ಕೇಳುವಂತೆ ಮಾಡಿ"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ಆಡಿಯೋದ ಸ್ಥಾನವನ್ನು ಬದಲಿಸಿ ಅದರಿಂದ ನೈಜವಾಗಿ ಕೇಳಿಸುತ್ತದೆ."</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index c42e4d3..18916de 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -5707,4 +5707,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"보조 디스플레이에서 데스크톱 모드를 강제 실행하려면 재부팅해야 합니다."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"지금 재부팅"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"나중에 재부팅"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"서라운드 오디오"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"사용자의 주변에서 들리는 것처럼 소리를 재생하는 몰입형 오디오입니다. 일부 미디어에서만 호환됩니다."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"사실적인 오디오"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"소리가 좀 더 자연스럽게 들리도록 사용자의 머리 위치에 따라 오디오 재생을 조정합니다."</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 05cba74..888a10a 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Кошумча экрандарда иш такта режимин мажбурлап иштетүү үчүн өчүрүп-күйгүзүү керек."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Азыр өчүрүп-күйгүзүү"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Кийинчерээк өчүрүп-күйгүзүү"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Мейкиндиктүү аудио"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Сүңгүтүүчү аудио бардык жерден келип жаткандай угулат. Айрым медиа менен гана иштейт."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Аудиону реалдуу угулгандай кылуу"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Аудиону тууралап жайгаштырып, үнү табигый угулгандай кылыңыз."</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index ec76972..ce05862 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ຕ້ອງປິດເປີດໃໝ່ເພື່ອບັງຄັບໂໝດເດັສທັອບຢູ່ໜ້າຈໍທີສອງ."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ປິດເປີດໃໝ່ໃນຕອນນີ້"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"ປິດເປີດໃໝ່ໃນພາຍຫຼັງ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"ສຽງຮອບທິດທາງ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ສຽງແບບອິມເມີສີບຄືກັບວ່າມັນດັງມາຈາກທຸກທິດອ້ອມຕົວທ່ານ. ໃຊ້ໄດ້ໃນມີເດຍບາງຢ່າງເທົ່ານັ້ນ."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ເຮັດໃຫ້ສຽງສົມຈິງຫຼາຍຂຶ້ນ"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ໃຫ້ຍ້າຍຕຳແໜ່ງສຽງເພື່ອໃຫ້ໄດ້ຍິນເປັນທຳມະຊາດຫຼາຍຂຶ້ນ."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 96a6578..dc2f3a7 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -5883,4 +5883,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Norint priverstinai įjungti darbalaukio režimą antriniuose ekranuose, būtina paleisti iš naujo."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Paleisti iš naujo dabar"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Paleisti iš naujo vėliau"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Erdvinis garsas"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Įtraukiantis garsas skamba taip, tarsi jo šaltinis būtų visai šalia jūsų. Veikia tik su tam tikromis medijomis."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Kad garsas skambėtų kuo realistiškiau"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Garso sklidimo kryptis perskirtoma, kad skambėtų kuo natūraliau."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 887bdfb..5537f78 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -5805,4 +5805,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Lai piespiedu kārtā aktivizētu darbvirsmas režīmu sekundārajos displejos, nepieciešama atkārtota palaišana."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Atkārtoti palaist tūlīt"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Atkārtoti palaist vēlāk"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Telpiskais audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Iekļaujošais audio saturs šķietami ir dzirdams visapkārt. Darbojas tikai noteiktam multivides saturam."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Reālistiskāka audio satura iegūšana"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Mainiet audio pozīciju, lai skaņa būtu dabiskāka."</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index fa8568c..10fd902 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -5717,4 +5717,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Потребно е рестартирање за да се присили режимот на компјутер на секундарни екрани."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Рестартирај сега"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Рестартирај подоцна"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Просторен звук"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Имерзивното аудио звучи како да доаѓа од секаде околу вас. Функционира само со некои аудиовизуелни содржини."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Направете го аудиото пореално"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Поместете ја положбата на аудиото за да звучи поприродно."</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 579bbd1..137138f 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ദ്വിതീയ ഡിസ്പ്ലേകളെ നിർബന്ധിതമായി ഡെസ്ക്ക്ടോപ്പ് മോഡിലാക്കാൻ റീബൂട്ട് ചെയ്യേണ്ടതുണ്ട്."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ഇപ്പോൾ റീബൂട്ട് ചെയ്യുക"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"പിന്നീട് റീബൂട്ട് ചെയ്യുക"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"സ്പേഷ്യൽ ഓഡിയോ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ഇമേഴ്സീവ് ഓഡിയോ നിങ്ങളുടെ ചുറ്റും നിന്ന് വരുന്നതായി തോന്നുന്നു. ചില മീഡിയയിൽ മാത്രം പ്രവർത്തിക്കുന്നു."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ഓഡിയോ കൂടുതൽ സ്വാഭാവികമാക്കുക"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ഓഡിയോ കൂടുതൽ സ്വാഭാവികതയുള്ളതായി തോന്നാൽ അതിന്റെ സ്ഥാനം മാറ്റുക."</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index c3aa810..254f9d7 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Хоёрдогч дэлгэц дээр дэлгэцийн горимыг хүчлэхийн тулд дахин асаах шаардлагатай."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Одоо дахин асаах"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Дараа дахин асаах"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Орон зайн аудио"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Таны эргэн тойрноос гарч буй мэт гайхалтай аудио. Зөвхөн зарим медиатай ажиллана."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Аудиог илүү бодит болгох"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Аудионы байрлалыг шилжүүлснээр илүү төрөлхийн мэт сонсогдоно."</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 29a009d..4f3bbf3 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"दुय्यम डिस्प्लेवर डेस्कटॉप मोडची सक्ती करण्यासाठी, रीबूट करणे आवश्यक आहे."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"आता रीबूट करा"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"नंतर रीबूट करा"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"अवकाशीय ऑडिओ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"वेधक ऑडिओ हा तुमच्या आजूबाजूने येत आहे असे वाटते. फक्त काही मीडियासोबत काम करते."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ऑडिओ आणखी वास्तववादी बनवा"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"आणखी नैसर्गिक वाटण्यासाठी ऑडिओचे स्थान निर्धारण शिफ्ट करा."</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 27754ea..56d48ad 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"But semula diperlukan untuk memaksa mod desktop pada paparan sekunder."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"But semula sekarang"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"But semula kemudian"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio ruang"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Audio yang mengasyikkan seolah-olah bunyi audio datang dari sekeliling anda. Hanya berfungsi dengan sesetengah media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Jadikan bunyi audio lebih realistik"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Alihkan kedudukan audio supaya bunyi audio lebih semula jadi."</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 7b041ad..99ad432 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"အရန်ဖန်သားပြင်တွင် ဒက်စ်တော့မုဒ်ကို မဖြစ်မနေ အသုံးပြုရန်အတွက် ပြန်လည်စတင်ရန် လိုအပ်သည်။"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ယခု ပြန်လည်စတင်ရန်"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"နောက်မှ ပြန်လည်စတင်ရန်"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"စပေရှယ် အသံ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"လွှမ်းခြုံသည့်အသံသည် သင့်ပတ်ပတ်လည်မှ လာသည့်ပုံစံမျိုး ဖြစ်သည်။ မီဒီယာအချို့နှင့်သာ သုံးနိုင်သည်။"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"အသံ ပိုသဘာဝကျအောင် လုပ်ရန်"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ပိုသဘာဝကျစေရန် အသံထည့်သွင်းမှုကို ပြောင်းရွှေ့နိုင်သည်။"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 0d1b2c7..e8504d8 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"En omstart kreves for å tvinge skrivebordmodus på sekundære skjermer."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Start på nytt nå"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Start på nytt senere"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Romlig lyd"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Omsluttende lyd høres ut som om den kommer fra alle kanter. Dette fungerer bare med enkelte medier."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Gjør lyd mer realistisk"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Endre plasseringen til lyd, slik at den høres mer naturlig ut."</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 256377a..edc66d8 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"सहायक डिस्प्लेहरूमा डेस्कटप मोड बलपूर्वक लागू गर्न रिबुट गर्नु पर्ने हुन्छ।"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"अहिले नै रिबुट गर्नुहोस्"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"पछि रिबुट गर्नुहोस्"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"स्पाटियल अडियो"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"इमर्सिभ अडियो सुन्दा चारैतिरबाट साउन्ड आएको जस्तै लाग्छ। यो अडियोले केही मिडियामा मात्र काम गर्छ।"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"अडियो अझ यथार्थपरक बनाउनुहोस्"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"अडियोको साउन्ड थप प्राकृतिक बनाउन उक्त अडियोको स्थिति बदल्नुहोस्।"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 105d0a4..4e67cd7 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Je moet opnieuw opstarten om de desktopmodus af te dwingen op secundaire schermen."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Nu opnieuw opstarten"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Later opnieuw opstarten"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Ruimtelijke audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Ruimtelijke audio lijkt van overal om je heen te komen. Werkt alleen met bepaalde media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Audio realistischer maken"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Verschuif de positionering van audio zodat deze natuurlijker klinkt."</string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index b30a0c4..2d2b6c1 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ସେକେଣ୍ଡାରୀ ଡିସପ୍ଲେରେ ଡେସ୍କଟପ ମୋଡକୁ ବାଧ୍ୟତାମୂଳକ ଭାବେ ଚାଲୁ କରିବା ପାଇଁ ରିବୁଟ କରିବା ଆବଶ୍ୟକ।"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ବର୍ତ୍ତମାନ ରିବୁଟ କରନ୍ତୁ"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"ପରେ ରିବୁଟ କରନ୍ତୁ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"ସ୍ପେସିଅଲ ଅଡିଓ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ଇମରସିଭ ଅଡିଓ ଆପଣଙ୍କ ଚାରିପାଖରୁ ଆସୁଥିବା ପରି ଲାଗେ। କେବଳ କିଛି ମିଡିଆରେ କାମ କରେ।"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ଅଡିଓକୁ ଅଧିକ ବାସ୍ତବିକ କରନ୍ତୁ"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ଅଡିଓର ସାଉଣ୍ଡକୁ ଅଧିକ ପ୍ରାକୃତିକ କରିବା ପାଇଁ ଏହାର ସ୍ଥିତି ପରିବର୍ତ୍ତନ କରନ୍ତୁ।"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 011c7a8..a4c2ec4 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ਸੈਕੰਡਰੀ ਡਿਸਪਲੇਆਂ \'ਤੇ ਡੈਸਕਟਾਪ ਮੋਡ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਚਾਲੂ ਕਰਨ ਲਈ ਰੀਬੂਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ਹੁਣੇ ਰੀਬੂਟ ਕਰੋ"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"ਬਾਅਦ ਵਿੱਚ ਰੀਬੂਟ ਕਰੋ"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"ਸਥਾਨ-ਅਨੁਕੂਲ ਆਡੀਓ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ਇਮਰਸਿਵ ਆਡੀਓ ਇੰਝ ਲੱਗਦੀ ਹੈ ਕਿ ਇਹ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਤੋਂ ਆ ਰਹੀ ਹੈ। ਸਿਰਫ਼ ਕੁਝ ਮੀਡੀਆ ਨਾਲ ਹੀ ਕੰਮ ਕਰਦਾ ਹੈ।"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ਆਡੀਓ ਨੂੰ ਜ਼ਿਆਦਾ ਵਾਸਤਵਿਕ ਬਣਾਓ"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ਆਡੀਓ ਦੀ ਸਥਿਤੀ ਬਦਲੋ ਤਾਂ ਜੋ ਇਹ ਵਧੇਰੇ ਕੁਦਰਤੀ ਹੋਵੇ।"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 54d0900..3cb390d 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -5894,4 +5894,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Wymuszenie wersji na komputery na dodatkowych wyświetlaczach wymaga ponownego uruchomienia."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Uruchom ponownie teraz"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Uruchom ponownie później"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Dźwięk przestrzenny"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Dźwięk immersyjny brzmi, jakby rozlegał się wokół Ciebie. Działa tylko w przypadku niektórych multimediów."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Zadbaj o realistyczny dźwięk"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Zmień pozycjonowanie dźwięku, aby brzmiał bardziej naturalnie."</string>
</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 349926c..b6ff537 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -5706,4 +5706,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"É necessário reiniciar o dispositivo para forçar o modo área de trabalho em telas secundárias."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar agora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar mais tarde"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Áudio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"O áudio imersivo é aquele que parece que vem de todos os lados. Ele só funciona com alguns tipos de mídia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Deixar o áudio mais realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Mude posição do áudio para que o som fique mais natural."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index b2bd8cb..5747373 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -5715,4 +5715,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"É necessário reiniciar para forçar o modo de ambiente de trabalho em ecrãs secundários."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar agora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar mais tarde"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Áudio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"O áudio envolvente dá a sensação de que o som provém de todas as direções. Funciona apenas com alguns conteúdos multimédia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Faça com que o som soe de forma mais realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Mude o posicionamento do áudio para que soe mais natural."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 349926c..b6ff537 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -5706,4 +5706,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"É necessário reiniciar o dispositivo para forçar o modo área de trabalho em telas secundárias."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reiniciar agora"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar mais tarde"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Áudio espacial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"O áudio imersivo é aquele que parece que vem de todos os lados. Ele só funciona com alguns tipos de mídia."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Deixar o áudio mais realista"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Mude posição do áudio para que o som fique mais natural."</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index f23528f..5ddd04c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -5796,4 +5796,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Este nevoie de o repornire pentru a impune modul computer pe ecranele secundare."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reporniți acum"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reporniți mai târziu"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Sunet spațial"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Pare că sunetul captivant vă învăluie. Funcționează doar cu anumite tipuri de conținut media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Obțineți un sunet mai realist"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Schimbați poziția dispozitivului audio pentru un sunet mai natural."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6ea5cc7..9ff891e 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -5882,4 +5882,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Чтобы принудительно включить режим рабочего стола на дополнительных экранах, требуется перезагрузка."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Перезагрузить сейчас"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Перезагрузить позже"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Пространственный звук"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Звук со всех сторон, который создает эффект присутствия. Поддерживается не для всего медиаконтента."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Более реалистичное звучание"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Сделать звучание более естественным"</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 532a715..c066a9b 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ද්විතීයික සංදර්ශකවල ඩෙස්ක්ටොප් ප්රකාරය බල කිරීමට නැවත පණ ගැන්වීමක් අවශ්ය වේ."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"දැන් නැවත පණ ගන්වන්න"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"පසුව නැවත පණ ගන්වන්න"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"අවකාශීය ශ්රව්ය"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ගිල්වුම් ශ්රව්යය ඔබ අවට සැම තැනකින්ම එන බව පෙනේ. සමහර මාධ්ය සමග පමණක් ක්රියා කරයි."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ශ්රව්යය වඩාත් යථාර්ථවාදී බවට පත් කරන්න"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"එය වඩාත් ස්වභාවික වන ලෙස ශ්රව්යයෙහි ස්ථානගත කිරීම මාරු කරන්න."</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 33c3414..91c171b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -5884,4 +5884,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Vynútenie režimu pracovnej plochy na sekundárnych obrazovkách vyžaduje reštartovanie."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Reštartovať"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reštartovať neskôr"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Priestorový zvuk"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Pohlcujúci zvuk je taký, pri ktorom sa zdá, že vychádza zo všetkých strán. Funguje iba s niektorými médiami."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Získajte realistickejší zvuk"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Upravte rozmiestnenie audiozariadení, aby bol zvuk prirodzenejší."</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 409cb28..83039c0 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -5884,4 +5884,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Če želite vsiliti namizni način na sekundarnih zaslonih, morate znova zagnati napravo."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Znova zaženi"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Znova zaženi pozneje"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Prostorski zvok"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Prostorski zvok ustvari vtis, da prihaja od vsepovsod okoli vas. Deluje samo z nekaterimi predstavnostmi."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Bolj realističen zvok"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Nastavite lahko sledenje zvoku, da zveni bolj naravno."</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index e5536b2..545ea0d 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Kërkohet të rindizet për të detyruar modalitetin e desktopit në ekranet dytësore."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Rindize tani"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Rindize më vonë"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Audio hapësinore"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Audioja përfshirëse duket sikur vjen nga kudo përreth teje. Funksionon vetëm me disa media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Bëje audion më reale"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Ndrysho pozicionimin e audios në mënyrë që të ketë tinguj sa më natyralë."</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 43a9d90..04b2afd 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -5794,4 +5794,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Морате да рестартујете да бисте принудно омогућили режим за рачунаре на секундарним екранима."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Рестартуј"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Рестартуј касније"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Просторни звук"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Реалистични звук делује као да је свуда око вас. Ово ради само са одређеним медијским садржајем."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Нека звук буде реалистичнији"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Промените положај аудио опреме да би звучала природније."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index be8a59f..6c10680 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Du måste starta om enheten om du vill tvinga fram datorläge på sekundära skärmar."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Starta om nu"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Starta om senare"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Rumsligt ljud"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Uppslukande ljud som verkar omge dig. Fungerar inte med all media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Gör ljudet mer realistiskt"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Ändra ljudet efter huvudets position så det låter naturligare."</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0b2a4aa..ecf6828 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -5706,4 +5706,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Itahitaji kuwashwa tena ili kuwezesha hali ya kompyuta ya mezani kwenye skrini nyingine."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Washa tena sasa"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Washa tena baadaye"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Sauti bora"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Sauti murua inaonekana kama inatoka pande zote. Inafanya kazi na baadhi ya programu tu."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Fanya sauti iwe halisi zaidi"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Hamisha nafasi ya sauti ili isikike kuwa ya asili zaidi."</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index a5e4093..1dfd334 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"இரண்டாம் நிலைத் திரையில் டெஸ்க்டாப் பயன்முறையைப் பயன்படுத்த, சாதனத்தை மீண்டும் தொடங்குதல் அவசியம்."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"இப்போதே மீண்டும் தொடங்கு"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"பிறகு மீண்டும் தொடங்கு"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"சுற்றிலும் கேட்கும் ஆடியோ"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"உங்களைச் சுற்றி கேட்பதைப் போன்று ஆடியோ தத்ரூபமாக இருக்கும். சில மீடியாக்களில் மட்டுமே செயல்படும்."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ஆடியோவை மேலும் துல்லியமாக்குதல்"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ஆடியோவின் நிலையை மாற்றி அதை இயல்பாக ஒலிக்கச் செய்யும்."</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index e7b1c03..c9167cc 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ద్వితీయ డిస్ప్లేలలో డెస్క్టాప్ మోడ్ను బలవంతంగా ఆన్ చేయడానికి రీబూట్ చేయడం అవసరం."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ఇప్పుడే రీబూట్ చేయండి"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"తర్వాత రీబూట్ చేయండి"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"మైమరపించే ఆడియో"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"లీనమయ్యే ఆడియో మీ చుట్టుపక్కల నుండి వస్తున్నట్లుగా ఉంది. కొంత మీడియాతో మాత్రమే పని చేస్తుంది."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ఆడియోను మరింత సహజమైనదిగా చేయండి"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ఆడియో తాలూకు స్థానాన్ని షిఫ్ట్ చేయండి, తద్వారా ఇది మరింత సహజంగా అనిపిస్తుంది."</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index fa73214..0e891bc 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"ต้องรีบูตเพื่อบังคับให้จอแสดงผลสำรองใช้โหมดเดสก์ท็อป"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"รีบูตเลย"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"รีบูตภายหลัง"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"เสียงรอบทิศทาง"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"เสียงแบบกระหึ่มจะให้ความรู้สึกเหมือนกับว่าเสียงมาจากรอบตัวคุณ โดยจะใช้ได้ในบางสื่อเท่านั้น"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"ทำให้เสียงสมจริงยิ่งขึ้น"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"ปรับเปลี่ยนตำแหน่งของเสียงเพื่อให้ฟังได้อย่างเป็นธรรมชาติมากขึ้น"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 715ad6f..f4f799b 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -5704,4 +5704,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Kinakailangang mag-reboot para sapilitang mailapat ang desktop mode sa mga pangalawang display."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Mag-reboot ngayon"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Mag-reboot sa ibang pagkakataon"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Spatial audio"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Immersive na audio na parang nanggagaling sa buong paligid mo. Gumagana lang sa ilang media."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Gawing mas makatotohanan ang audio"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Palitan ang pagpoposisyon ng audio para mas natural ang tunog nito."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1dde86b..d51edcd 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -5716,4 +5716,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"İkincil ekranlarda masaüstü modunu zorlamak için yeniden başlatma gerekir."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Şimdi yeniden başlat"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Sonra yeniden başlat"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Üç boyutlu ses"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Üç boyutlu seste duyduklarınız etrafınızdan geliyormuş gibi hissettirir. Bu özellik yalnızca bazı medyalarla çalışır."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Sesi daha gerçekçi hale getirme"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Sesin çıktığı yeri değiştirerek kulağa daha doğal gelmesini sağlayın."</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index b1f9da8..7584560 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -5883,4 +5883,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Щоб примусово застосувати режим робочого столу на додаткових екранах, перезапустіть пристрій."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Перезапустити зараз"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Перезапустити пізніше"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Просторовий звук"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Звук настільки реалістичний, що, здається, він лунає звідусіль. Функція підтримує лише певні типи медіафайлів."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Зробіть звук реалістичнішим"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Змініть позиціонування джерела звуку, щоб він звучав природніше."</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index d300a67..d96c619 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"سیکنڈری ڈسپلیز پر ڈیسک ٹاپ موڈ فورس کرنے کے لیے ریبوٹ درکار ہے۔"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"ابھی ریبوٹ کریں"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"بعد میں ریبوٹ کریں"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"اسپیشیئل آڈیو"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"ایسا لگتا ہے کہ آپ کی چاروں طرف سے عمیق آڈیو آ رہی ہے۔ صرف چند میڈیا کے ساتھ کام کرتی ہے۔"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"آڈیو کو مزید حقیقی بنائیں"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"آڈیو کی آواز کو مزید فطری بنانے کے لیے اس کی پوزیشن شفٹ کریں۔"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 67abfbc..9a60f37 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -5706,4 +5706,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Ikkilamchi displeylar majburan ish stoli rejimida ishlashi uchun qayta ishga tushirish zarur."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Hozir qayta ishga tushirish"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Keyinroq qayta ishga tushirish"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Qamrovli ovoz"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Keng qamrovli audio bilan tovushlar atrofingizda yangraydi. Faqat ayrim media bilan ishlaydi."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Audioni yanada real qilish"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Audio yanada tabiiy yangrashi uchun joylashuvini oʻzgartiring."</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index cb0ae55..e5f9095 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -5707,4 +5707,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Cần phải khởi động lại để buộc chạy chế độ máy tính trên màn hình phụ."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Khởi động lại ngay"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Khởi động lại sau"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Âm thanh không gian"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Mang lại trải nghiệm 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="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Tăng độ chân thực của âm thanh"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Di chuyển vị trí phát âm thanh để âm thanh nghe tự nhiên hơn."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a438fc7..497e35a 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -5705,4 +5705,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"您必须重新启动设备,才能在辅助屏幕上强制使用桌面模式。"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"立即重新启动"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"稍后重新启动"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"空间音频"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"沉浸式音频能带来身临其境的听觉体验。仅适用于部分媒体。"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"让音频更逼真"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"调整音频定位,让声音更自然。"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4374aa2..c17af2b 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -5708,4 +5708,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"您需要重新開機,才能在次要螢幕上強制執行桌面模式。"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"立即重新開機"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"稍後重新開機"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"情景音效"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"為您帶來仿如置身其中的音響體驗。此功能只支援部分媒體。"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"讓音效更真實"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"調整音效位置,讓聲音聽起來更自然。"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 0397145..477b6e7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -5707,4 +5707,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"必須重新啟動才能在次要螢幕上強制執行桌面模式。"</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"立即重新啟動"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"稍後重新啟動"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"空間音效"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"聲音層次豐富,讓你有身歷其境的感覺。這項功能僅支援部分媒體。"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"讓音效更真實"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"調整音效位置,讓聲音聽起來更自然。"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index bf89bf8..bc00cc9 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -5706,4 +5706,8 @@
<string name="reboot_dialog_force_desktop_mode" msgid="2021839270403432948">"Ukuqalisa kabusha kuyadingeka ukuphoqelela imodi yedeskithophu kuzibonisi zesibili."</string>
<string name="reboot_dialog_reboot_now" msgid="235616015988522355">"Qalisa manje"</string>
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Qalisa ngokuhamba kwesikhathi"</string>
+ <string name="bluetooth_details_spatial_audio_title" msgid="6183752635162309599">"Umsindo wokulalelwayo"</string>
+ <string name="bluetooth_details_spatial_audio_summary" msgid="4125762902654875180">"Umsindo ogxilile kubonakala sengathi uvela ezindaweni ezikuzungezile. Isebenza ngemidiya ethile kuphela."</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="8021583493584244700">"Yenza umsindo ube ngokoqobo kakhudlwana"</string>
+ <string name="bluetooth_details_head_tracking_summary" msgid="2093665685644696866">"Shintsha isimo somsindo ukuze uzwakale ungokwemvelo."</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 039997b..2234441 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.">
@@ -2909,7 +2909,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>
@@ -8553,6 +8557,24 @@
<!-- Setting summary for controlling how caption text display in real time [CHAR LIMIT=NONE]-->
<string name="live_caption_summary">Automatically caption media</string>
+ <!-- Output device type for the phone speaker that is available for spatializer effect. [CHAR LIMIT=NONE]-->
+ <string name="spatial_audio_speaker">Phone speaker</string>
+
+ <!-- Output device type for the wired headphones that is available for spatializer effect. [CHAR LIMIT=NONE]-->
+ <string name="spatial_audio_wired_headphones">Wired headphones</string>
+
+ <!-- Sound: Summary for the spatializer effect. [CHAR LIMIT=NONE]-->
+ <string name="spatial_audio_text">Spatial Audio creates immersive sound that seems like it’s coming from all around you. Only works with some media.</string>
+
+ <!-- Sound: Summary for the Spatial audio setting when it is off. [CHAR LIMIT=NONE]-->
+ <string name="spatial_summary_off">Off</string>
+
+ <!-- Sound: Summary for the Spatial audio setting when it is on with one output device enabled. [CHAR LIMIT=NONE]-->
+ <string name="spatial_summary_on_one">On / <xliff:g id="output device" example="Phone speaker">%1$s</xliff:g></string>
+
+ <!-- Sound: Summary for the Spatial audio setting when it is on with two output devices enabled. [CHAR LIMIT=NONE]-->
+ <string name="spatial_summary_on_two">On / <xliff:g id="output device" example="Phone speaker">%1$s</xliff:g> and <xliff:g id="output device" example="Wired headphones">%2$s</xliff:g></string>
+
<!-- Sound: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
<string name="zen_mode_settings_schedules_summary">
{count, plural,
@@ -12394,6 +12416,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/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index d79594c..f25b6ec 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -111,6 +111,15 @@
settings:keywords="@string/sound_settings"/>
<!-- Live Caption -110 and Now Playing -105-->
+
+ <!-- Spatial audio -->
+ <Preference
+ android:key="spatial_audio_summary"
+ android:title="@string/spatial_audio_title"
+ android:fragment="com.android.settings.notification.SpatialAudioSettings"
+ android:order="-107"
+ settings:controller="com.android.settings.notification.SpatialAudioParentPreferenceController"/>
+
<Preference
android:key="media_controls_summary"
android:title="@string/media_controls_title"
@@ -154,13 +163,6 @@
android:ringtoneType="alarm"
android:order="-60"/>
- <!-- Spatial audio -->
- <SwitchPreference
- android:key="spatial_audio"
- android:title="@string/spatial_audio_title"
- android:order="-55"
- settings:controller="com.android.settings.notification.SpatialAudioPreferenceController"/>
-
<!-- Dial pad tones -->
<SwitchPreference
android:key="dial_pad_tones"
diff --git a/res/xml/spatial_audio_settings.xml b/res/xml/spatial_audio_settings.xml
new file mode 100644
index 0000000..da33986
--- /dev/null
+++ b/res/xml/spatial_audio_settings.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/spatial_audio_title">
+
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="spatial_audio_top_intro"
+ android:title="@string/spatial_audio_text"
+ settings:searchable="false"/>
+
+ <SwitchPreference
+ android:key="spatial_audio"
+ android:title="@string/spatial_audio_speaker"
+ settings:controller="com.android.settings.notification.SpatialAudioPreferenceController"/>
+
+ <SwitchPreference
+ android:key="spatial_audio_wired_headphones"
+ android:title="@string/spatial_audio_wired_headphones"
+ settings:controller="com.android.settings.notification.SpatialAudioWiredHeadphonesController"/>
+
+</PreferenceScreen>
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/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/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..fb15eae 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 a6ce6fb..b8a0d22 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/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/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/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
new file mode 100644
index 0000000..80d3336
--- /dev/null
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -0,0 +1,100 @@
+/*
+ * 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.os.Bundle;
+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();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ String packageName = getIntent().getData().getSchemeSpecificPart();
+ if (TextUtils.isEmpty(packageName)) {
+ 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(packageName);
+ 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 locale) {
+ // TODO When locale is selected, this shall set per app language here.
+ finish();
+ }
+}
+
diff --git a/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
new file mode 100644
index 0000000..52eea54
--- /dev/null
+++ b/src/com/android/settings/notification/SpatialAudioParentPreferenceController.java
@@ -0,0 +1,76 @@
+/*
+ * 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.notification;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.Spatializer;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/**
+ * Parent menu summary of the Spatial audio settings
+ */
+public class SpatialAudioParentPreferenceController extends BasePreferenceController {
+ private static final String TAG = "SpatialAudioSetting";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+ private final Spatializer mSpatializer;
+ private SpatialAudioPreferenceController mSpatialAudioPreferenceController;
+ private SpatialAudioWiredHeadphonesController mSpatialAudioWiredHeadphonesController;
+
+ public SpatialAudioParentPreferenceController(Context context, String key) {
+ super(context, key);
+ AudioManager audioManager = context.getSystemService(AudioManager.class);
+ mSpatializer = audioManager.getSpatializer();
+ mSpatialAudioPreferenceController = new SpatialAudioPreferenceController(context);
+ mSpatialAudioWiredHeadphonesController = new SpatialAudioWiredHeadphonesController(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ int level = mSpatializer.getImmersiveAudioLevel();
+ if (DEBUG) {
+ Log.d(TAG, "spatialization level: " + level);
+ }
+ return level == Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE
+ ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ boolean speakerOn = mSpatialAudioPreferenceController.isAvailable()
+ && mSpatialAudioWiredHeadphonesController.isChecked();
+ boolean wiredHeadphonesOn = mSpatialAudioWiredHeadphonesController.isAvailable()
+ && mSpatialAudioWiredHeadphonesController.isChecked();
+ if (speakerOn && wiredHeadphonesOn) {
+ return mContext.getString(R.string.spatial_summary_on_two,
+ mContext.getString(R.string.spatial_audio_speaker),
+ mContext.getString(R.string.spatial_audio_wired_headphones));
+ } else if (speakerOn) {
+ return mContext.getString(R.string.spatial_summary_on_one,
+ mContext.getString(R.string.spatial_audio_speaker));
+ } else if (wiredHeadphonesOn) {
+ return mContext.getString(R.string.spatial_summary_on_one,
+ mContext.getString(R.string.spatial_audio_wired_headphones));
+ } else {
+ return mContext.getString(R.string.spatial_summary_off);
+ }
+ }
+}
diff --git a/src/com/android/settings/notification/SpatialAudioPreferenceController.java b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
index 7bca516..b9a0776 100644
--- a/src/com/android/settings/notification/SpatialAudioPreferenceController.java
+++ b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
@@ -17,46 +17,61 @@
package com.android.settings.notification;
import android.content.Context;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.Spatializer;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
/**
- * The controller of the Spatial audio setting in the SoundSettings.
+ * The controller of the Spatial audio setting for speaker in the SoundSettings.
*/
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) {
- super(context, KEY_SPATIAL_AUDIO);
+ this(context, KEY_SPATIAL_AUDIO);
+ }
+
+ public SpatialAudioPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
AudioManager audioManager = context.getSystemService(AudioManager.class);
mSpatializer = audioManager.getSpatializer();
}
@Override
public int getAvailabilityStatus() {
- return mSpatializer.getImmersiveAudioLevel() == Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE
- ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
+ return mSpatializer.isAvailableForDevice(mSpeaker) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
@Override
public boolean isChecked() {
- return mSpatializer.isEnabled();
+ return mSpatializer.getCompatibleAudioDevices().contains(mSpeaker);
}
@Override
public boolean setChecked(boolean isChecked) {
- mSpatializer.setEnabled(isChecked);
+ if (isChecked) {
+ mSpatializer.addCompatibleAudioDevice(mSpeaker);
+ } else {
+ mSpatializer.removeCompatibleAudioDevice(mSpeaker);
+ }
return isChecked == isChecked();
}
@Override
public int getSliceHighlightMenuRes() {
- return R.string.menu_key_notifications;
+ return R.string.menu_key_sound;
}
}
diff --git a/src/com/android/settings/notification/SpatialAudioSettings.java b/src/com/android/settings/notification/SpatialAudioSettings.java
new file mode 100644
index 0000000..eb68e87
--- /dev/null
+++ b/src/com/android/settings/notification/SpatialAudioSettings.java
@@ -0,0 +1,69 @@
+/*
+ * 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.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
+ */
+@SearchIndexable
+public class SpatialAudioSettings extends DashboardFragment {
+
+ private static final String TAG = "SpatialAudioSettings";
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.SETTINGS_SPATIAL_AUDIO;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.spatial_audio_settings;
+ }
+
+ @Override
+ protected String getLogTag() {
+ 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) {
+ @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
new file mode 100644
index 0000000..cd723f9
--- /dev/null
+++ b/src/com/android/settings/notification/SpatialAudioWiredHeadphonesController.java
@@ -0,0 +1,79 @@
+/*
+ * 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.notification;
+
+import android.content.Context;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioDeviceInfo;
+import android.media.AudioManager;
+import android.media.Spatializer;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * The controller of the Spatial audio setting for wired headphones in the SoundSettings.
+ */
+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);
+ mSpatializer = audioManager.getSpatializer();
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mSpatializer.isAvailableForDevice(mWiredHeadphones) ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public boolean isChecked() {
+ return mSpatializer.getCompatibleAudioDevices().contains(mWiredHeadphones);
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ if (isChecked) {
+ mSpatializer.addCompatibleAudioDevice(mWiredHeadphones);
+ } else {
+ mSpatializer.removeCompatibleAudioDevice(mWiredHeadphones);
+ }
+ return isChecked == isChecked();
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_sound;
+ }
+}
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
new file mode 100644
index 0000000..9242cf0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioParentPreferenceControllerTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.notification;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.Spatializer;
+
+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;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class SpatialAudioParentPreferenceControllerTest {
+
+ private static final String KEY = "spatial_audio_summary";
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+ @Mock
+ private AudioManager mAudioManager;
+ @Mock
+ private Spatializer mSpatializer;
+
+ private SpatialAudioParentPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
+ when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
+ when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
+ mController = new SpatialAudioParentPreferenceController(mContext, KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_levelNone_shouldReturnUnsupported() {
+ when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
+ Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_levelMultiChannel_shouldReturnAvailable() {
+ when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
+ Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
index 66d18ec..e57b897 100644
--- a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
@@ -30,7 +30,6 @@
import android.media.Spatializer;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
@@ -39,7 +38,6 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
-@Ignore("b/200896161")
@RunWith(RobolectricTestRunner.class)
public class SpatialAudioPreferenceControllerTest {
@@ -56,36 +54,36 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
- when((Object) mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
+ when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
mController = new SpatialAudioPreferenceController(mContext);
}
@Test
- public void getAvailabilityStatus_levelNone_shouldReturnUnsupported() {
- when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
- Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE);
+ public void getAvailabilityStatus_unavailable_shouldReturnUnavailable() {
+ when(mSpatializer.isAvailableForDevice(mController.mSpeaker)).thenReturn(false);
+
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
}
@Test
- public void getAvailabilityStatus_levelMultiChannel_shouldReturnAvailable() {
- when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
- Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
+ public void getAvailabilityStatus_available_shouldReturnAvailable() {
+ when(mSpatializer.isAvailableForDevice(mController.mSpeaker)).thenReturn(true);
+
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
- public void setChecked_withTrue_shouldEnableSpatializer() {
+ public void setChecked_withTrue_enablesDeviceSpatializer() {
mController.setChecked(true);
- verify(mSpatializer).setEnabled(true);
+ verify(mSpatializer).addCompatibleAudioDevice(mController.mSpeaker);
}
@Test
- public void setChecked_withFalse_shouldDisableSpatializer() {
+ public void setChecked_withFalse_disablesDeviceSpatializer() {
mController.setChecked(false);
- verify(mSpatializer).setEnabled(false);
+ verify(mSpatializer).removeCompatibleAudioDevice(mController.mSpeaker);
}
}
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java
new file mode 100644
index 0000000..29525e4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioWiredHeadphonesPreferenceControllerTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.notification;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.Spatializer;
+
+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;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class SpatialAudioWiredHeadphonesPreferenceControllerTest {
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+ @Mock
+ private AudioManager mAudioManager;
+ @Mock
+ private Spatializer mSpatializer;
+
+ private SpatialAudioWiredHeadphonesController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
+ when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
+ when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
+ mController = new SpatialAudioWiredHeadphonesController(mContext);
+ }
+
+ @Test
+ public void getAvailabilityStatus_unavailable_shouldReturnUnavailable() {
+ when(mSpatializer.isAvailableForDevice(mController.mWiredHeadphones)).thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_available_shouldReturnAvailable() {
+ when(mSpatializer.isAvailableForDevice(mController.mWiredHeadphones)).thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void setChecked_withTrue_enablesDeviceSpatializer() {
+ mController.setChecked(true);
+
+ verify(mSpatializer).addCompatibleAudioDevice(mController.mWiredHeadphones);
+ }
+
+ @Test
+ public void setChecked_withFalse_disablesDeviceSpatializer() {
+ mController.setChecked(false);
+
+ verify(mSpatializer).removeCompatibleAudioDevice(mController.mWiredHeadphones);
+ }
+}
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;
- }
- }
-}