Merge "Update string to enable transcode via MTP" into sc-dev am: 17608ff21a am: 0eebaf719e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15095781
Change-Id: I24f18d35110a9ec0748addc5fde327f7aaf2fc2e
diff --git a/Android.bp b/Android.bp
index bb9db22..24fc7e8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -73,6 +73,7 @@
"android.hardware.dumpstate-V1.0-java",
"android.hardware.dumpstate-V1.1-java",
"lottie",
+ "WifiTrackerLib",
],
libs: [
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 627421d..85cf985 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -82,6 +82,7 @@
<uses-permission android:name="android.permission.OEM_UNLOCK_STATE" />
<uses-permission android:name="android.permission.MANAGE_USER_OEM_UNLOCK_STATE" />
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
+ <uses-permission android:name="android.permission.RESTART_WIFI_SUBSYSTEM" />
<uses-permission android:name="android.permission.MANAGE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_BIOMETRIC_INTERNAL" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index f564eb5..679202b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Toeganklikheidsknoppie en -gebaar"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Gebruik tans toeganklikheidsknoppie. Die gebaar is nie beskikbaar met 3-knoppienavigasie nie."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Kry vinnig toegang tot toeganklikheidskenmerke"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Kry van enige skerm af vinnig toegang tot toeganklikheidskenmerke. \n\nGaan na toeganklikheidinstellings en kies \'n kenmerk om te begin. Tik op die kortpad en kies die toeganklikheidknoppie of -gebaar."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Kry van enige skerm af vinnig toegang tot toeganklikheidskenmerke. \n\nGaan na toeganklikheidinstellings en kies \'n kenmerk om te begin. Tik op die kortpad en kies die toeganklikheidknoppie."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Gebruik knoppie of gebaar"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Ligging"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index ccadf9f..25ceb80 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"የተደራሽነት አዝራር እና የእጅ ምልክት"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"የተደራሽነት አዝራርን መጠቀም። የእጅ ምልክቱ በባለ3-አዝራር ዳሰሳ አይገኝም።"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"የተደራሽነት ባህሪያትን በፍጥነት ይድረሱባቸው"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"የተደራሽነት ባህሪያትን ከማንኛውም ማያ ገጽ ሆነው በፍጥነት ይድረሱ። \n\nለመጀመር ወደ የተደራሽነት ቅንብሮች ይሂዱ እና አንድ ባህሪ ይምረጡ። በአቋራጩ ላይ መታ ያድርጉ እና የተደራሽነት አዝራሩን ወይም ምልክት ይምረጡ።"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"የተደራሽነት ባህሪያትን ከማንኛውም ማያ ገጽ በፍጥነት ይድረሱ። \n\nለመጀመር ወደ የተደራሽነት ቅንብሮች ይሂዱ እና አንድ ባህሪ ይምረጡ። በአቋራጩ ላይ መታ ያድርጉ እና የተደራሽነት አዝራሩን ይምረጡ።"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"አዝራርን ወይም የእጅ ምልክትን ይጠቀሙ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"አካባቢ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 38f178b..df721c1 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -2466,7 +2466,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"إيماءة وزرّ أدوات تسهيل الاستخدام"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"استخدام زرّ أدوات تسهيل الاستخدام: لا تتوفّر إيماءة التنقُّل باستخدام ثلاثة أزرار"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"الوصول السريع إلى ميزات تسهيل الاستخدام"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
+ <!-- no translation found for accessibility_button_gesture_description (2717632658372117656) -->
<skip />
<string name="accessibility_button_description" msgid="7372405202698400339">"يمكنك الوصول بسرعة إلى ميزات تسهيل الاستخدام من أي شاشة. \n\nلبدء الاستخدام، انتقِل إلى إعدادات تسهيل الاستخدام واختَر ميزة. انقر على الاختصار واختَر زر أدوات تسهيل الاستخدام."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"استخدام الزرّ أو الإيماءة"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 7c988db..fa6a81b 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"সাধ্য-সুবিধাৰ বুটাম আৰু নিৰ্দেশ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"সাধ্য-সুবিধাৰ বুটামটো ব্যৱহাৰ কৰি। ৩ টা বুটামেৰে কৰা নেভিগেশ্বনৰ বাবে নিৰ্দেশটো উপলব্ধ নহয়।"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"সাধ্য সুবিধাসমূহ ক্ষিপ্ৰতাৰে এক্সেছ কৰক"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"যিকোনো স্ক্ৰীনৰ পৰা ক্ষিপ্ৰতাৰে সাধ্য সুবিধাসমূহ এক্সেছ কৰক। \n\nআৰম্ভ কৰিবলৈ সাধ্য সুবিধাৰ ছেটিঙলৈ যাওক আৰু এটা সুবিধা বাছনি কৰক। শ্বৰ্টকাটটোত টিপক আৰু সাধ্য সুবিধাৰ বুটামটো অথবা নিৰ্দেশটো বাছনি কৰক।"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"যিকোনো স্ক্ৰীনৰ পৰা ক্ষিপ্ৰতাৰে সাধ্য সুবিধাসমূহ এক্সেছ কৰক। \n\nআৰম্ভ কৰিবলৈ সাধ্য সুবিধাৰ ছেটিঙলৈ যাওক আৰু এটা সুবিধা বাছনি কৰক। শ্বৰ্টকাটটোত টিপক আৰু সাধ্য সুবিধাৰ বুটামটো বাছনি কৰক।"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"বুটাম অথবা নিৰ্দেশ ব্যৱহাৰ কৰক"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"অৱস্থান"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 813840e..7ac36a6 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Jest və xüsusi imkanlar düyməsi"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Xüsusi imkanlar düyməsi istifadə edilir. 3 düyməli naviqasiyada jest əlçatmazdır."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Xüsusi imkanlara cəld keçid"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"İstənilən ekrandan əlçatımlılıq funksiyalarına sürətli giriş edin. \n\nBaşlamaq üçün əlçatımlılıq ayarlarına keçin və funksiya seçin. Qısayolun üzərinə toxunun və əlçatımlılıq düyməsini və ya jesti seçin."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"İstənilən pəncərədən xüsusi imkanlara cəld giriş. \n\nXüsusi imkanlar ayarlarını açıb gərəkli funksiyanı seçin. Cəld aktivləşmə vasitəsi olaraq xüsusi imkanlar düyməsini seçin."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Düymə və ya jestdən istifadə edin"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Məkan"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 6b5edcb..6830425 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -2377,8 +2377,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Dugme i pokret Pristupačnost"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Korišćenje dugmeta Pristupačnost. Pokret nije dostupan uz navigaciju pomoću 3 dugmeta."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Brzo pristupajte funkcijama pristupačnosti"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Brzo pristupajte funkcijama pristupačnosti sa bilo kog ekrana. \n\nDa biste započeli, idite u podešavanja pristupačnosti i izaberite funkciju. Dodirnite prečicu i izaberite dugme ili pokret Pristupačnost."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Brzo pristupajte funkcijama pristupačnosti sa bilo kog ekrana. \n\nDa biste započeli, idite u podešavanja pristupačnosti i izaberite funkciju. Dodirnite prečicu i izaberite dugme Pristupačnost."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Koristite dugme ili pokret"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokacija"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 105bdca..10287d8 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -2403,8 +2403,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Кнопка спец. магчымасцей; жэст"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Выкарыстанне кнопкі спецыяльных магчымасцей. Гэты жэст недаступны з 3-кнопачнай навігацыяй."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Хуткі доступ да спецыяльных магчымасцей"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Хуткі доступ да спецыяльных магчымасцей з любога экрана. \n\nКаб пачаць, адкрыйце налады спецыяльных магчымасцей і выберыце патрэбную функцыю. Націсніце ярлык і выберыце кнопку ці жэст спецыяльных магчымасцей."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Хуткі доступ да спецыяльных магчымасцей з любога экрана. \n\nКаб пачаць, адкрыйце налады спецыяльных магчымасцей і выберыце патрэбную функцыю. Націсніце ярлык і выберыце кнопку спецыяльных магчымасцей."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Скарыстаць кнопку ці жэст"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Месцазнаходжанне"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ff5f718..943546a 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Бутон и жест за достъпност"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Използване на бутона за достъпност. Жестът не е налице посредством навигиране с 3 бутона."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Бърз достъп до функциите за достъпност"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Осъществявайте бързо достъп до функциите за достъпност от всеки екран. \n\nЗа да започнете, отворете настройките за достъпност и изберете функция. Докоснете прекия път и изберете бутона или жеста за достъпност."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Осъществявайте бързо достъп до функциите за достъпност от всеки екран. \n\nЗа да започнете, отворете настройките за достъпност и изберете функция. Докоснете прекия път и изберете бутона за достъпност."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Използване на бутона или жеста"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Местоположение"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 1fd08b7..e825859 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -2373,7 +2373,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"অ্যাক্সেসিবিলিটি বোতাম & জেসচার"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"অ্যাক্সেসিবিলিটি বোতাম ব্যবহার করা। ৩টি-বোতাম দিয়ে করা নেভিগেশন এর ক্ষেত্রে জেসচারটি কাজ করবে না।"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"সহজেই অ্যাক্সেসেবিলিটি ফিচার অ্যাক্সেস করুন"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
+ <!-- no translation found for accessibility_button_gesture_description (2717632658372117656) -->
<skip />
<string name="accessibility_button_description" msgid="7372405202698400339">"যেকোনও স্ক্রিন থেকে অ্যাক্সেসেবিলিটি ফিচার সহজেই অ্যাক্সেস করুন। \n\nচালু করতে, অ্যাক্সেসেবিলিটি সেটিংসে গিয়ে একটি ফিচার বেছে নিন। শর্টকার্টে ট্যাপ করে অ্যাক্সেসেবিলিটি বোতাম বেছে নিন।"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"বোতাম বা জেসচার ব্যবহার করুন"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 03d2178..3cb8479 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -2377,8 +2377,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Dugme za pristupačnost i pokret"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Korištenje dugmeta za pristupačnost. Pokret nije dostupan s navigiranjem pomoću 3 dugmeta."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Brzo pristupite funkcijama pristupačnosti"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Brzo pristupite funkcijama pristupačnosti s bilo kojeg ekrana. \n\nDa započnete, idite u postavke pristupačnosti i odaberite funkciju. Dodirnite prečicu i odaberite dugme za pristupačnost ili pokret."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Brzo pristupite funkcijama pristupačnosti s bilo kojeg ekrana. \n\nDa započnete, idite u postavke pristupačnosti i odaberite funkciju. Dodirnite prečicu i odaberite dugme za pristupačnost."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Korištenje dugmeta ili pokreta"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokacija"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 561a327..2867712 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botó i gest d\'accessibilitat"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"S\'està utilitzant el botó d\'accessibilitat. El gest no està disponible amb la navegació amb 3 botons."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accedeix ràpidament a les funcions d\'accessibilitat"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accedeix ràpidament a les funcions d\'accessibilitat des de qualsevol pantalla. \n\nPer començar, ves a la configuració d\'accessibilitat i selecciona una funció. Toca la drecera i selecciona el botó o el gest d\'accessibilitat."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accedeix ràpidament a les funcions d\'accessibilitat des de qualsevol pantalla. \n\nPer començar, ves a la configuració d\'accessibilitat i selecciona una funció. Toca la drecera i selecciona el botó d\'accessibilitat."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Utilitza el botó o el gest"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Ubicació"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 091afba..b29f1f2 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -2401,8 +2401,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Tlačítko a gesto přístupnosti."</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Použije se tlačítko přístupnosti. Toto gesto není k dispozici u navigace třemi tlačítky."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Rychlý přístup k funkcím pro usnadnění přístupu"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Funkce pro usnadnění přístupu lze snadno používat na libovolné obrazovce. \n\nPokud chcete začít, přejděte do nastavení funkcí pro usnadnění přístupu a vyberte funkci. Klepněte na zkratku a vyberte tlačítko přístupnosti nebo gesto."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Funkce pro usnadnění přístupu lze snadno používat na libovolné obrazovce. \n\nPokud chcete začít, přejděte do nastavení funkcí pro usnadnění přístupu a vyberte funkci. Klepněte na zkratku a vyberte tlačítko přístupnosti."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Použít tlačítko nebo gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Umístění"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 8b26134..116ab69 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Knappen og bevægelsen Hjælpefunktioner"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Brug af knappen Hjælpefunktioner. Bevægelsen er ikke tilgængelig med navigation med tre knapper."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Få hurtigt adgang til hjælpefunktioner"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Få hurtigt adgang til hjælpefunktioner på enhver skærm. \n\nKom godt i gang ved at gå til indstillingerne for hjælpefunktioner og vælge en funktion. Tryk på genvejen, og vælg knappen Hjælpefunktioner eller bevægelsen for hjælpefunktioner."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Få hurtigt adgang til hjælpefunktioner på enhver skærm. \n\nKom godt i gang ved at gå til indstillingerne for hjælpefunktioner og vælge en funktion. Tryk på genvejen, og vælg knappen Hjælpefunktioner."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Brug knappen eller bevægelsen"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Placering"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 258bb2c..bc650c3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -2359,8 +2359,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Bedienungshilfen & Touch-Geste"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Schaltfläche „Bedienungshilfen“ wird verwendet. Bei Bedienung über 3 Schaltflächen ist die Touch-Geste nicht verfügbar."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Schnell auf Bedienungshilfen zugreifen"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Du kannst auf allen Bildschirmen schnell auf Bedienungshilfen zugreifen. \n\nGehe zuerst zu den Einstellungen für Bedienungshilfen und wähle eine Funktion aus. Tippe auf den Kurzbefehl und wähle die Schaltfläche „Bedienungshilfen“ aus oder nutze die entsprechende Touch-Geste."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Du kannst auf allen Bildschirmen schnell auf Bedienungshilfen zugreifen. \n\nGehe zuerst zu den Einstellungen für Bedienungshilfen und wähle eine Funktion aus. Tippe auf den Kurzbefehl und wähle die Schaltfläche „Bedienungshilfen“ aus."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Schaltfläche oder Touch-Geste verwenden"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Ort"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 9086362..ec39f1c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Κουμπί και κίνηση προσβασιμότητας"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Χρήση του κουμπιού προσβασιμότητας. Η κίνηση δεν είναι διαθέσιμη με Πλοήγηση με τρία κουμπιά."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Γρήγορη πρόσβαση σε λειτουργίες προσβασιμότητας"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Αποκτήστε γρήγορα πρόσβαση σε λειτουργίες προσβασιμότητας από οποιαδήποτε οθόνη. \n\nΓια να ξεκινήσετε, μεταβείτε στις ρυθμίσεις προσβασιμότητας και επιλέξτε μια λειτουργία. Πατήστε τη συντόμευση και επιλέξτε το κουμπί ή την κίνηση προσβασιμότητας."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Αποκτήστε γρήγορα πρόσβαση σε λειτουργίες προσβασιμότητας από οποιαδήποτε οθόνη. \n\nΓια να ξεκινήσετε, μεταβείτε στις ρυθμίσεις προσβασιμότητας και επιλέξτε μια λειτουργία. Πατήστε τη συντόμευση και επιλέξτε το κουμπί προσβασιμότητας."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Χρήση κουμπιού ή κίνησης"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Τοποθεσία"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index b71ae40..649b6ac 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -2353,7 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Accessibility button & gesture"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Using the accessibility button. The gesture isn’t available with 3-button navigation."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Quickly access accessibility features"</string>
- <string name="accessibility_button_gesture_description" msgid="2516420653060025670">"Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation."</string>
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button or gesture."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Use button or gesture"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Location"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index afb8b67..88977bb 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -2353,7 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Accessibility button & gesture"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Using the accessibility button. The gesture isn’t available with 3-button navigation."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Quickly access accessibility features"</string>
- <string name="accessibility_button_gesture_description" msgid="2516420653060025670">"Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation."</string>
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button or gesture."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Use button or gesture"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Location"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5e63533..3b40c45 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -2353,7 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Accessibility button & gesture"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Using the accessibility button. The gesture isn’t available with 3-button navigation."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Quickly access accessibility features"</string>
- <string name="accessibility_button_gesture_description" msgid="2516420653060025670">"Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation."</string>
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button or gesture."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Use button or gesture"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Location"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 6256ce1..c0e1931 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -2353,7 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Accessibility button & gesture"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Using the accessibility button. The gesture isn’t available with 3-button navigation."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Quickly access accessibility features"</string>
- <string name="accessibility_button_gesture_description" msgid="2516420653060025670">"Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation."</string>
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button or gesture."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the Accessibility button."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Use button or gesture"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Location"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index c8ce95e..2c2b41c 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -2353,7 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Accessibility button & gesture"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Using the accessibility button. The gesture isn’t available with 3-button navigation."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Quickly access accessibility features"</string>
- <string name="accessibility_button_gesture_description" msgid="2516420653060025670">"Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation."</string>
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button or gesture."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Use button or gesture"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Location"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 32223fd..a275525 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botón de accesibilidad y gestos"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Se está usando el botón de accesibilidad. El gesto no está disponible con navegación con 3 botones."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accede rápidamente a funciones de accesibilidad"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accede rápidamente a las funciones de accesibilidad desde cualquier pantalla. \n\nPara comenzar, ve a la configuración de accesibilidad y selecciona una función. Presiona la combinación de teclas y selecciona el gesto o botón de accesibilidad."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accede rápidamente a las funciones de accesibilidad desde cualquier pantalla. \n\nPara comenzar, ve a la configuración de accesibilidad y selecciona una función. Presiona la combinación de teclas y selecciona el botón de accesibilidad."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usar botón o gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Ubicación"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 28f4324..82114f4 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botón y gesto de accesibilidad"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Usando el botón Accesibilidad. El gesto no está disponible si se usa la navegación con 3 botones."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accede rápidamente a funciones de accesibilidad"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accede rápidamente a las funciones de accesibilidad desde cualquier pantalla. \n\nPara empezar, ve a los ajustes de accesibilidad y elige una función. Toca el acceso directo y selecciona el botón o el gesto de accesibilidad."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accede rápidamente a las funciones de accesibilidad desde cualquier pantalla. \n\nPara empezar, ve a los ajustes de accesibilidad y elige una función. Toca el acceso directo y selecciona el botón Accesibilidad."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usar botón o gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Ubicación"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 69d9fbb..4b9b63e 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Juurdepääsetavuse nupp ja liigutus"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Juurdepääsetavuse nupu kasutamine. Liigutus ei ole kolme nupuga navigeerimise puhul saadaval."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Kiirjuurdepääs juurdepääsufunktsioonidele"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Pääsege juurdepääsufunktsioonidele kiiresti juurde igalt kuvalt. \n\nAlustamiseks avage juurdepääsetavuse seaded ja valige funktsioon. Puudutage otseteed ja valige juurdepääsetavuse nupp või juurdepääsuliigutus."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Pääsege juurdepääsufunktsioonidele kiiresti juurde igalt kuvalt. \n\nAlustamiseks avage juurdepääsetavuse seaded ja valige funktsioon. Puudutage otseteed ja valige juurdepääsetavuse nupp."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Nupu või liigutuse kasutamine"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Asukoht"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 4df40b3..87b195d 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Erabilerraztasun-botoia eta -keinua"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Erabili erabilerraztasun-botoia. Keinuak ez du funtzionatzen hiru botoiko nabigazioarekin."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Atzitu bizkor erabilerraztasun-eginbideak"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Atzitu bizkor erabilerraztasun-eginbideak edozein pantailatan. \n\nHasteko, joan erabilerraztasun-ezarpenetara eta hautatu eginbide bat. Sakatu lasterbidea eta, jarraian, sakatu Erabilerraztasuna botoia edo keinua."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Atzitu bizkor erabilerraztasun-eginbideak edozein pantailatan. \n\nHasteko, joan erabilerraztasun-ezarpenetara eta hautatu eginbide bat. Sakatu lasterbidea eta, jarraian, sakatu Erabilerraztasuna botoia."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Erabili botoia edo keinua"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Kokapena"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 30f31aa..6457538 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"دکمه دسترسپذیری و اشاره"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"درحال استفاده از دکمه دسترسپذیری هستید. اشاره موردنظر با پیمایش ۳دکمهای دردسترس نیست."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"دسترسی سریع به ویژگیهای دسترسپذیری"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"بهسرعت از هر صفحهای به ویژگیهای دسترسپذیری دسترسی داشته باشید. \n\nبرای شروع، به تنظیمات دسترسپذیری بروید و یکی از ویژگیها را انتخاب کنید. روی میانبر ضربه بزنید و دکمه دسترسپذیری یا اشاره را انتخاب کنید."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"بهسرعت از هر صفحهای به ویژگیهای دسترسپذیری دسترسی پیدا کنید. \n\nبرای شروع، به تنظیمات دسترسپذیری بروید و یکی از ویژگیها را انتخاب کنید. روی میانبر ضربه بزنید و دکمه دسترسپذیری را انتخاب کنید."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"استفاده از دکمه یا اشاره"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"مکان"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 0811132..5f2a0c5 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Esteettömyyspainike ja ‑ele"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Esteettömyyspainikkeen käyttö. Elettä ei voi käyttää kolmen painikkeen navigoinnissa."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Avaa esteettömyysominaisuudet nopeasti"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Avaa esteettömyysominaisuudet nopeasti miltä tahansa näytöltä. \n\nSiirry ensin esteettömyysasetuksiin ja valitse ominaisuus. Napauta pikakuvaketta ja valitse esteettömyyspainike tai ‑ele."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Avaa esteettömyysominaisuudet nopeasti miltä tahansa näytöltä. \n\nSiirry ensin esteettömyysasetuksiin ja valitse ominaisuus. Napauta pikakuvaketta ja valitse esteettömyyspainike."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Käytä painiketta tai elettä"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Sijainti"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a4f1821..1cfb926 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -2356,8 +2356,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Bouton d\'accessibilité et geste"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Utilisez le bouton d\'accessibilité. Le geste n\'est pas proposé avec la navigation à trois boutons."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accès rapide aux fonctionnalités d\'accessibilité"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accédez rapidement aux fonctionnalités d\'accessibilité à partir de n\'importe quel écran. \n\nPour commencer, accédez aux paramètres d\'accessibilité et sélectionnez une fonctionnalité. Touchez le raccourci et sélectionnez le bouton d\'accessibilité ou le geste."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accédez rapidement aux fonctionnalités d\'accessibilité à partir de n\'importe quel écran. \n\nPour commencer, accédez aux paramètres d\'accessibilité et sélectionnez une fonctionnalité. Touchez le raccourci et sélectionnez le bouton d\'accessibilité."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Utiliser le bouton ou le geste"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Position"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index eab62cc..ae79ecb 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Bouton et geste Accessibilité"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Utilisation du bouton Accessibilité. Geste indisponible avec la navigation à trois boutons."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accès rapide aux fonctionnalités d\'accessibilité"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accédez rapidement aux fonctionnalités d\'accessibilité depuis n\'importe quel écran. \n\nPour commencer, allez dans les paramètres d\'accessibilité et sélectionnez une fonctionnalité. Appuyez sur le raccourci et sélectionnez le bouton ou le geste d\'accessibilité."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accédez rapidement aux fonctionnalités d\'accessibilité depuis n\'importe quel écran. \n\nPour commencer, allez dans les paramètres d\'accessibilité et sélectionnez une fonctionnalité. Appuyez sur le raccourci et sélectionnez le bouton Accessibilité."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Utiliser le bouton ou le geste"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Emplacement"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 4293fa5..086dcc9 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botón e xesto de accesibilidade"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Estás utilizando o botón Accesibilidade. O xesto non pode usarse coa navegación con 3 botóns."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accede rapidamente ás funcións de accesibilidade"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accede rapidamente ás funcións de accesibilidade desde calquera pantalla. \n\nPara comezar, selecciona unha función en Configuración de accesibilidade. Toca o atallo e selecciona o botón ou o xesto de accesibilidade."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accede rapidamente ás funcións de accesibilidade desde calquera pantalla. \n\nPara comezar, selecciona unha función en Configuración de accesibilidade. Toca o atallo e selecciona o botón de accesibilidade."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usar botón ou xesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Localización"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 2daa11e..ffd302f 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -2356,8 +2356,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ઍક્સેસિબિલિટી બટન અને સંકેત"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ઍક્સેસિબિલિટી બટનનો ઉપયોગ કરી રહ્યાં છીએ. 3-બટનથી નૅવિગેશનમાં કોઈ સંકેત ઉપલબ્ધ હોતા નથી."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ઍક્સેસિબિલિટી સુવિધાઓ ઝડપથી ઍક્સેસ કરો"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"કોઈપણ સ્ક્રીન પરથી ઍક્સેસિબિલિટી સુવિધાઓ ઝડપથી ઍક્સેસ કરો. \n\nશરૂ કરવા માટે, ઍક્સેસિબિલિટી સેટિંગ પર જાઓ અને કોઈ સુવિધા પસંદ કરો. શૉર્ટકટ પર ટૅપ કરો અને ઍક્સેસિબિલિટી બટન અથવા સંકેત પસંદ કરો."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"કોઈપણ સ્ક્રીન પરથી ઍક્સેસિબિલિટી સુવિધાઓ ઝડપથી ઍક્સેસ કરો. \n\nશરૂ કરવા માટે, ઍક્સેસિબિલિટી સેટિંગ પર જાઓ અને કોઈપણ સુવિધા પસંદ કરો. શૉર્ટકટ પર ટૅપ કરો અને ઍક્સેસિબિલિટી બટન પસંદ કરો."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"બટન અથવા સંકેતનો ઉપયોગ કરો"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"સ્થાન"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0dcc505..164f069 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"सुलभता बटन और जेस्चर (हाव-भाव)"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"सुलभता बटन का इस्तेमाल करना. तीन बटन वाले नेविगेशन का इस्तेमाल करने पर, जेस्चर काम नहीं करता."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"सुलभता सुविधाओं को फटाफट ऐक्सेस करें"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"किसी भी स्क्रीन से, सुलभता सुविधाओं को फटाफट ऐक्सेस करें. \n\nशुरू करने के लिए, सुलभता सेटिंग में जाकर कोई सुविधा चुनें. शॉर्टकट पर टैप करें और सुलभता बटन या हाथ के जेस्चर (हाव-भाव) को चुनें."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"किसी भी स्क्रीन से, सुलभता सुविधाओं को फटाफट ऐक्सेस करें. \n\nशुरू करने के लिए, सुलभता सेटिंग में जाकर कोई सुविधा चुनें. शॉर्टकट पर टैप करें और सुलभता बटन को चुनें."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"बटन या जेस्चर का इस्तेमाल करें"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"सुलभता बटन यहां दिखेगा"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b2a3737..01489aa 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -2379,8 +2379,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Gumb i pokret za Pristupačnost"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Upotreba gumba za Pristupačnost. Pokret nije dostupan uz navigaciju pomoću tri gumba."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Brz pristup značajkama pristupačnosti"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Brzo pristupite značajkama pristupačnosti s bilo kojeg zaslona. \n\nZa početak otvorite postavke pristupačnosti i odaberite značajku. Dodirnite prečac i odaberite gumb za pristupačnost ili pokret."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Brzo pristupite značajkama pristupačnosti s bilo kojeg zaslona. \n\nZa početak otvorite postavke pristupačnosti i odaberite značajku. Dodirnite prečac i odaberite gumb za pristupačnost."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Upotreba gumba ili pokreta"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokacija"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index be15c5d..6ea238d 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Kisegítő lehetőségek és kézmozdulat"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"A kisegítő lehetőségek gomb használata. Kézmozdulat nem használható háromgombos navigáció esetén."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Gyors hozzáférés a kisegítő lehetőségekhez"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Bármely képernyőn gyorsan hozzáférhet a kisegítő lehetőségekhez. \n\nA kezdéshez lépjen a kisegítő lehetőségek beállításaihoz, és válassza ki valamelyik funkciót. Koppintson a parancsikonra, majd használja a Kisegítő lehetőségek gombot vagy kézmozdulatot."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Bármely képernyőn gyorsan hozzáférhet a kisegítő lehetőségekhez. \n\nA kezdéshez lépjen a kisegítő lehetőségek beállításaihoz, és válassza ki valamelyik funkciót. Koppintson a parancsikonra, majd válassza a Kisegítő lehetőségek gombot."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Gomb vagy kézmozdulat használata"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Hely"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 2ee9cbf..65a84d7 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"«Հատուկ գործառույթներ» կոճակ և ժեստ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"«Հատուկ գործառույթներ» կոճակի օգտագործում։ Ժեստը հասանելի չէ եռակոճակ նավիգացիայի դեպքում։"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Արագ բացեք հատուկ գործառույթները"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Արագ բացեք հատուկ գործառույթները ցանկացած էկրանից։ \n\nՍկսելու համար անցեք հատուկ գործառույթների կարգավորումներ և ընտրեք անհրաժեշտ գործառույթը։ Հպեք դյուրանցմանը և ընտրեք «Հատուկ գործառույթներ» կոճակը կամ ժեստը։"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Արագ բացեք հատուկ գործառույթները ցանկացած էկրանից։ \n\nՍկսելու համար անցեք հատուկ գործառույթների կարգավորումներ ընտրեք անհրաժեշտ գործառույթը։ Հպեք դյուրանցմանը և ընտրեք «Հատուկ գործառույթներ» կոճակը։"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Օգտագործել կոճակ կամ ժեստ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Վայրը"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index cee1f92..998abc1 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Tombol & gestur aksesibilitas"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Menggunakan tombol aksesibilitas. Gestur tidak tersedia dengan navigasi 3 tombol."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Akses fitur aksesibilitas dengan cepat"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Akses fitur aksesibilitas dengan cepat dari layar mana pun. \n\nUntuk memulai, buka setelan aksesibilitas dan pilih fitur. Ketuk pintasan dan pilih tombol atau gestur aksesibilitas."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Akses fitur aksesibilitas dengan cepat dari layar mana pun. \n\nUntuk memulai, buka setelan aksesibilitas dan pilih fitur. Ketuk pintasan dan pilih tombol aksesibilitas."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Gunakan tombol atau gestur"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokasi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 347ebbe..aaf58e4 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Aðgengishnappur og bending"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Notkun aðgengishnappsins. Ekki er hægt að nota bendinguna með þriggja hnappa stjórnun."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Skjótur aðgangur að aðgengiseiginleikum"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Opnaðu aðgengiseiginleika á skjótan hátt á hvaða skjá sem er. \n\nTil að hefjast handa skaltu opna aðgengisstillingar og velja eiginleika. Ýttu á flýtileiðina og veldu aðgengishnappinn eða bendingu."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Opnaðu aðgengiseiginleika á skjótan hátt á hvaða skjá sem er. \n\nTil að hefjast handa skaltu opna aðgengisstillingar og velja eiginleika. Ýttu á flýtileiðina og veldu aðgengishnappinn."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Nota hnapp eða bendingu"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Staðsetning"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ac52f03..9593bb1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Gesto e pulsante Accessibilità"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Viene usato il pulsante Accessibilità. Gesto non disponibile con la navigazione con tre pulsanti."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accedi rapidamente alle funzioni di accessibilità"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accedi rapidamente alle funzioni di accessibilità da qualsiasi schermata. \n\nPer iniziare, vai alle impostazioni di accessibilità e seleziona una funzione. Tocca la scorciatoia e seleziona il gesto o il pulsante Accessibilità."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accedi rapidamente alle funzioni di accessibilità da qualsiasi schermata. \n\nPer iniziare, vai alle impostazioni di accessibilità e seleziona una funzione. Tocca la scorciatoia e seleziona il pulsante Accessibilità."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usa il pulsante o il gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Posizione"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 28c23f4..ae008b3 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -2403,8 +2403,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"לחצן הנגישות ותנועות"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"השימוש בלחצן הנגישות. התנועה אינה זמינה עם ניווט ב-3 לחצנים."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"גישה מהירה לתכונות נגישות"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"גישה מהירה לתכונות נגישות מכל מסך. \n\nכדי להתחיל, צריך לעבור להגדרות הנגישות ולבחור תכונה. יש להקיש על מקש הקיצור ולבחור בלחצן הנגישות או בתנועה."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"גישה מהירה לתכונות נגישות מכל מסך. \n\nכדי להתחיל, צריך לעבור להגדרות הנגישות ולבחור תכונה. יש להקיש על מקש הקיצור ולבחור את לחצן הנגישות."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"השימוש בלחצן או בתנועה"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"מיקום"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 844652e..93de127 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ユーザー補助機能ボタンと操作"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ユーザー補助機能ボタンを使用します。3 ボタン ナビゲーションでは操作は利用できません。"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ユーザー補助機能にすばやくアクセスできます"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"どの画面からでもユーザー補助機能にすばやくアクセスできます。\n\n開始するには、[ユーザー補助] の設定に移動し、機能を選択します。ショートカットをタップし、ユーザー補助機能ボタンまたは操作を選択します。"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"どの画面からでもユーザー補助機能にすばやくアクセスできます。\n\n開始するには、[ユーザー補助] の設定に移動し、機能を選択します。ショートカットをタップし、ユーザー補助機能ボタンを選択します。"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ボタンまたは操作を使用する"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"場所"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 4e024e5..ef3961f 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"მარტივი წვდომის ღილაკი და ჟესტი"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"მარტივი წვდომის ღილაკის გამოყენებისას. ჟესტი არ არის ხელმისაწვდომი 3-ღილაკიანი ნავიგაციით."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"სწრაფად შეძელით მარტივი წვდომის ფუნქციების გამოყენება"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"სწრაფად იქონიეთ წვდომა მარტივი წვდომის ფუნქციებზე ნებისმიერი ეკრანიდან. \n\nდასაწყებად გადადით მარტივი წვდომის პარამეტრებზე და აირჩიეთ რომელიმე ფუნქცია. შეეხეთ მალსახმობს და აირჩიეთ მარტივი წვდომის ღილაკი ან ჟესტი."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"სწრაფად იქონიეთ წვდომა მარტივი წვდომის ფუნქციებზე ნებისმიერი ეკრანიდან. \n\nდასაწყებად გადადით მარტივი წვდომის პარამეტრებზე და აირჩიეთ რომელიმე ფუნქცია. შეეხეთ მალსახმობს და აირჩიეთ მარტივი წვდომის ღილაკი."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"გამოიყენეთ ღილაკი ან ჟესტი"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"მდებარეობა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 55729ac..855b7a0 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Арнайы мүмкіндіктер түймесі мен қимылы"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Арнайы мүмкіндіктер түймесі қолданылуда. Бұл қимыл 3 түймемен басқарылмайды."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Арнайы мүмкіндіктерге жылдам қол жеткізу"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Арнайы мүмкіндіктерді кез келген экраннан пайдалануға болады. \n\nОл үшін арнайы мүмкіндіктер параметрлерінен қажетті функцияны таңдаңыз. Жылдам пәрменді түртіңіз де, арнайы мүмкіндіктер түймесін немесе қимылын таңдаңыз."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Арнайы мүмкіндіктерге кез келген экраннан жылдам қол жеткізуге болады. \n\nОл үшін арнайы мүмкіндіктер параметрлерінен керек функцияны таңдаңыз. Жылдам пәрменді түртіңіз де, оның түймесін таңдаңыз."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Түйме не қимылды қолдану"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Орны"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index b9d2d68..9381a0a 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ចលនា និងប៊ូតុងភាពងាយស្រួល"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ប្រើប៊ូតុងភាពងាយស្រួល។ មិនអាចប្រើចលនានេះតាមរយៈការរុករកដោយប្រើប៊ូតុង 3 បានទេ។"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ចូលប្រើមុខងារភាពងាយស្រួលបានយ៉ាងរហ័ស"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ចូលប្រើមុខងារភាពងាយស្រួលពីអេក្រង់ណាមួយបានយ៉ាងរហ័ស។ \n\nដើម្បីចាប់ផ្ដើម សូមចូលទៅកាន់ការកំណត់ភាពងាយស្រួល រួចជ្រើសរើសមុខងារ។ ចុចលើផ្លូវកាត់ រួចជ្រើសរើសប៊ូតុងភាពងាយស្រួល ឬចលនា។"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ចូលប្រើមុខងារភាពងាយស្រួលពីអេក្រង់ណាមួយបានយ៉ាងរហ័ស។ \n\nដើម្បីចាប់ផ្ដើម សូមចូលទៅកាន់ការកំណត់ភាពងាយស្រួល រួចជ្រើសរើសមុខងារ។ ចុចលើផ្លូវកាត់ រួចជ្រើសរើសប៊ូតុងភាពងាយស្រួល។"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ប្រើប៊ូតុង ឬចលនា"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ទីតាំង"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index c3640db..5b2969d 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಮತ್ತು ಗೆಸ್ಚರ್"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಬಳಸಿ. 3-ಬಟನ್ ನ್ಯಾವಿಗೇಶನ್ನ ಜೊತೆಗೆ ಗೆಸ್ಚರ್ ಲಭ್ಯವಿಲ್ಲ."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಪ್ರವೇಶಿಸಿ"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ಯಾವುದಾದರೂ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಪ್ರವೇಶಿಸಿ. \n\nಪ್ರಾರಂಭಿಸಲು, ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹೋಗಿ ಮತ್ತು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ. ಶಾರ್ಟ್ಕಟ್ನಲ್ಲಿ ಟ್ಯಾಪ್ ಮಾಡಿ ಮತ್ತು ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಅಥವಾ ಗೆಸ್ಚರ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ಯಾವುದಾದರೂ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಪ್ರವೇಶಿಸಿ. \n\nಪ್ರಾರಂಭಿಸಲು, ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹೋಗಿ ಮತ್ತು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ. ಶಾರ್ಟ್ಕಟ್ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ ಹಾಗೂ ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಆಯ್ಕೆಮಾಡಿ."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ಬಟನ್ ಅಥವಾ ಗೆಸ್ಚರ್ ಬಳಸಿ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ಸ್ಥಳ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index fdf2c87..4bbe018 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"접근성 버튼 및 동작"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"접근성 버튼을 사용하세요. 3버튼 탐색에서는 동작을 사용할 수 없습니다."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"접근성 기능에 빠르게 액세스"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"어느 화면에서나 접근성 기능에 빠르게 액세스하세요. \n\n시작하려면 접근성 설정으로 이동하여 기능을 선택합니다. 단축키를 탭하고 접근성 버튼 또는 동작을 선택합니다."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"어느 화면에서나 접근성 기능에 빠르게 액세스하세요. \n\n시작하려면 접근성 설정으로 가서 기능을 선택합니다. 단축키를 탭하고 접근성 버튼을 선택하세요."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"버튼 또는 동작 사용"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"위치"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index c52c200..87ea2a9 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Атайын мүмкүнчүлүктөр баскычы жана жаңсоо"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Атайын мүмкүнчүлүктөр баскычын колдонуңуз. Бул жаңсоо 3 баскычтуу чабыттоодо жеткиликсиз."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Атайын мүмкүнчүлүктөргө тез өтүү"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Атайын мүмкүнчүлүктөргө каалаган экрандан тез өтөсүз. \n\nБаштоо үчүн атайын мүмкүнчүлүктөрдүн жөндөөлөрүнө өтүп, функция тандаңыз. Ыкчам баскычты таптап, атайын мүмкүнчүлүктөр баскычын же жаңсоосун тандаңыз."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Атайын мүмкүнчүлүктөргө каалаган экрандан тез өтөсүз. \n\nБаштоо үчүн атайын мүмкүнчүлүктөрдүн жөндөөлөрүнө өтүп, функция тандаңыз. Ыкчам баскычты басып, атайын мүмкүнчүлүктөр баскычын тандаңыз."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Баскычты же жаңсоону колдонуу"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Жайгашкан орду"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index a57aaa4..8b48736 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ປຸ່ມການຊ່ວຍເຂົ້າເຖິງ ແລະ ທ່າທາງ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ການໃຊ້ປຸ່ມການຊ່ວຍເຂົ້າເຖິງ. ບໍ່ສາມາດໃຊ້ທ່າທາງກັບການນຳທາງແບບ 3 ປຸ່ມໄດ້."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ເຂົ້າເຖິງຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງແບບດ່ວນ"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ເຂົ້າເຖິງຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງແບບດ່ວນຈາກໜ້າຈໍໃດກໍໄດ້. \n\nເພື່ອເລີ່ມຕົ້ນ, ໃຫ້ເຂົ້າໄປການຕັ້ງຄ່າການຊ່ວຍເຂົ້າເຖິງແລ້ວເລືອກຄຸນສົມບັດໃດໜຶ່ງ. ແຕະໃສ່ທາງລັດແລ້ວເລືອກປຸ່ມ ຫຼື ທ່າທາງການຊ່ວຍເຂົ້າເຖິງ."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ເຂົ້າເຖິງຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງດ່ວນຈາກໜ້າຈໍໃດກໍໄດ້. \n\nເພື່ອເລີ່ມຕົ້ນ, ໃຫ້ໄປການຕັ້ງຄ່າການຊ່ວຍເຂົ້າເຖິງແລ້ວເລືອກຄຸນສົມບັດໃດໜຶ່ງ. ແຕະໃສ່ທາງລັດແລ້ວເລືອກປຸ່ມການຊ່ວຍເຂົ້າເຖິງ."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ໃຊ້ປຸ່ມ ຫຼື ທ່າທາງ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ສະຖານທີ່"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 13d37ff..3dd4abb 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -2401,8 +2401,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Pritaikomumo mygtukas ir gestas"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Pritaikomumo mygtuko naudojimas. Gestas nepasiekiamas naudojant naršymą 3 mygtukais."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Greitai pasiekti pritaik. neįgaliesiems funkcijas"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Sparčiai pasiekite pritaikymo neįgaliesiems funkcijas bet kuriame ekrane. \n\nJei norite pradėti, eikite į pritaikomumo nustatymus ir pasirinkite funkciją. Palieskite spartųjį klavišą ir pasirinkite pritaikomumo mygtuką arba gestą."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Greitai pasiekite pritaikymo neįgaliesiems funkcijas bet kuriame ekrane. \n\nNorėdami pradėti, eikite į pritaikomumo nustatymus ir pasirinkite funkciją. Palieskite spartųjį klavišą ir pasirinkite pritaikomumo mygtuką."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Naudoti mygtuką arba gestą"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Vieta"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 8041ad3..87c76c8 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -2377,8 +2377,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Pieejamības poga un žests"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Tiek izmantota pieejamības poga. Žests nav pieejams, izmantojot 3 pogu navigāciju."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Ātri piekļūt pieejamības funkcijām"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Ātri piekļūstiet pieejamības funkcijām no jebkura ekrāna. \n\nLai sāktu darbu, pārejiet uz pieejamības iestatījumiem un atlasiet funkciju. Pieskarieties saīsnei un atlasiet pieejamības pogu vai žestu."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Ātri piekļūstiet pieejamības funkcijām no jebkura ekrāna. \n\nLai sāktu darbu, pārejiet uz pieejamības iestatījumiem un atlasiet funkciju. Pieskarieties saīsnei un atlasiet pieejamības pogu."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Izmantot pogu vai žestu"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Atrašanās vieta"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 14b47db..6ecbd81 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Копче за пристапност и движење"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Користење на копчето за пристапност. Движењето не е достапно со навигација со 3 копчиња."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Брзо пристапувајте до функциите за пристапност"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Брзо пристапувајте до функциите за пристапност од секој екран. \n\nЗа да започнете, одете во поставките за пристапност и изберете функција. Допрете на кратенката и изберете го копчето за пристапност или движење."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Брзо пристапувајте до функциите за пристапност од секој екран. \n\nЗа да започнете, одете во поставките за пристапност и изберете функција. Допрете на кратенката и изберете го копчето за пристапност."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Користете копче или движење"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Локација"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index ff0bf71..79696e2 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ഉപയോഗസഹായി ബട്ടണും ജെസ്ച്ചറും"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ഉപയോഗസഹായി ബട്ടൺ ഉപയോഗിക്കുന്നു. 3-ബട്ടൺ നാവിഗേഷനൊപ്പം ഈ ജെസ്ച്ചർ ലഭ്യമല്ല."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ഉപയോഗസഹായി ഫീച്ചറുകൾ അതിവേഗം ആക്സസ് ചെയ്യുക"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ഏത് സ്ക്രീനിൽ നിന്നും ഉപയോഗസഹായി ഫീച്ചറുകൾ അതിവേഗം ആക്സസ് ചെയ്യൂ. \n\nആരംഭിക്കാൻ, ഉപയോഗസഹായി ക്രമീകരണത്തിലേക്ക് പോയി ഒരു ഫീച്ചർ തിരഞ്ഞെടുക്കുക. കുറുക്കുവഴിയിൽ ടാപ്പ് ചെയ്ത് ഉപയോഗസഹായി ബട്ടണോ ജെസ്ച്ചറോ തിരഞ്ഞെടുക്കുക."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ഉപയോഗസഹായി ഫീച്ചറുകൾ ഏത് സ്ക്രീനിൽ നിന്നും അതിവേഗം ആക്സസ് ചെയ്യൂ. \n\nആരംഭിക്കാൻ, ഉപയോഗസഹായി ക്രമീകരണത്തിലേക്ക് പോയി ഒരു ഫീച്ചർ തിരഞ്ഞെടുക്കുക. കുറുക്കുവഴിയിൽ ടാപ്പ് ചെയ്ത് ഉപയോഗസഹായി ബട്ടൺ തിരഞ്ഞെടുക്കുക."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ബട്ടണോ ജെസ്ച്ചറോ ഉപയോഗിക്കുക"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ലൊക്കേഷൻ"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 6b93b7d..17c622a 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Хандалтын товчлуур болон зангаа"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Хандалтын товчлуурыг ашиглаж байна. 3 товчлуурт навигацаар зангаа боломжгүй байна."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Хандалтын онцлогуудад шуурхай хандана уу"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Дурын дэлгэцээс хандалтын онцлогуудад шуурхай хандана уу. \n\nЭхлүүлэхийн тулд хандалтын тохиргоо руу очиж, онцлогийг сонгоно уу. Товчлол дээр товшиж, хандалтын товчлуур эсвэл зангааг сонгоно уу."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Дурын дэлгэцээс хандалтын онцлогуудад шуурхай хандана уу. \n\nЭхлүүлэхийн тулд хандалтын тохиргоо руу очиж, онцлогийг сонгоно уу. Товчлол дээр товшиж, хандалтын товчлуурыг сонгоно уу."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Товчлуур эсвэл зангаа ашиглах"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Байршил"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 607a33b..4afa47d 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -2357,8 +2357,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ॲक्सेसिबिलिटी बटण आणि जेश्चर"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ॲक्सेसिबिलिटी बटण वापरणे. तीन बटण नेव्हिगेशनसह जेश्चर उपलब्ध नाही."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"अॅक्सेसिबिलिटी वैशिष्ट्ये झटपट अॅक्सेस करा"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"कोणत्याही स्क्रीनवरून अॅक्सेसिबिलिटी वैशिष्ट्ये झटपट अॅक्सेस करा. \n\nसुरुवात करण्यासाठी, अॅक्सेसिबिलिटी सेटिंग्जवर जा आणि वैशिष्ट्य निवडा. शॉर्टकटवर टॅप करा आणि अॅक्सेसिबिलिटी बटण किंवा जेश्चर निवडा."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"कोणत्याही स्क्रीनवरून अॅक्सेसिबिलिटी वैशिष्ट्ये झटपट अॅक्सेस करा. \n\nसुरू करण्यासाठी, अॅक्सेसिबिलिटी सेटिंग्ज वर जा आणि वैशिष्ट्य निवडा. शॉर्टकटवर टॅप करा आणि अॅक्सेसिबिलिटी बटण निवडा."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"बटण किंवा जेश्चर वापरा"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"स्थान"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index ccde9b6..04a6196 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Butang boleh akses & gerak isyarat"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Menggunakan butang kebolehaksesan. Gerak isyarat tidak tersedia dengan navigasi 3 butang."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Akses ciri kebolehaksesan dengan cepat"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Akses ciri kebolehaksesan dengan cepat daripada mana-mana skrin. \n\nUntuk bermula, pergi ke tetapan kebolehaksesan dan pilih satu ciri. Ketik pintasan dan pilih butang kebolehaksesan atau gerak isyarat."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Akses ciri kebolehaksesan dengan cepat daripada mana-mana skrin. \n\nUntuk bermula, pergi ke tetapan kebolehaksesan dan pilih satu ciri. Ketik pada pintasan dan pilih butang kebolehaksesan."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Gunakan butang atau gerak isyarat"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokasi"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index ced7749..4b1246d 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"အများသုံးစွဲနိုင်မှု ခလုတ်နှင့် လက်ဟန်"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"အများသုံးစွဲနိုင်မှု ခလုတ်ကို သုံးနေသည်။ ခလုတ် ၃ ခုဖြင့် လမ်းညွှန်ခြင်းဖြင့် ဤလက်ဟန်ကို မရနိုင်ပါ။"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများကို အမြန်သုံးသည်"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများကို မည်သည့်ဖန်သားပြင်မှမဆို အမြန်သုံးနိုင်သည်။ \n\nစတင်ရန် အများသုံးစွဲနိုင်မှု ဆက်တင်များသို့သွား၍ ဝန်ဆောင်မှုကို ရွေးပါ။ ဖြတ်လမ်းလင့်ခ်ကို တို့ပြီး အများသုံးစွဲနိုင်မှု ခလုတ် (သို့) လက်ဟန်ကို ရွေးပါ။"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများကို မည်သည့်ဖန်သားပြင်မှမဆို အမြန်သုံးနိုင်သည်။ \n\nစတင်ရန် အများသုံးစွဲနိုင်မှု ဆက်တင်များသို့သွား၍ ဝန်ဆောင်မှုကို ရွေးပါ။ ဖြတ်လမ်းလင့်ခ်ကို တို့ပြီး အများသုံးစွဲနိုင်မှု ခလုတ်ကို ရွေးပါ။"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ခလုတ် (သို့) လက်ဟန်ကို သုံးရန်"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"တည်နေရာ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 38143be..27a0799 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Tilgjengelighet-knapp og bevegelse"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Bruk av Tilgjengelighet-knappen. Bevegelsen er ikke tilgjengelig med navigasjon med tre knapper."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Rask tilgang til tilgjengelighetsfunksjoner"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Få rask tilgang til tilgjengelighetsfunksjoner fra hvilken som helst skjerm. \n\nFor å komme i gang, gå til tilgjengelighetsinnstillingene og velg en funksjon. Trykk på snarveien og velg Tilgjengelighet-knappen eller -bevegelsen."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Få rask tilgang til tilgjengelighetsfunksjoner fra hvilken som helst skjerm. \n\nFor å komme i gang, gå til tilgjengelighetsinnstillingene og velg en funksjon. Trykk på snarveien og velg Tilgjengelighet-knappen."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Bruk knapp eller bevegelse"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Posisjon"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 2dce5cb..5f2a001 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -2356,8 +2356,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"एक्सेसिबिलिटी बटन तथा जेस्चर"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"एक्सेसिबिलिटी बटन प्रयोग गरिँदै छ। यो जेस्चर ३ बटनमार्फत गरिने नेभिगेसनका सहायताले प्रयोग गर्न मिल्दैन।"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"एक्सेसिबिलिटी सुविधा तुरुन्तै प्रयोग गर्नुहोस्"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"तपाईं जुनसुकै स्क्रिनमा भए पनि सर्वसुलभता कायम गर्ने सुविधाहरू तुरुन्तै प्रयोग गर्न सक्नुहुन्छ। \n\nसुरु गर्न सर्वसुलभतासम्बन्धी सेटिङमा जानुहोस् अनि कुनै सुविधा चयन गर्नुहोस्। सर्टकटमा ट्याप गर्नुहोस् अनि एक्सेसिबिलिटी बटन वा इसारा चयन गर्नुहोस्।"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"तपाईं जुनसुकै स्क्रिनमा भए पनि एक्सेसिबिलिटी सुविधा तुरुन्तै प्रयोग गर्न सक्नुहुन्छ। \n\nसुरु गर्न एक्सेसिबिलिटी सेटिङमा जानुहोस् अनि कुनै सुविधा चयन गर्नुहोस्। सर्टकटमा ट्याप गर्नुहोस् अनि एक्सेसिबिलिटी बटन चयन गर्नुहोस्।"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"बटन वा जेस्चर प्रयोग गर्नुहोस्"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"स्थान"</string>
diff --git a/res/values-night/themes.xml b/res/values-night/themes.xml
index fb7a3b9..3403d99 100644
--- a/res/values-night/themes.xml
+++ b/res/values-night/themes.xml
@@ -25,10 +25,6 @@
<style name="Theme.SubSettings" parent="Theme.SubSettings.Base"/>
- <style name="ThemeOverlay.SwitchBar.Settings" parent="ThemeOverlay.SwitchBar.Settings.Base">
- <item name="android:textColorPrimaryInverse">@android:color/black</item>
- </style>
-
<style name="Theme.AlertDialog.Base" parent="@style/Theme.AppCompat.DayNight.Dialog.Alert">
<item name="colorAccent">@*android:color/accent_device_default_dark</item>
<item name="android:colorError">@color/settings_dialog_colorError</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 154e0d6..12a19e8 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Toegankelijkheidsknop en -gebaar"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"De toegankelijkheidsknop gebruiken. Het gebaar is niet beschikbaar bij navigatie met 3 knoppen."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Krijg snel toegang tot toegankelijkheidsfuncties"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Krijg vanaf elk scherm snel toegang tot toegankelijkheidsfuncties. \n\nGa naar de toegankelijkheidsinstellingen en selecteer een functie om aan de slag te gaan. Tik op de snelkoppeling en selecteer de knop Toegankelijkheid of het toegankelijkheidsgebaar."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Krijg vanaf elk scherm snel toegang tot toegankelijkheidsfuncties. \n\nGa naar de toegankelijkheidsinstellingen en selecteer een functie om aan de slag te gaan. Tik op de snelkoppeling en selecteer de knop Toegankelijkheid."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Knop of gebaar gebruiken"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Locatie"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 2dd976f..a643f9d 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -2356,8 +2356,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ ଏବଂ ଜେଶ୍ଚର୍"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ ବ୍ୟବହାର କରାଯାଉଛି। 3-ବଟନ୍ ନାଭିଗେସନ୍ ମାଧ୍ୟମରେ ଜେଶ୍ଚର୍ ଉପଲବ୍ଧ ନାହିଁ।"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ଆକ୍ସେସିବିଲିଟୀ ଫିଚରକୁ ଶୀଘ୍ର ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ଯେ କୌଣସି ସ୍କ୍ରିନରୁ ଆକ୍ସେସିବିଲିଟୀ ଫିଚରଗୁଡ଼ିକୁ ଶୀଘ୍ର ଆକ୍ସେସ୍ କରନ୍ତୁ। \n\nଆରମ୍ଭ କରିବାକୁ, ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସକୁ ଯାଇ ଗୋଟିଏ ଫିଚରକୁ ଚୟନ କରନ୍ତୁ। ସର୍ଟକଟରେ ଟାପ୍ କରି ଆକ୍ସେସିବିଲିଟୀ ବଟନ କିମ୍ବା ଜେଶ୍ଚରକୁ ଚୟନ କରନ୍ତୁ।"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ଯେ କୌଣସି ସ୍କ୍ରିନରୁ ଆକ୍ସେସିବିଲିଟୀ ଫିଚରକୁ ଶୀଘ୍ର ଆକ୍ସେସ୍ କରନ୍ତୁ। \n\nଆରମ୍ଭ କରିବାକୁ, ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସକୁ ଯାଇ ଗୋଟିଏ ଫିଚରକୁ ଚୟନ କରନ୍ତୁ। ସର୍ଟକଟରେ ଟାପ୍ କରି ଆକ୍ସେସିବିଲିଟୀ ବଟନକୁ ଚୟନ କରନ୍ତୁ।"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ବଟନ୍ କିମ୍ବା ଜେଶ୍ଚର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ଲୋକେସନ୍"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 2877b9e..adcb800 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -2370,7 +2370,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ ਅਤੇ ਇਸ਼ਾਰਾ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ। ਇਸ਼ਾਰਾ 3-ਬਟਨ ਨੈਵੀਗੇਸ਼ਨ ਦੇ ਨਾਲ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੱਕ ਤੁਰੰਤ ਪਹੁੰਚ ਕਰੋ"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
+ <!-- no translation found for accessibility_button_gesture_description (2717632658372117656) -->
<skip />
<string name="accessibility_button_description" msgid="7372405202698400339">"ਕਿਸੇ ਵੀ ਸਕ੍ਰੀਨ ਤੋਂ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੱਕ ਤੁਰੰਤ ਪਹੁੰਚ ਕਰੋ। \n\nਸ਼ੁਰੂ ਕਰਨ ਲਈ, ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾ ਕੇ ਕੋਈ ਵਿਸ਼ੇਸ਼ਤਾ ਚੁਣੋ। ਸ਼ਾਰਟਕੱਟ \'ਤੇ ਟੈਪ ਕਰੋ ਅਤੇ ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ ਚੁਣੋ।"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ਬਟਨ ਜਾਂ ਇਸ਼ਾਰਾ ਵਰਤੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index edc9146..9a93f26 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -2401,8 +2401,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Przycisk i gest ułatwień dostępu"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Używam przycisku ułatwień dostępu. Ten gest nie jest dostępny w przypadku nawigacji przy użyciu 3 przycisków."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Szybki dostęp do ułatwień dostępu"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Szybko uruchamiaj ułatwienia dostępu na dowolnym ekranie. \n\nAby rozpocząć, otwórz ustawienia ułatwień dostępu i wybierz funkcję. Kliknij skrót i wybierz przycisk lub gest ułatwień dostępu."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Szybko uruchamiaj ułatwienia dostępu na dowolnym ekranie. \n\nAby rozpocząć, otwórz ustawienia ułatwień dostępu i wybierz funkcję. Kliknij skrót i wybierz przycisk ułatwień dostępu."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Użyj przycisku lub gestu"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokalizacja"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index f28d6ae..627cc65 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botão e gesto de acessibilidade"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Como usar o botão de acessibilidade. O gesto não está disponível na navegação com três botões."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Acessar rapidamente os recursos de acessibilidade"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Acesse rapidamente os recursos de acessibilidade em qualquer tela. \n\nPara começar, abra as configurações de acessibilidade e selecione um recurso. Toque no atalho e selecione o botão ou gesto de acessibilidade."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Acesse rapidamente os recursos de acessibilidade em qualquer tela. \n\nPara começar, abra as configurações de acessibilidade e selecione um recurso. Toque no atalho e selecione o botão de acessibilidade."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usar botão ou gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Local"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e1627b2..3701106 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botão e gesto de acessibilidade"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Utilizar o botão Acessibilidade. O gesto não está disponível com a navegação com 3 botões."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Aceda rapidamente às funcionalidades de acessib."</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Aceda rapidamente às funcionalidades de acessibilidade a partir de qualquer ecrã. \n\nPara começar, aceda às definições de acessibilidade e selecione uma funcionalidade. Toque no atalho e selecione o gesto ou o botão Acessibilidade."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Aceda rapidamente às funcionalidades de acessibilidade a partir de qualquer ecrã. \n\nPara começar, aceda às definições de acessibilidade e selecione uma funcionalidade. Toque no atalho e selecione o botão Acessibilidade."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Utilize o botão ou o gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Localização"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f28d6ae..627cc65 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Botão e gesto de acessibilidade"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Como usar o botão de acessibilidade. O gesto não está disponível na navegação com três botões."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Acessar rapidamente os recursos de acessibilidade"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Acesse rapidamente os recursos de acessibilidade em qualquer tela. \n\nPara começar, abra as configurações de acessibilidade e selecione um recurso. Toque no atalho e selecione o botão ou gesto de acessibilidade."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Acesse rapidamente os recursos de acessibilidade em qualquer tela. \n\nPara começar, abra as configurações de acessibilidade e selecione um recurso. Toque no atalho e selecione o botão de acessibilidade."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Usar botão ou gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Local"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 05f9df4..f282bea 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -2379,8 +2379,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Buton și gest de accesibilitate"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Folosirea butonului de accesibilitate. Gestul nu este disponibil în cazul navigării cu 3 butoane."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Accesați rapid funcțiile de accesibilitate"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Accesați rapid funcțiile de accesibilitate de pe orice ecran. \n\nPentru a începe, accesați setările pentru accesibilitate și selectați o funcție. Atingeți comanda rapidă și selectați butonul sau gestul de accesibilitate."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Accesați rapid funcțiile de accesibilitate de pe orice ecran. \n\nPentru a începe, accesați setările pentru accesibilitate și selectați o funcție. Atingeți comanda rapidă și selectați butonul de accesibilitate."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Folosiți butonul sau gestul"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Locație"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c7b4c47..39bccad 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -2401,8 +2401,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Жест и кнопка спец. возможностей"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Используется кнопка специальных возможностей. При навигации с помощью трех кнопок жест недоступен."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Быстрый доступ к специальным возможностям"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Получайте быстрый доступ к специальным возможностям из любого окна.\n\nОткройте настройки специальных возможностей и выберите нужную функцию. В качестве способа быстрого включения выберите кнопку специальных возможностей или жест."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Быстрый доступ к специальным возможностям из любого окна. \n\nОткройте настройки специальных возможностей и выберите нужную функцию. В качестве способа быстрого включения выберите кнопку специальных возможностей."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Использовать кнопку или жест"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Расположение"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 0d1d3d0..6de5c69 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"සජීවී සිරස්තල & ඉංගිතය"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ප්රවේශ්යතා බොත්තම භාවිත කිරීම. ඉංගිතය 3-බොත්තම් සංචාලනය සමඟ ලබා ගත නොහැකිය."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"ප්රවේශ්යතා විශේෂාංගවලට ඉක්මනින් ප්රවේශ වන්න"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"ඕනෑම තිරයකින් ප්රවේශ්යතා විශේෂාංගවලට ඉක්මනින් ප්රවේශ වන්න \n\nආරම්භ කිරීම සඳහා, ප්රවේශ්යතා සැකසීම් වෙත ගොස් විශේෂාංගයක් තෝරන්න. කෙටි මඟ මත තට්ටු කර ප්රවේශ්යතා බොත්තම හෝ ඉංගිතය තෝරන්න."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"ඕනෑම තිරයකින් ප්රවේශ්යතා විශේෂාංගවලට ඉක්මනින් ප්රවේශ වන්න \n\nආරම්භ කිරීම සඳහා, ප්රවේශ්යතා සැකසීම් වෙත ගොස් විශේෂාංගයක් තෝරන්න. කෙටි මඟ මත තට්ටු කර ප්රවේශ්යතා බොත්තම තෝරන්න."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"බොත්තම හෝ ඉංගිතය භාවිත කරන්න"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ස්ථානය"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index ba6aa7c..7d440db 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -2403,8 +2403,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Tlačidlo a gesto dostupnosti"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Používa sa tlačidlo dostupnosti. Pri trojtlačidlovej navigácii nie je gesto k dispozícii."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Rýchly prístup k funkciám dostupnosti"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Rýchly prístup k funkciám dostupnosti na ľubovoľnej obrazovke. \n\nZačnite prejdením do nastavení dostupnosti a vyberte funkciu. Klepnite na odkaz a vyberte tlačidlo dostupnosti alebo gesto."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Rýchly prístup k funkciám dostupnosti na ľubovoľnej obrazovke. \n\nZačnite prejdením do nastavení dostupnosti a vyberte funkciu. Klepnite na skratku a vyberte tlačidlo dostupnosti."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Použiť tlačidlo alebo gesto"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Poloha"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index f0fb8b8..a719ebf 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -2403,8 +2403,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Gumb ali poteza za funk. za ljud. s pos. potrebami"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Uporaba gumba za funkcije za ljudi s posebnimi potrebami Poteza ni na voljo pri krmarjenju s tremi gumbi."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Hiter dostop do funkcij za ljudi s posebnimi potrebami."</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Hitro dostopajte do funkcij za ljudi s posebnimi potrebami na poljubnem zaslonu. \n\nČe želite začeti, odprite nastavitve funkcij za ljudi s posebnimi potrebami in izberite funkcijo. Dotaknite se bližnjice in izberite gumb ali potezo za funkcije za ljudi s posebnimi potrebami."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Hitro dostopajte do funkcij za ljudi s posebnimi potrebami na poljubnem zaslonu. \n\nČe želite začeti, odprite nastavitve funkcij za ljudi s posebnimi potrebami in izberite funkcijo. Dotaknite se bližnjice in izberite gumb za funkcije za ljudi s posebnimi potrebami."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Uporaba gumba ali poteze"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokacija"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index fc72271..2714b1b 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Butoni dhe gjesti i qasshmërisë"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Përdorimi i butonit të qasshmërisë. Gjesti nuk ofrohet me navigimin me 3 butona."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Qasu me shpejtësi te veçoritë e qasshmërisë"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Qasu me shpejtësi në veçoritë e qasshmërisë nga çdo ekran. \n\nPër të filluar, shko te cilësimet e qasshmërisë dhe zgjidh një veçori. Trokit te shkurtorja dhe zgjidh gjestin ose butonin e qasshmërisë."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Qasu me shpejtësi në veçoritë e qasshmërisë nga çdo ekran. \n\nPër të filluar, shko te cilësimet e qasshmërisë dhe zgjidh një veçori. Trokit te shkurtorja dhe zgjidh butonin e qasshmërisë."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Përdor butonin ose gjestin"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Vendndodhja"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 685dfa9..9c963bc 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -2377,8 +2377,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Дугме и покрет Приступачност"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Коришћење дугмета Приступачност. Покрет није доступан уз навигацију помоћу 3 дугмета."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Брзо приступајте функцијама приступачности"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Брзо приступајте функцијама приступачности са било ког екрана. \n\nДа бисте започели, идите у подешавања приступачности и изаберите функцију. Додирните пречицу и изаберите дугме или покрет Приступачност."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Брзо приступајте функцијама приступачности са било ког екрана. \n\nДа бисте започели, идите у подешавања приступачности и изаберите функцију. Додирните пречицу и изаберите дугме Приступачност."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Користите дугме или покрет"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Локација"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 62bb80f..306ea82 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Tillgänglighetsknapp och rörelse"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Använda tillgänglighetsknappen. Rörelsen är inte tillgänglig med navigering med tre knappar."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Kom snabbt åt tillgänglighetsfunktioner"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Kom snabbt åt tillgänglighetsfunktioner från alla skärmar. \n\nKom igång genom att öppna tillgänglighetsinställningarna och välj en funktion. Tryck på genvägen och välj tillgänglighetsknappen eller rörelsen."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Kom snabbt åt tillgänglighetsfunktioner från alla skärmar. \n\nKom igång genom att öppna tillgänglighetsinställningarna och välj en funktion. Tryck på genvägen och välj tillgänglighetsknappen."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Använda knapp eller rörelse"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Läge"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 260cecf..d35bf82 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Ishara na kitufe cha zana za ufikivu"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Kutumia kitufe cha zana za ufikivu. Ishara haipatikani kwenye usogezaji kwa kutumia vitufe 3."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Fikia vipengele vya ufikivu haraka"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Fikia vipengele vya ufikivu haraka kwenye skrini yoyote. \n\nIli uanze, nenda kwenye mipangilio ya ufikivu na uchague kipengele. Gusa njia ya mkato na uchague kitufe cha zana za ufikivu au ishara."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Fikia vipengele vya ufikivu haraka kwenye skrini yoyote. \n\nIli uanze, nenda kwenye mipangilio ya ufikivu na uchague kipengele. Gusa njia ya mkato na uchague kitufe cha zana za ufikivu."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Tumia ishara au kitufe"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Mahali"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index d2143b7..6df6058 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"அணுகல்தன்மை பட்டன் & சைகை"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"அணுகல்தன்மை பட்டனைப் பயன்படுத்துதல். 3-பட்டன் வழிசெலுத்தலில் சைகையைப் பயன்படுத்த முடியாது."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"அணுகல்தன்மை அம்சங்களை விரைவாக அணுகலாம்"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"எந்தத் திரையிலிருந்தும் அணுகல்தன்மை அம்சங்களை விரைவாக அணுகலாம். \n\nதொடங்க, அணுகல்தன்மை அமைப்புகளுக்குச் சென்று ஓர் அம்சத்தைத் தேர்ந்தெடுங்கள். ஷார்ட்கட்டின் மீது தட்டி அணுகல்தன்மை பட்டன்/சைகையைத் தேர்ந்தெடுங்கள்."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"எந்தத் திரையிலிருந்தும் அணுகல்தன்மை அம்சங்களை விரைவாக அணுகலாம். \n\nதொடங்க, அணுகல்தன்மை அமைப்புகளுக்குச் சென்று ஓர் அம்சத்தைத் தேர்ந்தெடுங்கள். ஷார்ட்கட்டின் மீது தட்டி அணுகல்தன்மை பட்டனைத் தேர்ந்தெடுங்கள்."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"பட்டனையோ சைகையையோ பயன்படுத்துதல்"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"இடம்"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 27ae515..2c367ed 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -2373,7 +2373,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"యాక్సెసిబిలిటీ బటన్ & సంజ్ఞ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"యాక్సెసిబిలిటీ బటన్ను ఉపయోగించడం. 3-బటన్ నావిగేషన్తో సంజ్ఞ అందుబాటులో లేదు."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"యాక్సెసిబిలిటీ ఫీచర్లను త్వరగా యాక్సెస్ చేయండి"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
+ <!-- no translation found for accessibility_button_gesture_description (2717632658372117656) -->
<skip />
<string name="accessibility_button_description" msgid="7372405202698400339">"ఏ స్క్రీన్ నుండి అయినా యాక్సెసిబిలిటీ ఫీచర్లను త్వరగా యాక్సెస్ చేయండి. \n\nప్రారంభించడం కోసం, యాక్సెసిబిలిటీ సెట్టింగ్లకు వెళ్లి, ఒక ఫీచర్ను ఎంచుకోండి. షార్ట్కట్ మీద ట్యాప్ చేయండి, యాక్సెసిబిలిటీ బటన్ను ఎంచుకోండి."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"బటన్ లేదా సంజ్ఞను ఉపయోగించండి"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 01c22ad..19fbf5f 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ปุ่มและท่าทางสัมผัสการช่วยเหลือพิเศษ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"กำลังใช้ปุ่มการช่วยเหลือพิเศษ ท่าทางสัมผัสดังกล่าวใช้กับการนำทางแบบ 3 ปุ่มไม่ได้"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"เข้าถึงฟีเจอร์การช่วยเหลือพิเศษได้อย่างรวดเร็ว"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"เข้าถึงฟีเจอร์การช่วยเหลือพิเศษได้อย่างรวดเร็วจากหน้าจอใดก็ได้ \n\nหากต้องการเริ่มต้นใช้งาน ให้ไปที่การตั้งค่าการช่วยเหลือพิเศษแล้วเลือกฟีเจอร์ที่ต้องการ แตะทางลัดแล้วเลือกปุ่มการช่วยเหลือพิเศษหรือท่าทางสัมผัส"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"เข้าถึงฟีเจอร์การช่วยเหลือพิเศษได้อย่างรวดเร็วจากหน้าจอใดก็ได้ \n\nหากต้องการเริ่มต้นใช้งาน ให้ไปที่การตั้งค่าการช่วยเหลือพิเศษแล้วเลือกฟีเจอร์ที่ต้องการ แตะทางลัดแล้วเลือกปุ่มการช่วยเหลือพิเศษ"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"ใช้ปุ่มหรือท่าทางสัมผัส"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"ตำแหน่ง"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c2fc459..2438722 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Button ng accessibility at galaw"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Paggamit sa button ng accessibility. Hindi available ang galaw sa 3-button na navigaton."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Madaling i-access ang mga feature ng accessibility"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Mabilis na i-access ang mga feature ng pagiging naa-access mula sa anumang screen. \n\nPara magsimula, pumunta sa mga setting ng accessibility at pumili ng feature. I-tap ang shortcut at piliin ang button o galaw ng accessibility."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Mabilis na i-access ang mga feature sa pagiging naa-access mula sa anumang screen. \n\nPara magsimula, pumunta sa mga setting ng accessibility at pumili ng feature. I-tap ang shortcut at piliin ang button ng accessibility."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Gamitin ang button o galaw"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Lokasyon"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2f9f1fd..912774f 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Erişilebilirlik düğmesi ve hareketi"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Erişilebilirlik düğmesini kullanma. Hareket, 3 düğmeli gezinme ile kullanılamaz."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Erişilebilirlik özelliklerine hızlıca erişin"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Erişilebilirlik özelliklerine herhangi bir ekrandan hızlıca erişin. \n\nBaşlamak için erişilebilirlik ayarlarına gidip bir özellik seçin. Kısayola dokunup erişilebilirlik düğmesi veya hareketini seçin."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Erişilebilirlik özelliklerine herhangi bir ekrandan hızlıca erişin. \n\nBaşlamak için erişilebilirlik ayarlarına gidip bir özellik seçin. Kısayola dokunun ve erişilebilirlik düğmesini seçin."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Düğmeyi veya hareketi kullan"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Yer"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index bf2f40a..4dba6c7 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -2401,8 +2401,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Кнопка й жест спеціальних можливостей"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Використання кнопки спеціальних можливостей. Жест недоступний при навігації трьома кнопками."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Швидкий доступ до спеціальних можливостей"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Отримайте швидкий доступ до спеціальних можливостей із будь-якого екрана. \n\nЩоб почати, відкрийте налаштування спеціальних можливостей і виберіть потрібну функцію. У списку швидкого доступу виберіть кнопку або жест спеціальних можливостей."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Спеціальними можливостями можна швидко скористатися на будь-якому екрані. \n\nЩоб почати, відкрийте налаштування спеціальних можливостей і виберіть потрібну функцію. У списку швидкого доступу виберіть кнопку спеціальних можливостей."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Використати кнопку або жест"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Розташування"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 3512cb5..e171751 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -2353,8 +2353,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"ایکسیسبیلٹی بٹن اور اشارہ"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"ایکسیسبیلٹی بٹن کا استعمال کرنا۔ 3 بٹن والی نیویگیشن کے ساتھ اشارہ دستیاب نہیں ہوتا ہے۔"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"تیزی سے ایکسیسبیلٹی خصوصیات تک رسائی حاصل کریں"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"کسی بھی اسکرین سے تیزی سے ایکسیسبیلٹی خصوصیات تک رسائی حاصل کریں۔ \n\nشروع کرنے کے لئے، ایکسیسبیلٹی کی ترتیبات پر جائیں اور کوئی خصوصیت منتخب کریں۔ شارٹ کٹ پر تھپتھپائیں اور ایکسیسبیلٹی بٹن یا اشارہ منتخب کریں۔"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"کسی بھی اسکرین سے تیزی سے ایکسیسبیلٹی خصوصیات تک رسائی حاصل کریں۔ \n\nشروع کرنے کے لئے، ایکسیسبیلٹی کی ترتیبات پر جائیں اور خصوصیت منتخب کریں۔ شارٹ کٹ پر تھپتھپائیں اور ایکسیسبیلٹی بٹن منتخب کریں۔"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"بٹن یا اشارہ کا استعمال کریں"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"مقام"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index f932892..c168403 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Qulaylik tugmasi va ishoralar"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Qulaylik tugmasidan foydalanish. 3 tugmali navigatsiya ishora orqali ishlamaydi."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Maxsus imkoniyatlarni tez ochish"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Qulayliklar funksiyalarini istalgan ekrandan tez oching. \n\nBoshlash uchun qulayliklar sozlamalari orqali kerakli funksiyani tanlang. Yorliq ustiga bosing va qulaylik tugmasi yoki ishorasini tanlang."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Maxsus imkoniyatlarni istalgan ekrandan tez oching. \n\nBoshlash uchun maxsus imkoniyatlar sozlamalari orqali kerakli funksiyani tanlang. Yorliq ustiga bosing yoki maxsus imkoniyat tugmasini tanlang."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Tugma yoki ishoradan foydalanish"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Joylashuv"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index bce2c08..ba3749d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Nút và cử chỉ hỗ trợ tiếp cận"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Sử dụng nút hỗ trợ tiếp cận. Bạn không thể sử dụng cử chỉ này với thao tác bằng 3 nút."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Truy cập nhanh vào bộ tính năng hỗ trợ tiếp cận"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Truy cập nhanh vào bộ tính năng hỗ trợ tiếp cận trên mọi màn hình. \n\nĐể bắt đầu, hãy chuyển đến phần cài đặt hỗ trợ tiếp cận rồi chọn một tính năng. Nhấn vào phím tắt rồi chọn cử chỉ hoặc nút hỗ trợ tiếp cận."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Truy cập nhanh vào bộ tính năng hỗ trợ tiếp cận từ mọi màn hình. \n\nĐể bắt đầu, hãy chuyển đến phần cài đặt hỗ trợ tiếp cận rồi chọn một tính năng. Nhấn vào phím tắt rồi chọn nút hỗ trợ tiếp cận."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Sử dụng nút hoặc cử chỉ"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Vị trí"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 2ed6a98..ab12efc 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -2370,7 +2370,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"“无障碍”按钮和手势"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"请使用“无障碍”按钮。该手势不能与“三按钮”导航搭配使用。"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"快速使用无障碍功能"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
+ <!-- no translation found for accessibility_button_gesture_description (2717632658372117656) -->
<skip />
<string name="accessibility_button_description" msgid="7372405202698400339">"在任意屏幕上快速使用无障碍功能。\n\n如需开始使用,请转到无障碍设置并选择相应功能。点按相应快捷方式,然后选择“无障碍”按钮。"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"使用按钮或手势"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index e7fdad3..3923bc4 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -2356,8 +2356,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"無障礙工具按鈕和手勢"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"請使用無障礙功能按鈕。手勢無法與三按鈕導覽配搭使用。"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"快速使用無障礙功能"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"在任何畫面上快速使用無障礙功能。\n\n如要開始使用,請前往無障礙功能設定頁面並選擇所需功能,然後輕按快速鍵並選取無障礙功能按鈕或手勢。"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"在任何畫面上快速使用無障礙功能。\n\n如要開始使用,請前往無障礙功能設定頁面並選擇所需功能,然後輕按快速鍵並選取無障礙功能按鈕。"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"使用按鈕或手勢"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"位置"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index a772c5e..07f24b7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -2355,8 +2355,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"無障礙工具按鈕和手勢"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"請使用無障礙工具按鈕。手勢無法搭配三按鈕操作機制。"</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"快速使用無障礙功能"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"不論在哪個畫面,你都能快速使用無障礙功能。\n\n首先,請先前往無障礙設定,選取要使用的功能,然後輕觸捷徑並選取無障礙工具按鈕或手勢。"</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"不論在任何畫面中,你都能快速使用無障礙功能。\n\n首先,請前往無障礙設定頁面,選取要使用的功能,然後輕觸捷徑並選取無障礙工具按鈕。"</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"使用按鈕或手勢"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"位置"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index dd909d6..431a472 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -2354,8 +2354,7 @@
<string name="accessibility_button_gesture_title" msgid="3573456209050374139">"Inkinobho yokufinyeleleka nokuthinta"</string>
<string name="accessibility_button_intro" msgid="2601976470525277903">"Ukusebenzisa inkinobho yokufinyeleleka. Ukuthinta akutholakali ngokuzulazula kwezinkinobho ezi-3."</string>
<string name="accessibility_button_summary" msgid="8510939012631455831">"Finyelela ngokushesha izakhi zokufinyelela"</string>
- <!-- no translation found for accessibility_button_gesture_description (2516420653060025670) -->
- <skip />
+ <string name="accessibility_button_gesture_description" msgid="2717632658372117656">"Finyelela ngokushesha izakhi zokufinyelela ezivela kunoma yisiphi isikrini. \n\nUkuze uqalise, iya kumasethinig wokufinyelela bese ukhetha isakhi. Thepha isinqamuleli bese ukhetha inkinobho yokufinyelela noma ngokuthinta."</string>
<string name="accessibility_button_description" msgid="7372405202698400339">"Finyelela ngokushesha izakhi zokufinyelela ezivela kunoma yisiphi isikrini. \n\nUkuze uqalise, iya kumasethinig wokufinyelela bese ukhetha isakhi. Thepha isinqamuleli bese ukhetha inkinobho yokufinyelela."</string>
<string name="accessibility_button_or_gesture_title" msgid="3510075963401163529">"Sebenzisa inkinobho noma ukuthinta"</string>
<string name="accessibility_button_location_title" msgid="7182107846092304942">"Indawo"</string>
diff --git a/src/com/android/settings/development/tare/OWNERS b/src/com/android/settings/development/tare/OWNERS
new file mode 100644
index 0000000..46d25c8
--- /dev/null
+++ b/src/com/android/settings/development/tare/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 330055
+
+include platform/frameworks/base:/apex/jobscheduler/service/java/com/android/server/tare/OWNERS
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index c09ea02..3653baf 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -17,6 +17,7 @@
package com.android.settings.deviceinfo;
import android.app.Activity;
+import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
@@ -29,6 +30,7 @@
import android.text.TextUtils;
import android.widget.Toast;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -112,7 +114,7 @@
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return false;
}
- if (Utils.isMonkeyRunning()) {
+ if (isUserAMonkey()) {
return false;
}
// Don't enable developer options for secondary non-demo users.
@@ -245,4 +247,9 @@
Toast.LENGTH_LONG);
mDevHitToast.show();
}
+
+ @VisibleForTesting
+ protected boolean isUserAMonkey() {
+ return ActivityManager.isUserAMonkey();
+ }
}
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index abf58d8..292196e 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -133,7 +133,7 @@
}
@VisibleForTesting
- SubscriptionInfo getSubscriptionInfo(int simSlot) {
+ protected SubscriptionInfo getSubscriptionInfo(int simSlot) {
final List<SubscriptionInfo> subscriptionInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfoList != null) {
@@ -147,7 +147,7 @@
}
@VisibleForTesting
- CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
+ protected CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) {
final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext,
subscriptionInfo);
return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
@@ -155,7 +155,7 @@
}
@VisibleForTesting
- Preference createNewPreference(Context context) {
+ protected Preference createNewPreference(Context context) {
return new Preference(context);
}
}
diff --git a/src/com/android/settings/network/ActiveSubsciptionsListener.java b/src/com/android/settings/network/ActiveSubscriptionsListener.java
similarity index 97%
rename from src/com/android/settings/network/ActiveSubsciptionsListener.java
rename to src/com/android/settings/network/ActiveSubscriptionsListener.java
index 26f6441..91a4c0a 100644
--- a/src/com/android/settings/network/ActiveSubsciptionsListener.java
+++ b/src/com/android/settings/network/ActiveSubscriptionsListener.java
@@ -39,7 +39,7 @@
/**
* A listener for active subscription change
*/
-public abstract class ActiveSubsciptionsListener
+public abstract class ActiveSubscriptionsListener
extends SubscriptionManager.OnSubscriptionsChangedListener
implements AutoCloseable {
@@ -73,7 +73,7 @@
* @param looper {@code Looper} of this listener
* @param context {@code Context} of this listener
*/
- public ActiveSubsciptionsListener(Looper looper, Context context) {
+ public ActiveSubscriptionsListener(Looper looper, Context context) {
this(looper, context, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
}
@@ -84,7 +84,7 @@
* @param context {@code Context} of this listener
* @param subscriptionId for subscription on this listener
*/
- public ActiveSubsciptionsListener(Looper looper, Context context, int subscriptionId) {
+ public ActiveSubscriptionsListener(Looper looper, Context context, int subscriptionId) {
super(looper);
mLooper = looper;
mContext = context;
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 88e732a..968a408 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -68,6 +68,7 @@
import com.android.settings.wifi.AddWifiNetworkPreference;
import com.android.settings.wifi.ConfigureWifiEntryFragment;
import com.android.settings.wifi.ConnectedWifiEntryPreference;
+import com.android.settings.wifi.LongPressWifiEntryPreference;
import com.android.settings.wifi.WifiConfigUiBase2;
import com.android.settings.wifi.WifiConnectListener;
import com.android.settings.wifi.WifiDialog2;
@@ -83,7 +84,6 @@
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.wifi.LongPressWifiEntryPreference;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
index 1c3fc76..442af38 100644
--- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
+++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
@@ -189,6 +189,8 @@
if (linkInfo.isActionable()) {
helpTextView.setText(AnnotationSpan.linkify(
context.getText(R.string.private_dns_help_message), linkInfo));
+ } else {
+ helpTextView.setText("");
}
}
diff --git a/src/com/android/settings/network/ProxySubscriptionManager.java b/src/com/android/settings/network/ProxySubscriptionManager.java
index a89cc83..eb1a7d4 100644
--- a/src/com/android/settings/network/ProxySubscriptionManager.java
+++ b/src/com/android/settings/network/ProxySubscriptionManager.java
@@ -77,7 +77,7 @@
mActiveSubscriptionsListeners =
new ArrayList<OnActiveSubscriptionChangedListener>();
- mSubscriptionMonitor = new ActiveSubsciptionsListener(looper, context) {
+ mSubscriptionMonitor = new ActiveSubscriptionsListener(looper, context) {
public void onChanged() {
notifyAllListeners();
}
@@ -94,7 +94,7 @@
}
private Lifecycle mLifecycle;
- private ActiveSubsciptionsListener mSubscriptionMonitor;
+ private ActiveSubscriptionsListener mSubscriptionMonitor;
private GlobalSettingsChangeListener mAirplaneModeMonitor;
private List<OnActiveSubscriptionChangedListener> mActiveSubscriptionsListeners;
diff --git a/src/com/android/settings/network/telephony/CellInfoUtil.java b/src/com/android/settings/network/telephony/CellInfoUtil.java
index d7d2b18..63ef159 100644
--- a/src/com/android/settings/network/telephony/CellInfoUtil.java
+++ b/src/com/android/settings/network/telephony/CellInfoUtil.java
@@ -145,6 +145,8 @@
final CellIdentity cid = getCellIdentity(cellInfo);
String mcc = null;
String mnc = null;
+ CharSequence alphaLong = null;
+ CharSequence alphaShort = null;
if (cid != null) {
if (cid instanceof CellIdentityGsm) {
mcc = ((CellIdentityGsm) cid).getMccString();
@@ -162,10 +164,13 @@
mcc = ((CellIdentityNr) cid).getMccString();
mnc = ((CellIdentityNr) cid).getMncString();
}
+
+ alphaLong = cid.getOperatorAlphaLong();
+ alphaShort = cid.getOperatorAlphaShort();
}
return String.format(
"{CellType = %s, isRegistered = %b, mcc = %s, mnc = %s, alphaL = %s, alphaS = %s}",
cellType, cellInfo.isRegistered(), mcc, mnc,
- cid.getOperatorAlphaLong(), cid.getOperatorAlphaShort());
+ alphaLong, alphaShort);
}
}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index f54c18b..adf399f 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -37,7 +37,7 @@
import com.android.settings.R;
import com.android.settings.datausage.BillingCyclePreferenceController;
import com.android.settings.datausage.DataUsageSummaryPreferenceController;
-import com.android.settings.network.ActiveSubsciptionsListener;
+import com.android.settings.network.ActiveSubscriptionsListener;
import com.android.settings.network.CarrierWifiTogglePreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSubscriptionPreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceController;
@@ -74,9 +74,9 @@
private UserManager mUserManager;
private String mClickedPrefKey;
- private ActiveSubsciptionsListener mActiveSubsciptionsListener;
+ private ActiveSubscriptionsListener mActiveSubscriptionsListener;
private boolean mDropFirstSubscriptionChangeNotify;
- private int mActiveSubsciptionsListenerCount;
+ private int mActiveSubscriptionsListenerCount;
public MobileNetworkSettings() {
super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
@@ -218,8 +218,8 @@
super.onResume();
// TODO: remove log after fixing b/182326102
Log.d(LOG_TAG, "onResume() subId=" + mSubId);
- if (mActiveSubsciptionsListener == null) {
- mActiveSubsciptionsListener = new ActiveSubsciptionsListener(
+ if (mActiveSubscriptionsListener == null) {
+ mActiveSubscriptionsListener = new ActiveSubscriptionsListener(
getContext().getMainLooper(), getContext(), mSubId) {
public void onChanged() {
onSubscriptionDetailChanged();
@@ -227,7 +227,7 @@
};
mDropFirstSubscriptionChangeNotify = true;
}
- mActiveSubsciptionsListener.start();
+ mActiveSubscriptionsListener.start();
}
private void onSubscriptionDetailChanged() {
@@ -236,21 +236,21 @@
Log.d(LOG_TAG, "Callback during onResume()");
return;
}
- mActiveSubsciptionsListenerCount++;
- if (mActiveSubsciptionsListenerCount != 1) {
+ mActiveSubscriptionsListenerCount++;
+ if (mActiveSubscriptionsListenerCount != 1) {
return;
}
ThreadUtils.postOnMainThread(() -> {
- mActiveSubsciptionsListenerCount = 0;
+ mActiveSubscriptionsListenerCount = 0;
redrawPreferenceControllers();
});
}
@Override
public void onDestroy() {
- if (mActiveSubsciptionsListener != null) {
- mActiveSubsciptionsListener.stop();
+ if (mActiveSubscriptionsListener != null) {
+ mActiveSubscriptionsListener.stop();
}
super.onDestroy();
}
diff --git a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
index 3a7dc31..397bf36 100644
--- a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
+++ b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
@@ -36,6 +36,7 @@
import android.telephony.CellSignalStrength;
import android.util.Log;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.internal.telephony.OperatorInfo;
@@ -89,7 +90,8 @@
updateCell(cellinfo, CellInfoUtil.getCellIdentity(cellinfo));
}
- private void updateCell(CellInfo cellinfo, CellIdentity cellId) {
+ @VisibleForTesting
+ protected void updateCell(CellInfo cellinfo, CellIdentity cellId) {
mCellInfo = cellinfo;
mCellId = cellId;
refresh();
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 6f315be..76b6cbd 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -36,6 +36,7 @@
import android.util.Log;
import android.view.View;
+import androidx.annotation.Keep;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
@@ -56,6 +57,7 @@
/**
* "Choose network" settings UI for the Settings app.
*/
+@Keep
public class NetworkSelectSettings extends DashboardFragment {
private static final String TAG = "NetworkSelectSettings";
@@ -67,8 +69,7 @@
private static final String PREF_KEY_NETWORK_OPERATORS = "network_operators_preference";
- @VisibleForTesting
- PreferenceCategory mPreferenceCategory;
+ private PreferenceCategory mPreferenceCategory;
@VisibleForTesting
NetworkOperatorPreference mSelectedPreference;
private View mProgressHeader;
@@ -76,8 +77,7 @@
@VisibleForTesting
List<CellInfo> mCellInfoList;
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- @VisibleForTesting
- TelephonyManager mTelephonyManager;
+ private TelephonyManager mTelephonyManager;
private List<String> mForbiddenPlmns;
private boolean mShow4GForLTE = false;
private NetworkScanHelper mNetworkScanHelper;
@@ -93,28 +93,74 @@
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ onCreateInitialization();
+ }
- mUseNewApi = getContext().getResources().getBoolean(
- com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
+ @Keep
+ @VisibleForTesting
+ protected void onCreateInitialization() {
+ mUseNewApi = enableNewAutoSelectNetworkUI(getContext());
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
- mPreferenceCategory = findPreference(PREF_KEY_NETWORK_OPERATORS);
+ mPreferenceCategory = getPreferenceCategory(PREF_KEY_NETWORK_OPERATORS);
mStatusMessagePreference = new Preference(getContext());
mStatusMessagePreference.setSelectable(false);
mSelectedPreference = null;
- mTelephonyManager = getContext().getSystemService(TelephonyManager.class)
- .createForSubscriptionId(mSubId);
+ mTelephonyManager = getTelephonyManager(getContext(), mSubId);
mNetworkScanHelper = new NetworkScanHelper(
mTelephonyManager, mCallback, mNetworkScanExecutor);
- PersistableBundle bundle = ((CarrierConfigManager) getContext().getSystemService(
- Context.CARRIER_CONFIG_SERVICE)).getConfigForSubId(mSubId);
+ PersistableBundle bundle = getCarrierConfigManager(getContext())
+ .getConfigForSubId(mSubId);
if (bundle != null) {
mShow4GForLTE = bundle.getBoolean(
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL);
}
- mMetricsFeatureProvider = FeatureFactory
- .getFactory(getContext()).getMetricsFeatureProvider();
+ mMetricsFeatureProvider = getMetricsFeatureProvider(getContext());
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected boolean enableNewAutoSelectNetworkUI(Context context) {
+ return context.getResources().getBoolean(
+ com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected PreferenceCategory getPreferenceCategory(String preferenceKey) {
+ return findPreference(preferenceKey);
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected TelephonyManager getTelephonyManager(Context context, int subscriptionId) {
+ return context.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(subscriptionId);
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected CarrierConfigManager getCarrierConfigManager(Context context) {
+ return context.getSystemService(CarrierConfigManager.class);
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected MetricsFeatureProvider getMetricsFeatureProvider(Context context) {
+ return FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected boolean isPreferenceScreenEnabled() {
+ return getPreferenceScreen().isEnabled();
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected void enablePreferenceScreen(boolean enable) {
+ getPreferenceScreen().setEnabled(enable);
}
@Override
@@ -146,8 +192,9 @@
/**
* Update forbidden PLMNs from the USIM App
*/
+ @Keep
@VisibleForTesting
- void updateForbiddenPlmns() {
+ protected void updateForbiddenPlmns() {
final String[] forbiddenPlmns = mTelephonyManager.getForbiddenPlmns();
mForbiddenPlmns = forbiddenPlmns != null
? Arrays.asList(forbiddenPlmns)
@@ -182,7 +229,7 @@
setProgressBarVisible(true);
// Disable the screen until network is manually set
- getPreferenceScreen().setEnabled(false);
+ enablePreferenceScreen(false);
mRequestIdManualNetworkSelect = getNewRequestId();
mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
@@ -222,7 +269,7 @@
final boolean isSucceed = (boolean) msg.obj;
stopNetworkQuery();
setProgressBarVisible(false);
- getPreferenceScreen().setEnabled(true);
+ enablePreferenceScreen(true);
if (mSelectedPreference != null) {
mSelectedPreference.setSummary(isSucceed
@@ -233,38 +280,7 @@
}
break;
case EVENT_NETWORK_SCAN_RESULTS:
- final List<CellInfo> results = (List<CellInfo>) msg.obj;
- if (mRequestIdManualNetworkScan < mRequestIdManualNetworkSelect) {
- Log.d(TAG, "CellInfoList (drop): "
- + CellInfoUtil.cellInfoListToString(new ArrayList<>(results)));
- break;
- }
- mWaitingForNumberOfScanResults--;
- if ((mWaitingForNumberOfScanResults <= 0) && (!isResumed())) {
- stopNetworkQuery();
- }
-
- mCellInfoList = new ArrayList<>(results);
- Log.d(TAG, "CellInfoList: " + CellInfoUtil.cellInfoListToString(mCellInfoList));
- if (mCellInfoList != null && mCellInfoList.size() != 0) {
- final NetworkOperatorPreference connectedPref =
- updateAllPreferenceCategory();
- if (connectedPref != null) {
- // update selected preference instance into connected preference
- if (mSelectedPreference != null) {
- mSelectedPreference = connectedPref;
- }
- } else if (!getPreferenceScreen().isEnabled()) {
- if (connectedPref == null) {
- mSelectedPreference.setSummary(R.string.network_connecting);
- }
- }
- getPreferenceScreen().setEnabled(true);
- } else if (getPreferenceScreen().isEnabled()) {
- addMessagePreference(R.string.empty_networks_list);
- // keep showing progress bar, it will be stopped when error or completed
- setProgressBarVisible(true);
- }
+ scanResultHandler((List<CellInfo>) msg.obj);
break;
case EVENT_NETWORK_SCAN_ERROR:
@@ -277,9 +293,9 @@
if (mRequestIdManualNetworkScan < mRequestIdManualNetworkSelect) {
break;
}
- if (!getPreferenceScreen().isEnabled()) {
+ if (!isPreferenceScreenEnabled()) {
clearPreferenceSummary();
- getPreferenceScreen().setEnabled(true);
+ enablePreferenceScreen(true);
} else {
addMessagePreference(R.string.network_query_error);
}
@@ -295,9 +311,9 @@
if (mRequestIdManualNetworkScan < mRequestIdManualNetworkSelect) {
break;
}
- if (!getPreferenceScreen().isEnabled()) {
+ if (!isPreferenceScreenEnabled()) {
clearPreferenceSummary();
- getPreferenceScreen().setEnabled(true);
+ enablePreferenceScreen(true);
} else if (mCellInfoList == null) {
// In case the scan timeout before getting any results
addMessagePreference(R.string.empty_networks_list);
@@ -327,13 +343,55 @@
}
};
+ @Keep
+ @VisibleForTesting
+ protected void scanResultHandler(List<CellInfo> results) {
+ if (mRequestIdManualNetworkScan < mRequestIdManualNetworkSelect) {
+ Log.d(TAG, "CellInfoList (drop): "
+ + CellInfoUtil.cellInfoListToString(new ArrayList<>(results)));
+ return;
+ }
+ mWaitingForNumberOfScanResults--;
+ if ((mWaitingForNumberOfScanResults <= 0) && (!isResumed())) {
+ stopNetworkQuery();
+ }
+
+ mCellInfoList = new ArrayList<>(results);
+ Log.d(TAG, "CellInfoList: " + CellInfoUtil.cellInfoListToString(mCellInfoList));
+ if (mCellInfoList != null && mCellInfoList.size() != 0) {
+ final NetworkOperatorPreference connectedPref =
+ updateAllPreferenceCategory();
+ if (connectedPref != null) {
+ // update selected preference instance into connected preference
+ if (mSelectedPreference != null) {
+ mSelectedPreference = connectedPref;
+ }
+ } else if (!isPreferenceScreenEnabled()) {
+ if (connectedPref == null) {
+ mSelectedPreference.setSummary(R.string.network_connecting);
+ }
+ }
+ enablePreferenceScreen(true);
+ } else if (isPreferenceScreenEnabled()) {
+ addMessagePreference(R.string.empty_networks_list);
+ // keep showing progress bar, it will be stopped when error or completed
+ setProgressBarVisible(true);
+ }
+ }
+
+ @Keep
+ @VisibleForTesting
+ protected NetworkOperatorPreference createNetworkOperatorPreference(CellInfo cellInfo) {
+ return new NetworkOperatorPreference(getPrefContext(),
+ cellInfo, mForbiddenPlmns, mShow4GForLTE);
+ }
+
/**
* Update the content of network operators list.
*
* @return preference which shows connected
*/
- @VisibleForTesting
- NetworkOperatorPreference updateAllPreferenceCategory() {
+ private NetworkOperatorPreference updateAllPreferenceCategory() {
int numberOfPreferences = mPreferenceCategory.getPreferenceCount();
// remove unused preferences
@@ -361,8 +419,7 @@
}
if (pref == null) {
// add new preference
- pref = new NetworkOperatorPreference(getPrefContext(),
- cellInfo, mForbiddenPlmns, mShow4GForLTE);
+ pref = createNetworkOperatorPreference(cellInfo);
pref.setOrder(index);
mPreferenceCategory.addPreference(pref);
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index ee23fc3..23cdaf9 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -809,51 +809,62 @@
mUserCreatingDialog = new UserCreatingDialog(getActivity());
mUserCreatingDialog.show();
- ThreadUtils.postOnBackgroundThread(new Runnable() {
- @Override
- public void run() {
- UserInfo user;
- String username;
+ ThreadUtils.postOnBackgroundThread(new AddUserNowImpl(userType, mAddingUserName));
+ }
- synchronized (mUserLock) {
- username = mAddingUserName;
- }
+ @VisibleForTesting
+ class AddUserNowImpl implements Runnable{
+ int mUserType;
+ String mImplAddUserName;
- // Could take a few seconds
- if (userType == USER_TYPE_USER) {
- user = mUserManager.createUser(username, 0);
- } else {
- user = mUserManager.createRestrictedProfile(username);
- }
+ AddUserNowImpl(final int userType, final String addUserName) {
+ mUserType = userType;
+ mImplAddUserName = addUserName;
+ }
- synchronized (mUserLock) {
- if (user == null) {
- mAddingUser = false;
- mPendingUserIcon = null;
- mPendingUserName = null;
- ThreadUtils.postOnMainThread(() -> onUserCreationFailed());
- return;
- }
+ @Override
+ public void run() {
+ UserInfo user;
+ String username;
- Drawable newUserIcon = mPendingUserIcon;
- if (newUserIcon == null) {
- newUserIcon = UserIcons.getDefaultUserIcon(getResources(), user.id, false);
- }
- mUserManager.setUserIcon(user.id, UserIcons.convertToBitmap(newUserIcon));
+ synchronized (mUserLock) {
+ username = mImplAddUserName;
+ }
- if (userType == USER_TYPE_USER) {
- mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
- }
+ // Could take a few seconds
+ if (mUserType == USER_TYPE_USER) {
+ user = mUserManager.createUser(username, 0);
+ } else {
+ user = mUserManager.createRestrictedProfile(username);
+ }
- mHandler.sendMessage(mHandler.obtainMessage(
- MESSAGE_USER_CREATED, user.id, user.serialNumber));
-
+ synchronized (mUserLock) {
+ if (user == null) {
+ mAddingUser = false;
mPendingUserIcon = null;
mPendingUserName = null;
+ ThreadUtils.postOnMainThread(() -> onUserCreationFailed());
+ return;
}
+
+ Drawable newUserIcon = mPendingUserIcon;
+ if (newUserIcon == null) {
+ newUserIcon = UserIcons.getDefaultUserIcon(getResources(), user.id, false);
+ }
+ mUserManager.setUserIcon(user.id, UserIcons.convertToBitmap(newUserIcon));
+
+ if (mUserType == USER_TYPE_USER) {
+ mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
+ }
+
+ mHandler.sendMessage(mHandler.obtainMessage(
+ MESSAGE_USER_CREATED, user.id, user.serialNumber));
+
+ mPendingUserIcon = null;
+ mPendingUserName = null;
}
- });
- }
+ }
+ };
/**
* Erase the current user (guest) and switch to another user.
diff --git a/src/com/android/settings/wifi/ConnectedWifiEntryPreference.java b/src/com/android/settings/wifi/ConnectedWifiEntryPreference.java
index afba0d8..1c069246 100644
--- a/src/com/android/settings/wifi/ConnectedWifiEntryPreference.java
+++ b/src/com/android/settings/wifi/ConnectedWifiEntryPreference.java
@@ -22,7 +22,6 @@
import androidx.preference.PreferenceViewHolder;
import com.android.settingslib.R;
-import com.android.settingslib.wifi.LongPressWifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
/**
diff --git a/src/com/android/settings/wifi/LongPressWifiEntryPreference.java b/src/com/android/settings/wifi/LongPressWifiEntryPreference.java
new file mode 100644
index 0000000..bee92cf
--- /dev/null
+++ b/src/com/android/settings/wifi/LongPressWifiEntryPreference.java
@@ -0,0 +1,46 @@
+/*
+ * 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.wifi;
+
+import android.content.Context;
+
+import androidx.fragment.app.Fragment;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.wifitrackerlib.WifiEntry;
+
+/**
+ * WifiEntryPreference that can be long pressed.
+ */
+public class LongPressWifiEntryPreference extends WifiEntryPreference {
+
+ private final Fragment mFragment;
+
+ public LongPressWifiEntryPreference(Context context, WifiEntry wifiEntry, Fragment fragment) {
+ super(context, wifiEntry);
+ mFragment = fragment;
+ }
+
+ @Override
+ public void onBindViewHolder(final PreferenceViewHolder view) {
+ super.onBindViewHolder(view);
+ if (mFragment != null) {
+ view.itemView.setOnCreateContextMenuListener(mFragment);
+ view.itemView.setTag(this);
+ view.itemView.setLongClickable(true);
+ }
+ }
+}
diff --git a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
index 3b2669c..47eb587 100644
--- a/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiConnectionPreferenceController.java
@@ -37,7 +37,6 @@
import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;
diff --git a/src/com/android/settings/wifi/WifiEntryPreference.java b/src/com/android/settings/wifi/WifiEntryPreference.java
new file mode 100644
index 0000000..3dfeada
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiEntryPreference.java
@@ -0,0 +1,315 @@
+/*
+ * 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.wifi;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settingslib.R;
+import com.android.settingslib.Utils;
+import com.android.settingslib.wifi.WifiUtils;
+import com.android.wifitrackerlib.WifiEntry;
+
+/**
+ * Preference to display a WifiEntry in a wifi picker.
+ */
+public class WifiEntryPreference extends Preference implements WifiEntry.WifiEntryCallback,
+ View.OnClickListener {
+
+ private static final int[] STATE_SECURED = {
+ R.attr.state_encrypted
+ };
+
+ private static final int[] FRICTION_ATTRS = {
+ R.attr.wifi_friction
+ };
+
+ // These values must be kept within [WifiEntry.WIFI_LEVEL_MIN, WifiEntry.WIFI_LEVEL_MAX]
+ private static final int[] WIFI_CONNECTION_STRENGTH = {
+ R.string.accessibility_no_wifi,
+ R.string.accessibility_wifi_one_bar,
+ R.string.accessibility_wifi_two_bars,
+ R.string.accessibility_wifi_three_bars,
+ R.string.accessibility_wifi_signal_full
+ };
+
+ // StateListDrawable to display secured lock / metered "$" icon
+ @Nullable private final StateListDrawable mFrictionSld;
+ private final IconInjector mIconInjector;
+ private WifiEntry mWifiEntry;
+ private int mLevel = -1;
+ private boolean mShowX; // Shows the Wi-Fi signl icon of Pie+x when it's true.
+ private CharSequence mContentDescription;
+ private OnButtonClickListener mOnButtonClickListener;
+
+ public WifiEntryPreference(@NonNull Context context, @NonNull WifiEntry wifiEntry) {
+ this(context, wifiEntry, new IconInjector(context));
+ }
+
+ @VisibleForTesting
+ WifiEntryPreference(@NonNull Context context, @NonNull WifiEntry wifiEntry,
+ @NonNull IconInjector iconInjector) {
+ super(context);
+
+ setLayoutResource(R.layout.preference_access_point);
+ setWidgetLayoutResource(R.layout.access_point_friction_widget);
+ mFrictionSld = getFrictionStateListDrawable();
+ mWifiEntry = wifiEntry;
+ mWifiEntry.setListener(this);
+ mIconInjector = iconInjector;
+ refresh();
+ }
+
+ public WifiEntry getWifiEntry() {
+ return mWifiEntry;
+ }
+
+ @Override
+ public void onBindViewHolder(final PreferenceViewHolder view) {
+ super.onBindViewHolder(view);
+ final Drawable drawable = getIcon();
+ if (drawable != null) {
+ drawable.setLevel(mLevel);
+ }
+
+ view.itemView.setContentDescription(mContentDescription);
+
+ // Turn off divider
+ view.findViewById(R.id.two_target_divider).setVisibility(View.INVISIBLE);
+
+ // Enable the icon button when the help string in this WifiEntry is not null.
+ final ImageButton imageButton = (ImageButton) view.findViewById(R.id.icon_button);
+ final ImageView frictionImageView = (ImageView) view.findViewById(
+ R.id.friction_icon);
+ if (mWifiEntry.getHelpUriString() != null
+ && mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_DISCONNECTED) {
+ final Drawable drawablehelp = getDrawable(R.drawable.ic_help);
+ drawablehelp.setTintList(
+ Utils.getColorAttr(getContext(), android.R.attr.colorControlNormal));
+ ((ImageView) imageButton).setImageDrawable(drawablehelp);
+ imageButton.setVisibility(View.VISIBLE);
+ imageButton.setOnClickListener(this);
+ imageButton.setContentDescription(
+ getContext().getText(R.string.help_label));
+
+ if (frictionImageView != null) {
+ frictionImageView.setVisibility(View.GONE);
+ }
+ } else {
+ imageButton.setVisibility(View.GONE);
+
+ if (frictionImageView != null) {
+ frictionImageView.setVisibility(View.VISIBLE);
+ bindFrictionImage(frictionImageView);
+ }
+ }
+ }
+
+ /**
+ * Updates the title and summary; may indirectly call notifyChanged().
+ */
+ public void refresh() {
+ setTitle(mWifiEntry.getTitle());
+ final int level = mWifiEntry.getLevel();
+ final boolean showX = mWifiEntry.shouldShowXLevelIcon();
+ if (level != mLevel || showX != mShowX) {
+ mLevel = level;
+ mShowX = showX;
+ updateIcon(mShowX, mLevel);
+ notifyChanged();
+ }
+
+ setSummary(mWifiEntry.getSummary(false /* concise */));
+ mContentDescription = buildContentDescription();
+ }
+
+ /**
+ * Indicates the state of the WifiEntry has changed and clients may retrieve updates through
+ * the WifiEntry getter methods.
+ */
+ public void onUpdated() {
+ // TODO(b/70983952): Fill this method in
+ refresh();
+ }
+
+ /**
+ * Result of the connect request indicated by the WifiEntry.CONNECT_STATUS constants.
+ */
+ public void onConnectResult(int status) {
+ // TODO(b/70983952): Fill this method in
+ }
+
+ /**
+ * Result of the disconnect request indicated by the WifiEntry.DISCONNECT_STATUS constants.
+ */
+ public void onDisconnectResult(int status) {
+ // TODO(b/70983952): Fill this method in
+ }
+
+ /**
+ * Result of the forget request indicated by the WifiEntry.FORGET_STATUS constants.
+ */
+ public void onForgetResult(int status) {
+ // TODO(b/70983952): Fill this method in
+ }
+
+ /**
+ * Result of the sign-in request indecated by the WifiEntry.SIGNIN_STATUS constants
+ */
+ public void onSignInResult(int status) {
+ // TODO(b/70983952): Fill this method in
+ }
+
+ protected int getIconColorAttr() {
+ final boolean accent = (mWifiEntry.hasInternetAccess()
+ && mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED);
+ return accent ? android.R.attr.colorAccent : android.R.attr.colorControlNormal;
+ }
+
+ private void updateIcon(boolean showX, int level) {
+ if (level == -1) {
+ setIcon(null);
+ return;
+ }
+
+ final Drawable drawable = mIconInjector.getIcon(showX, level);
+ if (drawable != null) {
+ drawable.setTint(Utils.getColorAttrDefaultColor(getContext(), getIconColorAttr()));
+ setIcon(drawable);
+ } else {
+ setIcon(null);
+ }
+ }
+
+ @Nullable
+ private StateListDrawable getFrictionStateListDrawable() {
+ TypedArray frictionSld;
+ try {
+ frictionSld = getContext().getTheme().obtainStyledAttributes(FRICTION_ATTRS);
+ } catch (Resources.NotFoundException e) {
+ // Fallback for platforms that do not need friction icon resources.
+ frictionSld = null;
+ }
+ return frictionSld != null ? (StateListDrawable) frictionSld.getDrawable(0) : null;
+ }
+
+ /**
+ * Binds the friction icon drawable using a StateListDrawable.
+ *
+ * <p>Friction icons will be rebound when notifyChange() is called, and therefore
+ * do not need to be managed in refresh()</p>.
+ */
+ private void bindFrictionImage(ImageView frictionImageView) {
+ if (frictionImageView == null || mFrictionSld == null) {
+ return;
+ }
+ if ((mWifiEntry.getSecurity() != WifiEntry.SECURITY_NONE)
+ && (mWifiEntry.getSecurity() != WifiEntry.SECURITY_OWE)) {
+ mFrictionSld.setState(STATE_SECURED);
+ }
+ frictionImageView.setImageDrawable(mFrictionSld.getCurrent());
+ }
+
+ /**
+ * Helper method to generate content description string.
+ */
+ @VisibleForTesting
+ CharSequence buildContentDescription() {
+ final Context context = getContext();
+
+ CharSequence contentDescription = getTitle();
+ final CharSequence summary = getSummary();
+ if (!TextUtils.isEmpty(summary)) {
+ contentDescription = TextUtils.concat(contentDescription, ",", summary);
+ }
+ int level = mWifiEntry.getLevel();
+ if (level >= 0 && level < WIFI_CONNECTION_STRENGTH.length) {
+ contentDescription = TextUtils.concat(contentDescription, ",",
+ context.getString(WIFI_CONNECTION_STRENGTH[level]));
+ }
+ return TextUtils.concat(contentDescription, ",",
+ mWifiEntry.getSecurity() == WifiEntry.SECURITY_NONE
+ ? context.getString(R.string.accessibility_wifi_security_type_none)
+ : context.getString(R.string.accessibility_wifi_security_type_secured));
+ }
+
+
+ static class IconInjector {
+ private final Context mContext;
+
+ IconInjector(Context context) {
+ mContext = context;
+ }
+
+ public Drawable getIcon(boolean showX, int level) {
+ return mContext.getDrawable(WifiUtils.getInternetIconResource(level, showX));
+ }
+ }
+
+ /**
+ * Set listeners, who want to listen the button client event.
+ */
+ public void setOnButtonClickListener(OnButtonClickListener listener) {
+ mOnButtonClickListener = listener;
+ notifyChanged();
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (view.getId() == R.id.icon_button) {
+ if (mOnButtonClickListener != null) {
+ mOnButtonClickListener.onButtonClick(this);
+ }
+ }
+ }
+
+ /**
+ * Callback to inform the caller that the icon button is clicked.
+ */
+ public interface OnButtonClickListener {
+
+ /**
+ * Register to listen the button click event.
+ */
+ void onButtonClick(WifiEntryPreference preference);
+ }
+
+ private Drawable getDrawable(@DrawableRes int iconResId) {
+ Drawable buttonIcon = null;
+
+ try {
+ buttonIcon = getContext().getDrawable(iconResId);
+ } catch (Resources.NotFoundException exception) {
+ // Do nothing
+ }
+ return buttonIcon;
+ }
+
+}
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 75e6307..2ceb278 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -74,7 +74,6 @@
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.search.Indexable;
import com.android.settingslib.search.SearchIndexable;
-import com.android.settingslib.wifi.LongPressWifiEntryPreference;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
diff --git a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
index a017fac..61d2eb8 100644
--- a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
@@ -41,7 +41,7 @@
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.wifi.AddNetworkFragment;
-import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.settings.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.SavedNetworkTracker;
import com.android.wifitrackerlib.WifiEntry;
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java
index 1d1c801..f0841f4 100644
--- a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java
@@ -25,7 +25,7 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.settings.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import java.util.ArrayList;
diff --git a/tests/componenttests/src/com/android/settings/display/darkmode/DarkThemeScheduleComponentTest.java b/tests/componenttests/src/com/android/settings/display/darkmode/DarkThemeScheduleComponentTest.java
new file mode 100644
index 0000000..3822c82
--- /dev/null
+++ b/tests/componenttests/src/com/android/settings/display/darkmode/DarkThemeScheduleComponentTest.java
@@ -0,0 +1,145 @@
+/*
+ * 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.display.darkmode;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.Instrumentation;
+import android.app.TimePickerDialog;
+import android.app.UiModeManager;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.provider.Settings;
+import android.util.Log;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.lifecycle.Stage;
+
+import com.android.settings.testutils.CommonUtils;
+import com.android.settings.testutils.UiUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.time.LocalTime;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DarkThemeScheduleComponentTest {
+ private static final int DIALOG_START_TIME = 0;
+ private static final int DIALOG_END_TIME = 1;
+ /** The identifier for the positive button. */
+ private static final int BUTTON_POSITIVE = -1;
+ public final String TAG = this.getClass().getName();
+ private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
+
+ @Rule
+ public ActivityScenarioRule<com.android.settings.Settings.DarkThemeSettingsActivity> rule =
+ new ActivityScenarioRule<>(
+ new Intent(
+ Settings.ACTION_DARK_THEME_SETTINGS).setFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK));
+ private UiModeManager mUiModeManager;
+
+ @Before
+ public void setUp() {
+ mUiModeManager = mInstrumentation.getTargetContext().getSystemService(UiModeManager.class);
+ if (mUiModeManager.getNightMode() != UiModeManager.MODE_NIGHT_NO) {
+ mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
+ }
+ }
+
+ private void test_step_for_custom_time(int startTimeDiff, int endTimeDiff) {
+
+ ActivityScenario scenario = rule.getScenario();
+ scenario.onActivity(activity -> {
+ mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_CUSTOM);
+ Fragment f =
+ ((FragmentActivity) activity).getSupportFragmentManager().getFragments().get(0);
+ DarkModeSettingsFragment fragment = (DarkModeSettingsFragment) f;
+
+ setCustomTime(fragment, DIALOG_START_TIME, LocalTime.now().plusMinutes(startTimeDiff));
+ setCustomTime(fragment, DIALOG_END_TIME, LocalTime.now().plusMinutes(endTimeDiff));
+
+ // The night mode need to reopen the screen to trigger UI change after mode change.
+ CommonUtils.reopenScreen();
+ });
+
+ // Recreate the scenario to make sure UI apply new mode.
+ scenario.recreate();
+ scenario.onActivity(activity -> {
+ Log.d(TAG, "Activity Recreated!");
+ UiUtils.waitForActivitiesInStage(2000, Stage.RESUMED);
+ });
+ }
+
+ @Test
+ public void test_dark_mode_in_custom_time() {
+ test_step_for_custom_time(-1, 11);
+ assertThat(checkNightMode(true)).isTrue();
+ }
+
+ @Test
+ public void test_dark_mode_after_custom_time() {
+ test_step_for_custom_time(-11, -1);
+ assertThat(checkNightMode(false)).isTrue();
+ }
+
+ @Test
+ public void test_dark_mode_before_custom_time() {
+ test_step_for_custom_time(2, 20);
+ assertThat(checkNightMode(false)).isTrue();
+ }
+
+ /**
+ * Sets custom time for night mode.
+ *
+ * @param fragment The DarkModeSettingsFragment.
+ * @param dialogId Dialog id for start time or end time.
+ * @param time The time to be set.
+ */
+ private void setCustomTime(DarkModeSettingsFragment fragment, int dialogId, LocalTime time) {
+ Log.d(TAG, "Start to set custom time " + (dialogId == DIALOG_START_TIME ? "StartTime"
+ : "EndTime") + " to " + time.getHour() + ":" + time.getMinute());
+ TimePickerDialog startTimeDialog = (TimePickerDialog) fragment.onCreateDialog(dialogId);
+ startTimeDialog.updateTime(time.getHour(), time.getMinute());
+ startTimeDialog.onClick(startTimeDialog, BUTTON_POSITIVE);
+ }
+
+ private boolean checkNightMode(boolean isNightMode) {
+ int mask = (isNightMode ? Configuration.UI_MODE_NIGHT_YES : Configuration.UI_MODE_NIGHT_NO);
+ int mode = mInstrumentation.getTargetContext().getResources().getConfiguration().uiMode;
+ return (mode & mask) != 0;
+ }
+
+ @After
+ public void tearDown() {
+ Log.d(TAG, "tearDown.");
+ if (mUiModeManager.getNightMode() != UiModeManager.MODE_NIGHT_NO) {
+ mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
+ }
+ }
+}
diff --git a/tests/componenttests/src/com/android/settings/testutils/AdbUtils.java b/tests/componenttests/src/com/android/settings/testutils/AdbUtils.java
index 08eb47a..b6e3c52 100644
--- a/tests/componenttests/src/com/android/settings/testutils/AdbUtils.java
+++ b/tests/componenttests/src/com/android/settings/testutils/AdbUtils.java
@@ -17,46 +17,63 @@
package com.android.settings.testutils;
import android.os.ParcelFileDescriptor;
-import android.text.TextUtils;
-import android.util.Log;
import androidx.test.platform.app.InstrumentationRegistry;
import java.io.BufferedReader;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
-import java.util.Optional;
+import java.util.stream.Collectors;
public class AdbUtils {
+ public static String getCallerClassName() {
+ StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
+ for (int i = 1; i < stElements.length; i++) {
+ StackTraceElement ste = stElements[i];
+ if (!ste.getClassName().equals(new Object() {
+ }.getClass().getEnclosingClass().getName()) && ste.getClassName().indexOf(
+ "java.lang.Thread") != 0) {
+ return ste.getClassName();
+ }
+ }
+ return null;
+ }
+
public static boolean checkStringInAdbCommandOutput(String logTag, String command,
String prefix, String target, int timeoutInMillis) throws Exception {
long start = System.nanoTime();
+
//Sometimes the change do no reflect in adn output immediately, so need a wait and poll here
while (System.nanoTime() - start < (timeoutInMillis * 1000000)) {
- try (ParcelFileDescriptor.AutoCloseInputStream in =
- new ParcelFileDescriptor.AutoCloseInputStream(
- InstrumentationRegistry.getInstrumentation()
- .getUiAutomation()
- .executeShellCommand(command))) {
- try (BufferedReader br =
- new BufferedReader(
- new InputStreamReader(in, StandardCharsets.UTF_8))) {
- Optional<String> resultOptional = br.lines().filter(line -> {
- Log.d(logTag, line);
- return TextUtils.isEmpty(prefix) || line.contains(prefix);
- }).findFirst();
- String result = resultOptional.get();
- if (result.contains(target)) {
- return true;
- } else {
- Thread.sleep(100);
- }
- }
- } catch (Exception e) {
- throw e;
+ String result = shell(command);
+ if (result.contains(prefix == null ? "" : prefix)
+ && result.contains(target == null ? "" : target)) {
+ return true;
+ } else {
+ Thread.sleep(100);
}
}
return false;
}
+
+ public static String shell(String shellCommand) {
+ String returnValue = "";
+ try (ParcelFileDescriptor.AutoCloseInputStream in =
+ new ParcelFileDescriptor.AutoCloseInputStream(
+ InstrumentationRegistry.getInstrumentation()
+ .getUiAutomation()
+ .executeShellCommand(shellCommand))) {
+ try (BufferedReader br =
+ new BufferedReader(
+ new InputStreamReader(in, StandardCharsets.UTF_8))) {
+ returnValue = br.lines().collect(Collectors.joining());
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return returnValue;
+ }
}
diff --git a/tests/componenttests/src/com/android/settings/testutils/CommonUtils.java b/tests/componenttests/src/com/android/settings/testutils/CommonUtils.java
index 02a83fc..7cc4d2d 100644
--- a/tests/componenttests/src/com/android/settings/testutils/CommonUtils.java
+++ b/tests/componenttests/src/com/android/settings/testutils/CommonUtils.java
@@ -17,8 +17,12 @@
package com.android.settings.testutils;
import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
+import android.os.PowerManager;
+import android.os.SystemClock;
import android.util.Log;
import android.view.View;
@@ -36,6 +40,11 @@
public class CommonUtils {
private static final String TAG = CommonUtils.class.getSimpleName();
+ private static Instrumentation sInstrumentation =
+ InstrumentationRegistry.getInstrumentation();
+ private static PowerManager sPowerManager =
+ (PowerManager) sInstrumentation.getTargetContext().getSystemService(
+ Context.POWER_SERVICE);
public static void takeScreenshot(Activity activity) {
long now = System.currentTimeMillis();
@@ -106,4 +115,21 @@
return InstrumentationRegistry.getInstrumentation().getTargetContext().getResources()
.getIdentifier(name, "id", Constants.SETTINGS_PACKAGE_NAME);
}
+
+ public static void reopenScreen() {
+ sPowerManager.goToSleep(SystemClock.uptimeMillis());
+ // According to local test, we need to sleep to wait it fully processed.
+ // 1000 ms is a good value to sleep, otherwise it might cause keyDispatchingTimedOut.
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ UiUtils.waitUntilCondition(1000, () -> !sPowerManager.isInteractive());
+ sPowerManager.wakeUp(SystemClock.uptimeMillis());
+ UiUtils.waitUntilCondition(1000, () -> sPowerManager.isInteractive());
+
+ // After power on screen, need to unlock and goto home page.
+ AdbUtils.shell("input keyevent KEYCODE_MENU");
+ }
}
diff --git a/tests/componenttests/src/com/android/settings/testutils/UiUtils.java b/tests/componenttests/src/com/android/settings/testutils/UiUtils.java
index 481a7b2..d58dced 100644
--- a/tests/componenttests/src/com/android/settings/testutils/UiUtils.java
+++ b/tests/componenttests/src/com/android/settings/testutils/UiUtils.java
@@ -32,7 +32,7 @@
public class UiUtils {
private static final String TAG = "UI_UTILS";
- public static void waitUntilCondition(long timeoutInMillis, Supplier<Boolean> condition) {
+ public static boolean waitUntilCondition(long timeoutInMillis, Supplier<Boolean> condition) {
long start = System.nanoTime();
while (System.nanoTime() - start < (timeoutInMillis * 1000000)) {
try {
@@ -40,17 +40,14 @@
//findViewById when the view hierarchy is still rendering, it sometimes encounter
//null views that may exist few milliseconds before, and causes a NPE.
if (condition.get()) {
- return;
+ return true;
}
} catch (NullPointerException e) {
e.printStackTrace();
}
}
- if (System.nanoTime() - start >= (timeoutInMillis * 1000000)) {
- Log.w(TAG, "Condition not match and timeout for waiting " + timeoutInMillis + "(ms).");
- } else {
- Log.d(TAG, "Condition matched.");
- }
+ Log.w(TAG, "Condition not match and timeout for waiting " + timeoutInMillis + "(ms).");
+ return false;
}
public static boolean waitForActivitiesInStage(long timeoutInMillis, Stage stage) {
diff --git a/tests/componenttests/src/com/android/settings/users/UserSettingsComponentTest.java b/tests/componenttests/src/com/android/settings/users/UserSettingsComponentTest.java
new file mode 100644
index 0000000..b0735fb
--- /dev/null
+++ b/tests/componenttests/src/com/android/settings/users/UserSettingsComponentTest.java
@@ -0,0 +1,141 @@
+/*
+ * 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.users;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+import android.util.Log;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.settings.Settings;
+import com.android.settings.testutils.AdbUtils;
+import com.android.settings.testutils.UiUtils;
+import com.android.settingslib.utils.ThreadUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class UserSettingsComponentTest {
+ public static final int TIMEOUT = 2000;
+ private static final int USER_TYPE_RESTRICTED_PROFILE = 2;
+ public final String TAG = this.getClass().getName();
+ private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ private final ArrayList<Integer> mOriginUserIds = new ArrayList<>();
+ private final UserManager mUserManager =
+ (UserManager) mInstrumentation.getTargetContext().getSystemService("user");
+ @Rule
+ public ActivityScenarioRule<Settings.UserSettingsActivity>
+ rule = new ActivityScenarioRule<>(
+ new Intent(android.provider.Settings.ACTION_USER_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ @Before
+ public void setUp() {
+ for (UserInfo info : mUserManager.getUsers()) {
+ mOriginUserIds.add(info.id);
+ }
+
+ // Enable multiple user switch.
+ if (!mUserManager.isUserSwitcherEnabled()) {
+ android.provider.Settings.Global.putInt(
+ mInstrumentation.getTargetContext().getContentResolver(),
+ android.provider.Settings.Global.USER_SWITCHER_ENABLED, 1);
+ }
+ }
+
+ @Test
+ public void test_new_user_on_multiple_setting_page() throws IOException {
+ String randomUserName = gendrate_random_name(10);
+ ActivityScenario scenario = rule.getScenario();
+ scenario.onActivity(activity -> {
+ Fragment f =
+ ((FragmentActivity) activity).getSupportFragmentManager().getFragments().get(0);
+ UserSettings us = (UserSettings) f;
+ Log.d(TAG, "Start to add user :" + randomUserName);
+ ThreadUtils.postOnBackgroundThread(
+ us.new AddUserNowImpl(USER_TYPE_RESTRICTED_PROFILE, randomUserName));
+ });
+
+ assertThat(
+ UiUtils.waitUntilCondition(5000, () -> mUserManager.getAliveUsers().stream().filter(
+ (user) -> user.name.equals(
+ randomUserName)).findFirst().isPresent())).isTrue();
+ }
+
+ @After
+ public void tearDown() {
+ int retryNumber = 5;
+ for (int i = 0; i < retryNumber; ++i) {
+ int currentUsersCount = mUserManager.getUserCount();
+ if (currentUsersCount == mOriginUserIds.size()) {
+ break;
+ } else if (i != 0) {
+ Log.d(TAG, "[tearDown] User not fully removed. Retry #" + (i = 1) + " of total "
+ + mOriginUserIds.size());
+ }
+
+ for (UserInfo info : mUserManager.getUsers()) {
+ if (mOriginUserIds.contains(info.id)) {
+ continue;
+ }
+ Log.d(TAG, "[tearDown] Clean up user {" + info.id + "}:" + info.name);
+ try {
+ AdbUtils.shell("pm remove-user " + info.id);
+ } catch (Exception e) {
+ Log.w(TAG, "[tearDown] Error occurs while removing user. " + e.toString());
+ }
+ }
+ }
+ }
+
+ private String gendrate_random_name(int length) {
+ String seed = "abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQSTUVWXYZ";
+ Random r1 = new Random();
+ String result = "";
+ for (int i = 0; i < length; ++i) {
+ result = result + seed.charAt(r1.nextInt(seed.length() - 1));
+ }
+ if (mUserManager.getAliveUsers().stream().map(user -> user.name).collect(
+ Collectors.toList()).contains(result)) {
+ Log.d(TAG, "Name repeated! add padding 'rpt' in the end of name.");
+ result += "rpt";
+ }
+ return result;
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/development/tare/OWNERS b/tests/robotests/src/com/android/settings/development/tare/OWNERS
new file mode 100644
index 0000000..46d25c8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/tare/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 330055
+
+include platform/frameworks/base:/apex/jobscheduler/service/java/com/android/server/tare/OWNERS
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java
deleted file mode 100644
index 87dcb33..0000000
--- a/tests/robotests/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.deviceinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
-import android.accounts.Account;
-import android.content.Context;
-
-import com.android.settings.testutils.FakeFeatureFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-public class BrandedAccountPreferenceControllerTest {
-
- private Context mContext;
- private FakeFeatureFactory fakeFeatureFactory;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- fakeFeatureFactory = FakeFeatureFactory.setupForTest();
-
- }
-
- @Test
- public void isAvailable_configOn_noAccount_off() {
- final BrandedAccountPreferenceController controller =
- new BrandedAccountPreferenceController(mContext, "test_key");
- assertThat(controller.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_accountIsAvailable_on() {
- when(fakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class)))
- .thenReturn(new Account[]{new Account("fake@account.foo", "fake.reallyfake")});
-
- final BrandedAccountPreferenceController controller =
- new BrandedAccountPreferenceController(mContext, "test_key");
-
- assertThat(controller.isAvailable()).isTrue();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void isAvailable_configOff_hasAccount_off() {
- when(fakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class)))
- .thenReturn(new Account[]{new Account("fake@account.foo", "fake.reallyfake")});
-
- final BrandedAccountPreferenceController controller =
- new BrandedAccountPreferenceController(mContext, "test_key");
-
- assertThat(controller.isAvailable()).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java
deleted file mode 100644
index d705b64..0000000
--- a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.settings.deviceinfo.hardwareinfo;
-
-import static android.content.Context.CLIPBOARD_SERVICE;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.os.SystemProperties;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class HardwareRevisionPreferenceControllerTest {
-
- private Context mContext;
- private HardwareRevisionPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mController = new HardwareRevisionPreferenceController(mContext,
- "hardware_info_device_revision");
- }
-
- @Test
- public void copy_shouldCopyHardwareRevisionToClipboard() {
- final String fakeHardwareVer = "FakeVer1.0";
- SystemProperties.set("ro.boot.hardware.revision", fakeHardwareVer);
-
- mController.copy();
-
- final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(
- CLIPBOARD_SERVICE);
- final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
-
- assertThat(data.toString()).isEqualTo(fakeHardwareVer);
- }
-}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java
deleted file mode 100644
index 2106b54..0000000
--- a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.deviceinfo.hardwareinfo;
-
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.os.Build;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class SerialNumberPreferenceControllerTest {
-
- private Context mContext;
- private SerialNumberPreferenceController mController;
-
- @Before
- public void setUp() {
- mContext = RuntimeEnvironment.application;
- mController = new SerialNumberPreferenceController(mContext, "test");
- }
-
- @Test
- public void copy_shouldPutSerialNumberToClipBoard() {
- mController.copy();
-
- final ClipboardManager clipboardManager = mContext.getSystemService(ClipboardManager.class);
- final ClipData data = clipboardManager.getPrimaryClip();
-
- assertThat(data.getItemAt(0).getText().toString()).contains(Build.getSerial());
- }
-}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index 9951449..4036000 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -64,11 +64,11 @@
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.wifi.AddWifiNetworkPreference;
import com.android.settings.wifi.ConnectedWifiEntryPreference;
+import com.android.settings.wifi.LongPressWifiEntryPreference;
import com.android.settings.wifi.WifiConfigController2;
import com.android.settings.wifi.WifiDialog2;
import com.android.settingslib.connectivity.ConnectivitySubsystemsRecoveryManager;
import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.wifi.LongPressWifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;
diff --git a/tests/robotests/src/com/android/settings/network/WifiConnectionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/WifiConnectionPreferenceControllerTest.java
index ea957c3..038a292 100644
--- a/tests/robotests/src/com/android/settings/network/WifiConnectionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/WifiConnectionPreferenceControllerTest.java
@@ -34,8 +34,8 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.wifi.WifiConnectionPreferenceController;
+import com.android.settings.wifi.WifiEntryPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;
diff --git a/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
deleted file mode 100644
index 6bee38f..0000000
--- a/tests/robotests/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.telephony;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.telephony.CellIdentityLte;
-import android.telephony.CellIdentityWcdma;
-import android.telephony.CellInfoLte;
-import android.telephony.CellInfoWcdma;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceManager;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.Arrays;
-
-@RunWith(RobolectricTestRunner.class)
-public class NetworkSelectSettingsTest {
- private static final int SUB_ID = 2;
- private static final String CARRIER_NAME1 = "CarrierName1";
- private static final String CARRIER_NAME2 = "CarrierName2";
-
- @Mock
- private TelephonyManager mTelephonyManager;
- @Mock
- private SubscriptionManager mSubscriptionManager;
- @Mock
- private CellInfoWcdma mCellInfo1;
- @Mock
- private CellIdentityWcdma mCellId1;
- @Mock
- private CellInfoLte mCellInfo2;
- @Mock
- private CellIdentityLte mCellId2;
- @Mock
- private PreferenceManager mPreferenceManager;
- @Mock
- private SharedPreferences mSharedPreferences;
- private Context mContext;
-
- private PreferenceCategory mPreferenceCategory;
-
- private NetworkSelectSettings mNetworkSelectSettings;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mContext = spy(RuntimeEnvironment.application);
- when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
- when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
- when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
-
- when(mCellInfo1.isRegistered()).thenReturn(true);
- when(mCellInfo1.getCellIdentity()).thenReturn(mCellId1);
- when(mCellId1.getOperatorAlphaLong()).thenReturn(CARRIER_NAME1);
- when(mCellInfo2.isRegistered()).thenReturn(false);
- when(mCellInfo2.getCellIdentity()).thenReturn(mCellId2);
- when(mCellId2.getOperatorAlphaLong()).thenReturn(CARRIER_NAME2);
-
- doReturn(mSharedPreferences).when(mPreferenceManager).getSharedPreferences();
- mPreferenceCategory = spy(new PreferenceCategory(mContext));
- doReturn(mPreferenceManager).when(mPreferenceCategory).getPreferenceManager();
-
- mNetworkSelectSettings = spy(new NetworkSelectSettings());
- doReturn(mContext).when(mNetworkSelectSettings).getContext();
- doReturn(mPreferenceManager).when(mNetworkSelectSettings).getPreferenceManager();
- doReturn(mContext).when(mPreferenceManager).getContext();
-
- mNetworkSelectSettings.mTelephonyManager = mTelephonyManager;
- mNetworkSelectSettings.mPreferenceCategory = mPreferenceCategory;
- mNetworkSelectSettings.mCellInfoList = Arrays.asList(mCellInfo1, mCellInfo2);
- }
-
- @Test
- public void updateAllPreferenceCategory_correctOrderingPreference() {
- mNetworkSelectSettings.updateAllPreferenceCategory();
-
- assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
- final NetworkOperatorPreference preference =
- (NetworkOperatorPreference) mPreferenceCategory.getPreference(1);
- assertThat(preference.getOperatorName()).isEqualTo(mCellId2.getOperatorAlphaLong());
- }
-
- @Test
- public void updateForbiddenPlmns_forbiddenPlmnsNull_shouldNotCrash() {
- when(mTelephonyManager.getForbiddenPlmns()).thenReturn(null);
-
- // Should not Crash
- mNetworkSelectSettings.updateForbiddenPlmns();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
new file mode 100644
index 0000000..ce1b46a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
@@ -0,0 +1,255 @@
+/*
+ * 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.wifi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settingslib.R;
+import com.android.wifitrackerlib.WifiEntry;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiEntryPreferenceTest {
+
+ private Context mContext;
+
+ @Mock
+ private WifiEntry mMockWifiEntry;
+ @Mock
+ private WifiEntryPreference.IconInjector mMockIconInjector;
+
+ @Mock
+ private Drawable mMockDrawable0;
+ @Mock
+ private Drawable mMockDrawable1;
+ @Mock
+ private Drawable mMockDrawable2;
+ @Mock
+ private Drawable mMockDrawable3;
+ @Mock
+ private Drawable mMockDrawable4;
+
+ @Mock
+ private Drawable mMockShowXDrawable0;
+ @Mock
+ private Drawable mMockShowXDrawable1;
+ @Mock
+ private Drawable mMockShowXDrawable2;
+ @Mock
+ private Drawable mMockShowXDrawable3;
+ @Mock
+ private Drawable mMockShowXDrawable4;
+
+ private static final String MOCK_TITLE = "title";
+ private static final String MOCK_SUMMARY = "summary";
+ private static final String FAKE_URI_STRING = "fakeuri";
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+
+ MockitoAnnotations.initMocks(this);
+
+ when(mMockWifiEntry.getTitle()).thenReturn(MOCK_TITLE);
+ when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(MOCK_SUMMARY);
+
+ when(mMockIconInjector.getIcon(false /* showX */, 0)).thenReturn(mMockDrawable0);
+ when(mMockIconInjector.getIcon(false /* showX */, 1)).thenReturn(mMockDrawable1);
+ when(mMockIconInjector.getIcon(false /* showX */, 2)).thenReturn(mMockDrawable2);
+ when(mMockIconInjector.getIcon(false /* showX */, 3)).thenReturn(mMockDrawable3);
+ when(mMockIconInjector.getIcon(false /* showX */, 4)).thenReturn(mMockDrawable4);
+
+ when(mMockIconInjector.getIcon(true /* showX */, 0))
+ .thenReturn(mMockShowXDrawable0);
+ when(mMockIconInjector.getIcon(true /* showX */, 1))
+ .thenReturn(mMockShowXDrawable1);
+ when(mMockIconInjector.getIcon(true /* showX */, 2))
+ .thenReturn(mMockShowXDrawable2);
+ when(mMockIconInjector.getIcon(true /* showX */, 3))
+ .thenReturn(mMockShowXDrawable3);
+ when(mMockIconInjector.getIcon(true /* showX */, 4))
+ .thenReturn(mMockShowXDrawable4);
+ }
+
+ @Test
+ public void constructor_shouldSetWifiEntryTitleAndSummary() {
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+
+ assertThat(pref.getTitle()).isEqualTo(MOCK_TITLE);
+ assertThat(pref.getSummary()).isEqualTo(MOCK_SUMMARY);
+ assertThat(false).isTrue();
+ }
+
+ @Test
+ public void constructor_shouldSetIcon() {
+ when(mMockWifiEntry.getLevel()).thenReturn(0);
+
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+
+ assertThat(pref.getIcon()).isEqualTo(mMockDrawable0);
+ }
+
+ @Test
+ public void titleChanged_refresh_shouldUpdateTitle() {
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final String updatedTitle = "updated title";
+ when(mMockWifiEntry.getTitle()).thenReturn(updatedTitle);
+
+ pref.refresh();
+
+ assertThat(pref.getTitle()).isEqualTo(updatedTitle);
+ }
+
+ @Test
+ public void summaryChanged_refresh_shouldUpdateSummary() {
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final String updatedSummary = "updated summary";
+ when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(updatedSummary);
+
+ pref.refresh();
+
+ assertThat(pref.getSummary()).isEqualTo(updatedSummary);
+ }
+
+ @Test
+ public void levelChanged_refresh_shouldUpdateLevelIcon() {
+ final List<Drawable> iconList = new ArrayList<>();
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+
+ when(mMockWifiEntry.getLevel()).thenReturn(0);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(1);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(2);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(3);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(4);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(-1);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+
+ assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1,
+ mMockDrawable2, mMockDrawable3, mMockDrawable4, null);
+ }
+
+ @Test
+ public void levelChanged_showXWifiRefresh_shouldUpdateLevelIcon() {
+ final List<Drawable> iconList = new ArrayList<>();
+ when(mMockWifiEntry.shouldShowXLevelIcon()).thenReturn(true);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+
+ when(mMockWifiEntry.getLevel()).thenReturn(0);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(1);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(2);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(3);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(4);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+ when(mMockWifiEntry.getLevel()).thenReturn(-1);
+ pref.refresh();
+ iconList.add(pref.getIcon());
+
+ assertThat(iconList).containsExactly(mMockShowXDrawable0, mMockShowXDrawable1,
+ mMockShowXDrawable2, mMockShowXDrawable3, mMockShowXDrawable4, null);
+ }
+
+ @Test
+ public void notNull_whenGetHelpUriString_shouldSetImageButtonVisible() {
+ when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ false);
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
+
+ pref.onBindViewHolder(holder);
+
+ assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void helpButton_whenGetHelpUriStringNotNull_shouldSetCorrectContentDescription() {
+ when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ false);
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
+
+ pref.onBindViewHolder(holder);
+
+ assertThat(view.findViewById(R.id.icon_button).getContentDescription()).isEqualTo(
+ mContext.getString(R.string.help_label));
+ }
+
+ @Test
+ public void subscriptionEntry_shouldSetImageButtonGone() {
+ when(mMockWifiEntry.isSubscription()).thenReturn(true);
+ final WifiEntryPreference pref =
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ false);
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
+
+ pref.onBindViewHolder(holder);
+
+ assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.GONE);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
index 1f5abd3..c124c59 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
@@ -57,7 +57,6 @@
import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settings.testutils.shadow.ShadowFragment;
-import com.android.settingslib.wifi.LongPressWifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java
index 70f2b1a..e78f1c1 100644
--- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiNetworkListFragmentTest.java
@@ -36,7 +36,7 @@
import androidx.preference.PreferenceCategory;
import androidx.test.InstrumentationRegistry;
-import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.settings.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.SavedNetworkTracker;
import com.android.wifitrackerlib.WifiEntry;
diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java
index 7b7a3b1..0d10223 100644
--- a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java
@@ -35,7 +35,7 @@
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
-import com.android.settingslib.wifi.WifiEntryPreference;
+import com.android.settings.wifi.WifiEntryPreference;
import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before;
diff --git a/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java
new file mode 100644
index 0000000..6e78d05
--- /dev/null
+++ b/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.accounts.Account;
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.ResourcesUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class BrandedAccountPreferenceControllerTest {
+
+ @Mock
+ private Resources mResources;
+ private Context mContext;
+ private FakeFeatureFactory mFakeFeatureFactory;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getResources()).thenReturn(mResources);
+ mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
+
+ }
+
+ @Test
+ public void isAvailable_configOn_noAccount_off() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool",
+ "config_show_branded_account_in_device_info");
+ when(mResources.getBoolean(boolId)).thenReturn(true);
+
+ final BrandedAccountPreferenceController controller =
+ new BrandedAccountPreferenceController(mContext, "test_key");
+ assertThat(controller.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_accountIsAvailable_on() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool",
+ "config_show_branded_account_in_device_info");
+ when(mResources.getBoolean(boolId)).thenReturn(true);
+ when(mFakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class)))
+ .thenReturn(new Account[]{new Account("fake@account.foo", "fake.reallyfake")});
+
+ final BrandedAccountPreferenceController controller =
+ new BrandedAccountPreferenceController(mContext, "test_key");
+
+ assertThat(controller.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvailable_configOff_hasAccount_off() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool",
+ "config_show_branded_account_in_device_info");
+ when(mResources.getBoolean(boolId)).thenReturn(false);
+ when(mFakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class)))
+ .thenReturn(new Account[]{new Account("fake@account.foo", "fake.reallyfake")});
+
+ final BrandedAccountPreferenceController controller =
+ new BrandedAccountPreferenceController(mContext, "test_key");
+
+ assertThat(controller.isAvailable()).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
similarity index 71%
rename from tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
rename to tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
index 80a3a11..8c75449 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
@@ -22,52 +22,51 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.Activity;
+import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
-import android.content.pm.UserInfo;
-import android.os.Process;
-import android.os.UserHandle;
+import android.os.Looper;
import android.os.UserManager;
import android.provider.Settings;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.Shadows;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowUserManager;
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowUtils.class)
+@RunWith(AndroidJUnit4.class)
public class BuildNumberPreferenceControllerTest {
private static final String KEY_BUILD_NUMBER = "build_number";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private InstrumentedPreferenceFragment mFragment;
- private ShadowUserManager mShadowUserManager;
-
private Context mContext;
+ private UserManager mUserManager;
+ private ClipboardManager mClipboardManager;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
private FakeFeatureFactory mFactory;
@@ -75,15 +74,23 @@
private BuildNumberPreferenceController mController;
@Before
+ @UiThreadTest
public void setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mShadowUserManager = Shadows.shadowOf(
- RuntimeEnvironment.application.getSystemService(UserManager.class));
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mUserManager = (UserManager) spy(mContext.getSystemService(Context.USER_SERVICE));
+ doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+ mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
+ doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
+
mFactory = FakeFeatureFactory.setupForTest();
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
- mController = new BuildNumberPreferenceController(mContext, KEY_BUILD_NUMBER);
+ mController = spy(new BuildNumberPreferenceController(mContext, KEY_BUILD_NUMBER));
mController.setHost(mFragment);
mPreference = new Preference(mContext);
@@ -93,11 +100,6 @@
Settings.Global.DEVICE_PROVISIONED, 1);
}
- @After
- public void tearDown() {
- ShadowUtils.reset();
- }
-
@Test
public void handlePrefTreeClick_onlyHandleBuildNumberPref() {
assertThat(mController.handlePreferenceTreeClick(mock(Preference.class))).isFalse();
@@ -105,32 +107,32 @@
@Test
public void handlePrefTreeClick_notAdminUser_notDemoUser_doNothing() {
- mShadowUserManager.setIsAdminUser(false);
- mShadowUserManager.setIsDemoUser(false);
+ when(mUserManager.isAdminUser()).thenReturn(false);
+ when(mUserManager.isDemoUser()).thenReturn(false);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
}
@Test
public void handlePrefTreeClick_isAdminUser_notDemoUser_handleBuildNumberPref() {
- mShadowUserManager.setIsAdminUser(true);
- mShadowUserManager.setIsDemoUser(false);
+ when(mUserManager.isAdminUser()).thenReturn(true);
+ when(mUserManager.isDemoUser()).thenReturn(false);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
}
@Test
public void handlePrefTreeClick_notAdminUser_isDemoUser_handleBuildNumberPref() {
- mShadowUserManager.setIsAdminUser(false);
- mShadowUserManager.addUser(UserHandle.myUserId(), "test", UserInfo.FLAG_DEMO);
+ when(mUserManager.isAdminUser()).thenReturn(false);
+ when(mUserManager.isDemoUser()).thenReturn(true);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
}
@Test
public void handlePrefTreeClick_deviceNotProvisioned_doNothing() {
- mShadowUserManager.setIsAdminUser(true);
- mShadowUserManager.setIsDemoUser(false);
+ when(mUserManager.isAdminUser()).thenReturn(true);
+ when(mUserManager.isDemoUser()).thenReturn(false);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED,
0);
@@ -143,17 +145,16 @@
@Test
public void handlePrefTreeClick_isMonkeyRun_doNothing() {
- ShadowUtils.setIsUserAMonkey(true);
+ when(mController.isUserAMonkey()).thenReturn(true);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
}
@Test
public void handlePrefTreeClick_userHasRestriction_doNothing() {
- mShadowUserManager.setIsAdminUser(true);
- mShadowUserManager.setIsDemoUser(false);
-
- mShadowUserManager.setUserRestriction(Process.myUserHandle(),
- UserManager.DISALLOW_DEBUGGING_FEATURES, true);
+ when(mUserManager.isAdminUser()).thenReturn(true);
+ when(mUserManager.isDemoUser()).thenReturn(false);
+ when(mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES))
+ .thenReturn(true);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
verify(mFactory.metricsFeatureProvider).action(
@@ -184,8 +185,9 @@
}
@Test
+ @UiThreadTest
public void onActivityResult_confirmPasswordRequestCompleted_enableDevPref() {
- mShadowUserManager.setIsAdminUser(true);
+ when(mUserManager.isAdminUser()).thenReturn(true);
final boolean activityResultHandled = mController.onActivityResult(
BuildNumberPreferenceController.REQUEST_CONFIRM_PASSWORD_FOR_DEV_PREF,
@@ -197,12 +199,14 @@
}
@Test
+ @UiThreadTest
public void copy_shouldCopyBuildNumberToClipboard() {
+ ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
+ doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
+
mController.copy();
- final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(
- CLIPBOARD_SERVICE);
- final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
- assertThat(data.toString()).isEqualTo(mController.getSummary());
+ final ClipData data = captor.getValue();
+ assertThat(data.getItemAt(0).getText().toString()).isEqualTo(mController.getSummary());
}
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java
similarity index 71%
rename from tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java
rename to tests/unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java
index 9bb2d3f..2a06ce9 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.java
@@ -21,38 +21,43 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
+import android.os.Looper;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.ResourcesUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class PhoneNumberPreferenceControllerTest {
- @Mock
private Preference mPreference;
@Mock
private Preference mSecondPreference;
@@ -62,25 +67,34 @@
private SubscriptionInfo mSubscriptionInfo;
@Mock
private SubscriptionManager mSubscriptionManager;
- @Mock
private PreferenceScreen mScreen;
private Context mContext;
private PhoneNumberPreferenceController mController;
+ private ClipboardManager mClipboardManager;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
+ doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
mController = spy(new PhoneNumberPreferenceController(mContext, "phone_number"));
- final String prefKey = mController.getPreferenceKey();
- when(mScreen.findPreference(prefKey)).thenReturn(mPreference);
- when(mScreen.getContext()).thenReturn(mContext);
+
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ final PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ mScreen = preferenceManager.createPreferenceScreen(mContext);
+ mPreference = spy(new Preference(mContext));
+ mPreference.setKey(mController.getPreferenceKey());
+ mPreference.setVisible(true);
+ mScreen.addPreference(mPreference);
+
doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
- when(mPreference.isVisible()).thenReturn(true);
}
@Test
@@ -105,7 +119,7 @@
mController.displayPreference(mScreen);
- verify(mScreen).addPreference(mSecondPreference);
+ assertThat(mScreen.getPreferenceCount()).isEqualTo(2);
}
@Test
@@ -117,7 +131,7 @@
mController.updateState(mPreference);
- verify(mPreference).setTitle(mContext.getString(R.string.status_number));
+ verify(mPreference).setTitle(ResourcesUtils.getResourcesString(mContext, "status_number"));
verify(mPreference).setSummary(phoneNumber);
}
@@ -130,11 +144,11 @@
mController.updateState(mPreference);
- verify(mPreference).setTitle(
- mContext.getString(R.string.status_number_sim_slot, 1 /* sim slot */));
+ verify(mPreference).setTitle(ResourcesUtils.getResourcesString(
+ mContext, "status_number_sim_slot", 1 /* sim slot */));
verify(mPreference).setSummary(phoneNumber);
- verify(mSecondPreference).setTitle(
- mContext.getString(R.string.status_number_sim_slot, 2 /* sim slot */));
+ verify(mSecondPreference).setTitle(ResourcesUtils.getResourcesString(
+ mContext, "status_number_sim_slot", 2 /* sim slot */));
verify(mSecondPreference).setSummary(phoneNumber);
}
@@ -145,7 +159,8 @@
CharSequence primaryNumber = mController.getSummary();
assertThat(primaryNumber).isNotNull();
- assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default));
+ assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
+ mContext, "device_info_default"));
}
@Test
@@ -155,22 +170,24 @@
CharSequence primaryNumber = mController.getSummary();
- assertThat(primaryNumber).isEqualTo(mContext.getString(R.string.device_info_default));
+ assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
+ mContext, "device_info_default"));
}
@Test
+ @UiThreadTest
public void copy_shouldCopyPhoneNumberToClipboard() {
final List<SubscriptionInfo> list = new ArrayList<>();
list.add(mSubscriptionInfo);
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(list);
final String phoneNumber = "1111111111";
doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
+ ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
+ doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
mController.copy();
- final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(
- CLIPBOARD_SERVICE);
- final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
+ final CharSequence data = captor.getValue().getItemAt(0).getText();
assertThat(phoneNumber.contentEquals(data)).isTrue();
}
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java
similarity index 66%
rename from tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java
rename to tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java
index 65e29b4..847919a 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/DeviceModelPreferenceControllerTest.java
@@ -18,41 +18,57 @@
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.content.res.Resources;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.ResourcesUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class DeviceModelPreferenceControllerTest {
private Context mContext;
private DeviceModelPreferenceController mController;
+ @Mock
+ private Resources mResources;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getResources()).thenReturn(mResources);
mController = new DeviceModelPreferenceController(mContext, "test_key");
}
@Test
public void getAvailabilityStatus_configAllowed_available() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool", "config_show_device_model");
+ when(mResources.getBoolean(boolId)).thenReturn(true);
+
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}
@Test
- @Config(qualifiers = "mcc999")
public void getAvailabilityStatus_configDisallowed_unavailable() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool", "config_show_device_model");
+ when(mResources.getBoolean(boolId)).thenReturn(false);
+
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java
similarity index 70%
rename from tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java
rename to tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java
index c7c7669..7262615 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoPreferenceControllerTest.java
@@ -17,41 +17,53 @@
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.content.res.Resources;
import android.os.Build;
+import android.os.Looper;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deviceinfo.HardwareInfoPreferenceController;
+import com.android.settings.testutils.ResourcesUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class HardwareInfoPreferenceControllerTest {
- private final String KEY = "device_model";
+ private static final String KEY = "device_model";
private Preference mPreference;
private PreferenceScreen mPreferenceScreen;
private Context mContext;
+ @Mock
+ private Resources mResources;
private HardwareInfoPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getResources()).thenReturn(mResources);
mController = new HardwareInfoPreferenceController(mContext, KEY);
mPreference = new Preference(mContext);
mPreference.setKey(KEY);
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
final PreferenceManager preferenceManager = new PreferenceManager(mContext);
mPreferenceScreen = preferenceManager.createPreferenceScreen(mContext);
mPreferenceScreen.addPreference(mPreference);
@@ -59,13 +71,20 @@
@Test
public void isAvailable_returnTrueIfVisible() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool", "config_show_device_model");
+
+ when(mResources.getBoolean(boolId)).thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}
@Test
- @Config(qualifiers = "mcc999")
public void isAvailable_returnFalseIfNotVisible() {
+ final int boolId = ResourcesUtils.getResourcesId(
+ ApplicationProvider.getApplicationContext(), "bool", "config_show_device_model");
+
+ when(mResources.getBoolean(boolId)).thenReturn(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java
new file mode 100644
index 0000000..fc1407f
--- /dev/null
+++ b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/HardwareRevisionPreferenceControllerTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo.hardwareinfo;
+
+import static android.content.Context.CLIPBOARD_SERVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.os.Looper;
+import android.os.SystemProperties;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+@RunWith(AndroidJUnit4.class)
+public class HardwareRevisionPreferenceControllerTest {
+
+ private Context mContext;
+ private HardwareRevisionPreferenceController mController;
+ private ClipboardManager mClipboardManager;
+
+ @Before
+ public void setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
+ doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
+ mController = new HardwareRevisionPreferenceController(mContext,
+ "hardware_info_device_revision");
+ }
+
+ @Test
+ @UiThreadTest
+ public void copy_shouldCopyHardwareRevisionToClipboard() {
+ ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
+ doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
+
+ mController.copy();
+
+ final ClipData data = captor.getValue();
+ final String hardwareVer = SystemProperties.get("ro.boot.hardware.revision");
+ assertThat(data.getItemAt(0).getText().toString()).isEqualTo(hardwareVer);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java
new file mode 100644
index 0000000..eaf97d4
--- /dev/null
+++ b/tests/unit/src/com/android/settings/deviceinfo/hardwareinfo/SerialNumberPreferenceControllerTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo.hardwareinfo;
+
+import static android.content.Context.CLIPBOARD_SERVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.os.Build;
+import android.os.Looper;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+@RunWith(AndroidJUnit4.class)
+public class SerialNumberPreferenceControllerTest {
+
+ private Context mContext;
+ private SerialNumberPreferenceController mController;
+ private ClipboardManager mClipboardManager;
+
+ @Before
+ public void setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
+ doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
+ mController = new SerialNumberPreferenceController(mContext, "test");
+ }
+
+ @Test
+ @UiThreadTest
+ public void copy_shouldPutSerialNumberToClipBoard() {
+ ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
+ doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
+
+ mController.copy();
+
+ final ClipData data = captor.getValue();
+ assertThat(data.getItemAt(0).getText().toString()).contains(Build.getSerial());
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java b/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java
similarity index 94%
rename from tests/unit/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java
rename to tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java
index efa21ae..27bc40c 100644
--- a/tests/unit/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java
+++ b/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java
@@ -49,7 +49,7 @@
import java.util.List;
@RunWith(AndroidJUnit4.class)
-public class ActiveSubsciptionsListenerTest {
+public class ActiveSubscriptionsListenerTest {
private static final int SUB_ID1 = 3;
private static final int SUB_ID2 = 7;
@@ -68,7 +68,7 @@
private SubscriptionManager mSubscriptionManager;
private List<SubscriptionInfo> mActiveSubscriptions;
- private ActiveSubsciptionsListenerImpl mListener;
+ private ActiveSubscriptionsListenerImpl mListener;
private BroadcastReceiver mReceiver;
@Before
@@ -83,7 +83,7 @@
addMockSubscription(SUB_ID2);
doReturn(mActiveSubscriptions).when(mSubscriptionManager).getActiveSubscriptionInfoList();
- mListener = spy(new ActiveSubsciptionsListenerImpl(Looper.getMainLooper(), mContext));
+ mListener = spy(new ActiveSubscriptionsListenerImpl(Looper.getMainLooper(), mContext));
doReturn(mSubscriptionManager).when(mListener).getSubscriptionManager();
mReceiver = mListener.getSubscriptionChangeReceiver();
}
@@ -99,8 +99,8 @@
mListener.close();
}
- public class ActiveSubsciptionsListenerImpl extends ActiveSubsciptionsListener {
- public ActiveSubsciptionsListenerImpl(Looper looper, Context context) {
+ public class ActiveSubscriptionsListenerImpl extends ActiveSubscriptionsListener {
+ public ActiveSubscriptionsListenerImpl(Looper looper, Context context) {
super(looper, context);
}
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
new file mode 100644
index 0000000..8172e1a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -0,0 +1,198 @@
+/*
+ * 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.network.telephony;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
+import android.telephony.CellIdentity;
+import android.telephony.CellInfo;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+
+public class NetworkSelectSettingsTest {
+ private static final int SUB_ID = 2;
+ private static final String CARRIER_NAME1 = "CarrierName1";
+ private static final String CARRIER_NAME2 = "CarrierName2";
+
+ @Mock
+ public Resources mResources;
+ @Mock
+ public TelephonyManager mTelephonyManager;
+ @Mock
+ public CarrierConfigManager mCarrierConfigManager;
+ @Mock
+ public MetricsFeatureProvider mMetricsFeatureProvider;
+ @Mock
+ public NetworkOperatorPreference mNetworkOperatorPreference1;
+ @Mock
+ public NetworkOperatorPreference mNetworkOperatorPreference2;
+ @Mock
+ private CellInfo mCellInfo1;
+ @Mock
+ private CellIdentity mCellId1;
+ @Mock
+ private CellInfo mCellInfo2;
+ @Mock
+ private CellIdentity mCellId2;
+
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ public PreferenceManager mPreferenceManager;
+
+ public Context mContext;
+ public PreferenceCategory mPreferenceCategory;
+
+ private Bundle mInitArguments;
+ private TargetClass mNetworkSelectSettings;
+
+ @Before
+ @UiThreadTest
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ doReturn(mResources).when(mContext).getResources();
+ doReturn(mContext).when(mPreferenceManager).getContext();
+
+ mPreferenceCategory = spy(new PreferenceCategory(mContext));
+ doReturn(mPreferenceManager).when(mPreferenceCategory).getPreferenceManager();
+
+ doReturn(CARRIER_NAME1).when(mCellId1).getOperatorAlphaLong();
+ doReturn(CARRIER_NAME2).when(mCellId2).getOperatorAlphaLong();
+
+ mNetworkSelectSettings = spy(new TargetClass(this));
+
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL, true);
+ doReturn(config).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
+
+ doReturn(TelephonyManager.DATA_CONNECTED).when(mTelephonyManager).getDataState();
+ }
+
+ public class TargetClass extends NetworkSelectSettings {
+ private NetworkSelectSettingsTest mTestEnv;
+ private boolean mIsPreferenceScreenEnabled;
+
+ public TargetClass(NetworkSelectSettingsTest env) {
+ mTestEnv = env;
+
+ Bundle bundle = new Bundle();
+ bundle.putInt(Settings.EXTRA_SUB_ID, SUB_ID);
+ setArguments(bundle);
+ }
+
+ @Override
+ public Context getContext() {
+ return mTestEnv.mContext;
+ }
+
+ @Override
+ public PreferenceManager getPreferenceManager() {
+ return mTestEnv.mPreferenceManager;
+ }
+
+ @Override
+ protected PreferenceCategory getPreferenceCategory(String preferenceKey) {
+ return mTestEnv.mPreferenceCategory;
+ }
+
+ @Override
+ protected TelephonyManager getTelephonyManager(Context context, int subscriptionId) {
+ return mTestEnv.mTelephonyManager;
+ }
+
+ @Override
+ protected CarrierConfigManager getCarrierConfigManager(Context context) {
+ return mTestEnv.mCarrierConfigManager;
+ }
+
+ @Override
+ protected MetricsFeatureProvider getMetricsFeatureProvider(Context context) {
+ return mTestEnv.mMetricsFeatureProvider;
+ }
+
+ @Override
+ protected boolean isPreferenceScreenEnabled() {
+ return mIsPreferenceScreenEnabled;
+ }
+
+ @Override
+ protected void enablePreferenceScreen(boolean enable) {
+ mIsPreferenceScreenEnabled = enable;
+ }
+
+ @Override
+ protected NetworkOperatorPreference
+ createNetworkOperatorPreference(CellInfo cellInfo) {
+ NetworkOperatorPreference pref = super.createNetworkOperatorPreference(cellInfo);
+ if (cellInfo == mTestEnv.mCellInfo1) {
+ pref.updateCell(cellInfo, mTestEnv.mCellId1);
+ } else if (cellInfo == mTestEnv.mCellInfo2) {
+ pref.updateCell(cellInfo, mTestEnv.mCellId2);
+ }
+ return pref;
+ }
+ }
+
+ @Test
+ @UiThreadTest
+ public void updateAllPreferenceCategory_correctOrderingPreference() {
+ mNetworkSelectSettings.onCreateInitialization();
+ mNetworkSelectSettings.enablePreferenceScreen(true);
+ mNetworkSelectSettings.scanResultHandler(Arrays.asList(mCellInfo1, mCellInfo2));
+
+ assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
+ final NetworkOperatorPreference preference =
+ (NetworkOperatorPreference) mPreferenceCategory.getPreference(1);
+ assertThat(preference.getOperatorName()).isEqualTo(mCellId2.getOperatorAlphaLong());
+ }
+
+ @Test
+ @UiThreadTest
+ public void updateForbiddenPlmns_forbiddenPlmnsNull_shouldNotCrash() {
+ when(mTelephonyManager.getForbiddenPlmns()).thenReturn(null);
+
+ mNetworkSelectSettings.onCreateInitialization();
+ mNetworkSelectSettings.enablePreferenceScreen(true);
+
+ // Should not Crash
+ mNetworkSelectSettings.updateForbiddenPlmns();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/vpn2/AppPreferenceTest.java b/tests/unit/src/com/android/settings/vpn2/AppPreferenceTest.java
new file mode 100644
index 0000000..1f618cc
--- /dev/null
+++ b/tests/unit/src/com/android/settings/vpn2/AppPreferenceTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.vpn2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertFalse;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.Context;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.UserHandle;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/** Unittest for AppPreference */
+@RunWith(AndroidJUnit4.class)
+public class AppPreferenceTest {
+ // Additional mocking of the underying classes is necsesary if another user id is used.
+ private static final int USER_ID = UserHandle.USER_NULL;
+ private static final String PACKAGE_NAME = "test_package";
+ private static final String DIFFERENT_PACKAGE_NAME = "not_test_package";
+
+ @Mock
+ private DevicePolicyManager mDevicePolicyManager;
+
+ private Context mContext;
+ private AppPreference mAppPreference;
+
+ @Before
+ public void setUp() throws NameNotFoundException {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ doReturn(mContext).when(mContext).createContextAsUser(any(), anyInt());
+ doReturn(mContext).when(mContext).createPackageContextAsUser(any(), anyInt(), any());
+ when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDevicePolicyManager);
+ }
+
+ @Test
+ public void getPackageName_returnsAccuratePackageName() {
+ doReturn(DIFFERENT_PACKAGE_NAME).when(mDevicePolicyManager).getAlwaysOnVpnPackage();
+
+ mAppPreference = spy(new AppPreference(mContext, USER_ID, PACKAGE_NAME));
+ assertThat(mAppPreference.getPackageName()).isEqualTo(PACKAGE_NAME);
+ }
+
+ @Test
+ public void disableIfConfiguredByAdmin_packageNameNotEqualsAlwaysOn_shouldEnable() {
+ doReturn(DIFFERENT_PACKAGE_NAME).when(mDevicePolicyManager).getAlwaysOnVpnPackage();
+
+ mAppPreference = spy(new AppPreference(mContext, USER_ID, PACKAGE_NAME));
+ assertFalse(mAppPreference.isDisabledByAdmin());
+ }
+}