From 836e14e665e5f0731a0a2925c2b0cf5684841240 Mon Sep 17 00:00:00 2001 From: David Liu Date: Wed, 8 May 2024 23:45:27 +0000 Subject: [PATCH 01/11] Set noparent to avoid it recursively looks up. Android biometric team should approve all change in this subdirectories. Change-Id: Ib5bdc23660cc18af0f57ffdec1dbf582db734a43 --- src/com/android/settings/biometrics/OWNERS | 3 +++ src/com/android/settings/biometrics2/OWNERS | 3 +++ src/com/android/settings/password/OWNERS | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/com/android/settings/biometrics/OWNERS b/src/com/android/settings/biometrics/OWNERS index cb0d0341828..f804b0f545c 100644 --- a/src/com/android/settings/biometrics/OWNERS +++ b/src/com/android/settings/biometrics/OWNERS @@ -1,3 +1,6 @@ +# The Android Biometric team should approve all changes to biometrics subdirectories. +set noparent + graciecheng@google.com ilyamaty@google.com jaggies@google.com diff --git a/src/com/android/settings/biometrics2/OWNERS b/src/com/android/settings/biometrics2/OWNERS index a257ed861ad..ac806eb8d48 100644 --- a/src/com/android/settings/biometrics2/OWNERS +++ b/src/com/android/settings/biometrics2/OWNERS @@ -1 +1,4 @@ +# The Android Biometric team should approve all changes to biometrics2 subdirectories. +set noparent + include /src/com/android/settings/biometrics/OWNERS diff --git a/src/com/android/settings/password/OWNERS b/src/com/android/settings/password/OWNERS index aa03c591d0a..9cfaf7a01b2 100644 --- a/src/com/android/settings/password/OWNERS +++ b/src/com/android/settings/password/OWNERS @@ -1,3 +1,6 @@ +# The Android Biometric team should approve all changes to password subdirectories. +set noparent + # Default reviewers for this and subdirectories. curtislb@google.com graciecheng@google.com From 01463cac05c4f9bf31bb0fef592290e7518dab80 Mon Sep 17 00:00:00 2001 From: Chun-Ku Lin Date: Sat, 11 May 2024 02:24:21 +0000 Subject: [PATCH 02/11] Update Setting's Robolectric tests' instructions Test: N/A Change-Id: I00a0b3ac910caaeb35f66762a9d67610b9180ff6 --- tests/robotests/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/robotests/README.md b/tests/robotests/README.md index 648f1af77d8..8083f75fdec 100644 --- a/tests/robotests/README.md +++ b/tests/robotests/README.md @@ -4,21 +4,20 @@ ## The full suite ``` $ croot -$ make RunSettingsRoboTests +$ atest SettingsRoboTests ``` ## Running a single test class +With a filter + ``` $ croot -$ make RunSettingsRoboTests ROBOTEST_FILTER= +$ atest SettingsRoboTests:com.android.settings.display.AdaptiveSleepPreferenceControllerTest ``` -For example: +You can also run any single test class with atest (it will try to find the correct path) ``` -make RunSettingsRoboTests ROBOTEST_FILTER=CodeInspectionTest +$ atest AdaptiveSleepPreferenceControllerTest ``` - -You can also use partial class name in ROBOTEST_FILTER. If the partial class name matches -multiple file names, all of them will be executed. From 3dc7837617106892a097eae1b76cc96a802b3565 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Sat, 11 May 2024 20:00:02 +0800 Subject: [PATCH 03/11] Remove Instant Hotspot from Settings search - If Instant Hotspot is not enabled then remove it from Settings search Bug: 339159245 Flag: None Test: Manual testing atest -c WifiTetherSettingsTest Change-Id: I0b1d34c1130b17bfc0f3f0451a10c8aba265733c --- .../wifi/tether/WifiTetherSettings.java | 10 +++- .../wifi/tether/WifiTetherSettingsTest.java | 49 ++++++++++++++----- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java index bad29eb79da..74671b5f4af 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java @@ -43,6 +43,7 @@ import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.wifi.WifiUtils; +import com.android.settings.wifi.repository.SharedConnectivityRepository; import com.android.settingslib.TetherUtil; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.search.SearchIndexable; @@ -346,16 +347,20 @@ public class WifiTetherSettings extends RestrictedDashboardFragment static class SearchIndexProvider extends BaseSearchIndexProvider { private final WifiRestriction mWifiRestriction; + private final boolean mIsInstantHotspotEnabled; SearchIndexProvider(int xmlRes) { super(xmlRes); mWifiRestriction = new WifiRestriction(); + mIsInstantHotspotEnabled = SharedConnectivityRepository.isDeviceConfigEnabled(); } @VisibleForTesting - SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction) { + SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction, + boolean isInstantHotspotEnabled) { super(xmlRes); mWifiRestriction = wifiRestriction; + mIsInstantHotspotEnabled = isInstantHotspotEnabled; } @Override @@ -369,6 +374,9 @@ public class WifiTetherSettings extends RestrictedDashboardFragment keys.add(KEY_WIFI_TETHER_NETWORK_PASSWORD); keys.add(KEY_WIFI_TETHER_AUTO_OFF); keys.add(KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + keys.add(KEY_INSTANT_HOTSPOT); + } else if (!mIsInstantHotspotEnabled) { + keys.add(KEY_INSTANT_HOTSPOT); } // Remove duplicate diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java index 28fb8b37721..299d545c49b 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java @@ -266,7 +266,8 @@ public class WifiTetherSettingsTest { when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction); + new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + true /* isInstantHotspotEnabled */); final List keys = searchIndexProvider.getNonIndexableKeys(mContext); @@ -275,6 +276,7 @@ public class WifiTetherSettingsTest { assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @Test @@ -282,7 +284,8 @@ public class WifiTetherSettingsTest { when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(false); when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction); + new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + true /* isInstantHotspotEnabled */); final List keys = searchIndexProvider.getNonIndexableKeys(mContext); @@ -291,6 +294,7 @@ public class WifiTetherSettingsTest { assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @Test @@ -298,7 +302,26 @@ public class WifiTetherSettingsTest { when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false); WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction); + new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + true /* isInstantHotspotEnabled */); + + final List keys = searchIndexProvider.getNonIndexableKeys(mContext); + + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); + } + + @Test + public void getNonIndexableKeys_tetherAndHotspotNotAvailable_keysReturned() { + when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(false); + when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false); + WifiTetherSettings.SearchIndexProvider searchIndexProvider = + new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + true /* isInstantHotspotEnabled */); final List keys = searchIndexProvider.getNonIndexableKeys(mContext); @@ -310,19 +333,21 @@ public class WifiTetherSettingsTest { } @Test - public void getNonIndexableKeys_tetherAndHotspotNotAvailable_keysReturned() { - when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(false); - when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(false); + public void getNonIndexableKeys_instantHotspotNotAvailableOnly_keysContainInstantHotspotOnly() { + when(mWifiRestriction.isTetherAvailable(mContext)).thenReturn(true); + when(mWifiRestriction.isHotspotAvailable(mContext)).thenReturn(true); WifiTetherSettings.SearchIndexProvider searchIndexProvider = - new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction); + new WifiTetherSettings.SearchIndexProvider(XML_RES, mWifiRestriction, + false /* isInstantHotspotEnabled */); final List keys = searchIndexProvider.getNonIndexableKeys(mContext); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); - assertThat(keys).contains(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_NAME); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_SECURITY); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_NETWORK_PASSWORD); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_AUTO_OFF); + assertThat(keys).doesNotContain(WifiTetherSettings.KEY_WIFI_TETHER_MAXIMIZE_COMPATIBILITY); + assertThat(keys).contains(WifiTetherSettings.KEY_INSTANT_HOTSPOT); } @Test From 75a4637eba0fa0de025e56003dae69f134d19625 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 12 May 2024 17:22:52 -0700 Subject: [PATCH 04/11] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I1d6f65dc534d84befba2f14868ec94f2d9b83962 --- res/values-ne/arrays.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml index d9c2ac3bb75..01851b5847f 100644 --- a/res/values-ne/arrays.xml +++ b/res/values-ne/arrays.xml @@ -164,8 +164,8 @@ "राम्रो स्थान" "GPS" "कम्पन" - "सम्पर्कहरू पढ्नुहोस्" - "सम्पर्कहरू परिमार्जन गर्नुहोस्" + "कन्ट्याक्टहरू पढ्नुहोस्" + "कन्ट्याक्टहरू परिमार्जन गर्नुहोस्" "कल लग पढ्नुहोस्" "कल लग परिमार्जन गर्नुहोस्" "पात्रो पढ्नुहोस्" @@ -231,8 +231,8 @@ "स्थान" "स्थान" "भाइब्रेट गर्नुहोस्" - "सम्पर्कहरू पढ्नुहोस्" - "सम्पर्कहरू परिमार्जन गर्नुहोस्" + "कन्ट्याक्टहरू पढ्नुहोस्" + "कन्ट्याक्टहरू परिमार्जन गर्नुहोस्" "कल लग पढ्नुहोस्" "कल लग परिमार्जन गर्नुहोस्" "पात्रो पढ्नुहोस्" From 163789e60e79ca20aa02b7e92da6d16b33ea047d Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 12 May 2024 17:24:24 -0700 Subject: [PATCH 05/11] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ib3d12bcc4aa3efbcab08a95474711bd73f1c3448 --- res/values-af/strings.xml | 2 +- res/values-es-rUS/strings.xml | 2 +- res/values-fa/strings.xml | 2 +- res/values-fr-rCA/strings.xml | 10 +++++----- res/values-hi/strings.xml | 2 +- res/values-hr/strings.xml | 4 ++-- res/values-hu/strings.xml | 2 +- res/values-it/strings.xml | 6 +++--- res/values-iw/strings.xml | 3 +-- res/values-ja/strings.xml | 2 +- res/values-lv/strings.xml | 2 +- res/values-ne/strings.xml | 4 ++-- res/values-nl/strings.xml | 4 ++-- res/values-pa/strings.xml | 2 +- res/values-ru/strings.xml | 4 ++-- res/values-sk/strings.xml | 4 ++-- res/values-th/strings.xml | 20 ++++++++++---------- res/values-vi/strings.xml | 2 +- res/values-zh-rCN/strings.xml | 2 +- 19 files changed, 39 insertions(+), 40 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index ddba2991f1b..fa42a49d53f 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -3781,7 +3781,7 @@ "Datawaarskuwing en datalimiet word deur jou toestel gemeet. Dit kan van die diensverskafferdata verskil." "Stel datalimiet" "Datalimiet" - "%1$s in %2$s gebruik" + "%1$s tydens %2$s gebruik" "Stel op" "Ander programme wat by gebruik ingesluit is" "{count,plural, =1{1 app word toegelaat om onbeperkte data te gebruik wanneer Databespaarder aan is}other{# apps word toegelaat om onbeperkte data te gebruik wanneer Databespaarder aan is}}" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 702796bf44e..01ba5a1d789 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -1876,7 +1876,7 @@ "Más información sobre %1$s" "Mantener presionadas las teclas de volumen" "mantener presionadas las teclas de volumen" - "Mantén presionadas ambas teclas de volumen." + "Mantén presionadas ambas teclas de volumen" "Presionar tres veces la pantalla" "presionar tres veces la pantalla" "Presiona rápidamente la pantalla {0,number,integer} veces. Esta combinación de teclas podría hacer que tu dispositivo funcione más lento." diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 56f601942a2..bfa2bad3eb4 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -3691,7 +3691,7 @@ "با دو بار چرخاندن مچتان، برنامه دوربین را باز کنید" "اندازه نمایش" "همه چیز را بزرگ‌تر یا کوچک‌تر می‌کند" - "تراکم نمایشگر، بزرگ‌نمایی صفحه، مقیاس، مقیاس‌بندی" + "تراکم نمایش، بزرگ‌نمایی صفحه، مقیاس، مقیاس‌بندی" "پیش‌نمایش" "کوچک‌تر ببینید" "بزرگ‌تر ببینید" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index be8c7d69237..577470cfd80 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -1857,9 +1857,9 @@ "Pour utiliser cette fonctionnalité, maintenez les deux touches de volume enfoncées." "Pour démarrer et arrêter l\'agrandissement, touchez l\'écran trois fois n\'importe où." "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez la pression." - "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y." - "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez-la pression." - "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y." + "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez la pression." + "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez la pression." + "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez la pression." "OK" "Paramètres du bouton" "Raccourci %1$s" @@ -3268,7 +3268,7 @@ "Votre téléphone ne sonnera ou ne vibrera pas lorsqu\'il reçoit ces notifications" "Autorisées" "Non autorisées" - "Afficher toutes les applications" + "Afficher toutes les applis" "Modifier les paramètres pour chaque application qui envoie des notifications" "Applications affichées sur l\'appareil" "Cette application ne prend pas en charge les paramètres améliorés" @@ -4546,7 +4546,7 @@ "Utiliser la technologie CCP" "Utiliser la luminosité adaptative" "Utiliser les appels Wi-Fi" - "Afficher toutes les applications" + "Afficher toutes les applis" "Transfert d\'appels intelligent" "Le transfert d\'appels intelligent est activé" "Le transfert d\'appels intelligent est désactivé" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index d6c83d4d39c..b3eaa8a531b 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -2294,7 +2294,7 @@ "%1$s बैटरी होने पर" "बैटरी का प्रतिशत" "स्टेटस बार में दिखाएं कि कितने प्रतिशत बैटरी बची है" - "पूरा चार्ज होने के बाद, बैटरी का लेवल" + "पूरी तरह से चार्ज होने के बाद से लेकर अब तक बैटरी का लेवल" "पिछले 24 घंटों में बैटरी लेवल की जानकारी" "पिछली बार पूरी तरह चार्ज होने के बाद से अब तक, ऐप्लिकेशन के इस्तेमाल में खर्च हुई बैटरी" "पिछले 24 घंटों में, ऐप्लिकेशन ने कितनी बैटरी इस्तेमाल की" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 55b63b0d736..cd5d156e772 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -1813,7 +1813,7 @@ "Odaberite način povećavanja" "Povećaj cijeli zaslon" "Povećaj dio zaslona" - "Izmjenjivanje cijelog i djelomičnog prikaza zaslona" + "Izmjenjuj cijeli i djelomični prikaz zaslona" "Dodirnite gumb za prebacivanje da biste se prebacivali između opcija" "Prijeći na gumb za pristupačnost?" "Trostruki dodir za povećavanje dijela zaslona uzrokuje kašnjenje u tipkanju i drugim radnjama.\n\nGumb za pristupačnost lebdi na zaslonu iznad drugih aplikacija. Dodirnite ga da biste povećali prikaz." @@ -4655,7 +4655,7 @@ "Ponovno pokreni kasnije" "Prostorni zvuk" "Zvuk s kompatibilnih medija postaje realističniji" - "Praćenje glave" + "Praćenje pokreta glave" "Zvuk se mijenja kako pomičete glavu kako bi prirodnije zvučao" "Ograničenje brzine preuzimanja s mreže" "Konfigurirajte ograničenje ulazne brzine propusnosti mreže koje se primjenjuje na sve mreže koje pružaju internetsku vezu." diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 61f340ab452..8ea27a3c5e6 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -2504,7 +2504,7 @@ %1$s" "Gmail" "Naptár" - "Címtár" + "Névjegyek" "Alkalmazás-szinkronizálási beállítások" "Adatok és szinkronizálás" "Jelszó módosítása" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 94b0fa54b7e..7a32355c171 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -3274,8 +3274,8 @@ "Questa app non supporta le impostazioni avanzate" "Altre impostazioni" "Altre impostazioni sono disponibili all\'interno di quest\'app" - "Servizi helper VR" - "Nessuna app installata ha richiesto di essere eseguita come servizio helper VR." + "Servizi di supporto VR" + "Nessuna app installata ha richiesto di essere eseguita come servizio di supporto VR." "Consentire l\'accesso a %1$s al servizio VR?" "%1$s potrà essere eseguito quando utilizzi applicazioni in modalità realtà virtuale." "Quando in modalità VR" @@ -3672,7 +3672,7 @@ "Consenti all\'app di gestire contenuti multimediali" "Se autorizzata, questa app può modificare o eliminare file multimediali creati con altre app senza chiederti l\'autorizzazione. L\'app deve avere l\'autorizzazione di accesso a file e contenuti multimediali." "Contenuti multimediali, File, Gestione, Manager, Gestire, Modificare, Editor, App, Applicazione, Programma" - "vr realtà virtuale listener stereo helper servizio" + "vr realtà virtuale listener stereo servizio supporto" "Mostra sopra altre app" "App con autorizzazione" "Autorizzazione concessa" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 33135c3d36d..83048dab92b 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -1129,8 +1129,7 @@ "EID" "‏EID (חריץ SIM %1$d)" "‏IMEI (חריץ SIM ‏%1$d)" - - + "‏IMEI (חריץ SIM %1$d) (ראשי)" "יש לבחור רשת שמורה כדי להציג" "MIN" "MSID" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index ca24591936f..e837ac6dbcd 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -4465,7 +4465,7 @@ "メディア プレーヤーを固定する" "再生をすばやく再開できるよう、[クイック設定] にメディア プレーヤーを開いたままにします" "ロック画面にメディアを表示する" - "再生をすばやく再開できるよう、ロック画面にメディア プレーヤーを開いたままにします" + "再生をすばやく再開できるよう、ロック画面にメディア プレーヤーを開いたままにする" "おすすめのメディアを表示" "アクティビティに基づいて表示します" "プレーヤーを非表示" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index e630d20a900..0727d7eac8f 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -201,7 +201,7 @@ "Noņemt valodu" "Darbības izvēle" "Atcelt" - "LABI" + "Labi" "Aizmirst" "Saglabāt" "Gatavs" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index cb1d74de0f0..8e2ffd9d108 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -3383,7 +3383,7 @@ "कस कसले कल गर्दा यो सेटिङ लागू हुँदैन" "अनुमति दिइएका कलहरू आउँदा घन्टी बजोस् भन्नाका लागि डिभाइसको घन्टी बज्ने मोड अन छ भन्ने कुरा सुनिश्चित गर्नुहोस्" "‘%1$s’ मा आगमन कल निषेध गरिएको हुन्छ। तपाईं आफ्ना साथीभाइ, परिवारजन वा अन्य सम्पर्कहरूलाई आफूसँग सम्पर्क राख्न दिने गरी सेटिङहरू समायोजन गर्न सक्नुहुन्छ।" - "ताराङ्कित सम्पर्कहरू" + "ताराङ्कित कन्ट्याक्टहरू" "{count,plural,offset:2 =0{कुनै पनि होइन}=1{{contact_1}}=2{{contact_1} र {contact_2}}=3{{contact_1}, {contact_2} र {contact_3}}other{{contact_1}, {contact_2} र अरू #}}" "(कुनै नाम छैन)" "म्यासेजहरू" @@ -3442,7 +3442,7 @@ "धेरै कल गर्ने व्यक्तिहरू" "जोसुकै" "कन्ट्याक्टहरू" - "ताराङ्कित सम्पर्कहरू" + "ताराङ्कित कन्ट्याक्टहरू" "धेरै कल गर्ने व्यक्तिहरू" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 366e07e8ac5..8c2f53eb356 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -2257,7 +2257,7 @@ "Uitsplitsing sinds laatste volledige lading" "Laatste volledige lading" "Geschatte gebruikstijd na volledige lading" - "Resterende batterijtijd is een schatting en hangt af van het gebruik" + "Resterende batterijduur is een schatting en hangt af van het gebruik" "Batterijgebruik" "Geen gebruik sinds laatste volledige lading" "Geen gebruik in de afgelopen 24 u" @@ -4653,7 +4653,7 @@ "Later opnieuw opstarten" "Ruimtelijke audio" "Compatibele media leveren een royaler geluid" - "Bewegingen van het hoofd volgen" + "Hoofdtracking" "De audio wordt aangepast als je je hoofd beweegt, voor een natuurlijker geluid" "Limiet voor downloadsnelheid van netwerk" "Stel een limiet in voor inkomend verkeer voor de netwerkbandbreedte. Deze wordt toegepast op alle netwerken die internetconnectiviteit bieden" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 5baa7aff926..e7d7780d29e 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -4177,7 +4177,7 @@ "ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਨਾਮ ਤੁਹਾਡੇ ਫ਼ੋਨ \'ਤੇ ਐਪਾਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ। ਇਸਨੂੰ ਤੁਹਾਡੇ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕਰਨ, ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਜਾਂ ਵਾਈ-ਫਾਈ ਹੌਟਸਪੌਟ ਸੈੱਟਅੱਪ ਕਰਨ \'ਤੇ ਹੋਰ ਲੋਕਾਂ ਵੱਲੋਂ ਵੀ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।" "ਡੀਵਾਈਸਾਂ" "ਨੈੱਟਵਰਕ ਚੁਣੋ" - "ਡਿਸਕਨੈਕਟ ਹੋਇਆ" + "ਡਿਸਕਨੈਕਟ ਹੈ" "ਕਨੈਕਟ ਹੈ" "ਕਨੈਕਟ ਹੋ ਰਿਹਾ ਹੈ…" "ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index aac53c743e3..3a37fd5960f 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -243,7 +243,7 @@ "Блокировать после отключения" "%1$s после отключения" "Сразу по истечении времени ожидания (если блокировка экрана не контролируется функцией %1$s)" - "%1$s, если функция %2$s отключена" + "%1$s, если функция \"%2$s\" отключена" "Текст на заблокированном экране" "Нет текста" "Например, Android Саши" @@ -1483,7 +1483,7 @@ "Показывать графический ключ" "Виброотклик" "Блокировать кнопкой питания" - "Если функция %1$s отключена" + "Если функция \"%1$s\" отключена" "Установить ключ" "Изменить ключ" "Как начертить графический ключ разблокировки" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 958f5f7de78..9dcad788fc3 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -2765,7 +2765,7 @@ "Správca hovorov" - "Bezdrôtové núdzové upozornenia" + "Bezdrôtové tiesňové varovania" "Sieťoví operátori" "Názvy prístupových bodov" "VoLTE" @@ -4657,7 +4657,7 @@ "Reštartovať neskôr" "Priestorový zvuk" "Zvuk z kompatibilných médií bude strhujúcejší" - "Sledovanie pohybov hlavy" + "Sledovanie polohy hlavy" "Zmeny zvuku pri pohybe hlavou budú prirodzenejšie" "Limit rýchlosti sťahovania v sieti" "Nakonfigurujte limit rýchlosti sťahovania v sieti, ktorý sa bude vzťahovať na všetky siete umožňujúce pripojenie k internetu." diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 5e7b1c64713..c6f937dfd0f 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -1552,7 +1552,7 @@ "แอปฉุกเฉิน" "รีเซ็ตค่ากำหนดแอป" "รีเซ็ตค่ากำหนดแอปไหม" - "การดำเนินการนี้จะรีเซ็ตค่ากำหนดทั้งหมดสำหรับ\n\n"
  • "แอปที่ปิดใช้"
  • \n
  • "การแจ้งเตือนแอปที่ปิดใช้"
  • \n
  • "แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"
  • \n
  • "ข้อจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังสำหรับแอป"
  • \n
  • "ข้อจำกัดสิทธิ์ใดๆ"
  • \n
  • "การตั้งค่าการใช้งานแบตเตอรี่"
  • \n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    + "การดำเนินการนี้จะรีเซ็ตค่ากำหนดทั้งหมดสำหรับ\n\n"
  • "แอปที่ปิดใช้"
  • \n
  • "การแจ้งเตือนแอปที่ปิดใช้"
  • \n
  • "แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"
  • \n
  • "ข้อจำกัดข้อมูลในเบื้องหลังสำหรับแอป"
  • \n
  • "ข้อจำกัดสิทธิ์ใดๆ"
  • \n
  • "การตั้งค่าการใช้งานแบตเตอรี่"
  • \n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    "รีเซ็ตแอป" "ตัวกรอง" "เลือกตัวเลือกตัวกรอง" @@ -2487,10 +2487,10 @@ "โปรไฟล์งานยังไม่พร้อมใช้งาน" "แอปงาน" "นำโปรไฟล์งานออก" - "อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ข้อมูลในเบื้องหลัง" "แอปพลิเคชันสามารถซิงค์ ส่ง และรับข้อมูลได้ตลอดเวลา" - "ปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" - "การปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังจะทำให้แบตเตอรี่ใช้งานได้ยาวนานขึ้นและลดการใช้ข้อมูลลง แอปพลิเคชันบางอย่างอาจยังคงใช้การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังอยู่" + "ปิดข้อมูลในเบื้องหลังใช่ไหม" + "การปิดข้อมูลในเบื้องหลังจะทำให้แบตเตอรี่ใช้งานได้ยาวนานขึ้นและลดการใช้ข้อมูลลง แอปพลิเคชันบางอย่างอาจยังคงใช้การเชื่อมต่อข้อมูลในเบื้องหลังอยู่" "เปิดใช้การซิงค์" "ปิดการซิงค์" "ข้อผิดพลาดในการซิงค์" @@ -2514,7 +2514,7 @@ "นำบัญชีออกไหม" "ผู้ดูแลระบบไม่อนุญาตให้ทำการเปลี่ยนแปลงนี้" "ซิงค์ด้วยตนเองไม่ได้" - "รายการนี้ปิดการซิงค์อยู่ หากต้องการเปลี่ยนการตั้งค่า ให้เปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังและการซิงค์อัตโนมัติชั่วคราว" + "รายการนี้ปิดการซิงค์อยู่ หากต้องการเปลี่ยนการตั้งค่า ให้เปิดข้อมูลในเบื้องหลังและการซิงค์อัตโนมัติชั่วคราว" "ลบ" "เลือกทั้งหมด" "ปริมาณการใช้อินเทอร์เน็ต" @@ -2546,12 +2546,12 @@ "เบื้องหน้า:" "แบ็กกราวน์:" "การตั้งค่าแอป" - "อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ข้อมูลในเบื้องหลัง" "เปิดใช้อินเทอร์เน็ตมือถือในเบื้องหลัง" "ก่อนอื่นให้ตั้งค่าขีดจำกัดในการใช้เน็ตมือถือก่อน เพื่อจำกัดอินเทอร์เน็ตที่แอปนี้ใช้งานอยู่เบื้องหลัง" - "ต้องการจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังหรือไม่" - "ฟีเจอร์นี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังหยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้\n\nคุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" - "คุณสามารถจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังได้เมื่อคุณได้ตั้งค่าขีดจำกัดอินเทอร์เน็ตมือถือไว้เท่านั้น" + "ต้องการจำกัดข้อมูลในเบื้องหลังหรือไม่" + "ฟีเจอร์นี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยข้อมูลในเบื้องหลังหยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้\n\nคุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" + "คุณสามารถจำกัดข้อมูลในเบื้องหลังได้เมื่อคุณได้ตั้งค่าขีดจำกัดอินเทอร์เน็ตมือถือไว้เท่านั้น" "เปิดซิงค์ข้อมูลอัตโนมัติไหม" "ปิดซิงค์ข้อมูลอัตโนมัติไหม" "การทำเช่นนี้จะเป็นการประหยัดปริมาณการใช้อินเทอร์เน็ตและแบตเตอรี่ แต่คุณจะต้องซิงค์แต่ละบัญชีด้วยตนเองเพื่อรวบรวมข้อมูลล่าสุด และคุณจะไม่ได้รับการแจ้งเตือนเมื่อมีการอัปเดต" @@ -3803,7 +3803,7 @@ "ดูรายละเอียด" "การประหยัดอินเทอร์เน็ต" "ไม่จำกัดการใช้อินเทอร์เน็ต" - "ปิดใช้อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ปิดใช้ข้อมูลในเบื้องหลังอยู่" "เปิด" "ปิด" "ใช้การประหยัดอินเทอร์เน็ต" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index c36efd98b7a..f8ec8d3ad99 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -2577,7 +2577,7 @@ "Chứng chỉ người dùng IPSec" "Chứng chỉ IPSec CA" "Chứng chỉ máy chủ IPSec" - "Hiện tùy chọn nâng cao" + "Hiện tuỳ chọn nâng cao" "Miền tìm kiếm DNS" "Máy chủ DNS (ví dụ: 8.8.8.8)" "Các tuyến chuyển tiếp (vd: 10.0.0.0/8)" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 54933548c12..3d50c84290a 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -4465,7 +4465,7 @@ "固定媒体播放器" "为了方便您快速恢复播放,媒体播放器会在“快捷设置”中保持打开状态" "在锁定的屏幕上显示媒体" - "为了方便您快速恢复播放,媒体播放器会在锁定的屏幕上保持打开状态" + "为了方便您快速恢复播放,媒体播放器会在锁定的屏幕上保持开启状态" "显示媒体推荐内容" "根据您的活动" "隐藏播放器" From bc401c3cb35e754d68663de3d855e081e5bdbda5 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 12 May 2024 17:26:55 -0700 Subject: [PATCH 06/11] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Iabf9cc384edabd73c43f64406904f033203d0606 --- res/values-ne/arrays.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml index 99afd0e8900..5be0f065ef1 100644 --- a/res/values-ne/arrays.xml +++ b/res/values-ne/arrays.xml @@ -169,8 +169,8 @@ "राम्रो स्थान" "GPS" "कम्पन" - "सम्पर्कहरू पढ्नुहोस्" - "सम्पर्कहरू परिमार्जन गर्नुहोस्" + "कन्ट्याक्टहरू पढ्नुहोस्" + "कन्ट्याक्टहरू परिमार्जन गर्नुहोस्" "कल लग पढ्नुहोस्" "कल लग परिमार्जन गर्नुहोस्" "पात्रो पढ्नुहोस्" @@ -236,8 +236,8 @@ "स्थान" "स्थान" "भाइब्रेट गर्नुहोस्" - "सम्पर्कहरू पढ्नुहोस्" - "सम्पर्कहरू परिमार्जन गर्नुहोस्" + "कन्ट्याक्टहरू पढ्नुहोस्" + "कन्ट्याक्टहरू परिमार्जन गर्नुहोस्" "कल लग पढ्नुहोस्" "कल लग परिमार्जन गर्नुहोस्" "पात्रो पढ्नुहोस्" From abc9a7413bb979446f9a72543a70e144a38d9c63 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 12 May 2024 17:30:31 -0700 Subject: [PATCH 07/11] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I5f2d28351f89a4428ee3dd37d515d0b32bc79387 --- res/values-af/strings.xml | 2 +- res/values-am/strings.xml | 2 +- res/values-ar/strings.xml | 2 +- res/values-da/strings.xml | 2 +- res/values-es-rUS/strings.xml | 4 ++-- res/values-fa/strings.xml | 2 +- res/values-fr-rCA/strings.xml | 10 +++++----- res/values-hi/strings.xml | 4 ++-- res/values-hr/strings.xml | 4 ++-- res/values-hu/strings.xml | 2 +- res/values-in/strings.xml | 2 +- res/values-it/strings.xml | 6 +++--- res/values-iw/strings.xml | 3 +-- res/values-ja/strings.xml | 2 +- res/values-lv/strings.xml | 2 +- res/values-ne/strings.xml | 6 +++--- res/values-nl/strings.xml | 4 ++-- res/values-pa/strings.xml | 8 ++++---- res/values-ru/strings.xml | 6 +++--- res/values-sk/strings.xml | 4 ++-- res/values-th/strings.xml | 20 ++++++++++---------- res/values-vi/strings.xml | 4 ++-- res/values-zh-rCN/strings.xml | 8 ++++---- 23 files changed, 54 insertions(+), 55 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 697892ba514..be981cb74ac 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -4042,7 +4042,7 @@ "Datawaarskuwing en datalimiet word deur jou toestel gemeet. Dit kan van die diensverskafferdata verskil." "Stel datalimiet" "Datalimiet" - "%1$s in %2$s gebruik" + "%1$s tydens %2$s gebruik" "Stel op" "Ander programme wat by gebruik ingesluit is" "{count,plural, =1{1 app word toegelaat om onbeperkte data te gebruik wanneer Databespaarder aan is}other{# apps word toegelaat om onbeperkte data te gebruik wanneer Databespaarder aan is}}" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 164b5fab3f1..9304261369e 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -2132,7 +2132,7 @@ "የተደራሽነት አዝራርን መጠቀም። የእጅ ምልክቱ በባለ3-አዝራር ዳሰሳ አይገኝም።" "የተደራሽነት ባህሪያትን በፍጥነት ይድረሱባቸው" "<b>ለመጀመር</b><br/> {0፣ቁጥር፣ኢንቲጀር}። ወደ የተደራሽነት ቅንብሮች<br/> {1፣ቁጥር፣ኢንቲጀር} ይሂዱ። ባህሪን ይምረጡ እና አቋራጩን<br/> {2፣ቁጥር፣ኢንቲጀር} መታ ያድርጉ። ባህሪውን ለመድረስ አዝራርን ወይም ምልክትን ለመጠቀም ይፈልጉ እንደሆነ ይምረጡ<br/>" - "<b>ለመጀመር</b><br/> {0፣ቁጥር፣ኢንቲጀር}። ወደ የተደራሽነት ቅንብሮች<br/> {1፣ቁጥር፣ኢንቲጀር} ይሂዱ። ባህሪን ይምረጡ እና አቋራጩን<br/> {2፣ቁጥር፣ኢንቲጀር} መታ ያድርጉ። ባህሪውን ለመድረስ አዝራሩን ይምረጡ<br/>" + "<b>ለመጀመር</b><br/> {0,number,integer}። ወደ የተደራሽነት ቅንብሮች<br/> {1,number,integer} ይሂዱ። ባህሪን ይምረጡ እና አቋራጩን<br/> {2,number,integer} መታ ያድርጉ። ባህሪውን ለመድረስ አዝራሩን ይምረጡ<br/>" "አዝራርን ወይም የእጅ ምልክትን ይጠቀሙ" "አካባቢ" "መጠን" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 0951b8d30e3..1efbc61fc09 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -5103,7 +5103,7 @@ "الميزة مفعّلة" "الميزة غير مفعّلة" "الاختصار غير مفعَّل" - "الاختصار غير مفعَّل" + "غير مفعَّل" "الميزة مفعَّلة" "الميزة غير مفعَّلة" "الميزة مفعَّلة" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index da6d99e6918..00dd8b86ce1 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -984,7 +984,7 @@ "Deler Wi-Fi med denne enhed…" "Opretter forbindelse…" "Del hotspot" - "Bekræft, at det er dig" + "Verificer, at det er dig" "Adgangskode til Wi-Fi-netværk: %1$s" "Adgangskode til hotspot: %1$s" "Opret automatisk forbindelse" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 2e526a77f06..0a77ea820f9 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -556,7 +556,7 @@ "Igual al bloqueo de pantalla del dispositivo" "¿Elegir un nuevo bloqueo para tu espacio privado?" "Bloquear espacio privado automáticamente" - "Puedes bloquear el espacio privado automáticamente si no usas el dispositivo por un cierto período" + "Puedes bloquear el espacio privado automáticamente si no usas el dispositivo por cierto período" "Cada vez que el dispositivo se bloquea" "Después de 5 minutos de inactividad" "Nunca" @@ -2109,7 +2109,7 @@ "Más información sobre %1$s" "Mantener presionadas las teclas de volumen" "mantener presionadas las teclas de volumen" - "Mantén presionadas ambas teclas de volumen." + "Mantén presionadas ambas teclas de volumen" "Presiona dos veces la pantalla con dos dedos" "presiona dos veces la pantalla con dos dedos" "Presiona la pantalla rápidamente {0,number,integer} veces con dos dedos" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index cc453dad1b8..0a0c6083e79 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -3953,7 +3953,7 @@ "با دو بار چرخاندن مچتان، برنامه دوربین را باز کنید" "اندازه نمایش" "همه چیز را بزرگ‌تر یا کوچک‌تر می‌کند" - "تراکم نمایشگر، بزرگ‌نمایی صفحه، مقیاس، مقیاس‌بندی" + "تراکم نمایش، بزرگ‌نمایی صفحه، مقیاس، مقیاس‌بندی" "پیش‌نمایش" "کوچک‌تر ببینید" "بزرگ‌تر ببینید" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 1355320340a..c69ebf14b0d 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -2090,9 +2090,9 @@ "Pour démarrer et arrêter l\'agrandissement, touchez l\'écran trois fois n\'importe où." "Pour démarrer et arrêter l\'Agrandissement, touchez deux fois l\'écran n\'importe où avec deux doigts." "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez la pression." - "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y." - "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez-la pression." - "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y." + "Pour utiliser cette fonctionnalité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez la pression." + "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec deux doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec deux doigts et maintenez la pression." + "Pour utiliser une fonctionnalité d\'accessibilité, balayez l\'écran de bas en haut avec trois doigts.\n\nPour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez la pression." "OK" "Paramètres du bouton" "Raccourci %1$s" @@ -3506,7 +3506,7 @@ "Votre téléphone ne sonnera ou ne vibrera pas lorsqu\'il reçoit ces notifications" "Autorisées" "Non autorisées" - "Afficher toutes les applications" + "Afficher toutes les applis" "Modifier les paramètres pour chaque application qui envoie des notifications" "Applications affichées sur l\'appareil" "Cette application ne prend pas en charge les paramètres améliorés" @@ -4886,7 +4886,7 @@ "Utiliser la technologie CCP" "Utiliser la luminosité adaptative" "Utiliser les appels Wi-Fi" - "Afficher toutes les applications" + "Afficher toutes les applis" "Transfert d\'appels intelligent" "Le transfert d\'appels intelligent est activé" "Le transfert d\'appels intelligent est désactivé" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index a76109f33ca..5a0987bad75 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -803,7 +803,7 @@ "ऑडियो डिवाइस से जोड़ने के लिए पुष्टि करें" "अपने संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" "संपर्क और कॉल इतिहास को ऐक्सेस करने की भी अनुमति दें" - "इस जानकारी का इस्तेमाल, कॉल की सूचना देने और दूसरी चीज़ों के लिए किया जाएगा" + "इस जानकारी का इस्तेमाल, कॉल की सूचना देने वगैरह के लिए किया जाएगा" "%1$s से कनेक्‍ट नहीं किया जा सका." "उपलब्ध ब्लूटूथ डिवाइस" @@ -2540,7 +2540,7 @@ "%1$s बैटरी होने पर" "बैटरी का प्रतिशत" "स्टेटस बार में दिखाएं कि कितने प्रतिशत बैटरी बची है" - "पूरा चार्ज होने के बाद, बैटरी का लेवल" + "पूरी तरह से चार्ज होने के बाद से लेकर अब तक बैटरी का लेवल" "पिछले 24 घंटों में बैटरी लेवल की जानकारी" "पिछली बार पूरी तरह चार्ज होने के बाद से अब तक, ऐप्लिकेशन के इस्तेमाल में खर्च हुई बैटरी" "पिछले 24 घंटों में, ऐप्लिकेशन ने कितनी बैटरी इस्तेमाल की" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 9fc4baa7863..6b299b080d6 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -2045,7 +2045,7 @@ "Odaberite način povećavanja" "Povećaj cijeli zaslon" "Povećaj dio zaslona" - "Izmjenjivanje cijelog i djelomičnog prikaza zaslona" + "Izmjenjuj cijeli i djelomični prikaz zaslona" "Dodirnite gumb za prebacivanje da biste se prebacivali između opcija" "Prijeći na gumb za pristupačnost?" "Trostruki dodir za povećavanje dijela zaslona uzrokuje kašnjenje u tipkanju i drugim radnjama.\n\nGumb za pristupačnost lebdi na zaslonu iznad drugih aplikacija. Dodirnite ga da biste povećali prikaz." @@ -4997,7 +4997,7 @@ "Ponovno pokreni kasnije" "Prostorni zvuk" "Zvuk s kompatibilnih medija postaje realističniji" - "Praćenje glave" + "Praćenje pokreta glave" "Zvuk se mijenja kako pomičete glavu kako bi prirodnije zvučao" "Sinkronizacija dopuštenja s telefona" "Svojem satu dajte jednaka dopuštenja aplikacija koja ste dopustili na ovom telefonu" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 67836869756..e0de32fcb9e 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -2752,7 +2752,7 @@ %1$s"
    "Gmail" "Naptár" - "Címtár" + "Névjegyek" "Alkalmazás-szinkronizálási beállítások" "Adatok és szinkronizálás" "Jelszó módosítása" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 5fce93c706b..7f75a5e9bea 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -984,7 +984,7 @@ "Membagikan Wi‑Fi kepada perangkat ini…" "Menyambungkan…" "Bagikan hotspot" - "Verifikasi bahwa ini memang Anda" + "Verifikasi diri Anda" "Sandi Wi‑Fi: %1$s" "Sandi hotspot: %1$s" "Hubungkan otomatis" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 1c24ce8f2b0..0840064caa8 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -3523,8 +3523,8 @@ "Vibra solo solo quando lo schermo è sbloccato" "Applica ai profili di lavoro" "Applica le impostazioni di attenuazione delle notifiche dal profilo personale al profilo di lavoro" - "Servizi helper VR" - "Nessuna app installata ha richiesto di essere eseguita come servizio helper VR." + "Servizi di supporto VR" + "Nessuna app installata ha richiesto di essere eseguita come servizio di supporto VR." "Consentire l\'accesso a %1$s al servizio VR?" "%1$s potrà essere eseguito quando utilizzi applicazioni in modalità realtà virtuale." "Quando in modalità VR" @@ -3934,7 +3934,7 @@ "Consenti all\'app di gestire contenuti multimediali" "Se autorizzata, questa app può modificare o eliminare file multimediali creati con altre app senza chiederti l\'autorizzazione. L\'app deve avere l\'autorizzazione di accesso a file e contenuti multimediali." "Contenuti multimediali, File, Gestione, Manager, Gestire, Modificare, Editor, App, Applicazione, Programma" - "vr realtà virtuale listener stereo helper servizio" + "vr realtà virtuale listener stereo servizio supporto" "Mostra sopra altre app" "App con autorizzazione" "Autorizzazione concessa" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index ee8c473b15f..0b2c21e348c 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -1324,8 +1324,7 @@ "EID" "‏EID (חריץ SIM %1$d)" "‏IMEI (חריץ SIM ‏%1$d)" - - + "‏IMEI (חריץ SIM %1$d) (ראשי)" "יש לבחור רשת שמורה כדי להציג" "IMEI" "IMEI SV" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 24c284f7807..5f018333a65 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -4803,7 +4803,7 @@ "メディア プレーヤーを固定する" "再生をすばやく再開できるよう、[クイック設定] にメディア プレーヤーを開いたままにします" "ロック画面にメディアを表示する" - "再生をすばやく再開できるよう、ロック画面にメディア プレーヤーを開いたままにします" + "再生をすばやく再開できるよう、ロック画面にメディア プレーヤーを開いたままにする" "アシスタントのおすすめのメディアを表示する" "アクティビティに基づいて表示します" "プレーヤーを非表示" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 31ea8a7740a..28d3170d1a0 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -227,7 +227,7 @@ "Noņemt valodu" "Darbības izvēle" "Atcelt" - "LABI" + "Labi" "Aizmirst" "Saglabāt" "Gatavs" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 88452d1211b..5be13499411 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -984,7 +984,7 @@ "यो सेवामार्फत Wi‑Fi आदान प्रदान गर्दै…" "जडान गर्दै…" "हटस्पट सेयर गर्नुहोस्" - "यो तपाईं नै हो भन्ने पुष्टि गर्नुहोस्" + "आफ्नो पहिचान पुष्टि गर्नुहोस्" "Wi-Fi को पासवर्ड: %1$s" "हटस्पटको पासवर्ड: %1$s" "अटो कनेक्ट" @@ -3634,7 +3634,7 @@ "कस कसले कल गर्दा यो सेटिङ लागू हुँदैन" "अनुमति दिइएका कलहरू आउँदा घन्टी बजोस् भन्नाका लागि डिभाइसको घन्टी बज्ने मोड अन छ भन्ने कुरा सुनिश्चित गर्नुहोस्" "‘%1$s’ मा आगमन कल निषेध गरिएको हुन्छ। तपाईं आफ्ना साथीभाइ, परिवारजन वा अन्य सम्पर्कहरूलाई आफूसँग सम्पर्क राख्न दिने गरी सेटिङहरू समायोजन गर्न सक्नुहुन्छ।" - "ताराङ्कित सम्पर्कहरू" + "ताराङ्कित कन्ट्याक्टहरू" "{count,plural,offset:2 =0{कुनै पनि होइन}=1{{contact_1}}=2{{contact_1} र {contact_2}}=3{{contact_1}, {contact_2} र {contact_3}}other{{contact_1}, {contact_2} र अरू #}}" "(कुनै नाम छैन)" "म्यासेजहरू" @@ -3693,7 +3693,7 @@ "धेरै कल गर्ने व्यक्तिहरू" "जोसुकै" "कन्ट्याक्टहरू" - "ताराङ्कित सम्पर्कहरू" + "ताराङ्कित कन्ट्याक्टहरू" "धेरै कल गर्ने व्यक्तिहरू" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 9db28a8233a..a39357390ad 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -2502,7 +2502,7 @@ "Uitsplitsing sinds laatste volledige lading" "Laatste volledige lading" "Geschatte gebruikstijd na volledige lading" - "Resterende batterijtijd is een schatting en hangt af van het gebruik" + "Resterende batterijduur is een schatting en hangt af van het gebruik" "Batterijgebruik" "Geen gebruik sinds laatste volledige lading" "Geen gebruik in de afgelopen 24 u" @@ -4996,7 +4996,7 @@ "Later opnieuw opstarten" "Ruimtelijke audio" "Compatibele media leveren een royaler geluid" - "Bewegingen van het hoofd volgen" + "Hoofdtracking" "De audio wordt aangepast als je je hoofd beweegt, voor een natuurlijker geluid" "Rechten synchroniseren vanaf de telefoon" "Geef je smartwatch dezelfde app-rechten die je op deze telefoon hebt toegestaan" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 6ad48bec706..39a7614d8b8 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -4463,7 +4463,7 @@ "ਨੈੱਟਵਰਕ ਵੇਰਵੇ" "ਡੀਵਾਈਸਾਂ" "ਨੈੱਟਵਰਕ ਚੁਣੋ" - "ਡਿਸਕਨੈਕਟ ਹੋਇਆ" + "ਡਿਸਕਨੈਕਟ ਹੈ" "ਕਨੈਕਟ ਹੈ" "ਕਨੈਕਟ ਹੋ ਰਿਹਾ ਹੈ…" "ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" @@ -5114,10 +5114,10 @@ "ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਨਾਮ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਗਈਆਂ ਐਪਾਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਨ, ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਜਾਂ ਵਾਈ-ਫਾਈ ਹੌਟਸਪੌਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰਨ \'ਤੇ ਇਸਨੂੰ ਹੋਰ ਲੋਕਾਂ ਵੱਲੋਂ ਵੀ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।" "ਵਿਆਕਰਨਿਕ ਲਿੰਗ" "ਵਿਆਕਰਨ ਸੰਬੰਧੀ ਲਿੰਗ ਚੁਣੋ" - "ਧੋਖੇਬਾਜ਼ ਐਪਾਂ ਲਈ ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + "ਭਰਮਾਊ ਐਪਾਂ ਲਈ ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" "ਫ਼ਿਸ਼ਿੰਗ ਲਈ ਐਪ ਸਰਗਰਮੀ ਦੀ ਜਾਂਚ ਕਰੋ" - "ਧੋਖਾਧੜੀ ਵਾਲੀਆਂ ਐਪਾਂ ਲਈ ਸਕੈਨਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰੋ" - "ਧੋਖਾਧੜੀ ਵਾਲੀਆਂ ਐਪਾਂ ਲਈ ਸਕੈਨਿੰਗ ਦੀ ਕੰਮ ਵਾਸਤੇ ਵਰਤੋਂ ਕਰੋ" + "ਭਰਮਾਊ ਐਪਾਂ ਲਈ ਸਕੈਨਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰੋ" + "ਭਰਮਾਊ ਐਪਾਂ ਲਈ ਸਕੈਨਿੰਗ ਦੀ ਕੰਮ ਵਾਸਤੇ ਵਰਤੋਂ ਕਰੋ" "ਹੁਣ ਪਾਸਵਰਡ ਸੈੱਟ ਹੋ ਗਿਆ ਹੈ" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index f34ae5f500e..c58cd26aa71 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -269,7 +269,7 @@ "Блокировать после отключения" "%1$s после отключения" "Сразу по истечении времени ожидания (если блокировка экрана не контролируется функцией %1$s)" - "%1$s, если функция %2$s отключена" + "%1$s, если функция \"%2$s\" отключена" "Текст на заблокированном экране" "Нет текста" "Например, Android Саши" @@ -614,7 +614,7 @@ "Выберите способ разблокировки личного пространства" "Вы можете разблокировать частное пространство с помощью отпечатка пальца. В целях безопасности потребуется установить дополнительный способ разблокировки." "Задайте PIN-код для личного пространства" - "Задайте пароль для личного пространства" + "Задайте пароль для частного пространства" "Создайте ключ для личного пространства" "Приложения и уведомления" "Уведомления с конфиденциальными данными на заблокированном экране" @@ -1680,7 +1680,7 @@ "Показывать графический ключ" "Виброотклик" "Блокировать кнопкой питания" - "Если функция %1$s отключена" + "Если функция \"%1$s\" отключена" "Установить ключ" "Изменить ключ" "Как начертить графический ключ разблокировки" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index cdf6255325c..ad8cd505921 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -3001,7 +3001,7 @@ "Upozornenia Amber" "Prijímať bulletiny o únosoch detí" "Opakovať" - "Bezdrôtové núdzové upozornenia" + "Bezdrôtové tiesňové varovania" "Sieťoví operátori" "Názvy prístupových bodov" "VoLTE" @@ -4998,7 +4998,7 @@ "Reštartovať neskôr" "Priestorový zvuk" "Zvuk z kompatibilných médií bude strhujúcejší" - "Sledovanie pohybov hlavy" + "Sledovanie polohy hlavy" "Zmeny zvuku pri pohybe hlavou budú prirodzenejšie" "Synchronizácia povolení z telefónu" "Udeľte hodinkám rovnaké povolenia aplikácie, ktoré ste poskytli v tomto telefóne" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 3c7e9431c99..842f507a1d8 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -1755,7 +1755,7 @@ "แอปฉุกเฉิน" "รีเซ็ตค่ากำหนดแอป" "รีเซ็ตค่ากำหนดแอปไหม" - "การดำเนินการนี้จะรีเซ็ตค่ากำหนดทั้งหมดสำหรับ\n\n"
  • "แอปที่ปิดใช้"
  • \n
  • "การแจ้งเตือนแอปที่ปิดใช้"
  • \n
  • "แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"
  • \n
  • "ข้อจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังสำหรับแอป"
  • \n
  • "ข้อจำกัดสิทธิ์ใดๆ"
  • \n
  • "การตั้งค่าการใช้งานแบตเตอรี่"
  • \n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    + "การดำเนินการนี้จะรีเซ็ตค่ากำหนดทั้งหมดสำหรับ\n\n"
  • "แอปที่ปิดใช้"
  • \n
  • "การแจ้งเตือนแอปที่ปิดใช้"
  • \n
  • "แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"
  • \n
  • "ข้อจำกัดข้อมูลในเบื้องหลังสำหรับแอป"
  • \n
  • "ข้อจำกัดสิทธิ์ใดๆ"
  • \n
  • "การตั้งค่าการใช้งานแบตเตอรี่"
  • \n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    "รีเซ็ตแอป" "ตัวกรอง" "เลือกตัวเลือกตัวกรอง" @@ -2735,10 +2735,10 @@ "โปรไฟล์งานยังไม่พร้อมใช้งาน" "แอปงาน" "นำโปรไฟล์งานออก" - "อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ข้อมูลในเบื้องหลัง" "แอปพลิเคชันสามารถซิงค์ ส่ง และรับข้อมูลได้ตลอดเวลา" - "ปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" - "การปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังจะทำให้แบตเตอรี่ใช้งานได้ยาวนานขึ้นและลดการใช้ข้อมูลลง แอปพลิเคชันบางอย่างอาจยังคงใช้การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังอยู่" + "ปิดข้อมูลในเบื้องหลังใช่ไหม" + "การปิดข้อมูลในเบื้องหลังจะทำให้แบตเตอรี่ใช้งานได้ยาวนานขึ้นและลดการใช้ข้อมูลลง แอปพลิเคชันบางอย่างอาจยังคงใช้การเชื่อมต่อข้อมูลในเบื้องหลังอยู่" "เปิดใช้การซิงค์" "ปิดการซิงค์" "ข้อผิดพลาดในการซิงค์" @@ -2762,7 +2762,7 @@ "นำบัญชีออกไหม" "ผู้ดูแลระบบไม่อนุญาตให้ทำการเปลี่ยนแปลงนี้" "ซิงค์ด้วยตนเองไม่ได้" - "รายการนี้ปิดการซิงค์อยู่ หากต้องการเปลี่ยนการตั้งค่า ให้เปิดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังและการซิงค์อัตโนมัติชั่วคราว" + "รายการนี้ปิดการซิงค์อยู่ หากต้องการเปลี่ยนการตั้งค่า ให้เปิดข้อมูลในเบื้องหลังและการซิงค์อัตโนมัติชั่วคราว" "ลบ" "เลือกทั้งหมด" "ปริมาณการใช้อินเทอร์เน็ต" @@ -2795,12 +2795,12 @@ "เบื้องหน้า:" "แบ็กกราวน์:" "การตั้งค่าแอป" - "อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ข้อมูลในเบื้องหลัง" "เปิดใช้อินเทอร์เน็ตมือถือในเบื้องหลัง" "ก่อนอื่นให้ตั้งค่าขีดจำกัดในการใช้เน็ตมือถือก่อน เพื่อจำกัดอินเทอร์เน็ตที่แอปนี้ใช้งานอยู่เบื้องหลัง" - "ต้องการจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังหรือไม่" - "ฟีเจอร์นี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังหยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้\n\nคุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" - "คุณสามารถจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังได้เมื่อคุณได้ตั้งค่าขีดจำกัดอินเทอร์เน็ตมือถือไว้เท่านั้น" + "ต้องการจำกัดข้อมูลในเบื้องหลังหรือไม่" + "ฟีเจอร์นี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยข้อมูลในเบื้องหลังหยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้\n\nคุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" + "คุณสามารถจำกัดข้อมูลในเบื้องหลังได้เมื่อคุณได้ตั้งค่าขีดจำกัดอินเทอร์เน็ตมือถือไว้เท่านั้น" "เปิดซิงค์ข้อมูลอัตโนมัติไหม" "ปิดซิงค์ข้อมูลอัตโนมัติไหม" "การทำเช่นนี้จะเป็นการประหยัดปริมาณการใช้อินเทอร์เน็ตและแบตเตอรี่ แต่คุณจะต้องซิงค์แต่ละบัญชีด้วยตนเองเพื่อรวบรวมข้อมูลล่าสุด และคุณจะไม่ได้รับการแจ้งเตือนเมื่อมีการอัปเดต" @@ -4063,7 +4063,7 @@ "ดูรายละเอียด" "การประหยัดอินเทอร์เน็ต" "ไม่จำกัดการใช้อินเทอร์เน็ต" - "ปิดใช้อินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลัง" + "ปิดใช้ข้อมูลในเบื้องหลังอยู่" "เปิด" "ปิด" "ใช้การประหยัดอินเทอร์เน็ต" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 717145e6ec2..d2895364919 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -571,7 +571,7 @@ "Bật" "Hệ thống" "Xoá không gian riêng tư" - "Xoá Không gian riêng tư?" + "Xoá không gian riêng tư?" "Không gian riêng tư của bạn sẽ bị xoá khỏi thiết bị này. Mọi dữ liệu và ứng dụng riêng tư sẽ bị xoá. Bạn không thể huỷ thao tác này." "Các tài khoản sau sẽ bị xoá khỏi không gian riêng tư của bạn:" "Xoá" @@ -2824,7 +2824,7 @@ "Chứng chỉ người dùng IPSec" "Chứng chỉ IPSec CA" "Chứng chỉ máy chủ IPSec" - "Hiện tùy chọn nâng cao" + "Hiện tuỳ chọn nâng cao" "Tên người dùng" "Mật khẩu" "Lưu thông tin tài khoản" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 6dffe87b212..60ba12bc9ee 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -571,7 +571,7 @@ "开启" "系统" "删除私密空间" - "删除私密空间?" + "要删除私密空间吗?" "您的私密空间将从设备上移除。所有专用应用和数据都会被删除。此操作一经执行便无法撤消。" "以下账号将被从您的私密空间中移除:" "删除" @@ -4629,12 +4629,12 @@ "选择要使用哪些 SIM 卡" "可以同时使用 2 张 SIM 卡" "设置主 SIM 卡" - "选择在拨打电话、发送短信和使用移动网络时默认使用的 SIM 卡" + "选择在拨打电话、发送短信和使用移动数据流量时默认使用的 SIM 卡" "主 SIM 卡" "通话" "短信" "自动切换数据网络" - "根据信号覆盖率和可用性来选择使用哪张 SIM 卡的移动网络" + "根据信号覆盖和剩余流量情况,自动选择一张最合适的 SIM 卡" "上网专用" "设置" "继续" @@ -4803,7 +4803,7 @@ "固定媒体播放器" "为了方便您快速恢复播放,媒体播放器会在“快捷设置”中保持打开状态" "在锁定的屏幕上显示媒体" - "为了方便您快速恢复播放,媒体播放器会在锁定的屏幕上保持打开状态" + "为了方便您快速恢复播放,媒体播放器会在锁定的屏幕上保持开启状态" "显示 Google 助理推荐的媒体内容" "根据您的活动" "隐藏播放器" From 9f186e2b091f7c29c62a5ecc1ab40c57452495ec Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sun, 12 May 2024 17:33:41 -0700 Subject: [PATCH 08/11] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I88ddb0e7dc30d084c5156759a363b0793c1e405d --- res-product/values-de/strings.xml | 4 ++-- res-product/values-ne/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res-product/values-de/strings.xml b/res-product/values-de/strings.xml index e549054c995..1eb3fa71873 100644 --- a/res-product/values-de/strings.xml +++ b/res-product/values-de/strings.xml @@ -228,9 +228,9 @@ "Das Display wechselt automatisch zwischen Hoch- und Querformat, wenn du das Smartphone drehst" "Das Display wechselt automatisch zwischen Hoch- und Querformat, wenn du das Tablet drehst" "PIN zur Verwendung des Tablets erforderlich" - "Telefon kann nur mit PIN genutzt werden" + "Smartphone kann nur mit PIN genutzt werden" "PIN zur Verwendung des Tablets erforderlich" - "Telefon kann nur mit PIN genutzt werden" + "Smartphone kann nur mit PIN genutzt werden" "MDN" "Telefonnummer" "MDN (SIM-Steckplatz %1$d)" diff --git a/res-product/values-ne/strings.xml b/res-product/values-ne/strings.xml index 68597a50fea..a50f3e92bb7 100644 --- a/res-product/values-ne/strings.xml +++ b/res-product/values-ne/strings.xml @@ -303,7 +303,7 @@ "SD कार्डबाट सर्टिफिकेट इन्स्टल गर्नुहोस्" "यो खाता मेटाउँदा ट्याब्लेटबाट यसका सबै सन्देश,सम्पर्क ठेगाना र अन्य डेटा मेटाइने छन्!" "तपाईंले यो खाता हटाउनुभयो भने फोनबाट यो खातासँग सम्बन्धित सबै म्यासेज, कन्ट्याक्ट र अन्य डेटा हट्छ!" - "यो खातालाई हटाउनुले यस डिभाइसबाट यस खातामा रहेका सम्पूर्ण सन्देश, सम्पर्कहरू र अन्य डेटा मेटाउने छ!" + "यो खातालाई हटाउनुले यस डिभाइसबाट यस खातामा रहेका सम्पूर्ण सन्देश, कन्ट्याक्टहरू र अन्य डेटा मेटाउने छ!" "तपाईंले वेबमा आफ्नो खातामा गर्न हुने कुनै पनि परिवर्तनहरू स्वचालित रूपमा तपाईँको ट्याब्लेटमा कपी गरिने छ।\n\nकेही खाता पनि स्वचालित वेब ट्याब्लेटमा तपाईंले बनाउने कुनै पनि परिवर्तनहरू कपी हुन सक्छ। Google खाताले यसरी कार्य गर्दछ।" "तपाईंले वेबबाट आफ्नो खातामा गर्ने सबै परिवर्तनहरू स्वत: तपाईंको फोनमा कपी गरिने छ।\n\nकेही खाताको हकमा तपाईंले फोनमा गर्ने सबै परिवर्तनहरू वेबमा पनि कपी गरिन सक्छ। Google खाताले यसरी कार्य गर्दछ।" "तपाईंको ट्याब्लेट तपाईंले सेट गर्नुभएको अधिकतम डेटा प्रयोगको सीमामा पुगेपछि यसले मोबाइल डेटालाई निष्क्रिय पार्नेछ।\n\nतपाईंको ट्याब्लेटले र तपाईंको सेवा प्रदायकले फरक तरिकाले डेटा प्रयोगको मापन गर्न सक्ने हुनाले विवेकपूर्ण तरिकाले यसको सीमा सेट गर्ने बारे विचार गर्नुहोस्।" From 881c19480af51b5523d363659dff4e0bcb8b28fa Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Fri, 10 May 2024 16:54:12 +0800 Subject: [PATCH 09/11] Fix isSubscriptionEnabledFlow crash When INVALID_SUBSCRIPTION_ID. Fix: 338014486 Test: unit test Change-Id: I97b5f005fb99473c2712f9643704a35cfaeecfac --- .../network/telephony/SubscriptionRepository.kt | 17 +++++++++++------ .../android/settings/spa/network/SimsSection.kt | 4 ++-- .../telephony/SubscriptionRepositoryTest.kt | 15 +++++++++++++-- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/network/telephony/SubscriptionRepository.kt b/src/com/android/settings/network/telephony/SubscriptionRepository.kt index 05cfad884b3..adb67e1a512 100644 --- a/src/com/android/settings/network/telephony/SubscriptionRepository.kt +++ b/src/com/android/settings/network/telephony/SubscriptionRepository.kt @@ -26,9 +26,11 @@ import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.asExecutor import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.filterNot +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach @@ -46,7 +48,15 @@ class SubscriptionRepository(private val context: Context) { fun getSelectableSubscriptionInfoList(): List = context.getSelectableSubscriptionInfoList() - fun isSubscriptionEnabledFlow(subId: Int) = context.isSubscriptionEnabledFlow(subId) + /** Flow of whether the subscription enabled for the given [subId]. */ + fun isSubscriptionEnabledFlow(subId: Int): Flow { + if (!SubscriptionManager.isValidSubscriptionId(subId)) return flowOf(false) + return context.subscriptionsChangedFlow() + .map { subscriptionManager.isSubscriptionEnabled(subId) } + .conflate() + .onEach { Log.d(TAG, "[$subId] isSubscriptionEnabledFlow: $it") } + .flowOn(Dispatchers.Default) + } /** TODO: Move this to UI layer, when UI layer migrated to Kotlin. */ fun collectSubscriptionEnabled( @@ -65,11 +75,6 @@ val Context.subscriptionManager: SubscriptionManager? fun Context.requireSubscriptionManager(): SubscriptionManager = subscriptionManager!! -fun Context.isSubscriptionEnabledFlow(subId: Int) = subscriptionsChangedFlow().map { - subscriptionManager?.isSubscriptionEnabled(subId) ?: false -}.conflate().onEach { Log.d(TAG, "[$subId] isSubscriptionEnabledFlow: $it") } - .flowOn(Dispatchers.Default) - fun Context.phoneNumberFlow(subscriptionInfo: SubscriptionInfo) = subscriptionsChangedFlow().map { SubscriptionUtil.getBidiFormattedPhoneNumber(this, subscriptionInfo) }.filterNot { it.isNullOrEmpty() }.flowOn(Dispatchers.Default) diff --git a/src/com/android/settings/spa/network/SimsSection.kt b/src/com/android/settings/spa/network/SimsSection.kt index 59e63dfd8ee..07da034b33b 100644 --- a/src/com/android/settings/spa/network/SimsSection.kt +++ b/src/com/android/settings/spa/network/SimsSection.kt @@ -38,7 +38,7 @@ import com.android.settings.Utils import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.MobileNetworkUtils import com.android.settings.network.telephony.SubscriptionActivationRepository -import com.android.settings.network.telephony.isSubscriptionEnabledFlow +import com.android.settings.network.telephony.SubscriptionRepository import com.android.settings.network.telephony.phoneNumberFlow import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel @@ -63,7 +63,7 @@ fun SimsSection(subscriptionInfoList: List) { private fun SimPreference(subInfo: SubscriptionInfo) { val context = LocalContext.current val checked = remember(subInfo.subscriptionId) { - context.isSubscriptionEnabledFlow(subInfo.subscriptionId) + SubscriptionRepository(context).isSubscriptionEnabledFlow(subInfo.subscriptionId) }.collectAsStateWithLifecycle(initialValue = false) val phoneNumber = phoneNumber(subInfo) val isConvertedPsim by remember(subInfo) { diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/SubscriptionRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/SubscriptionRepositoryTest.kt index b394eb27607..ce160979837 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/SubscriptionRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/SubscriptionRepositoryTest.kt @@ -52,13 +52,24 @@ class SubscriptionRepositoryTest { on { subscriptionManager } doReturn mockSubscriptionManager } + private val repository = SubscriptionRepository(context) + @Test - fun isSubscriptionEnabledFlow() = runBlocking { + fun isSubscriptionEnabledFlow_invalidSubId() = runBlocking { + val isEnabled = repository + .isSubscriptionEnabledFlow(SubscriptionManager.INVALID_SUBSCRIPTION_ID) + .firstWithTimeoutOrNull() + + assertThat(isEnabled).isFalse() + } + + @Test + fun isSubscriptionEnabledFlow_enabled() = runBlocking { mockSubscriptionManager.stub { on { isSubscriptionEnabled(SUB_ID_1) } doReturn true } - val isEnabled = context.isSubscriptionEnabledFlow(SUB_ID_1).firstWithTimeoutOrNull() + val isEnabled = repository.isSubscriptionEnabledFlow(SUB_ID_1).firstWithTimeoutOrNull() assertThat(isEnabled).isTrue() } From 7ca1ceb722c031bdfcf6d052dec375424749c2bb Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 9 Apr 2024 14:03:04 +0800 Subject: [PATCH 10/11] Use DataUsageFormatter to format app data usage Use the new unitsContentDescription from Formatter.formatBytes() Fix: 318780411 Test: manual - on AppDataUsage Test: unit test Change-Id: I55079c83db2e46a48f49f746f2371825ec0bb029 --- .../AppDataUsageSummaryController.kt | 27 +++++--- .../datausage/BillingCycleSettings.java | 5 +- .../settings/datausage/DataUsageFormatter.kt | 32 ---------- .../settings/datausage/DataUsageList.kt | 2 +- .../settings/datausage/DataUsageUtils.java | 3 + .../datausage/lib/DataUsageFormatter.kt | 64 +++++++++++++++++++ .../datausage/lib/NetworkUsageData.kt | 9 +-- .../DataUsagePreferenceController.kt | 14 ++-- .../spa/app/appinfo/AppDataUsagePreference.kt | 2 +- .../AppDataUsageSummaryControllerTest.kt | 34 ++++++++-- .../{ => lib}/DataUsageFormatterTest.kt | 34 ++++++++-- 11 files changed, 161 insertions(+), 65 deletions(-) delete mode 100644 src/com/android/settings/datausage/DataUsageFormatter.kt create mode 100644 src/com/android/settings/datausage/lib/DataUsageFormatter.kt rename tests/spa_unit/src/com/android/settings/datausage/{ => lib}/DataUsageFormatterTest.kt (59%) diff --git a/src/com/android/settings/datausage/AppDataUsageSummaryController.kt b/src/com/android/settings/datausage/AppDataUsageSummaryController.kt index a764c1d6cfe..233e1078812 100644 --- a/src/com/android/settings/datausage/AppDataUsageSummaryController.kt +++ b/src/com/android/settings/datausage/AppDataUsageSummaryController.kt @@ -23,11 +23,12 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.settings.R +import com.android.settings.datausage.lib.DataUsageFormatter import com.android.settings.datausage.lib.NetworkUsageDetailsData import com.android.settings.spa.preference.ComposePreferenceController import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel -import com.android.settingslib.spaprivileged.framework.compose.placeholder +import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.map @@ -35,17 +36,20 @@ class AppDataUsageSummaryController(context: Context, preferenceKey: String) : ComposePreferenceController(context, preferenceKey) { private val dataFlow = MutableStateFlow(NetworkUsageDetailsData.AllZero) + private val dataUsageFormatter = DataUsageFormatter(context) + private val emptyDataUsage = + DataUsageFormatter.FormattedDataUsage(context.getPlaceholder(), context.getPlaceholder()) private val totalUsageFlow = dataFlow.map { - DataUsageUtils.formatDataUsage(mContext, it.totalUsage).toString() + dataUsageFormatter.formatDataUsage(it.totalUsage) } private val foregroundUsageFlow = dataFlow.map { - DataUsageUtils.formatDataUsage(mContext, it.foregroundUsage).toString() + dataUsageFormatter.formatDataUsage(it.foregroundUsage) } private val backgroundUsageFlow = dataFlow.map { - DataUsageUtils.formatDataUsage(mContext, it.backgroundUsage).toString() + dataUsageFormatter.formatDataUsage(it.backgroundUsage) } override fun getAvailabilityStatus() = AVAILABLE @@ -57,20 +61,23 @@ class AppDataUsageSummaryController(context: Context, preferenceKey: String) : @Composable override fun Content() { Column { - val totalUsage by totalUsageFlow.collectAsStateWithLifecycle(placeholder()) - val foregroundUsage by foregroundUsageFlow.collectAsStateWithLifecycle(placeholder()) - val backgroundUsage by backgroundUsageFlow.collectAsStateWithLifecycle(placeholder()) + val totalUsage by totalUsageFlow.collectAsStateWithLifecycle(emptyDataUsage) + val foregroundUsage by foregroundUsageFlow.collectAsStateWithLifecycle(emptyDataUsage) + val backgroundUsage by backgroundUsageFlow.collectAsStateWithLifecycle(emptyDataUsage) Preference(object : PreferenceModel { override val title = stringResource(R.string.total_size_label) - override val summary = { totalUsage } + override val summary = { totalUsage.displayText } + override val summaryContentDescription = { totalUsage.contentDescription } }) Preference(object : PreferenceModel { override val title = stringResource(R.string.data_usage_label_foreground) - override val summary = { foregroundUsage } + override val summary = { foregroundUsage.displayText } + override val summaryContentDescription = { foregroundUsage.contentDescription } }) Preference(object : PreferenceModel { override val title = stringResource(R.string.data_usage_label_background) - override val summary = { backgroundUsage } + override val summary = { backgroundUsage.displayText } + override val summaryContentDescription = { backgroundUsage.contentDescription } }) } } diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java index 9a7411a7347..69577a85574 100644 --- a/src/com/android/settings/datausage/BillingCycleSettings.java +++ b/src/com/android/settings/datausage/BillingCycleSettings.java @@ -44,6 +44,7 @@ import androidx.preference.TwoStatePreference; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.datausage.lib.DataUsageFormatter; import com.android.settings.datausage.lib.NetworkTemplates; import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.telephony.MobileNetworkUtils; @@ -322,8 +323,8 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements : editor.getPolicyWarningBytes(template); final String[] unitNames = new String[] { - DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), MIB_IN_BYTES), - DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), GIB_IN_BYTES), + DataUsageFormatter.Companion.getBytesDisplayUnit(getResources(), MIB_IN_BYTES), + DataUsageFormatter.Companion.getBytesDisplayUnit(getResources(), GIB_IN_BYTES), }; final ArrayAdapter adapter = new ArrayAdapter( getContext(), android.R.layout.simple_spinner_item, unitNames); diff --git a/src/com/android/settings/datausage/DataUsageFormatter.kt b/src/com/android/settings/datausage/DataUsageFormatter.kt deleted file mode 100644 index 16a9ae8b6b0..00000000000 --- a/src/com/android/settings/datausage/DataUsageFormatter.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2023 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.datausage - -import android.content.res.Resources -import android.text.format.Formatter - -object DataUsageFormatter { - - /** - * Gets the display unit of the given bytes. - * - * Similar to MeasureFormat.getUnitDisplayName(), but with the expected result for the bytes in - * Settings, and align with other places in Settings. - */ - fun Resources.getBytesDisplayUnit(bytes: Long): String = - Formatter.formatBytes(this, bytes, Formatter.FLAG_IEC_UNITS).units -} \ No newline at end of file diff --git a/src/com/android/settings/datausage/DataUsageList.kt b/src/com/android/settings/datausage/DataUsageList.kt index a8f5460a18c..af115d9d370 100644 --- a/src/com/android/settings/datausage/DataUsageList.kt +++ b/src/com/android/settings/datausage/DataUsageList.kt @@ -178,7 +178,7 @@ open class DataUsageList : DashboardFragment() { private fun updateSelectedCycle(usageData: NetworkUsageData) { Log.d(TAG, "showing cycle $usageData") - usageAmount?.title = usageData.getDataUsedString(requireContext()) + usageAmount?.title = usageData.getDataUsedString(requireContext()).displayText viewModel.selectedCycleFlow.value = usageData updateApps(usageData) diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java index 2bbf3e2a462..b73da1c3ada 100644 --- a/src/com/android/settings/datausage/DataUsageUtils.java +++ b/src/com/android/settings/datausage/DataUsageUtils.java @@ -56,7 +56,10 @@ public final class DataUsageUtils { /** * Format byte value to readable string using IEC units. + * + * @deprecated Use {@link com.android.settings.datausage.lib.DataUsageFormatter} instead. */ + @Deprecated public static CharSequence formatDataUsage(Context context, long byteValue) { final BytesResult res = Formatter.formatBytes(context.getResources(), byteValue, Formatter.FLAG_IEC_UNITS); diff --git a/src/com/android/settings/datausage/lib/DataUsageFormatter.kt b/src/com/android/settings/datausage/lib/DataUsageFormatter.kt new file mode 100644 index 00000000000..0a4c06b264b --- /dev/null +++ b/src/com/android/settings/datausage/lib/DataUsageFormatter.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2024 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.datausage.lib + +import android.annotation.StringRes +import android.content.Context +import android.content.res.Resources +import android.icu.text.UnicodeSet +import android.icu.text.UnicodeSetSpanner +import android.text.BidiFormatter +import android.text.format.Formatter +import com.android.internal.R + +class DataUsageFormatter(private val context: Context) { + + data class FormattedDataUsage( + val displayText: String, + val contentDescription: String, + ) { + fun format(context: Context, @StringRes resId: Int, vararg formatArgs: Any?) = + FormattedDataUsage( + displayText = context.getString(resId, displayText, *formatArgs), + contentDescription = context.getString(resId, contentDescription, *formatArgs), + ) + } + + /** Formats the data usage. */ + fun formatDataUsage(sizeBytes: Long): FormattedDataUsage { + val result = Formatter.formatBytes(context.resources, sizeBytes, Formatter.FLAG_IEC_UNITS) + return FormattedDataUsage( + displayText = BidiFormatter.getInstance().unicodeWrap( + context.getString(R.string.fileSizeSuffix, result.value, result.units) + ), + contentDescription = context.getString( + R.string.fileSizeSuffix, result.value, result.unitsContentDescription + ), + ) + } + + companion object { + /** + * Gets the display unit of the given bytes. + * + * Similar to MeasureFormat.getUnitDisplayName(), but with the expected result for the bytes + * in Settings, and align with other places in Settings. + */ + fun Resources.getBytesDisplayUnit(bytes: Long): String = + Formatter.formatBytes(this, bytes, Formatter.FLAG_IEC_UNITS).units + } +} diff --git a/src/com/android/settings/datausage/lib/NetworkUsageData.kt b/src/com/android/settings/datausage/lib/NetworkUsageData.kt index f9d83d52659..26578e325b4 100644 --- a/src/com/android/settings/datausage/lib/NetworkUsageData.kt +++ b/src/com/android/settings/datausage/lib/NetworkUsageData.kt @@ -20,7 +20,7 @@ import android.content.Context import android.text.format.DateUtils import android.util.Range import com.android.settings.R -import com.android.settings.datausage.DataUsageUtils +import com.android.settings.datausage.lib.DataUsageFormatter.FormattedDataUsage /** * Base data structure representing usage data in a period. @@ -38,10 +38,11 @@ data class NetworkUsageData( fun formatDateRange(context: Context): String = DateUtils.formatDateRange(context, startTime, endTime, DATE_FORMAT) - fun formatUsage(context: Context): CharSequence = DataUsageUtils.formatDataUsage(context, usage) + fun formatUsage(context: Context): FormattedDataUsage = + DataUsageFormatter(context).formatDataUsage(usage) - fun getDataUsedString(context: Context): String = - context.getString(R.string.data_used_template, formatUsage(context)) + fun getDataUsedString(context: Context): FormattedDataUsage = + formatUsage(context).format(context, R.string.data_used_template) companion object { val AllZero = NetworkUsageData( diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt index 1cf770b3d40..d47a246644d 100644 --- a/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt +++ b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt @@ -30,6 +30,7 @@ import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.datausage.DataUsageUtils +import com.android.settings.datausage.lib.DataUsageFormatter.FormattedDataUsage import com.android.settings.datausage.lib.DataUsageLib import com.android.settings.datausage.lib.NetworkCycleDataRepository import com.android.settings.datausage.lib.NetworkStatsRepository.Companion.AllTimeRange @@ -89,7 +90,7 @@ class DataUsagePreferenceController(context: Context, key: String) : getDataUsageSummaryAndEnabled() } preference.isEnabled = enabled - preference.summary = summary + preference.summary = summary?.displayText } private fun getNetworkTemplate(): NetworkTemplate? = when { @@ -104,15 +105,14 @@ class DataUsagePreferenceController(context: Context, key: String) : fun createNetworkCycleDataRepository(): NetworkCycleDataRepository? = networkTemplate?.let { NetworkCycleDataRepository(mContext, it) } - private fun getDataUsageSummaryAndEnabled(): Pair { + private fun getDataUsageSummaryAndEnabled(): Pair { val repository = createNetworkCycleDataRepository() ?: return null to false repository.loadFirstCycle()?.let { usageData -> - return mContext.getString( - R.string.data_usage_template, - usageData.formatUsage(mContext), - usageData.formatDateRange(mContext), - ) to (usageData.usage > 0 || repository.queryUsage(AllTimeRange).usage > 0) + val formattedDataUsage = usageData.formatUsage(mContext) + .format(mContext, R.string.data_usage_template, usageData.formatDateRange(mContext)) + val hasUsage = usageData.usage > 0 || repository.queryUsage(AllTimeRange).usage > 0 + return formattedDataUsage to hasUsage } val allTimeUsage = repository.queryUsage(AllTimeRange) diff --git a/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt b/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt index 7e6e72613b7..7b8cf8c8b55 100644 --- a/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt +++ b/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt @@ -113,7 +113,7 @@ private class AppDataUsagePresenter( } else { context.getString( R.string.data_summary_format, - appUsageData.formatUsage(context), + appUsageData.formatUsage(context).displayText, appUsageData.formatStartDate(context), ) } diff --git a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt index 584295649aa..be839dd416f 100644 --- a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt @@ -19,8 +19,9 @@ package com.android.settings.datausage import android.content.Context import android.util.Range import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasTextExactly import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onNodeWithContentDescription import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.datausage.lib.NetworkUsageDetailsData @@ -52,9 +53,34 @@ class AppDataUsageSummaryControllerTest { controller.Content() } - composeTestRule.onNodeWithText("6.75 kB").assertIsDisplayed() - composeTestRule.onNodeWithText("5.54 kB").assertIsDisplayed() - composeTestRule.onNodeWithText("1.21 kB").assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Total", "6.75 kB")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Foreground", "5.54 kB")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Background", "1.21 kB")).assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("6.75 kB").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("5.54 kB").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("1.21 kB").assertIsDisplayed() + } + + @Test + fun summary_zero() { + val appUsage = NetworkUsageDetailsData( + range = Range(1L, 2L), + totalUsage = 3, + foregroundUsage = 1, + backgroundUsage = 2, + ) + + controller.update(appUsage) + composeTestRule.setContent { + controller.Content() + } + + composeTestRule.onNode(hasTextExactly("Total", "3 B")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Foreground", "1 B")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Background", "2 B")).assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("3 byte").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("1 byte").assertIsDisplayed() + composeTestRule.onNodeWithContentDescription("2 byte").assertIsDisplayed() } private companion object { diff --git a/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt b/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt similarity index 59% rename from tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt rename to tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt index dc6a421b940..071234dcd65 100644 --- a/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt +++ b/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 The Android Open Source Project + * Copyright (C) 2024 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. @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.android.settings.datausage +package com.android.settings.datausage.lib import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.android.settings.datausage.DataUsageFormatter.getBytesDisplayUnit +import com.android.settings.datausage.lib.DataUsageFormatter.Companion.getBytesDisplayUnit import com.google.common.truth.Truth.assertThat import org.junit.Test @@ -29,6 +29,32 @@ import org.junit.runner.RunWith class DataUsageFormatterTest { private val context: Context = ApplicationProvider.getApplicationContext() + private val dataUsageFormatter = DataUsageFormatter(context) + + @Test + fun formatDataUsage_0() { + val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(0) + + assertThat(displayText).isEqualTo("0 B") + assertThat(contentDescription).isEqualTo("0 byte") + } + + @Test + fun formatDataUsage_1000() { + val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(1000) + + assertThat(displayText).isEqualTo("0.98 kB") + assertThat(contentDescription).isEqualTo("0.98 kB") + } + + @Test + fun formatDataUsage_2000000() { + val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(2000000) + + assertThat(displayText).isEqualTo("1.91 MB") + assertThat(contentDescription).isEqualTo("1.91 MB") + } + @Test fun getUnitDisplayName_megaByte() { val displayName = context.resources.getBytesDisplayUnit(ONE_MEGA_BYTE_IN_BYTES) @@ -47,4 +73,4 @@ class DataUsageFormatterTest { const val ONE_MEGA_BYTE_IN_BYTES = 1024L * 1024 const val ONE_GIGA_BYTE_IN_BYTES = 1024L * 1024 * 1024 } -} \ No newline at end of file +} From 253be810aea44ab1c8c1f5823ee3148d06c6dc19 Mon Sep 17 00:00:00 2001 From: Kangping Dong Date: Mon, 13 May 2024 15:35:08 +0800 Subject: [PATCH 11/11] [Thread] fix flaky Thread settings tests This fix the flaky issue by using the directExecutor() Bug: 340148095 Change-Id: Ib0ed0f660828ec3c2601b4fc0b3360e891eb48af --- .../threadnetwork/ThreadNetworkFragmentControllerTest.kt | 4 ++-- .../threadnetwork/ThreadNetworkToggleControllerTest.kt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkFragmentControllerTest.kt b/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkFragmentControllerTest.kt index 0d57dafc144..13e42917cd9 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkFragmentControllerTest.kt +++ b/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkFragmentControllerTest.kt @@ -17,7 +17,6 @@ package com.android.settings.connecteddevice.threadnetwork import android.content.Context import android.platform.test.flag.junit.SetFlagsRule -import androidx.core.content.ContextCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.test.core.app.ApplicationProvider @@ -27,6 +26,7 @@ import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILA import com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE import com.android.settings.flags.Flags import com.google.common.truth.Truth.assertThat +import com.google.common.util.concurrent.MoreExecutors import org.junit.Before import org.junit.Rule import org.junit.Test @@ -49,7 +49,7 @@ class ThreadNetworkFragmentControllerTest { fun setUp() { mSetFlagsRule.enableFlags(Flags.FLAG_THREAD_SETTINGS_ENABLED) context = spy(ApplicationProvider.getApplicationContext()) - executor = ContextCompat.getMainExecutor(context) + executor = MoreExecutors.directExecutor() fakeThreadNetworkController = FakeThreadNetworkController() controller = newControllerWithThreadFeatureSupported(true) } diff --git a/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkToggleControllerTest.kt b/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkToggleControllerTest.kt index 04ebc9252ef..065ff9663b7 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkToggleControllerTest.kt +++ b/tests/unit/src/com/android/settings/connecteddevice/threadnetwork/ThreadNetworkToggleControllerTest.kt @@ -27,6 +27,7 @@ import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILA import com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE import com.android.settings.flags.Flags import com.google.common.truth.Truth.assertThat +import com.google.common.util.concurrent.MoreExecutors import org.junit.Before import org.junit.Rule import org.junit.Test @@ -50,7 +51,7 @@ class ThreadNetworkToggleControllerTest { fun setUp() { mSetFlagsRule.enableFlags(Flags.FLAG_THREAD_SETTINGS_ENABLED) context = spy(ApplicationProvider.getApplicationContext()) - executor = Executor { runnable: Runnable -> runnable.run() } + executor = MoreExecutors.directExecutor() fakeThreadNetworkController = FakeThreadNetworkController() controller = newControllerWithThreadFeatureSupported(true) val preferenceManager = PreferenceManager(context)