From 9f7a1deed4f892e6ed29223360fc4da1a48c28bc Mon Sep 17 00:00:00 2001 From: Holly Sun Date: Thu, 24 Aug 2023 23:18:20 +0000 Subject: [PATCH 1/8] Add feature flag as a device_config flag for LPH to search. Bug: 294858168 Test: manual + unit Flag: settings_long_press_home_button_to_search Change-Id: Ib18b672338d9976284d7fdb06590e4239de9ee9c --- src/com/android/settings/core/SettingsUIDeviceConfig.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/settings/core/SettingsUIDeviceConfig.java b/src/com/android/settings/core/SettingsUIDeviceConfig.java index 404b0b4ef39..4d963856b96 100644 --- a/src/com/android/settings/core/SettingsUIDeviceConfig.java +++ b/src/com/android/settings/core/SettingsUIDeviceConfig.java @@ -47,4 +47,9 @@ public class SettingsUIDeviceConfig { */ public static final String BT_LE_AUDIO_DEVICE_DETAIL_ENABLED = "bt_le_audio_device_detail_enabled"; + /** + * {@code true} if long press home button to search is enabled. + */ + public static final String LONG_PRESS_HOME_BUTTON_TO_SEARCH = + "long_press_home_button_to_search"; } From 4bd401adf49cec7f2c6631d960006351622ded97 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Tue, 15 Aug 2023 19:48:13 +0800 Subject: [PATCH 2/8] Update the API usage to get total size of devices StorageStatsManager fixed in StorageStatsService#getTotalBytes So that we should change back to call the API. Bug: 295358118 Bug: 288103116 Test: verified manually Change-Id: I3dcc9698403612f961cf0de41925dcbcb43e260b (cherry picked from commit 2d57d002ae9daae3c450734bc7992ba0bfc1cc05) --- src/com/android/settings/Utils.java | 11 ----------- .../settings/deviceinfo/StorageCategoryFragment.java | 4 +--- .../settings/deviceinfo/StorageDashboardFragment.java | 4 +--- .../TopLevelStoragePreferenceController.java | 4 +--- .../StorageUsageProgressBarPreferenceController.java | 5 +---- 5 files changed, 4 insertions(+), 24 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index f9f4cdfbb75..e97f0208321 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -63,7 +63,6 @@ import android.os.BatteryManager; import android.os.Binder; import android.os.Build; import android.os.Bundle; -import android.os.Environment; import android.os.IBinder; import android.os.INetworkManagementService; import android.os.RemoteException; @@ -1296,14 +1295,4 @@ public final class Utils extends com.android.settingslib.Utils { return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context)); } - /** - * Get private total size directly. - * Referred from StorageManager - */ - public static long getPrimaryStorageSize() { - // TODO(b/288103116): remove this method once support by StorageManager. - return Environment.getDataDirectory().getTotalSpace() - + Environment.getRootDirectory().getTotalSpace(); - } - } diff --git a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java index d1d4cbe7f50..52f453d46a9 100644 --- a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java +++ b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java @@ -211,9 +211,7 @@ public class StorageCategoryFragment extends DashboardFragment setLoading(false /* loading */, false /* animate */); - // TODO(b/288103116): replace with new API to get TotalBytes before rounding - // once support by StorageManager. - final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes; + final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes; mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo()); mPreferenceController.setUsedSize(privateUsedBytes); mPreferenceController.setTotalSize(mStorageInfo.totalBytes); diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 4138057a90c..f31f2be0049 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -387,9 +387,7 @@ public class StorageDashboardFragment extends DashboardFragment setLoading(false /* loading */, false /* animate */); - // TODO(b/288103116): replace with new API to get TotalBytes before rounding - // once support by StorageManager. - final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes; + final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes; mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo()); mPreferenceController.setUsedSize(privateUsedBytes); mPreferenceController.setTotalSize(mStorageInfo.totalBytes); diff --git a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java index 43dc9dd0d15..ccae7e92ab1 100644 --- a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java +++ b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java @@ -75,9 +75,7 @@ public class TopLevelStoragePreferenceController extends BasePreferenceControlle final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo( getStorageManagerVolumeProvider()); - // TODO(b/288103116): replace with new API to get TotalBytes before rounding - // once support by StorageManager. - long usedBytes = Utils.getPrimaryStorageSize() - info.freeBytes; + long usedBytes = info.totalBytes - info.freeBytes; storageCacheHelper.cacheUsedSize(usedBytes); ThreadUtils.postOnMainThread(() -> { preference.setSummary( diff --git a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java index 23559d4db00..be2a64abf58 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java @@ -26,7 +26,6 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.widget.UsageProgressBarPreference; @@ -93,9 +92,7 @@ public class StorageUsageProgressBarPreferenceController extends BasePreferenceC if (mStorageEntry.isPrivate()) { // StorageStatsManager can only query private storages. mTotalBytes = mStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid()); - // TODO(b/288103116): replace with new API to get TotalBytes before rounding - // once support by StorageManager. - mUsedBytes = Utils.getPrimaryStorageSize() + mUsedBytes = mTotalBytes - mStorageStatsManager.getFreeBytes(mStorageEntry.getFsUuid()); } else { final File rootFile = mStorageEntry.getPath(); From 4fb8f731c8c652b44b3541a18f2941f90cd8713a Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 30 Aug 2023 20:05:24 -0700 Subject: [PATCH 3/8] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I90575a0789147f048e62e5444bb9e38cbb95f003 --- res/values-am/arrays.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml index 03f79b4f503..4bdfd0b69b6 100644 --- a/res/values-am/arrays.xml +++ b/res/values-am/arrays.xml @@ -210,7 +210,7 @@ "VPN አግብር" "ልጣፍ ይጻፉ" "የረዳት መዋቅር" - "የረዳት ቅጽበታዊ ገፅ እይታ" + "የረዳት ቅጽበታዊ ገፅ ዕይታ" "የስልክ ግዛት ያንብቡ" "የድምፅ መልዕክት ያክሉ" "sip ይጠቀሙ" @@ -277,7 +277,7 @@ "VPN አግብር" "ልጣፍ ይጻፉ" "የረዳት መዋቅር" - "የረዳት ቅጽበታዊ ገፅ እይታ" + "የረዳት ቅጽበታዊ ገፅ ዕይታ" "የስልክ ግዛት ያንብቡ" "የድምጽ መልዕክት ያክሉ" "sip ይጠቀሙ" From ecd075444103bfc94ed0ad1b1fc699a180e10934 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 30 Aug 2023 20:08:16 -0700 Subject: [PATCH 4/8] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: Ic37c0b286960257934e49704d83ff6e23fa7653f --- res/values-am/strings.xml | 12 +++--- res/values-ar/strings.xml | 2 +- res/values-az/strings.xml | 2 +- res/values-b+sr+Latn/strings.xml | 8 ++-- res/values-be/strings.xml | 8 ++-- res/values-ca/strings.xml | 6 +-- res/values-da/strings.xml | 66 ++++++++++++++++---------------- res/values-es-rUS/strings.xml | 2 +- res/values-et/strings.xml | 6 +-- res/values-eu/strings.xml | 8 ++-- res/values-gu/strings.xml | 2 +- res/values-hi/strings.xml | 10 ++--- res/values-is/strings.xml | 2 +- res/values-it/strings.xml | 2 +- res/values-iw/strings.xml | 6 +-- res/values-ko/strings.xml | 2 +- res/values-lo/strings.xml | 4 +- res/values-mr/strings.xml | 4 +- res/values-pl/strings.xml | 2 +- res/values-pt-rBR/strings.xml | 2 +- res/values-pt-rPT/strings.xml | 8 ++-- res/values-pt/strings.xml | 2 +- res/values-ru/strings.xml | 2 +- res/values-sq/strings.xml | 10 ++--- res/values-sr/strings.xml | 8 ++-- res/values-sw/strings.xml | 6 +-- res/values-ta/strings.xml | 6 +-- res/values-tr/strings.xml | 4 +- res/values-zh-rCN/strings.xml | 2 +- res/values-zh-rTW/strings.xml | 2 +- 30 files changed, 103 insertions(+), 103 deletions(-) diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index defa3e85a42..5bfa185960c 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -1806,7 +1806,7 @@ "ስለማጉላት" "ስለማጉላት የበለጠ ይወቁ" "የማጉላት ዓይነት" - "የእርስዎን ሙሉ ገፅ እይታ፣ አንድ የተወሰነ ቦታ ያጉሉ ወይም በሁለቱም አማራጮች መካከል ይቀያይሩ" + "የእርስዎን ሙሉ ገፅ ዕይታ፣ አንድ የተወሰነ ቦታ ያጉሉ ወይም በሁለቱም አማራጮች መካከል ይቀያይሩ" "ሙሉ ማያ ገፅ" "ከፊል ማያ ገፅ" "በሙሉ እና በከፊል ማያ ገፅ መካከል ይቀያይሩ" @@ -3623,10 +3623,10 @@ "የዳራ ፍተሻ" "ከማያ ገፅ ላይ ጽሁፍ ተጠቀም" "ረዳት መተግበሪያው የማያ ገጹን ይዘቶች እንደ ጽሁፍ እንዲደርሳባቸው ይፍቀዱ" - "ቅጽበታዊ ገፅ እይታ ይጠቀሙ" + "ቅጽበታዊ ገፅ ዕይታ ይጠቀሙ" "ረዳት መተግበሪያው የማያ ገጹን ምስል እንዲደርስበት ይፍቀዱ" "ማያ ገጽን አብራ" - "የረዳት መተግበሪያ ጽሁፍ ከማያ ገፅ ወይም ቅጽበታዊ ገፅ እይታ ሲደርስ የማያ ገፅ ጠርዞችን አብራ" + "የረዳት መተግበሪያ ጽሁፍ ከማያ ገፅ ወይም ቅጽበታዊ ገፅ ዕይታ ሲደርስ የማያ ገፅ ጠርዞችን አብራ" "ረዳት መተግበሪያዎች በሚያዩት ማያ ገፅ ላይ ባለ መረጃ ላይ ተመስርቶ ሊያግዘዎት ይችላል። አንዳንድ መተግበሪያዎች የተዋሃደ እርዳታ ለእርስዎ ለመስጠት ሁለቱንም ማስጀመሪያ እና የድምጽ ግቤት አገልግሎቶችን ይደግፋሉ።" "አማካይ የማህደረ ትውስታ አጠቃቀም" "ከፍተኛ ማህደረ ትውስታ አጠቃቀም" @@ -3692,7 +3692,7 @@ "የማሳያ መጠን" "ሁሉንም ነገር ያተልቁ ወይም ያሳንሱ" "የማሳያ ትፍገት፣ ማያ ገፅ ማጉያ፣ ልኬት፣ ማመጣጠን" - "ቅድመ-እይታ" + "ቅድመ-ዕይታ" "አነስ አድርግ" "ተለቅ አድርግ" "አልተያያዘም" @@ -3839,7 +3839,7 @@ "እርምጃዎች" "አርዕስት" "የርቀት ግቤቶች" - "ብጁ እይታ" + "ብጁ ዕይታ" "ተጨማሪ ነገሮች" "አዶ" "የእሽግ መጠን" @@ -4579,7 +4579,7 @@ "ለመተግበሪያዎች እና አገልግሎቶች። ይህ ቅንብር ከጠፋ እርስዎ ወደ አንድ የአደጋ ጊዜ ቁጥር ሲደውሉ የማይክሮፎን ውሂብ አሁንም ሊጋራ ይችላል።" "ቀዳሚ" "ቀጣይ" - "የቀለም ቅድመ-እይታ" + "የቀለም ቅድመ-ዕይታ" "የሲም መዳረሻ ጥያቄ" "አንድ መሣሪያ ሲምዎን መድረስ ይፈልጋል። ዝርዝሮችን ለማግኘት መታ ያድርጉ።" "የሲም መዳረሻ ይፈቀድ?" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 19072635291..d12a1b89953 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -2753,7 +2753,7 @@ "المساعدة والملاحظات" "حساب المحتوى" "معرف الصورة" - "التهديدات القصوى" + "التهديدات البالغة الخطورة" "تلقي إشعارات بشأن التهديدات القصوى للحياة والممتلكات" "التهديدات الخطيرة" "تلقي تنبيهات بشأن التهديدات الخطيرة للحياة والممتلكات" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 54b2a026ca6..28db05a92fc 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -2836,7 +2836,7 @@ "Mobil, Wi‑Fi, hotspot" "Wi‑Fi, hotspot" "Qoşulmuş cihazlar" - "Bluetooth, birləşdirmə" + "Bluetooth, bağlantı" "Bluetooth, sürücülük rejimi, NFC" "Bluetooth, sürücülük rejimi" "Bluetooth, NFC" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index e4f7f6dc34c..1eb841d6d42 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -1177,7 +1177,7 @@ "Bezbedno izbacivanje uređaja %1$s nije uspelo" "Preimenujte memoriju" "Uređaj ^1 je oštećen. \n\nDa biste koristili uređaj ^1, prvo treba da ga podesite." - "Ovu SD karticu možete da formatirate za čuvanje slika, video snimaka, muzike i drugog sadržaja i da mu pristupate na drugim uređajima. \n\n""Svi podaci na ovoj SD kartici biće obrisani."" \n\n""Pre formatiranja"" \n\n""Napravite rezervne kopije slika i drugih medija"" \nPremestite fajlove medija u alternativni memorijski prostor na ovom uređaju ili ih prebacite na računar pomoću USB kabla. \n\n""Napravite rezervne kopije aplikacija"" \nSve aplikacije koje se čuvaju na uređaju ^1 biće deinstalirane, a njihovi podaci obrisani. Da biste zadržali te aplikacije, premestite ih u alternativni memorijski prostor na ovom uređaju." + "Ovu SD karticu možete da formatirate za čuvanje slika, videa, muzike i drugog sadržaja i da mu pristupate na drugim uređajima. \n\n""Svi podaci na ovoj SD kartici biće obrisani."" \n\n""Pre formatiranja"" \n\n""Napravite rezervne kopije slika i drugih medija"" \nPremestite fajlove medija u alternativni memorijski prostor na ovom uređaju ili ih prebacite na računar pomoću USB kabla. \n\n""Napravite rezervne kopije aplikacija"" \nSve aplikacije koje se čuvaju na uređaju ^1 biće deinstalirane, a njihovi podaci obrisani. Da biste zadržali te aplikacije, premestite ih u alternativni memorijski prostor na ovom uređaju." "Kada izbacite ovaj uređaj ^1, aplikacije koje su na njemu sačuvane će prestati da funkcionišu i medijske datoteke koje su na njemu sačuvane neće biti dostupne dok ga ponovo ne umetnete."" \n\nUređaj ^1 se formatira da bi funkcionisao samo na ovom uređaju. Neće funkcionisati na drugim uređajima." "Da biste koristili aplikacije, slike ili podatke na ovom uređaju (^1), umetnite ga ponovo. \n\nDruga mogućnost je da izaberete da zaboravite taj memorijski uređaj ako nije dostupan. \n\nAko odlučite da zaboravite, svi podaci na tom uređaju biće zauvek izgubljeni. \n\nAplikacije možete da kasnije ponovo instalirate, ali će podaci uskladišteni na uređaju biti izgubljeni." "Želite da zaboravite uređaj ^1?" @@ -2824,7 +2824,7 @@ "Narandžasta" "Ljubičasta" "Status SIM kartice" - "Status SIM kartice (otvor za SIM: %1$d)" + "Status SIM kartice (otvor za SIM %1$d)" "%1$d dBm %2$d asu" "SIM-ovi su promenjeni." "Dodirnite da biste podesili" @@ -3405,7 +3405,7 @@ "alarmi" "Alarmi" "Zvukovi medija" - "Zvuci iz video snimaka, igara i drugih medija" + "Zvuci iz videa, igara i drugih medija" "mediji" "Mediji" "Zvukovi pri dodiru" @@ -3896,7 +3896,7 @@ "Prikazivanje poslovnih događaja u ličnom kalendaru" "Kada su poslovne aplikacije isključene, one se pauziraju i ne može da im se pristupi niti mogu da vam šalju obaveštenja" "Upravljaj memorijskim prostorom" - "Da bi oslobodio memorijski prostor, menadžer memorijskog prostora uklanja rezervne kopije slika i video snimaka sa uređaja." + "Da bi oslobodio memorijski prostor, menadžer memorijskog prostora uklanja rezervne kopije slika i videa sa uređaja." "Uklonite slike i video" "Menadžer memorijskog prostora" "Koristite menadžer memorijskog prostora" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 8125f12e542..875e5e0c2e4 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -4078,7 +4078,7 @@ "Служба аўтазапаўнення" "Стандартная служба аўтазапаўнення" "Паролі" - "Пароль, ключ доступу і служба перадачы даных." + "Сэрвісы для захоўвання пароляў, ключоў доступу і даных" "Дадатковыя пастаўшчыкі" "{count,plural, =1{# пароль}one{# пароль}few{# паролі}many{# пароляў}other{# пароля}}" "аўта, запаўненне, аўтазапаўненне, пароль" @@ -4086,13 +4086,13 @@ "аўта, запаўненне, аўтазапаўненне, даныя, ключ доступу, пароль" "<b>Упэўніцеся, што давяраеце гэтай праграме</b> <br/> <br/> <xliff:g id=app_name example=Аўтазапаўненне Google>%1$s</xliff:g> выкарыстоўвае тое, што знаходзіцца на вашым экране, каб вызначыць, што можна запоўніць аўтаматычна." "<b>Скарыстаць <xliff:g id=app_name example=Provider>%1$s</xliff:g>?</b> <br/> <br/> <xliff:g id=app_name example=Provider>%1$s</xliff:g> аналізуе змесціва экрана, каб выявіць палі, якія можна запоўніць аўтаматычна. Цяпер новыя паролі, ключы доступу і іншая інфармацыя будуць захоўвацца тут." - "Паролі, ключы доступу і службы перадачы даных." + "Сэрвісы для захоўвання пароляў, ключоў доступу і даных" "Выключыць %1$s?" "<b>Адключыць гэты сэрвіс?</b> <br/> <br/> Паролі, ключы доступу, спосабы аплаты і іншая захаваная інфармацыя не будуць аўтаматычна падстаўляцца пры ўваходзе. Каб выкарыстоўваць захаваную інфармацыю, выберыце пароль, ключ доступу або сэрвіс перадачы даных." "Выкарыстоўваць %1$s?" "%1$s выкарыстоўвайце звесткі пра тое, што ў вас на экране, каб вызначыць, да чаго можна прымяніць аўтазапаўненне." - "Перавышаны ліміт пароляў, ключоў доступу і служб перадачы даных." - "Праграма дазваляе стварыць да пяці адначасова актыўных пароляў, ключоў доступу і служб перадачы даных. Каб дадаць новую службу, выключыце тую, што ўжо існуе." + "Перавышаны ліміт сэрвісаў для захоўвання пароляў, ключоў доступу і даных" + "Адначасова можна выкарыстоўваць да пяці сэрвісаў для захоўвання пароляў, ключоў доступу і даных. Каб дадаць новы сэрвіс, адключыце адзін з існуючых." "Выключыць" "Аўтазапаўненне" "Узровень запісаў" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 147000413e4..a16162d44d6 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -517,7 +517,7 @@ "Introdueix el PIN del dispositiu per activar la confirmació automàtica" "Introdueix el PIN del dispositiu per desactivar la confirmació automàtica" "Bloqueig de pantalla" - "Bloqueig perfil treball" + "Bloqueig del perfil de treball" "Cap" "Lliscament" "Patró" @@ -3190,7 +3190,7 @@ "Què vols que es mostri a la pantalla de bloqueig?" "Pantalla de bloqueig" "Mostra tot el contingut de notificacions de feina" - "Amaga el contingut de feina confidencial" + "Amaga el contingut de feina sensible" "Com vols que es mostrin les notificacions del perfil quan el dispositiu estigui bloquejat?" "Notificacions del perfil" "Notificacions" @@ -3288,7 +3288,7 @@ "Permet imatge sobre imatge" "Permet que aquesta aplicació creï una finestra d\'imatge sobre imatge mentre l\'aplicació està oberta o després de sortir-ne (per exemple, per seguir mirant un vídeo). Aquesta finestra es mostra sobre altres aplicacions que estàs utilitzant." "Aplicacions de treball i personals connectades" - "Connectats" + "Connectades" "No connectada" "No hi ha cap aplicació connectada" "multiperfil aplicacions connectades aplicacions de treball i personals" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index cfefff03315..9550849d17e 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -267,14 +267,14 @@ "Appsikkerhed, enhedslås, tilladelser" "Ansigt tilføjet" "Konfiguration er påkrævet" - "Ansigtslås" - "Ansigtslås til arbejdsprofil" - "Sådan konfigurerer du ansigtslås" - "Konfigurer ansigtslås" + "Ansigtsoplåsning" + "Ansigtsoplåsning til arbejdsprofil" + "Sådan konfigurerer du ansigtsoplåsning" + "Konfigurer ansigtsoplåsning" "Brug dit ansigt til godkendelse" "Start" - "Hvis hjælpefunktionen ansigtslås er deaktiveret, fungerer nogle konfigurationstrin muligvis ikke korrekt via TalkBack." + "Hvis hjælpefunktionen ansigtsoplåsning er deaktiveret, fungerer nogle konfigurationstrin muligvis ikke korrekt via TalkBack." "Gå tilbage" "Fortsæt konfig." "Brug avanceret konfiguration" @@ -285,7 +285,7 @@ "Acceptér" "Mere" "Lås op med dit ansigt" - "Tillad ansigtslås" + "Tillad ansigtsoplåsning" "Brug dit ansigt til godkendelse" "Lås din telefon op eller godkend køb ved hjælp af dit ansigt.\n\nBemærk! Du kan ikke bruge dit ansigt til at låse denne enhed op. Kontakt administratoren for din organisation for at få flere oplysninger." "Brug dit ansigt til at låse din telefon op, godkende køb og logge ind i apps" @@ -305,25 +305,25 @@ "Ansigtsscanningen mislykkedes." "Så er du klar. Godt gået." "Udfør" - "Gør ansigtslåsens registrering mere effektiv" - "Konfigurer ansigtslås igen" - "Konfigurer ansigtslås igen" + "Gør ansigtsoplåsningens registrering mere effektiv" + "Konfigurer ansigtsoplåsning igen" + "Konfigurer ansigtsoplåsning igen" "Gør sikkerheden og registreringen bedre" - "Konfigurer ansigtslås" - "Slet din aktuelle ansigtsmodel for at konfigurere ansigtslåsen igen.\n\nDin ansigtsmodel slettes permanent og forsvarligt.\n\nEfter sletningen skal du bruge din pinkode, dit mønster eller din adgangskode til at låse telefonen op eller til godkendelse i apps." - "Slet din aktuelle ansigtsmodel for at konfigurere ansigtslåsen igen.\n\nDin ansigtsmodel slettes permanent og forsvarligt.\n\nEfter sletningen skal du bruge dit fingeraftryk, din pinkode, dit mønster eller din adgangskode til at låse telefonen op eller til godkendelse i apps." - "Brug ansigtslås til" - "Når du bruger ansigtslås" + "Konfigurer ansigtsoplåsning" + "Slet din aktuelle ansigtsmodel for at konfigurere ansigtsoplåsning igen.\n\nDin ansigtsmodel slettes permanent og forsvarligt.\n\nEfter sletningen skal du bruge din pinkode, dit mønster eller din adgangskode til at låse telefonen op eller til godkendelse i apps." + "Slet din aktuelle ansigtsmodel for at konfigurere ansigtsoplåsning igen.\n\nDin ansigtsmodel slettes permanent og forsvarligt.\n\nEfter sletningen skal du bruge dit fingeraftryk, din pinkode, dit mønster eller din adgangskode til at låse telefonen op eller til godkendelse i apps." + "Brug ansigtsoplåsning til" + "Når du bruger ansigtsoplåsning" "Kræv, at øjnene skal være åbne" "Dine øjne skal være åbne for at låse telefonen op" "Bed altid om bekræftelse" - "Kræv altid et bekræftelsestrin ved brug af ansigtslås i apps" + "Kræv altid et bekræftelsestrin ved brug af ansigtsoplåsning i apps" "Slet ansigtsmodel" - "Konfigurer ansigtslås" + "Konfigurer ansigtsoplåsning" "Skal ansigtsmodellen slettes?" "Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge din pinkode, dit mønster eller din adgangskode til at låse din telefon op eller til godkendelse i apps." "Din ansigtsmodel slettes permanent og på sikker vis.\n\nNår den er slettet, skal du bruge din pinkode, dit mønster eller din adgangskode til at låse din telefon op." - "Brug ansigtslås til at låse din telefon op" + "Brug ansigtsoplåsning til at låse din telefon op" "Fingeraftryk" "Fingeraftryk" "Når du bruger oplåsning med fingeraftryk" @@ -353,7 +353,7 @@ "Du får de bedste resultater ved at bruge en skærmbeskytter, der er Made For Google-certificeret. Dit barns fingeraftryk virker muligvis ikke med andre skærmbeskyttere." "Oplåsning via ur" - "Når du konfigurerer ansigtslås og oplåsning med fingeraftryk, beder din telefon om dit fingeraftryk, hvis du er iført en maske eller befinder dig et mørkt sted.\n\nDu kan låse op med dit ur, når dit ansigt eller fingeraftryk ikke kan genkendes." + "Når du konfigurerer ansigtsoplåsning og oplåsning med fingeraftryk, beder din telefon om dit fingeraftryk, hvis du er iført en maske eller befinder dig et mørkt sted.\n\nDu kan låse op med dit ur, når dit ansigt eller fingeraftryk ikke kan genkendes." "Du kan låse op med dit ur, når dit fingeraftryk ikke kan genkendes." "Du kan låse op med dit ur, når dit ansigt ikke kan genkendes." "Brug dit fingeraftryk eller ur til at" @@ -364,11 +364,11 @@ "Brug af fingeraftryk eller ur" "Brug af ansigt, fingeraftryk eller ur" "Brug af ur" - "Konfigurer ansigts­lås eller oplåsning med fingeraftryk først" + "Konfigurer ansigtsoplåsning eller fingeroplåsning først" "Du kan låse op med dit ur, når dit ansigt eller fingeraftryk ikke kan genkendes" "Konfigurer først oplåsning med fingeraftryk" "Du kan låse op med dit ur, når dit fingeraftryk ikke kan genkendes" - "Konfigurer først ansigtslås" + "Konfigurer først ansigtsoplåsning" "Du kan låse op med dit ur, når dit ansigt ikke kan genkendes" "Konfigurer" "Fingeraftryk %s er tilføjet" @@ -376,12 +376,12 @@ "Ansigt og %s er tilføjet" "Ansigt, fingeraftryk og %s er tilføjet" "Ansigt, fingeraftryk og %s er tilføjet" - "Ansigtslås og oplåsning med fingeraftryk" - "Ansigtslås og oplåsning med fingeraftryk til arbejdsprofil" + "Ansigtsoplåsning og oplåsning med fingeraftryk" + "Ansigtsoplåsning og oplåsning med fingeraftryk til arbejdsprofil" "Konfiguration er påkrævet" "Ansigt og fingeraftryk er tilføjet" "Ansigt og fingeraftryk er tilføjet" - "Når du konfigurerer ansigtslås og oplåsning med fingeraftryk, beder din telefon om dit fingeraftryk, hvis du er iført en maske eller befinder dig et mørkt sted" + "Når du konfigurerer ansigtsoplåsning og oplåsning med fingeraftryk, beder din telefon om dit fingeraftryk, hvis du er iført en maske eller befinder dig et mørkt sted" "Muligheder for oplåsning" "Brug dit ansigt eller fingeraftryk til at" "Låse din telefon op" @@ -390,8 +390,8 @@ "Anvend fingeraftryk" "Brug ansigt eller fingeraftryk" "OK" - "Ansigtslåsen kan ikke konfigureres" - "Luk den opdelte skærm for at konfigurere ansigtslåsen" + "Ansigtsoplåsning kan ikke konfigureres" + "Luk den opdelte skærm for at konfigurere ansigtsoplåsning" "Du kan ikke konfigurere fingeraftryk" "Luk opdelt skærm for at konfigurere oplåsning med fingeraftryk" "OK" @@ -532,11 +532,11 @@ "Mønster • Ansigt" "Pinkode • Ansigt" "Adgangskode • Ansigt" - "Fortsæt uden ansigtslås" + "Fortsæt uden ansigtsoplåsning" "Mønster • Ansigt • Fingeraftryk" "Pinkode • Ansigt • Fingeraftryk" "Adgangskode • Ansigt • Fingeraftryk" - "Fortsæt uden ansigtslås eller fingeraftryk" + "Fortsæt uden ansigtsoplåsning eller fingeraftryk" "Ingen" "Stryg" "Mønster" @@ -1349,7 +1349,7 @@ "Opret forbindelse til internettet" "Seneste lokationsanmodninger" "Lokation for arbejdsprofil" - "Adgangstilladelse til lokation for apps" + "Lokationstilladelse for apps" "Lokation er slået fra" "{count,plural, =1{# ud af {total} apps har adgang til din lokation}one{# ud af {total} apps har adgang til din lokation}other{# ud af {total} apps har adgang til din lokation}}" "Seneste adgang" @@ -1425,9 +1425,9 @@ "Adgangskoden er indstillet" "Pinkoden er blevet indstillet" "Mønsteret er blevet indstillet" - "Angiv backup for ansigtslås" - "Angiv mønster for at bruge ansigtslås" - "Angiv pinkode for at bruge ansigtslås" + "Angiv backup for ansigtsoplåsning" + "Angiv mønster for at bruge ansigtsoplåsning" + "Angiv pinkode for at bruge ansigtsoplåsning" "Angiv en adgangs­kode for at bruge ansigt eller fingeraftryk" "Angiv et mønster for at bruge dit ansigt eller fingeraftryk" "Angiv en pinkode for at bruge dit ansigt eller fingeraftryk" @@ -2919,7 +2919,7 @@ "backup, sikkerhedskopiér" "bevægelse" "ansigt, oplåsning, godkendelse, log ind" - "ansigt, lås op, ansigtslås, godkendelse, log ind, fingeraftryk, biometri, biometrisk" + "ansigt, lås op, ansigtsoplåsning, godkendelse, log ind, fingeraftryk, biometri, biometrisk" "imei, meid, min, prl version, imei sv" "netværk, mobilnetværkstilstand, tjenestetilstand, signalstyrke, type mobilnetværk, roaming" "netværk, mobilnetværkstilstand, tjenestetilstand, signalstyrke, mobilnetværkstype, roaming, eid" @@ -3297,7 +3297,7 @@ "Forbundne apps deler tilladelser og har adgang til hinandens data." "Du bør kun forbinde apps, hvis du har tillid til, at de ikke deler personoplysninger med din it-administrator." "Du kan til enhver tid fjerne forbindelsen mellem dine apps i privatlivsindstillingerne for din enhed." - "Vil du dele dine personoplysninger med %1$s til arbejde?" + "Vil du dele dine personoplysninger med arbejdsappen %1$s?" "Du bør kun forbinde apps, hvis du har tillid til, at de ikke deler personoplysninger med din it-administrator." "Appdata" "Denne app har adgang til data i din personlige %1$s-app." diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 51cd25a44a1..9a5f70f1561 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -517,7 +517,7 @@ "Ingresa el PIN del dispositivo para habilitar la confirmación automática" "Ingresa el PIN del dispositivo para inhabilitar la confirmación automática" "Bloqueo de pantalla" - "Bloqueo del perfil" + "Bloqueo del perfil de trabajo" "Ninguno" "Deslizar" "Patrón" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 943ed6c12d9..8432a64968e 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -1492,7 +1492,7 @@ "Tööprofiili turvalisus" "Tööprofiili ekraanilukk" "Kasuta ühte lukku" - "Tööprofiili ja seadme ekraani puhul kasutatakse ühte lukku" + "Kasuta tööprofiili ja seadme ekraani puhul ühte lukku" "Kas kasutada ühte lukku?" "Seade kasutab teie tööprofiili ekraanilukku. Mõlema luku puhul kehtivad tööreeglid." "Teie tööprofiili lukk ei vasta teie organisatsiooni turvanõuetele. Seadme ekraani ja tööprofiili puhul saate kasutada sama lukku, kuid selle puhul kehtivad tööprofiili luku eeskirjad." @@ -3189,7 +3189,7 @@ "Ära kuva märguandeid üldse" "Kuidas soovite lukustuskuva kuvada?" "Lukustuskuva" - "Kuva töökoha märguannete kogu sisu" + "Kuva tööprofiili märguannete kogu sisu" "Peida tundlik töösisu" "Kuidas tuleks profiili märguanded kuvada siis, kui seade on lukus?" "Profiili märguanded" @@ -4150,7 +4150,7 @@ "Konto" "Seadme nimi" "Põhiteave" - "Seadused ja määrused" + "Juriidiline ja regulatiivteave" "Seadme üksikasjad" "Seadme identifikaatorid" "WiFi-seadete juhtimine" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index f756ffd1e69..3ab0c1ea988 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -1361,7 +1361,7 @@ "Bateria-erabilera txikia" "Wifi-sareen bilaketa" "Eman wifi-sareak edozein unetan bilatzeko baimena aplikazioei eta zerbitzuei, baita wifi-konexioa desaktibatuta dagoenean ere. Kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke hori, besteak beste." - "Bluetooth bidezko gailuen bilaketa" + "Bluetooth bidezko bilaketa" "Eman inguruko gailuak edozein unetan bilatzeko baimena aplikazioei eta zerbitzuei, baita Bluetootha desaktibatuta dagoenean ere. Kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke hori, besteak beste." "Kokapen-zerbitzuak" "Kokapen-zerbitzuak" @@ -2368,7 +2368,7 @@ "Aginduak ahoz emateko zerbitzu honek une oro kontrolatuko du ahotsa eta ahozko gaitasuna duten aplikazioak ere kontrolatu ahal izango ditu. %s aplikazioarena da. Zerbitzu hau erabiltzeko aukera gaitu nahi duzu?" "Gailuko hautemate-ezarpenak" "Gailuko hautematea" - "Gailuko ahots-hautematea" + "Gailuko hizketa-hautematea" "Motor hobetsia" "Motorraren ezarpenak" "Hizketaren abiadura eta tonua" @@ -2824,7 +2824,7 @@ "Laranja" "Morea" "SIMaren egoera" - "SIMaren egoera (%1$d. SIM zirrikitua)" + "SIMaren egoera (SIMaren %1$d. ataka)" "%1$d dBm %2$d asu" "SIMak aldatu dira." "Konfiguratzeko, sakatu hau" @@ -3294,7 +3294,7 @@ "gurutzatu profila konektatutako aplikazioak laneko aplikazioa eta aplikazio pertsonala" "Konektatuta" "Konektatu aplikazioak" - "Konektatutako aplikazioek baimenak partekatzen dituzte eta elkarren datuak atzitu ahal dituzte." + "Konektatutako aplikazioek baimenak partekatzen dituzte eta batak bestearen datuak atzitu ahal dituzte." "Konektatu aplikazioak baldin eta ziur bazaude zure datu pertsonalak IKT saileko administratzailearekin partekatuko ez direla." "Aplikazioak deskonektatzeko, joan gailuaren pribatutasun-ezarpenetara." "Zure datu pertsonalak eman nahi dizkiozu laneko %1$s aplikazioari?" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 1542b71a247..e2eb6a21990 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -3298,7 +3298,7 @@ "જો તમે ઍપ પર તમારો વ્યક્તિગત ડેટા તમારા IT ઍડમિન સાથે શેર ન કરવા બાબતે વિશ્વાસ કરતા હોય, માત્ર તો જ તેને કનેક્ટ કરો." "તમે તમારા ડિવાઇસના પ્રાઇવસી સેટિંગમાં જઈને કોઈપણ સમયે ઍપને ડિસ્કનેક્ટ કરી શકો છો." "તમારા વ્યક્તિગત ડેટા બાબતે ઑફિસના %1$s પર વિશ્વાસ કરીએ?" - "જો તમે ઍપ પર તમારો વ્યક્તિગત ડેટા તમારા IT ઍડમિન સાથે શેર ન કરવા બાબતે વિશ્વાસ કરતા હોય, માત્ર તો જ તેને કનેક્ટ કરો." + "જો તમે ઍપ પર તમારો વ્યક્તિગત ડેટા તમારા IT ઍડમિન સાથે શેર ન કરવા બાબતે વિશ્વાસ કરતા હો, માત્ર તો જ તેને કનેક્ટ કરો." "ઍપનો ડેટા" "આ ઍપ તમારી વ્યક્તિગત %1$s ઍપમાં રહેલા ડેટાને ઍક્સેસ કરી શકે છે." "પરવાનગીઓ" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index dc3f8e26ed9..e9009d4c089 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -507,7 +507,7 @@ "स्क्रीन लॉक का दूसरा तरीका चुनें" "अगर आपको स्क्रीन लॉक याद नहीं है, तो आईटी एडमिन इसे रीसेट नहीं कर सकता." "एक अलग वर्क लॉक सेट करें" - "अगर आप इस लॉक को भूल जाते हैं, तो आईटी एडमिन से उसे रिसेट करने के लिए कहें" + "अगर आपको फ़िलहाल यह लॉक याद नहीं, तो आईटी एडमिन से इसे रीसेट करने के लिए कहें" "स्क्रीन लॉक के विकल्प" "स्क्रीन लॉक के विकल्प" "पिन की अपने-आप पुष्टि होकर डिवाइस अनलॉक होने की सेटिंग चालू करें" @@ -1384,7 +1384,7 @@ "क़ानूनी जानकारी, स्‍थिति, सॉफ़्टवेयर वर्शन देखें" "कानूनी जानकारी" "मैन्युअल" - "नियम लागू करने वाले लेबल" + "नियमों के लेबल" "सुरक्षा और नियम से जुड़ी गाइड" "कॉपीराइट" "लाइसेंस" @@ -1480,7 +1480,7 @@ "पैटर्न दिखाई दे" "पिन को सुरक्षित रखने की बेहतर सुविधा" "पिन डालने के दौरान ऐनिमेशन दिखाने की सुविधा बंद करें" - "प्रोफ़ाइल पैटर्न दिखाई दे" + "प्रोफ़ाइल पैटर्न दिखे" "छूने पर कंपन (वाइब्रेशन) करें" "पावर बटन से तुरंत लॉक हो" "अगर %1$s ने अनलॉक कर रखा है, तब नहीं" @@ -3185,12 +3185,12 @@ "वर्क प्रोफ़ाइल की संवेदनशील सूचनाएं" "स्क्रीन लॉक होने पर वर्क प्रोफ़ाइल का संवेदनशील कॉन्टेंट दिखाएं" "सारी सूचनाएं दिखाएं" - "संवेदनशील कॉन्टेंट को अनलॉक होने पर ही दिखाएं" + "डिवाइस अनलॉक होने पर ही संवेदनशील कॉन्टेंट दिखाएं" "सूचनाएं बिलकुल न दिखाएं" "आपको लॉक स्क्रीन पर क्या देखना है?" "लॉक स्क्रीन" "ऑफ़िस के काम से जुड़ी सभी सूचनाएं दिखाएं" - "काम से जुड़ी संवेदनशील सूचनाएं छिपाएं" + "ऑफ़िस के काम से जुड़ी संवेदनशील सूचनाएं छिपाएं" "जब आपका डिवाइस लॉक हो, तो आप प्रोफ़ाइल सूचना को किस तरह दिखाया जाना चाहेंगे?" "प्रोफ़ाइल सूचना" "सूचनाएं" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 31dfa03b40c..2c75335cf38 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -3185,7 +3185,7 @@ "Tilkynningar um vinnusnið með viðkvæmu innihaldi" "Sýna viðkvæmt innihald vinnusniðs á lásskjá" "Sýna allt innihald tilkynninga" - "Sýna viðkvæmt efni aðeins þegar sími er opinn" + "Sýna viðkvæmt efni aðeins þegar tækið er opið" "Sýna engar tilkynningar" "Hvernig á lásskjárinn að birtast?" "Lásskjár" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 1e12e05e755..5d7421632d5 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -2886,7 +2886,7 @@ "consumo di energia, ricarica" "visualizzare l\'utilizzo della batteria, utilizzo della batteria, consumo di energia" "risparmio energetico, risparmio di energia, risparmio" - "preferenze adattive, batteria adattiva" + "preferenze adattive, Batteria Adattiva" "ortografia, dizionario, correttore ortografico, correzione automatica" "funzione di riconoscimento, immissione, vocale, parlare, lingua, vivavoce, viva voce, riconoscimento, offensivo, parola, audio, cronologia, auricolare bluetooth" "velocità, lingua, predefinita, voce, parlare, sintesi vocale, accessibilità, screen reader, persona cieca" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index b95b787f423..dca7051a05c 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -1954,8 +1954,8 @@ "זמן לחיצה אוטומטית" "רטט ומשוב פיזי" "שליטה בעוצמת הרטט לשימושים שונים" - "מופעלת" - "כבויה" + "מופעל" + "כבוי" "ההגדרה הושבתה מפני שהמכשיר מוגדר למצב שקט" "שיחות" "התראות" @@ -3331,7 +3331,7 @@ "התעלמות ממצב \'נא לא להפריע\'" "ההתראות האלה יוכלו להמשיך ולהפריע כשמצב \'נא לא להפריע\' מופעל" "מסך נעילה" - "בוצע" + "אישור" "אור מהבהב" "רטט" "צליל" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index d78ddcbbd1b..9db534d02cb 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -2753,7 +2753,7 @@ "고객센터" "콘텐츠용 계정" "사진 ID" - "긴급한 위협" + "극심한 위협" "생명과 재산에 대한 긴급한 위협에 대해 알림을 수신합니다." "심각한 위협" "생명 및 재산에 대한 심각한 위협에 대해 알림을 수신합니다." diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index ddd0ddaa28a..2be13d4b856 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -1716,7 +1716,7 @@ "ເລືອກປຸ່ມຕົວດັດແປງ" "ເລືອກປຸ່ມໃໝ່ສຳລັບ %1$s:" "ຄ່າເລີ່ມຕົ້ນ" - "ຄຳເວົ້າ" + "ສຽງເວົ້າ" "ຄວາມໄວລູກສອນ" "ມືເກມ" "ປ່ຽນເສັ້ນທາງການສັ່ນເຕືອນ" @@ -3297,7 +3297,7 @@ "ແອັບທີ່ເຊື່ອມຕໍ່ແລ້ວຈະແບ່ງປັນສິດອະນຸຍາດ ແລະ ສາມາດເຂົ້າເຖິງຂໍ້ມູນຂອງກັນ ແລະ ກັນໄດ້." "ທ່ານຄວນເຊື່ອມຕໍ່ຫາແອັບທີ່ທ່ານເຊື່ອວ່າຈະບໍ່ແບ່ງປັນຂໍ້ມູນສ່ວນຕົວໃຫ້ກັບຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານເທົ່ານັ້ນ." "ທ່ານສາມາດຕັດການເຊື່ອມຕໍ່ແອັບໄດ້ທຸກເມື່ອໃນການຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວຂອງອຸປະກອນທ່ານ." - "ເຊື່ອ %1$s ວຽກດ້ວຍຂໍ້ມູນສ່ວນຕົວຂອງທ່ານບໍ?" + "ເຊື່ອແອັບວຽກຊື່ %1$s ໃຫ້ເຂົ້າເຖິງຂໍ້ມູນສ່ວນຕົວຂອງທ່ານບໍ?" "ທ່ານຄວນເຊື່ອມຕໍ່ຫາແອັບທີ່ທ່ານເຊື່ອວ່າຈະບໍ່ແບ່ງປັນຂໍ້ມູນສ່ວນຕົວໃຫ້ກັບຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານເທົ່ານັ້ນ." "ຂໍ້ມູນແອັບ" "ແອັບນີ້ສາມາດເຂົ້າເຖິງແອັບ %1$s ສ່ວນຕົວຂອງທ່ານໄດ້." diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 96400d29976..8e22c1f1e5b 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -1480,7 +1480,7 @@ "पॅटर्न दृश्यमान बनवा" "वर्धित केलेली पिन गोपनीयता" "पिन एंटर करताना अ‍ॅनिमेशन बंद करा" - "प्रोफाईल पॅटर्न दृश्यमान बनवा" + "प्रोफाइल पॅटर्न दृश्यमान बनवा" "टॅप केल्यावर व्हायब्रेट करा" "पॉवर बटण तात्काळ लॉक करते" "%1$s द्वारे अनलॉक केलेले ठेवले असते ते वगळून" @@ -3458,7 +3458,7 @@ "नेहमी व्‍यत्यय आणा वर बदला" "चेतावणी" "बंद करा" - "या डिव्हाइसबद्दल अभिप्राय पाठवा" + "या डिव्हाइसबद्दल फीडबॅक पाठवा" "प्रशासक पिन एंटर करा" "सुरू" "बंद" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 2356dfc2ea4..14a42d90e7e 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -187,7 +187,7 @@ "Czwartek" "Piątek" "Sobota" - "Jeśli aplikacja nie obsługuje preferencji regionalnych, użyje swoich domyślnych ustawień języka." + "Jeśli aplikacja nie obsługuje preferencji regionalnych, użyje swoich domyślnych ustawień regionu." "Dowiedz się więcej o ustawieniach języka" "{count,plural, =1{Usunąć wybrany język?}few{Usunąć wybrane języki?}many{Usunąć wybrane języki?}other{Usunąć wybrane języki?}}" "Tekst będzie wyświetlany w innym języku." diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 4084a86ec4e..05b53026095 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -3908,7 +3908,7 @@ "Navegação com dois botões" "Para mudar de app, deslize o botão home para cima. Para ver todos os apps, deslize para cima novamente. Para retornar, toque no botão \"Voltar\"." "Segurança e emergência" - "SOS de emergência, informações médicas, alertas" + "SOS de emergência, informações de saúde, alertas" "Navegação por gestos" "Para ir para a tela inicial, deslize da parte de baixo da tela para cima. Para mudar de app, deslize de baixo para cima, mantenha a tela pressionada e depois solte. Para voltar, deslize de um dos lados da tela para o outro." "Navegação com três botões" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index c4e1f19a743..8d01d4e33d0 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -3189,7 +3189,7 @@ "Não mostrar notificações" "Como quer que o ecrã de bloqueio seja apresentado?" "Ecrã de bloqueio" - "Mostre todo o conteúdo de notificações de trabalho" + "Mostrar todo o conteúdo de notificações de trabalho" "Ocultar conteúdo de trabalho confidencial" "Como quer que as notificações do perfil sejam apresentadas quando o dispositivo estiver bloqueado?" "Notificações do perfil" @@ -3698,7 +3698,7 @@ "Não ligado" "Desligado" "%1$d apps instaladas" - "%1$s utilizado – %2$s livre(s)" + "%1$s usado(s) – %2$s livre(s)" "Tema escuro, tamanho do tipo de letra, brilho" "Média de %1$s de %2$s de memória utilizado(s)" "Sessão iniciada como %1$s" @@ -3715,7 +3715,7 @@ "São necessários os pais" "Entrega o telemóvel aos teus pais para começarem a configurar esta definição" "Entrega o telemóvel a um adulto responsável para autorizar a alteração desta definição." - "Para mais informações, contacte a pessoa com a função de administração de TI" + "Para mais informações, contacte o administrador de TI" "Mais detalhes" "O gestor pode monitorizar e gerir as aplicações e os dados associados ao seu perfil de trabalho, incluindo as definições, as autorizações, o acesso empresarial, a atividade da rede e as informações de localização do dispositivo." "O gestor pode monitorizar e gerir as aplicações e os dados associados a este utilizador, incluindo as definições, as autorizações, o acesso empresarial, a atividade da rede e as informações de localização do dispositivo." @@ -4489,7 +4489,7 @@ "ligação de rede, internet, sem fios, dados, wifi, wi-fi, wi fi, telemóvel, dispositivo móvel, operador de telemóvel, 4g, 3g, 2g, lte" "Quer repor a Internet?" "A repor a Internet…" - "Corrigir a conetividade" + "Corrigir conetividade" "Redes disponíveis" "Para mudar de rede, desligue a Ethernet." "Ligações W+" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 4084a86ec4e..05b53026095 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -3908,7 +3908,7 @@ "Navegação com dois botões" "Para mudar de app, deslize o botão home para cima. Para ver todos os apps, deslize para cima novamente. Para retornar, toque no botão \"Voltar\"." "Segurança e emergência" - "SOS de emergência, informações médicas, alertas" + "SOS de emergência, informações de saúde, alertas" "Navegação por gestos" "Para ir para a tela inicial, deslize da parte de baixo da tela para cima. Para mudar de app, deslize de baixo para cima, mantenha a tela pressionada e depois solte. Para voltar, deslize de um dos lados da tela para o outro." "Navegação com três botões" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 241234f8690..712dfcad2b7 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -2753,7 +2753,7 @@ "Справка/отзыв" "Аккаунт для контента" "Документ с фото" - "Серьезные угрозы" + "Критические угрозы" "Получать уведомления о серьезных угрозах жизни и имуществу" "Серьезные угрозы" "Получать уведомления о серьезных угрозах жизни и имуществу" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index d2a1d86b06a..cc3049067b3 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -172,7 +172,7 @@ "Kjo gjuhë nuk mund të përdoret si një gjuhë sistemi, por ti i ke informuar aplikacionet dhe sajtet e uebit që preferon këtë gjuhë." "Preferencat rajonale" "Cakto njësitë dhe preferencat e numrave" - "Tregoji aplikacioneve preferencat e tua rajonale në mënyrë që të personalizojnë përvojën tënde." + "Tregoju aplikacioneve preferencat e tua rajonale në mënyrë që të personalizojnë përvojën tënde." "Aplikacionet do të përdorin preferencat e tua rajonale atje ku është e mundur." "Temperatura" "Dita e parë e javës" @@ -1546,7 +1546,7 @@ "Rendit sipas emrit" "Rendit sipas madhësisë" "Më të fundit" - "Më të shpeshta" + "Më të shpeshtat" "Shfaq shërbimet që po ekzekutohen" "Shfaq proceset specifike" "Aplikacioni i emergjencave" @@ -2836,7 +2836,7 @@ "Rrjeti celular, Wi‑Fi, zona e qasjes për internet" "Wi‑Fi, zona e qasjes për internet" "Pajisje të lidhura" - "Bluetooth, çiftimi" + "Bluetooth-i, çiftimi" "Bluetooth, modaliteti \"me makinë\", NFC" "Bluetooth, modaliteti \"me makinë\"" "Bluetooth, NFC" @@ -3190,7 +3190,7 @@ "Si dëshiron të shfaqet ekrani i kyçjes?" "Ekrani i kyçjes" "Shfaq të gjitha përmbajtjet e njoftimeve të punës" - "Fshihe përmbajtjen delikate të punës" + "Fshih përmbajtjet delikate të punës" "Kur pajisja jote të jetë e kyçur, si dëshiron të shfaqen njoftimet e profilit?" "Njoftimet e profilit" "Njoftimet" @@ -3293,7 +3293,7 @@ "Nuk ka aplikacione të lidhura" "kryqëzim, profil, i lidhur, aplikacion, aplikacione, punë dhe personal" "Lidhur" - "Lidh këto aplikacione" + "Lidhi këto aplikacione" "Aplikacionet e lidhura ndajnë leje dhe mund të kenë qasje te të dhënat e njëri-tjetrit." "Lidhi aplikacionet vetëm nëse u beson se nuk do t\'i ndajnë të dhënat personale me administratorin tënd të teknologjisë së informacionit." "Mund t\'i shkëputësh aplikacionet në çdo kohë te cilësimet e privatësisë së pajisjes." diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 84ef5149895..1bf4c03ed25 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -1177,7 +1177,7 @@ "Безбедно избацивање уређаја %1$s није успело" "Преименујте меморију" "Уређај ^1 је оштећен. \n\nДа бисте користили уређај ^1, прво треба да га подесите." - "Ову SD картицу можете да форматирате за чување слика, видео снимака, музике и другог садржаја и да му приступате на другим уређајима. \n\n""Сви подаци на овој SD картици биће обрисани."" \n\n""Пре форматирања"" \n\n""Направите резервне копије слика и других медија"" \nПреместите фајлове медија у алтернативни меморијски простор на овом уређају или их пребаците на рачунар помоћу USB кабла. \n\n""Направите резервне копије апликација"" \nСве апликације које се чувају на уређају ^1 биће деинсталиране, а њихови подаци обрисани. Да бисте задржали те апликације, преместите их у алтернативни меморијски простор на овом уређају." + "Ову SD картицу можете да форматирате за чување слика, видеа, музике и другог садржаја и да му приступате на другим уређајима. \n\n""Сви подаци на овој SD картици биће обрисани."" \n\n""Пре форматирања"" \n\n""Направите резервне копије слика и других медија"" \nПреместите фајлове медија у алтернативни меморијски простор на овом уређају или их пребаците на рачунар помоћу USB кабла. \n\n""Направите резервне копије апликација"" \nСве апликације које се чувају на уређају ^1 биће деинсталиране, а њихови подаци обрисани. Да бисте задржали те апликације, преместите их у алтернативни меморијски простор на овом уређају." "Када избаците овај уређај ^1, апликације које су на њему сачуване ће престати да функционишу и медијске датотеке које су на њему сачуване неће бити доступне док га поново не уметнете."" \n\nУређај ^1 се форматира да би функционисао само на овом уређају. Неће функционисати на другим уређајима." "Да бисте користили апликације, слике или податке на овом уређају (^1), уметните га поново. \n\nДруга могућност је да изаберете да заборавите тај меморијски уређај ако није доступан. \n\nАко одлучите да заборавите, сви подаци на том уређају биће заувек изгубљени. \n\nАпликације можете да касније поново инсталирате, али ће подаци ускладиштени на уређају бити изгубљени." "Желите да заборавите уређај ^1?" @@ -2824,7 +2824,7 @@ "Наранџаста" "Љубичаста" "Статус SIM картице" - "Статус SIM картице (отвор за SIM: %1$d)" + "Статус SIM картице (отвор за SIM %1$d)" "%1$d dBm %2$d asu" "SIM-ови су промењени." "Додирните да бисте подесили" @@ -3405,7 +3405,7 @@ "аларми" "Аларми" "Звукови медија" - "Звуци из видео снимака, игара и других медија" + "Звуци из видеа, игара и других медија" "медији" "Медији" "Звукови при додиру" @@ -3896,7 +3896,7 @@ "Приказивање пословних догађаја у личном календару" "Када су пословне апликације искључене, оне се паузирају и не може да им се приступи нити могу да вам шаљу обавештења" "Управљај меморијским простором" - "Да би ослободио меморијски простор, менаџер меморијског простора уклања резервне копије слика и видео снимака са уређаја." + "Да би ослободио меморијски простор, менаџер меморијског простора уклања резервне копије слика и видеа са уређаја." "Уклоните слике и видео" "Менаџер меморијског простора" "Користите менаџер меморијског простора" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 5503ab3982b..5c40cbe09c0 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -1149,8 +1149,8 @@ "Nguvu za mawimbi" "Matumizi ya mitandao ya ng\'ambo" "Mtandao" - "Anwani ya Wi-Fi ya MAC" - "Anwani ya MAC ya kifaa ya Wi-Fi" + "Anwani ya MAC ya Wi-Fi" + "Anwani ya MAC ya Wi-Fi ya kifaa" "Anwani ya Bluetooth" "Nambari ya Ufuatiliaji" "Muda wa kutumika tangu ilipowashwa" @@ -2824,7 +2824,7 @@ "Machungwa" "Zambarau" "Hali ya SIM" - "Hali ya SIM (nafasi ya sim ya %1$d)" + "Hali ya SIM (sehemu ya sim %1$d)" "dBm %1$d asu %2$d" "SIM zimebadilishwa." "Gusa ili uweke mipangilio" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index a20af461cfd..6c4fdf0407d 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -52,7 +52,7 @@ "புளூடூத் சாதனங்கள்" "சாதனத்தின் பெயர்" "சாதனத்தின் பெயரை மாற்றுக" - "மறுபெயரிடு" + "பெயர் மாற்று" "சாதனத்தைத் துண்டிக்கவா?" "புதிய சாதனத்தை இணை" "புளூடூத்" @@ -1155,7 +1155,7 @@ "வரிசை எண்" "இயங்கிய நேரம்" "கணக்கிடுகிறது..." - "மறுபெயரிடு" + "பெயர் மாற்று" "பொருத்து" "வெளியேற்று" "போர்டபிள் ஸ்டோரேஜுக்கு SD கார்டை ஃபார்மேட் செய்தல்" @@ -2793,7 +2793,7 @@ "சிறப்பாக சிக்னல் கிடைக்கும்பட்சத்தில் இந்த நெட்வொர்க்கைப் பயன்படுத்தலாம்" "பணியிட சிம்" "ஆப்ஸ் & உள்ளடக்க அணுகல்" - "மறுபெயரிடுக" + "பெயர் மாற்றுக" "ஆப்ஸின் வரையறைகளை அமை" "%1$s ஆல் கட்டுப்படுத்தப்படுகிறது" "இந்த ஆப்ஸ் உங்கள் கணக்குகளை அணுகலாம்" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index c34f22ce258..a0f9511e8da 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -3287,7 +3287,7 @@ "Pencere içinde pencere" "Pencere içinde pencereye izin ver" "Bu uygulamanın, uygulama açıkken veya uygulamadan çıktıktan sonra (örneğin, video izlemeye devam etmek için) pencere içinde pencere oluşturmasına izin verin. Bu pencere, kullandığınız diğer uygulamaların üzerinde gösterilir." - "Entegre iş ve kişisel uygulamalar" + "Bağlı iş uygulamaları ve kişisel uygulamalar" "Bağlı" "Bağlı değil" "Bağlı uygulama yok" @@ -3300,7 +3300,7 @@ "%1$s adlı iş uygulamasının kişisel verilerinize ulaşmasına izin verilsin mi?" "Uygulamaları yalnızca kişisel verilerinizi BT yöneticinizle paylaşmayacaklarına güveniyorsanız bağlayın." "Uygulama verileri" - "Bu uygulama, %1$s adlı kişisel uygulamanızdaki verilere erişebilir." + "Bu uygulama, kişisel %1$s uygulamanızdaki verilere erişebilir." "İzinler" "Bu uygulama, %1$s adlı kişisel uygulamanızın konum, depolama alanı veya kişilere erişim gibi izinlerini kullanabilir." "Bağlı uygulama yok" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index ed0d2846f2a..5891bf9876c 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -3870,7 +3870,7 @@ "提示和支持" "最小宽度" "没有任何已安装的应用申请付费短信权限" - "“付费短信”可能会产生费用,而且相关费用将计入您的运营商帐单。如果您为某个应用启用该权限,那么您将能够使用该应用发送付费短信。" + "“付费短信”可能会产生费用,而且相关费用将计入您的运营商账单。如果您为某个应用启用该权限,那么您将能够使用该应用发送付费短信。" "付费短信权限" "已关闭" "已连接到“%1$s”" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 89c371b769d..ad630ed14f7 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -3190,7 +3190,7 @@ "螢幕鎖定時,你希望如何顯示通知訊息?" "螢幕鎖定" "顯示所有工作通知內容" - "隱藏敏感的 Work 內容" + "隱藏敏感的工作內容" "當裝置鎖定時,你要如何顯示個人資料通知?" "個人資料通知" "通知" From b0a6787bd1bf45a9ff4ab6c30a39863087cd8916 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Wed, 30 Aug 2023 20:14:00 -0700 Subject: [PATCH 5/8] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I953afa5170d8d3441c23313685a1f718428865ff --- res-product/values-da/strings.xml | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/res-product/values-da/strings.xml b/res-product/values-da/strings.xml index 962464942bc..064076a3fd4 100644 --- a/res-product/values-da/strings.xml +++ b/res-product/values-da/strings.xml @@ -61,9 +61,9 @@ "Tillad, at dit barn bruger ansigtsgenkendelse til at låse telefonen op eller verificere sin identitet. Dette foregår, når barnet logger ind i apps, godkender et køb m.m." "Tillad, at dit barn bruger ansigtsgenkendelse til at låse sin tablet op eller verificere sin identitet. Dette foregår, når barnet logger ind i apps, godkender et køb m.m." "Tillad, at dit barn bruger ansigtsgenkendelse til at låse enheden op eller verificere sin identitet. Dette foregår, når barnet logger ind i apps, godkender et køb m.m." - "En ansigtslås kan være mindre sikker end et stærkt mønster eller en stærk pinkode." - "En ansigtslås kan være mindre sikker end et stærkt mønster eller en stærk pinkode." - "En ansigtslås kan være mindre sikker end et stærkt mønster eller en stærk pinkode." + "En ansigtsoplåsning kan være mindre sikker end et stærkt mønster eller en stærk pinkode." + "En ansigtsoplåsning kan være mindre sikker end et stærkt mønster eller en stærk pinkode." + "En ansigtsoplåsning kan være mindre sikker end et stærkt mønster eller en stærk pinkode." @@ -170,24 +170,24 @@ "Du skal angive en pinkode for at konfigurere oplåsning med fingeraftryk.\n\nEn pinkode beskytter telefonen, hvis den bliver væk eller stjålet." "Du skal angive et mønster for at konfigurere oplåsning med fingeraftryk.\n\nEt mønster beskytter telefonen, hvis den bliver væk eller stjålet." "Du skal angive en adgangskode for at konfigurere oplåsning med fingeraftryk.\n\nEn adgangskode beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås.\n\nEn pinkode beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås.\n\nEt mønster beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås.\n\nEn adgangskode beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås.\n\nEn pinkode beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås.\n\nEt mønster beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås.\n\nEn adgangskode beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås.\n\nEn pinkode beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås.\n\nEt mønster beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås.\n\nEn adgangskode beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn pinkode beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEt mønster beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter din tablet, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn pinkode beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEt mønster beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter enheden, hvis den bliver væk eller stjålet." - "Du skal angive en pinkode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn pinkode beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive et mønster for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEt mønster beskytter telefonen, hvis den bliver væk eller stjålet." - "Du skal angive en adgangskode for at konfigurere ansigtslås og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning.\n\nEn pinkode beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning.\n\nEt mønster beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning.\n\nEn adgangskode beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning.\n\nEn pinkode beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning.\n\nEt mønster beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning.\n\nEn adgangskode beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning.\n\nEn pinkode beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning.\n\nEt mønster beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning.\n\nEn adgangskode beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn pinkode beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEt mønster beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter din tablet, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn pinkode beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEt mønster beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter enheden, hvis den bliver væk eller stjålet." + "Du skal angive en pinkode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn pinkode beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive et mønster for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEt mønster beskytter telefonen, hvis den bliver væk eller stjålet." + "Du skal angive en adgangskode for at konfigurere ansigtsoplåsning og oplåsning med fingeraftryk.\n\nEn adgangskode beskytter telefonen, hvis den bliver væk eller stjålet." "Dette sletter de fingeraftryksbilleder og den fingeraftryksmodel, der er knyttet til \"%1$s\", og som er gemt på din telefon" "Dette sletter de fingeraftryksbilleder og den fingeraftryksmodel, der er knyttet til \"%1$s\", og som er gemt på din tablet" "Dette sletter de fingeraftryksbilleder og den fingeraftryksmodel, der er knyttet til \"%1$s\", og som er gemt på din enhed" From 60db0182a61376983f6dab7eff14d4add38bcfca Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Thu, 31 Aug 2023 10:06:06 +0000 Subject: [PATCH 6/8] [Regional preference] Add Regional Preference into the summary Bug: 298327540 Change-Id: I390ed91241af5094ec72872b4b563ca21411965b --- res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index ab09167f4c1..600b5911913 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6990,7 +6990,7 @@ Languages, gestures, time, backup - System languages, app languages, speech + System languages, app languages, regional preferences, speech wifi, wi-fi, network connection, internet, wireless, data, wi fi From 5175cdc2f5f11bc2c8d332baa8be58bbb55d2283 Mon Sep 17 00:00:00 2001 From: Vlad Popa Date: Tue, 15 Aug 2023 18:28:50 -0700 Subject: [PATCH 7/8] Disable the spatializer options for device categories If the BT device cannot be of category headphones do not show the spatializer options. Test: manual & atest BluetoothDetailsSpatialAudioControllerTest Bug: 297265575 Merged-In: I7f044d40afadec6ccf659ae4969c0d6e2dc8c79e Change-Id: I7f044d40afadec6ccf659ae4969c0d6e2dc8c79e --- ...toothDetailsAudioDeviceTypeController.java | 1 + ...luetoothDetailsSpatialAudioController.java | 84 ++++++++++---- ...oothDetailsSpatialAudioControllerTest.java | 104 +++++------------- 3 files changed, 89 insertions(+), 100 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java b/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java index fe0d14182cc..9571767253c 100644 --- a/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java +++ b/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java @@ -109,6 +109,7 @@ public class BluetoothDetailsAudioDeviceTypeController extends BluetoothDetailsC mAudioManager.setBluetoothAudioDeviceCategory(mCachedDevice.getAddress(), mCachedDevice.getDevice().getType() == DEVICE_TYPE_LE, Integer.parseInt(value)); + mCachedDevice.onAudioDeviceCategoryChanged(); } } return true; diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioController.java b/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioController.java index a1e133e6104..c431ceeb0ae 100644 --- a/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioController.java +++ b/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioController.java @@ -16,6 +16,8 @@ package com.android.settings.bluetooth; +import static android.media.Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; + import android.content.Context; import android.media.AudioDeviceAttributes; import android.media.AudioDeviceInfo; @@ -51,9 +53,7 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont @VisibleForTesting PreferenceCategory mProfilesContainer; @VisibleForTesting - AudioDeviceAttributes mAudioDevice; - - private boolean mIsAvailable; + AudioDeviceAttributes mAudioDevice = null; public BluetoothDetailsSpatialAudioController( Context context, @@ -63,13 +63,11 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont super(context, fragment, device, lifecycle); AudioManager audioManager = context.getSystemService(AudioManager.class); mSpatializer = audioManager.getSpatializer(); - getAvailableDevice(); - } @Override public boolean isAvailable() { - return mIsAvailable; + return mSpatializer.getImmersiveAudioLevel() != SPATIALIZER_IMMERSIVE_LEVEL_NONE; } @Override @@ -77,15 +75,11 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont SwitchPreference switchPreference = (SwitchPreference) preference; String key = switchPreference.getKey(); if (TextUtils.equals(key, KEY_SPATIAL_AUDIO)) { - if (switchPreference.isChecked()) { - mSpatializer.addCompatibleAudioDevice(mAudioDevice); - } else { - mSpatializer.removeCompatibleAudioDevice(mAudioDevice); - } - refresh(); + updateSpatializerEnabled(switchPreference.isChecked()); + refreshSpatialAudioEnabled(switchPreference); return true; } else if (TextUtils.equals(key, KEY_HEAD_TRACKING)) { - mSpatializer.setHeadTrackerEnabled(switchPreference.isChecked(), mAudioDevice); + updateSpatializerHeadTracking(switchPreference.isChecked()); return true; } else { Log.w(TAG, "invalid key name."); @@ -93,6 +87,26 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont } } + private void updateSpatializerEnabled(boolean enabled) { + if (mAudioDevice == null) { + Log.w(TAG, "cannot update spatializer enabled for null audio device."); + return; + } + if (enabled) { + mSpatializer.addCompatibleAudioDevice(mAudioDevice); + } else { + mSpatializer.removeCompatibleAudioDevice(mAudioDevice); + } + } + + private void updateSpatializerHeadTracking(boolean enabled) { + if (mAudioDevice == null) { + Log.w(TAG, "cannot update spatializer head tracking for null audio device."); + return; + } + mSpatializer.setHeadTrackerEnabled(enabled, mAudioDevice); + } + @Override public String getPreferenceKey() { return KEY_SPATIAL_AUDIO_GROUP; @@ -106,12 +120,31 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont @Override protected void refresh() { - SwitchPreference spatialAudioPref = mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO); - if (spatialAudioPref == null) { - spatialAudioPref = createSpatialAudioPreference(mProfilesContainer.getContext()); - mProfilesContainer.addPreference(spatialAudioPref); + if (mAudioDevice == null) { + getAvailableDevice(); } + SwitchPreference spatialAudioPref = mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO); + if (spatialAudioPref == null && mAudioDevice != null) { + spatialAudioPref = createSpatialAudioPreference(mProfilesContainer.getContext()); + mProfilesContainer.addPreference(spatialAudioPref); + } else if (mAudioDevice == null || !mSpatializer.isAvailableForDevice(mAudioDevice)) { + if (spatialAudioPref != null) { + mProfilesContainer.removePreference(spatialAudioPref); + } + final SwitchPreference headTrackingPref = + mProfilesContainer.findPreference(KEY_HEAD_TRACKING); + if (headTrackingPref != null) { + mProfilesContainer.removePreference(headTrackingPref); + } + mAudioDevice = null; + return; + } + + refreshSpatialAudioEnabled(spatialAudioPref); + } + + private void refreshSpatialAudioEnabled(SwitchPreference spatialAudioPref) { boolean isSpatialAudioOn = mSpatializer.getCompatibleAudioDevices().contains(mAudioDevice); Log.d(TAG, "refresh() isSpatialAudioOn : " + isSpatialAudioOn); spatialAudioPref.setChecked(isSpatialAudioOn); @@ -121,9 +154,13 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont headTrackingPref = createHeadTrackingPreference(mProfilesContainer.getContext()); mProfilesContainer.addPreference(headTrackingPref); } + refreshHeadTracking(spatialAudioPref, headTrackingPref); + } + private void refreshHeadTracking(SwitchPreference spatialAudioPref, + SwitchPreference headTrackingPref) { boolean isHeadTrackingAvailable = - isSpatialAudioOn && mSpatializer.hasHeadTracker(mAudioDevice); + spatialAudioPref.isChecked() && mSpatializer.hasHeadTracker(mAudioDevice); Log.d(TAG, "refresh() has head tracker : " + mSpatializer.hasHeadTracker(mAudioDevice)); headTrackingPref.setVisible(isHeadTrackingAvailable); if (isHeadTrackingAvailable) { @@ -173,7 +210,6 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont AudioDeviceInfo.TYPE_HEARING_AID, mCachedDevice.getAddress()); - mIsAvailable = true; if (mSpatializer.isAvailableForDevice(bleHeadsetDevice)) { mAudioDevice = bleHeadsetDevice; } else if (mSpatializer.isAvailableForDevice(bleSpeakerDevice)) { @@ -182,20 +218,20 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont mAudioDevice = bleBroadcastDevice; } else if (mSpatializer.isAvailableForDevice(a2dpDevice)) { mAudioDevice = a2dpDevice; - } else { - mIsAvailable = mSpatializer.isAvailableForDevice(hearingAidDevice); + } else if (mSpatializer.isAvailableForDevice(hearingAidDevice)) { mAudioDevice = hearingAidDevice; + } else { + mAudioDevice = null; } Log.d(TAG, "getAvailableDevice() device : " + mCachedDevice.getDevice().getAnonymizedAddress() - + ", type : " + mAudioDevice.getType() - + ", is available : " + mIsAvailable); + + ", is available : " + (mAudioDevice != null) + + ", type : " + (mAudioDevice == null ? "no type" : mAudioDevice.getType())); } @VisibleForTesting void setAvailableDevice(AudioDeviceAttributes audioDevice) { mAudioDevice = audioDevice; - mIsAvailable = mSpatializer.isAvailableForDevice(audioDevice); } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioControllerTest.java index 1f0adcfca80..ce5631fd028 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsSpatialAudioControllerTest.java @@ -16,6 +16,9 @@ package com.android.settings.bluetooth; +import static android.media.Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL; +import static android.media.Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; @@ -62,6 +65,8 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Mock private BluetoothDevice mBluetoothDevice; + private AudioDeviceAttributes mAvailableDevice; + private BluetoothDetailsSpatialAudioController mController; private SwitchPreference mSpatialAudioPref; private SwitchPreference mHeadTrackingPref; @@ -86,94 +91,32 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails when(mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO)).thenReturn(mSpatialAudioPref); when(mProfilesContainer.findPreference(KEY_HEAD_TRACKING)).thenReturn(mHeadTrackingPref); - } - @Test - public void isAvailable_spatialAudioSupportA2dpDevice_returnsTrue() { - AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes( + mAvailableDevice = new AudioDeviceAttributes( AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP, MAC_ADDRESS); - when(mSpatializer.isAvailableForDevice(a2dpDevice)).thenReturn(true); - - mController.setAvailableDevice(a2dpDevice); - - assertThat(mController.isAvailable()).isTrue(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP); } @Test - public void isAvailable_spatialAudioSupportBleHeadsetDevice_returnsTrue() { - AudioDeviceAttributes bleHeadsetDevice = new AudioDeviceAttributes( - AudioDeviceAttributes.ROLE_OUTPUT, - AudioDeviceInfo.TYPE_BLE_HEADSET, - MAC_ADDRESS); - when(mSpatializer.isAvailableForDevice(bleHeadsetDevice)).thenReturn(true); - - mController.setAvailableDevice(bleHeadsetDevice); - - assertThat(mController.isAvailable()).isTrue(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_BLE_HEADSET); - } - - @Test - public void isAvailable_spatialAudioSupportBleSpeakerDevice_returnsTrue() { - AudioDeviceAttributes bleSpeakerDevice = new AudioDeviceAttributes( - AudioDeviceAttributes.ROLE_OUTPUT, - AudioDeviceInfo.TYPE_BLE_SPEAKER, - MAC_ADDRESS); - when(mSpatializer.isAvailableForDevice(bleSpeakerDevice)).thenReturn(true); - - mController.setAvailableDevice(bleSpeakerDevice); - - assertThat(mController.isAvailable()).isTrue(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_BLE_SPEAKER); - } - - @Test - public void isAvailable_spatialAudioSupportBleBroadcastDevice_returnsTrue() { - AudioDeviceAttributes bleBroadcastDevice = new AudioDeviceAttributes( - AudioDeviceAttributes.ROLE_OUTPUT, - AudioDeviceInfo.TYPE_BLE_BROADCAST, - MAC_ADDRESS); - when(mSpatializer.isAvailableForDevice(bleBroadcastDevice)).thenReturn(true); - - mController.setAvailableDevice(bleBroadcastDevice); - - assertThat(mController.isAvailable()).isTrue(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_BLE_BROADCAST); - } - - @Test - public void isAvailable_spatialAudioSupportHearingAidDevice_returnsTrue() { - AudioDeviceAttributes hearingAidDevice = new AudioDeviceAttributes( - AudioDeviceAttributes.ROLE_OUTPUT, - AudioDeviceInfo.TYPE_HEARING_AID, - MAC_ADDRESS); - when(mSpatializer.isAvailableForDevice(hearingAidDevice)).thenReturn(true); - - mController.setAvailableDevice(hearingAidDevice); - - assertThat(mController.isAvailable()).isTrue(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_HEARING_AID); - } - - @Test - public void isAvailable_spatialAudioNotSupported_returnsFalse() { + public void isAvailable_forSpatializerWithLevelNone_returnsFalse() { + when(mSpatializer.getImmersiveAudioLevel()).thenReturn(SPATIALIZER_IMMERSIVE_LEVEL_NONE); assertThat(mController.isAvailable()).isFalse(); - assertThat(mController.mAudioDevice.getType()) - .isEqualTo(AudioDeviceInfo.TYPE_HEARING_AID); + } + + @Test + public void isAvailable_forSpatializerWithLevelNotNone_returnsTrue() { + when(mSpatializer.getImmersiveAudioLevel()).thenReturn( + SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL); + assertThat(mController.isAvailable()).isTrue(); } @Test public void refresh_spatialAudioIsTurnedOn_checksSpatialAudioPreference() { List compatibleAudioDevices = new ArrayList<>(); + mController.setAvailableDevice(mAvailableDevice); compatibleAudioDevices.add(mController.mAudioDevice); + when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); mController.refresh(); @@ -207,13 +150,14 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails public void refresh_spatialAudioOnAndHeadTrackingIsNotAvailable_hidesHeadTrackingPreference() { List compatibleAudioDevices = new ArrayList<>(); + mController.setAvailableDevice(mAvailableDevice); compatibleAudioDevices.add(mController.mAudioDevice); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(false); mController.refresh(); - assertThat(mHeadTrackingPref.isVisible()).isFalse(); + verify(mProfilesContainer).removePreference(mHeadTrackingPref); } @Test @@ -223,14 +167,16 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails mController.refresh(); - assertThat(mHeadTrackingPref.isVisible()).isFalse(); + verify(mProfilesContainer).removePreference(mHeadTrackingPref); } @Test public void refresh_headTrackingIsTurnedOn_checksHeadTrackingPreference() { List compatibleAudioDevices = new ArrayList<>(); + mController.setAvailableDevice(mAvailableDevice); compatibleAudioDevices.add(mController.mAudioDevice); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); + when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(true); @@ -242,8 +188,10 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Test public void refresh_headTrackingIsTurnedOff_unchecksHeadTrackingPreference() { List compatibleAudioDevices = new ArrayList<>(); + mController.setAvailableDevice(mAvailableDevice); compatibleAudioDevices.add(mController.mAudioDevice); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); + when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(false); @@ -254,6 +202,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Test public void turnedOnSpatialAudio_invokesAddCompatibleAudioDevice() { + mController.setAvailableDevice(mAvailableDevice); mSpatialAudioPref.setChecked(true); mController.onPreferenceClick(mSpatialAudioPref); verify(mSpatializer).addCompatibleAudioDevice(mController.mAudioDevice); @@ -261,6 +210,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Test public void turnedOffSpatialAudio_invokesRemoveCompatibleAudioDevice() { + mController.setAvailableDevice(mAvailableDevice); mSpatialAudioPref.setChecked(false); mController.onPreferenceClick(mSpatialAudioPref); verify(mSpatializer).removeCompatibleAudioDevice(mController.mAudioDevice); @@ -268,6 +218,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Test public void turnedOnHeadTracking_invokesSetHeadTrackerEnabled_setsTrue() { + mController.setAvailableDevice(mAvailableDevice); mHeadTrackingPref.setChecked(true); mController.onPreferenceClick(mHeadTrackingPref); verify(mSpatializer).setHeadTrackerEnabled(true, mController.mAudioDevice); @@ -275,6 +226,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails @Test public void turnedOffHeadTracking_invokesSetHeadTrackerEnabled_setsFalse() { + mController.setAvailableDevice(mAvailableDevice); mHeadTrackingPref.setChecked(false); mController.onPreferenceClick(mHeadTrackingPref); verify(mSpatializer).setHeadTrackerEnabled(false, mController.mAudioDevice); From c4fb17d7404574382deed9b507c03c2250b21fb3 Mon Sep 17 00:00:00 2001 From: mxyyiyi Date: Fri, 11 Aug 2023 21:13:38 +0800 Subject: [PATCH 8/8] Impl app anomlay preference [ScreenShot]: https://screenshot.googleplex.com/BBrHTQbwbFHxZE9 Bug: 291689623 Bug: 291689643 Test: manual Change-Id: Ia257f3ace4a2d71b2221f861be3e1238de6d791e --- res/color/color_accent_selector.xml | 18 +++++ .../color_battery_anomaly_yellow_selector.xml | 18 +++++ res/drawable/ic_battery_tips_lightbulb.xml | 2 +- res/drawable/ic_battery_tips_warning_icon.xml | 25 +++++++ res/layout/battery_tips_card.xml | 2 +- res/values/arrays.xml | 11 +++ .../BatteryTipsCardPreference.java | 29 ++++++++ .../batteryusage/BatteryTipsController.java | 39 +++++++---- .../BatteryTipsControllerTest.java | 33 +++++++++ .../settings/testutils/BatteryTestUtils.java | 70 +++++++++++++++---- 10 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 res/color/color_accent_selector.xml create mode 100644 res/color/color_battery_anomaly_yellow_selector.xml create mode 100644 res/drawable/ic_battery_tips_warning_icon.xml diff --git a/res/color/color_accent_selector.xml b/res/color/color_accent_selector.xml new file mode 100644 index 00000000000..3ccb64068ec --- /dev/null +++ b/res/color/color_accent_selector.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/res/color/color_battery_anomaly_yellow_selector.xml b/res/color/color_battery_anomaly_yellow_selector.xml new file mode 100644 index 00000000000..0dd79c2fb84 --- /dev/null +++ b/res/color/color_battery_anomaly_yellow_selector.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/res/drawable/ic_battery_tips_lightbulb.xml b/res/drawable/ic_battery_tips_lightbulb.xml index f1449f9bb5b..6fffefc8119 100644 --- a/res/drawable/ic_battery_tips_lightbulb.xml +++ b/res/drawable/ic_battery_tips_lightbulb.xml @@ -20,6 +20,6 @@ android:viewportWidth="24" android:viewportHeight="24"> \ No newline at end of file diff --git a/res/drawable/ic_battery_tips_warning_icon.xml b/res/drawable/ic_battery_tips_warning_icon.xml new file mode 100644 index 00000000000..c5df8a8856d --- /dev/null +++ b/res/drawable/ic_battery_tips_warning_icon.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/res/layout/battery_tips_card.xml b/res/layout/battery_tips_card.xml index 3eb2eb23cfa..c9a00bc6ab9 100644 --- a/res/layout/battery_tips_card.xml +++ b/res/layout/battery_tips_card.xml @@ -61,7 +61,7 @@ android:text="@string/battery_tips_card_action_button" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?android:attr/textColorPrimary" - app:strokeColor="?android:attr/colorAccent" + app:strokeColor="@color/color_accent_selector" app:strokeWidth="1dp" /> diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 47cf21f210b..78e7ca41d13 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1409,6 +1409,17 @@ + + + ic_battery_tips_lightbulb + ic_battery_tips_warning_icon + + + + color_accent_selector + color_battery_anomaly_yellow_selector + + Turn on adaptive brightness to extend battery life diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java index 075b7061133..ea5534d6a60 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java @@ -23,6 +23,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -51,6 +52,8 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic private String mAnomalyEventId; private PowerAnomalyKey mPowerAnomalyKey; + private int mIconResourceId = 0; + private int mMainButtonStrokeColorResourceId = 0; @VisibleForTesting CharSequence mMainButtonLabel; @@ -73,6 +76,26 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic mPowerAnomalyKey = null; } + /** + * Sets the icon in tips card. + */ + public void setIconResourceId(int resourceId) { + if (mIconResourceId != resourceId) { + mIconResourceId = resourceId; + notifyChanged(); + } + } + + /** + * Sets the stroke color of main button in tips card. + */ + public void setMainButtonStrokeColorResourceId(int resourceId) { + if (mMainButtonStrokeColorResourceId != resourceId) { + mMainButtonStrokeColorResourceId = resourceId; + notifyChanged(); + } + } + /** * Sets the anomaly event id which is used in metrics. */ @@ -159,9 +182,15 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic MaterialButton mainButton = (MaterialButton) view.findViewById(R.id.main_button); mainButton.setOnClickListener(this); mainButton.setText(mMainButtonLabel); + if (mMainButtonStrokeColorResourceId != 0) { + mainButton.setStrokeColorResource(mMainButtonStrokeColorResourceId); + } MaterialButton dismissButton = (MaterialButton) view.findViewById(R.id.dismiss_button); dismissButton.setOnClickListener(this); dismissButton.setText(mDismissButtonLabel); + if (mIconResourceId != 0) { + ((ImageView) view.findViewById(R.id.icon)).setImageResource(mIconResourceId); + } if (!mPowerUsageFeatureProvider.isBatteryTipsFeedbackEnabled()) { return; diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java index 9e46f9064d6..80b26950383 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java @@ -77,23 +77,29 @@ public class BatteryTipsController extends BasePreferenceController { return null; } + private String getStringFromResource(int resourceId, int resourceIndex) { + if (resourceId < 0) { + return null; + } + final String[] stringArray = mContext.getResources().getStringArray(resourceId); + return (resourceIndex >= 0 && resourceIndex < stringArray.length) + ? stringArray[resourceIndex] : null; + } + + private int getResourceId(int resourceId, int resourceIndex, String defType) { + final String key = getStringFromResource(resourceId, resourceIndex); + return TextUtils.isEmpty(key) ? 0 + : mContext.getResources().getIdentifier(key, defType, mContext.getPackageName()); + } + private String getString(PowerAnomalyEvent powerAnomalyEvent, Function warningBannerInfoSupplier, Function warningItemInfoSupplier, int resourceId, int resourceIndex) { String string = getInfo(powerAnomalyEvent, warningBannerInfoSupplier, warningItemInfoSupplier); - - if (!TextUtils.isEmpty(string) || resourceId < 0) { - return string; - } - - String[] stringArray = mContext.getResources().getStringArray(resourceId); - if (resourceIndex >= 0 && resourceIndex < stringArray.length) { - string = stringArray[resourceIndex]; - } - - return string; + return (!TextUtils.isEmpty(string) || resourceId < 0) ? string + : getStringFromResource(resourceId, resourceIndex); } @VisibleForTesting @@ -107,6 +113,13 @@ public class BatteryTipsController extends BasePreferenceController { return; } + // Get card icon and color styles + final int cardStyleId = powerAnomalyEvent.getType().getNumber(); + final int iconResId = getResourceId( + R.array.battery_tips_card_icons, cardStyleId, "drawable"); + final int colorResId = getResourceId( + R.array.battery_tips_card_colors, cardStyleId, "color"); + // Get card preference strings and navigate fragment info final PowerAnomalyKey powerAnomalyKey = powerAnomalyEvent.hasKey() ? powerAnomalyEvent.getKey() : null; @@ -133,10 +146,12 @@ public class BatteryTipsController extends BasePreferenceController { String preferenceHighlightKey = getInfo(powerAnomalyEvent, WarningBannerInfo::getMainButtonSourceHighlightKey, null); - // Updated card preference and main button fragment launcher + // Update card preference and main button fragment launcher mCardPreference.setAnomalyEventId(powerAnomalyEvent.getEventId()); mCardPreference.setPowerAnomalyKey(powerAnomalyKey); mCardPreference.setTitle(titleString); + mCardPreference.setIconResourceId(iconResId); + mCardPreference.setMainButtonStrokeColorResourceId(colorResId); mCardPreference.setMainButtonLabel(mainBtnString); mCardPreference.setDismissButtonLabel(dismissBtnString); mCardPreference.setMainButtonLauncherInfo( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsControllerTest.java index e1ba84e7dbf..ac9de1fa336 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsControllerTest.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.res.Resources; import android.os.LocaleList; +import com.android.settings.R; import com.android.settings.testutils.BatteryTestUtils; import com.android.settings.testutils.FakeFeatureFactory; @@ -83,6 +84,9 @@ public final class BatteryTipsControllerTest { // Check pre-defined string verify(mBatteryTipsCardPreference).setTitle( "Turn on adaptive brightness to extend battery life"); + verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); + verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( + R.color.color_accent_selector); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); // Check proto info @@ -103,6 +107,9 @@ public final class BatteryTipsControllerTest { verify(mBatteryTipsCardPreference).setAnomalyEventId("ScreenTimeoutAnomaly"); verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life"); + verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); + verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( + R.color.color_accent_selector); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo( @@ -129,6 +136,9 @@ public final class BatteryTipsControllerTest { verify(mBatteryTipsCardPreference).setAnomalyEventId("ScreenTimeoutAnomaly"); verify(mBatteryTipsCardPreference).setTitle(testTitle); + verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); + verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( + R.color.color_accent_selector); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo( @@ -138,4 +148,27 @@ public final class BatteryTipsControllerTest { verify(mFeatureFactory.metricsFeatureProvider).action( mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly"); } + + @Test + public void handleBatteryTipsCardUpdated_appAnomaly_showAnomaly() { + PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent(); + when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true); + + mBatteryTipsController.handleBatteryTipsCardUpdated(event); + + verify(mBatteryTipsCardPreference).setAnomalyEventId("AppAnomaly"); + verify(mBatteryTipsCardPreference).setTitle( + "Chrome used more battery than usual in foreground"); + verify(mBatteryTipsCardPreference).setIconResourceId( + R.drawable.ic_battery_tips_warning_icon); + verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( + R.color.color_battery_anomaly_yellow_selector); + verify(mBatteryTipsCardPreference).setMainButtonLabel("Check"); + verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); + verify(mBatteryTipsCardPreference).setMainButtonLauncherInfo( + null, null, null); + verify(mBatteryTipsCardPreference).setVisible(true); + verify(mFeatureFactory.metricsFeatureProvider).action( + mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly"); + } } diff --git a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java index 136431dfa19..3297d1ef4de 100644 --- a/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java +++ b/tests/robotests/src/com/android/settings/testutils/BatteryTestUtils.java @@ -39,6 +39,7 @@ import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList; import com.android.settings.fuelgauge.batteryusage.PowerAnomalyKey; import com.android.settings.fuelgauge.batteryusage.PowerAnomalyType; import com.android.settings.fuelgauge.batteryusage.WarningBannerInfo; +import com.android.settings.fuelgauge.batteryusage.WarningItemInfo; import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventDao; import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity; import com.android.settings.fuelgauge.batteryusage.db.BatteryState; @@ -70,14 +71,18 @@ public class BatteryTestUtils { BatteryManager.BATTERY_STATUS_DISCHARGING); } - /** Sets the work profile mode. */ + /** + * Sets the work profile mode. + */ public static void setWorkProfile(Context context) { final UserManager userManager = context.getSystemService(UserManager.class); Shadows.shadowOf(userManager).setManagedProfile(true); Shadows.shadowOf(userManager).setIsSystemUser(false); } - /** Creates and sets up the in-memory {@link BatteryStateDatabase}. */ + /** + * Creates and sets up the in-memory {@link BatteryStateDatabase}. + */ public static BatteryStateDatabase setUpBatteryStateDatabase(Context context) { final BatteryStateDatabase inMemoryDatabase = Room.inMemoryDatabaseBuilder(context, BatteryStateDatabase.class) @@ -87,21 +92,27 @@ public class BatteryTestUtils { return inMemoryDatabase; } - /** Inserts a fake data into the database for testing. */ + /** + * Inserts a fake data into the database for testing. + */ public static void insertDataToBatteryStateTable( Context context, long timestamp, String packageName) { insertDataToBatteryStateTable( context, timestamp, packageName, /*multiple=*/ false, /*isFullChargeStart=*/ false); } - /** Inserts a fake data into the database for testing. */ + /** + * Inserts a fake data into the database for testing. + */ public static void insertDataToBatteryStateTable( Context context, long timestamp, String packageName, boolean isFullChargeStart) { insertDataToBatteryStateTable( context, timestamp, packageName, /*multiple=*/ false, isFullChargeStart); } - /** Inserts a fake data into the database for testing. */ + /** + * Inserts a fake data into the database for testing. + */ public static void insertDataToBatteryStateTable( Context context, long timestamp, String packageName, boolean multiple, boolean isFullChargeStart) { @@ -151,14 +162,18 @@ public class BatteryTestUtils { } } - /** Inserts a fake data into the database for testing. */ + /** + * Inserts a fake data into the database for testing. + */ public static void insertDataToAppUsageEventTable( Context context, long userId, long timestamp, String packageName) { insertDataToAppUsageEventTable( context, userId, timestamp, packageName, /*multiple=*/ false); } - /** Inserts a fake data into the database for testing. */ + /** + * Inserts a fake data into the database for testing. + */ public static void insertDataToAppUsageEventTable( Context context, long userId, long timestamp, String packageName, boolean multiple) { final AppUsageEventEntity entity = @@ -179,7 +194,9 @@ public class BatteryTestUtils { } } - /** Gets customized battery changed intent. */ + /** + * Gets customized battery changed intent. + */ public static Intent getCustomBatteryIntent(int plugged, int level, int scale, int status) { Intent intent = new Intent(); intent.putExtra(BatteryManager.EXTRA_PLUGGED, plugged); @@ -190,7 +207,9 @@ public class BatteryTestUtils { return intent; } - /** Configures the incompatible charger environment. */ + /** + * Configures the incompatible charger environment. + */ public static void setupIncompatibleEvent( UsbPort mockUsbPort, UsbManager mockUsbManager, UsbPortStatus mockUsbPortStatus) { final List usbPorts = new ArrayList<>(); @@ -203,12 +222,16 @@ public class BatteryTestUtils { .thenReturn(new int[]{UsbPortStatus.COMPLIANCE_WARNING_OTHER}); } - /** Create an empty power anomaly event list proto. */ + /** + * Create an empty power anomaly event list proto. + */ public static PowerAnomalyEventList createEmptyPowerAnomalyEventList() { return PowerAnomalyEventList.getDefaultInstance(); } - /** Create an non-empty power anomaly event list proto. */ + /** + * Create an non-empty power anomaly event list proto. + */ public static PowerAnomalyEventList createNonEmptyPowerAnomalyEventList() { return PowerAnomalyEventList.newBuilder() .addPowerAnomalyEvents(0, createAdaptiveBrightnessAnomalyEvent()) @@ -216,7 +239,9 @@ public class BatteryTestUtils { .build(); } - /** Create a power anomaly event proto of adaptive brightness. */ + /** + * Create a power anomaly event proto of adaptive brightness. + */ public static PowerAnomalyEvent createAdaptiveBrightnessAnomalyEvent() { return PowerAnomalyEvent.newBuilder() .setEventId("BrightnessAnomaly") @@ -231,7 +256,9 @@ public class BatteryTestUtils { .build(); } - /** Create a power anomaly event proto of screen timeout. */ + /** + * Create a power anomaly event proto of screen timeout. + */ public static PowerAnomalyEvent createScreenTimeoutAnomalyEvent() { return PowerAnomalyEvent.newBuilder() .setEventId("ScreenTimeoutAnomaly") @@ -245,4 +272,21 @@ public class BatteryTestUtils { .build()) .build(); } + + /** + * Create a power anomaly event proto of app anomaly. + */ + public static PowerAnomalyEvent createAppAnomalyEvent() { + return PowerAnomalyEvent.newBuilder() + .setEventId("AppAnomaly") + .setType(PowerAnomalyType.TYPE_APPS_ITEM) + .setKey(PowerAnomalyKey.KEY_APP) + .setScore(2.0f) + .setWarningItemInfo(WarningItemInfo.newBuilder() + .setTitleString("Chrome used more battery than usual in foreground") + .setMainButtonString("Check") + .setCancelButtonString("Got it") + .build()) + .build(); + } }